PRISM (Second-Brain)

wiki/dev-log.md

PRISM — Dev Log

2026-07-01 — Whale-Ac-Landing-Page: Dell Marketer landing page built + verified, not deployed

Status: Parked mid-flight (user forking to Cassandra observability next session) What happened: First build of the Marketer-role IA deliverable (see IA-Redesign-Pending) — a personalized landing page for a whale-account prospect (Dell), styled like Algolia's own real prospect landing pages. Verified Figma MCP is live+authed but the target file is wireframe-only (gray-box placeholders, no real tokens). Actually read all 7 pages of the reference PDF (a real Ralph Lauren render) and corrected a prior-session finding: personalization is company-name injection into ~6 body-copy blocks, not just the hero — "light" undersold it. Real brand tokens came from vault Standards/UIUXDesignSOP/algolia.md (brand: algolia theme), cross-verified against PRISM's own live production CSS and pixel-sampling from the PDF — all three agreed. Content: built entirely from Dell's existing audit data (~/prism/reports/dell/index.html) — real ROI scenarios ($64M/$186M/$308M from Dell's own FY2025 revenue), 3 real peer case studies (Hager Group, Swedol, Damstahl), 4 real UX findings. Caught and filtered a brand-safety issue: the audit's golden_angle block names "Coveo" (competitor) — internal-only intel, stripped before customer-facing copy. Verified: desktop + mobile screenshots via Playwright (chrome-devtools-mcp was locked by a parallel session all day — worked around it without touching their browser). WCAG contrast computed, passes AA. Not done: not committed/pushed/deployed, no nav link, placeholder gray boxes instead of real product imagery, sales-rep block is an honest stub (no fake name). VPS reality check: confirmed there's no separate dev instance — /opt/prism-hub tracks feat/prism-vps-hosting and that branch IS the live public site (prism.chowmes.com). Files: ~/prism/marketer/dell.html, workspace PIP/docs/workspace/marketer-landing-dell/.

2026-06-27 — Waves 2-6 rebuild: 4 of 7 modules done; end-to-end run is today's goal

Status: In progress What happened: Began rebuilding the missing Waves 2-6. Rebuilt the 4 pure-synthesis playbook-only modules — synth-business-case, synth-sales-plays, campaign-abx (W5), audit-report (W6) — porting v1 output schemas, reading upstream via composes + {upstream_*}. Fixed a latent playbook bug (feedback note: hyphen {upstream_x-y} tokens never substituted). Split Wave 5 into ordered sub-waves (5A business-case → 5B sales-plays+campaign). Remaining 3 (code-heavy + infra-dependent): audit-browser (W2, Playwright + Vision LLM), audit-factcheck (W3, DB collector + child-workflow verdict), insights-engine (W4, cross-audit DB). Blocking a full run: no Temporal worker runner; no local Postgres; no Vision client. Today's /goal: finish all modules + worker + Postgres + Vision, then run ONE full audit end-to-end and verify deliverables. Tests: ruff clean; 453 non-browser v2 tests pass. Commits d93b39b, 93d348c, 8044f69, 7149d4b.

2026-06-27 — AUDIT: pipeline is Wave 1 only; Waves 2-6 not built (record corrected)

Status: Done (finding) → rebuild started What happened: Audited the actual code against the "13/13 pipeline complete" claim. FALSE as an end-to-end claim. Only Wave 1 (13 intel modules) is built in v2. The orchestrator (workflows.py ALL_WAVES) references 6 waves, but Waves 2-6 modules — audit-browser (W2), audit-factcheck (W3), insights-engine (W4), synth-business-case/synth-sales-plays/campaign-abx (W5), audit-report (W6) — do not exist in v2 (deleted with v1 in f4cea8f, never rebuilt). full mode would crash. No Temporal worker exists, so the pipeline has never run end-to-end. The smoke script (scripts/smoke_real.py) only exercises 2 modules directly, bypassing orchestration. Corrected records: memory project-prism-state, MEMORY.md, repo SESSION.md, this wiki. Next: rebuild Waves 2-6 in the v2 module pattern (recover v1 logic from git f4cea8f as reference).

2026-06-27 — Search-vendor detector rebuilt (packet inspection) + wired to intel-competitors

Status: Done What happened: Replaced the faulty HTML substring source-scan with live network-packet inspection. Validated across 17 vendors / ~230 real customer sites: 59 confirmed detections, zero false positives. Wired into intel_competitors/collector.py (shared-browser scan of prospect + competitors → Golden Angle); fixed the competitors_scanned=0 bug. Key decisions: 2026-06-27-search-vendor-packet-detection Files: prism_platform/v2/detection/search_vendor.py (rewritten), prism_platform/v2/detection/__init__.py, prism_platform/v2/modules/intel_competitors/collector.py, scripts/detect_search_packet.py (validation harness), tests/v2/test_search_vendor_detector_integration.py, pyproject.toml (+playwright-stealth>=2.0). Tests: ruff clean; 433 non-browser v2 tests pass; 4 live browser tests pass; collector end-to-end proven. Evidence: docs/workspace/search-detector-validation/REPORT.md + per-vendor results/*.jsonl. Commit: a72aea6 Gotchas captured: Playwright el.fill() doesn't fire key events → as-you-type search never triggers → use press_sequentially; wrap each site in asyncio.wait_for so one hung page can't stall a batch. Next: per-vendor deep extractors beyond Algolia; deepen proxied-vendor header unmasking (dell→Coveo); retire validation workspace once promoted.

2026-06-26 — v1 architecture deleted; .env.local loading fixed; Track 2 live

Status: Done What happened: Removed the v1 module tree (206 files, ~55k lines) — v2 pipeline is the sole tree. Fixed pydantic-settings to load .env.local (key was silently never read → Track 2 skipped); Track 2 (Perplexity) proven live on nike.com (sonar-pro, 7 citations, 18 claims). Key decisions: none (cleanup + bugfix) Commits: f4cea8f (v1 deletion), bc9bb82 (.env.local + smoke fix) Gotcha captured: pydantic-settings reads ONLY the env_file you list — .env.local is not auto-loaded; declare env_file=(".env", ".env.local") + extra="ignore".

2026-06-28 — Chowmes-PRISM live; grounded report-QA verified

Status: Done (W-B core); W-A blocked on Anthropic auth What happened: Stood up Chowmes-PRISM = PRISM (separate Hermes instance on the VPS: own container, /root/.hermes-prism, dashboard :9120, Telegram connected, Gemini-direct paid key). Authored its identity (SOUL/USER/AGENTS/MEMORY = sales-research orchestrator). Built a data layer (/opt/data/reports) and imported PetSmart (5.8) + Home Depot Mexico (2.6) audit-data.json from the algolia-arian-v2 hub. Shipped the prism-report-qa plugin (L1 report injection via pre_llm_call + L4 Gemini grounding gate via transform_llm_output — no Hermes fork). VERIFIED over PetSmart: grounded fact 15.98% (cited real field), absent fact refused ("not in the audit report"), coaching allowed + anchored to cited facts. W-A executor env installed at /opt/prism-executor (node/deno/claude-cli/ playwright/35 skills) by a teammate — blocked on Anthropic auth + MCP keys. Deleted the stale VPS Temporal stack. Key decisions: 2026-06-28-prism-is-chowmes-prism-hermes-instance, 2026-06-28-grounded-report-qa-gate Findings (durable): (1) injection + "answer only from it" instructions do NOT stop fabrication (gemini fabricated 12.5% vs real 15.98%) → a hard post-gen verifier gate is mandatory. (2) Hermes plugins are OPT-IN — hermes plugins enable <name> + restart, else hooks never fire. (3) Hermes has a transform_llm_output hook that CAN rewrite output (docs hook-table was incomplete — read the source). (4) LLM "no final response" can mask a provider 402 (check agent.log + balance). (5) cross-channel continuity needs NO fork (Hermes Responses API "named conversations"). Tests: report-QA verified via CLI one-shot over PetSmart (3 cases). No automated tests yet. Next: paste Anthropic key → finish W-A generation (executor runs skills on a new company); W-B hardening (fabrication stress test, QA-mode tool lockdown, binding persistence); then W-C (identity), W-D (SPA chat + cross-channel), W-E (Discovery-OS call plans). Plan: docs/workspace/hermes-prism-integration/03-plan.md.

2026-06-28 — Big build session: skills hardened, security scrub, R1 deploy, unified chat LIVE, report standardization started

Status: Mixed — chat LIVE/proven; standardization in progress. What happened: - Skills hardened (arijit-skills, pushed): wired dead deterministic scripts (calculate-roi/score, collect-hiring.classify), fixed 5 bugs (partner SI hardcode, industry date leak, browser forks, financial overwrite, ABX json), Scout A/B → embed Scout only in industry. Built via a 6-cluster workflow + independent verification. - Security: found live BuiltWith+SimilarWeb keys committed in the PUBLIC arijit-skills repo → removed from code + SCRUBBED from all git history (git-filter-repo) + force-pushed. Rotation still pending (USER). - PIP repo cleaned + pushed (junk removed, frontend gitlink fixed → SPA source now tracked). - R1: prism_platform FastAPI deployed LIVE on the VPS (systemd, 127.0.0.1:8000, migrations@007). Hermes API server enabled + exposed publicly (judge.contentengagement.info/hermes-api, bearer+TLS). hermes-prism is host-network so it reaches PRISM on loopback. - Unified chat LIVE — see ADR 2026-06-28-unified-chat-on-prism-hub. Grounded "chat with this audit" on every report page + Telegram, one Hermes brain. PetSmart 15.98% proven through the deployed proxy. - Rename: GH algolia-arian-v2prism-hub (Vercel project rename + domain pending user). - Report standardization (IN PROGRESS): built migrate-audit-data.py (deterministic schema migration). 4/10 with-data reports pass the latest audit_data_schema.py; 6 need grounded-synthesis depth-fills; 7 dataless need full re-audits. Decided: run on LAPTOP, scope all 17, two waves. Byte-precise resume in repo docs/workspace/hermes-prism-integration/spike-unify-audit/L-standardization-status.md. Key decisions: ADR 2026-06-28-unified-chat-on-prism-hub. Next: Wave 1 (fix render-invocation bug → synthesis-fill the 6 → render+import the 10); Wave 2 (7 full re-audits); rotate keys.

2026-06-28 — Autonomous standardization run: pilot complete, loop ready (not launched)

  • Built disk-ledger + /loop prompt for hands-off run over 17 audit reports. Prereqs DONE: render-audit.ts site-path fix + 108 template style-violations tokenized (zero visual change proven), committed arijit-skills 314d045. petsmart canary ran e2e under staged-sync model (hub commit db32cad).
  • Decisions: prod writes STAGED not executed (user runs ! bash run/sync-all.sh + ! vercel --prod); commits LOCAL/unpushed; MODEL ECONOMICS routing standardized globally (T1 haiku→T4 fable).
  • Resume: PIP SESSION.md + docs/workspace/hermes-prism-integration/spike-unify-audit/run/state.json.

2026-06-29 — Standardization Wave 1 complete; Cass persona built & dialed in

Status: Wave 1 DONE (committed); Wave 2 blocked on user action; Cass persona LIVE on Telegram + SPA chat.

Report standardization (autonomous loop): - Wave 1 — 10/10 with-data reports standardized (FIX_DATA→RENDER→SPA→SYNC-staged→COMMIT). All pass audit_data_schema.py. Grounded fixes only — riskiest Algolia metrics (nike/savage) adversarially verified as already present in-file (not invented). hub-root homepage regenerated (10 cards). Commit fa6a34b in prism-hub (LOCAL, unpushed). - Wave 2 — 7 dataless full re-audits BLOCKED. Traffic needs SimilarWeb, whose API key 401s (revoked — ties to security #15) and the browser-scraper session is expired (needs interactive --setup). BuiltWith MCP alive. Surfaced for user: rotate keys / re-auth SimilarWeb browser session, then re-launch. - Publish still human-gated: user runs ! bash run/sync-all.sh (VPS grounding store) then ! vercel --prod (pages). Records: PIP docs/workspace/hermes-prism-integration/spike-unify-audit/run/{state.json,FINAL-REPORT.md}.

Cass — the Chowmes-PRISM sales-coach persona (W-C): - Persona = Cassandra "Cass": 30yr enterprise-software sales exec, $250M ARR book, sales coach. Dry, edgy-but-respectful sarcasm, philosophical, jargon-averse, authoritative, never bot-like. (User's verbatim directive captured.) - Design rule (learned the hard way): pure traits, NO scripted lines/biography/jokes. Hardcoding her best spontaneous lines (the airport-sunrise / "fly's open" gold) kills the emergence that produced them. Reverted all scripts → she invents fresh imagery every turn ("make your hair turn gray", "puppy with a dropped treat"). - Root cause of early "robotic" output: the prism-report-qa plugin injected directive context every turn ("answer only from report, reply EXACTLY ...") that overrode the SOUL. Neutralized → facts-discipline only, tone ceded to SOUL. - Voice knobs (VPS config.yaml): max_tokens 512 (kills novels) + temperature 1.05 (flair). No-brochure rule in SOUL (no bullet lists / capabilities pitch). - Model routing (user directive): main brain = gemini-2.5-flash (complex); auxiliary low-end (web_extract/compression/skills_hub) → Algolia US Inference (gemma medium). Gemini key is PAID (the 429 was billing-not-yet-active, since resolved). Algolia inference token = Vault OIDC JWT, ~monthly expiry — rotate. - Hermes gotcha: SOUL is snapshotted into sessions.system_prompt at conversation creation — editing SOUL only affects NEW sessions; must delete from sessions to apply to live convos. Only SOUL.md loads into the system prompt (AGENTS/USER/MEMORY don't, in this build). Repro: docs/workspace/hermes-prism-integration/chowmes-prism/DEPLOY-NOTES.md.

Committed + pushed: PIP 518c133 (Cass identity files + DEPLOY-NOTES + run records + lessons-log). Next: rotate SimilarWeb/BuiltWith keys (#15) → re-launch Wave 2; publish Wave 1 (sync-all.sh + vercel); wire AGENTS/MEMORY into prompt if operator-detection + always-on Algolia knowledge are wanted.

2026-06-30 — About splash redesign, auto-deploy pipe, Cassandra rename + face, detect-search on VPS

Status: Done, all live (auto-deployed). Wave-2 blocker resolved.

About page (now the splash at /): full visual + IX rework, all vanilla HTML/CSS/JS (static site, no React/GSAP), each change pushed and auto-deployed live. - Routing: / serves About; reports grid moved to /reports/; /about/ redirects to /. See 2026-06-30-about-splash-routing. - Premium prism hero: glassy gradient prism, glowing refracted spectrum, light beam entering, subtle animation (replaced the flat wireframe diagram). - Inside-the-audit tour: auto-cycling slideshow of full audit screenshots (Overview, Research, Search Audit, Business Case, Sales Actions, chat). Cropped/iterated to remove a duplicate tab bar; settled on full screenshots, no pill controls. - MagicBento deliverables: light-theme bento with mouse-following spotlight, reactive border glow, 3D tilt, magnetism, floating particles, and click ripple. Ported from a React/GSAP reference to vanilla. - Role cards (AE/BDR/Sales Leader): pointer-following glowing edge (conic gradient ring + halo, masked to the arc nearest the cursor). Removed the colored top accent bars. - Shared animated-grid background unified across index, about, and audit pages (one assets/grid-bg.js); colored section bands made transparent so the grid shows through. - Copy: plain-English rewrite of the Hermes/Cassandra section and the skills/how-it-works leads (dropped claude-cli, keyless, report-QA, grounding-gate jargon). Removed the duplicate "PRISM" from the topbar. Section order set to who, what, how, inside-the-audit, skills, executioner. - No em dashes in any visible copy. See 2026-06-30-no-em-dash-writing-standard.

Auto-deploy: GitHub webhook to prism-deploy-hook.service to git pull /opt/prism-hub. See 2026-06-30-github-vps-auto-deploy.

Cassandra: renamed from Cass everywhere incl SOUL.md; Imagen-4 portrait (cass-2) as SPA + Telegram avatar; sessions auto_prune at 7 days; all old sessions wiped. See 2026-06-30-cassandra-naming-and-persona.

detect-search: vendored into arijit-skills, symlinked, verified running on the VPS. See 2026-06-30-detect-search-vendored.

Wave-2: SimilarWeb blocker resolved via manual screenshots; Wave-2 now fully keyless. See 2026-06-30-wave2-similarweb-screenshots.

Committed + pushed: prism-hub feat/prism-vps-hosting (many commits, auto-deployed), PIP feat/prism-e2e-cycle, arijit-skills feat/gemini-grounded-search + main. All three repos clean and synced. Next: decide audit-page logo target (/ vs /reports/); Telegram avatar upload (manual @BotFather); run Wave-2 e2e with the screenshot traffic source.