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-v2 → prism-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 +
/loopprompt 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.