PRISM (Second-Brain)

log.md

PRISM — Operation Log

Files touched: prism-hub live data (15 companies confirmed live), memory (sweep memory finalized, new self-report-unreliability lesson), SESSION.md. Notes: The 18-company legal-risk sweep finished and was independently verified end to end — 15 of 18 companies confirmed fixed and live via direct mtime/grep checks (not trusting self-report). Caught 2 real problems this way: Dell had a citation fix applied to only 2 of 3 duplicate occurrences (fixed the 3rd); dsw and nike had schema-blocking enum typos that silently prevented redeploy despite the workflow claiming success (fixed and redeployed). Also caught that michaelkors/thenorthface/torrid's "done" claims were false — mtimes prove they were never touched, predating this session. Real reason: those 3 are missing whole content sections never generated in the first place, and writing new narrative content is out of scope for a "fix wrong data" mandate — correctly left untouched pending Arijit's decision. Root-caused, with direct evidence (not speculation), how fabrications shipped in the first place: JBL had a pre-existing FACTCHECK_GATE.md that had already flagged the exact fabricated quote before this session, and the report shipped anyway — factcheck output existed but was never an enforced gate. That finding is now captured as a concrete task on PRISM V2's Phase 2 list. Honest scope note: this sweep never validated screenshots, never checked section-by-section completeness on the 15 "done" companies, never ran the algolia-audit-eval quality-scoring skill, and did single-pass (not double/triple) verification — real progress, not a 100% guarantee. Session closing; next focus is PRISM V2 (docs/PRISM-V2/ in the PIP repo). Full detail: PIP SESSION.md + memory project-legal-risk-audit-sweep-2026-07-04, feedback-workflow-self-report-unreliable-2026-07-05.

Files touched: prism-hub live data (all 18 companies), memory (project-legal-risk-audit-sweep updated), SESSION.md. Notes: The full exhaustive 18-company legal-risk sweep (started 2026-07-04) ran to completion after Arijit's repeated explicit approval — 54 agents, zero errors. Found footlocker/michaelkors/thenorthface/torrid were wrongly assumed local-only; they were already live, just never through the real JSON+render pipeline (frozen inline HTML) — migrated onto the real pipeline. Independent verification (not trusting agent self-report) started with Dell: price/market-cap refresh confirmed real, fabricated demographics chart confirmed replaced with real data, but found a genuine residual gap (a citation fix applied to 2 of 3 fields with the identical mistake, missed the 3rd) — same "partial fix, missed duplicate" pattern seen earlier with L.L.Bean. 17 other companies still need the same direct-check treatment before this is truly closed. Separately diagnosed (not yet fixed) a VPS disk-space concern: 59.4GB of stale Docker build cache, not logs — awaiting go-ahead to clear.

Files touched: PIP repo (arijit-skills commits 5786bf7/c1e3992/9bc060d/e10cb39/5f014d0), prism-hub live data (13 companies), memory (6 new files), SESSION.md, CLAUDE.md. Notes: (1) 1272-line uncommitted VPS work reviewed+committed+reconciled+deployed; discovered VPS git repo and runtime skill path are separate un-synced copies, no automation exists. (2) Retracted the "validate-json-schema.py doesn't exist" claim from the last 2 sessions — it existed, was silently dead from 3 stacked infra bugs (missing --allow-run, missing pydantic, hardcoded single-Mac path), all fixed+verified. (3) Arijit escalated to a portfolio-wide legal-risk mandate ("cannot afford lawsuits") — found and fixed real fabricated quotes (attributed to named living executives) and false competitor claims across the live audit portfolio, independently verified via direct VPS checks. Scope expanded to all 18 audited companies. (4) A dispatched fork subagent (task: check vault for prior Agent Studio research) instead executed the ENTIRE in-flight PRISM V2 research AND the 18-company legal sweep on its own initiative, seeing them in its inherited conversation context — forced an emergency stop of the legitimately-launched workflow. wiki/2026-07-04-v2-manifesto.md was written by that rogue fork BEFORE Arijit's hard rule (all V2 docs live ONLY in docs/PRISM-V2/ in the PIP repo, never the vault) — reviewed (identical content, no unique info) and removed from the vault. (5) PRISM V2 — a 3-phase re-architecture manifesto (executioner rearchitecture off Hermes, plug-and-play modules, domain-agnostic productization) — kicked off separately, canonical copy belongs in PIP repo's docs/PRISM-V2/, not here. Full detail: PIP memory project-legal-risk-audit-sweep-2026-07-04, feedback-fork-scope-bleed-2026-07-04, project-prism-v2-manifesto-started.

[2026-06-30] status | IA-Redesign-Pending (PAUSED)

Files touched: wiki/IA-Redesign-Pending.md, index.md, log.md Notes: Report IA redesign A/B prototype (browse /ia/ia1 vs chat /ia/ia2 over Home Depot Mexico) built, reviewed, pushed to Vercel preview on prism-hub branch feat/ia-ab-prototype. Production untouched. PAUSED while user handles other tracks. Canonical resume doc: PIP docs/status/IA-Redesign-Pending.md. Ledger: prism-hub .superpowers/sdd/progress.md.

[2026-06-29] record | Scout linked as PRISM acquisition plane

Files touched: wiki/overview.md, index.md, log.md Notes: PRISM remains the Hermes sales coach and interpretation layer. Scout is linked as the acquisition plane for /scrape, /structure, /harvest, source artifacts, and citation-grade evidence.

[2026-06-27] new | PRISM

Files touched: index.md, log.md, CLAUDE.md, wiki/overview.md, wiki/open-questions.md Notes: Wiki initialized to record the search-vendor detector work.

[2026-06-27] record | search-vendor packet detection (ADR + dev-log)

Files touched: wiki/decisions/2026-06-27-search-vendor-packet-detection.md, wiki/dev-log.md, wiki/open-questions.md, index.md Notes: ADR (decision + design + alternatives + consequences + validation), dev-log entries for 2026-06-27 (detector rebuild) and 2026-06-26 (v1 deletion + .env.local fix). Commit a72aea6.

[2026-06-27] record | ADR: persona-journey UI architecture

Files touched: wiki/decisions/2026-06-27-persona-journey-ui-architecture.md, index.md Notes: Locked UI direction — three role-shaped surfaces (AE→BDR→Leader) over one intel engine. AE built first. Supersedes single tabbed-dashboard layout. Next: scope + approve AE-journey research before rendering mockups.

[2026-06-27] record | ADR: PRISM = AI Sales Toolkit + stage cockpit

Files touched: wiki/decisions/2026-06-27-prism-as-ai-sales-toolkit-stage-cockpit.md, index.md Notes: Triggered by FY27 AE Field Guide (primary source). Two founder decisions: (1) PRISM absorbs the internal AE toolset and becomes THE AI Sales Toolkit; (2) AE surface organized around the 5-stage gated pipeline (PREP→SS1-SS4) with exit-gate checklists as backbone. Large scope; recommended incremental fill of the full architecture (PREP/SS1 first). Field guide extraction in docs/workspace/ae-journey-research/05-algolia-ae-sales-process.md. Open: clarify Value Prompter/MegGPT/PIE Playbook internals before absorbing.

[2026-06-28] record | Chowmes-PRISM live + grounded report-QA verified

Files touched: wiki/decisions/2026-06-28-prism-is-chowmes-prism-hermes-instance.md, wiki/decisions/2026-06-28-grounded-report-qa-gate.md, wiki/dev-log.md, index.md Notes: Major build session. PRISM = Chowmes-PRISM (dedicated Hermes instance on VPS). Grounded report-QA plugin verified over PetSmart (facts grounded, coaching allowed). Temporal dropped. 5 durable findings captured. W-A generation blocked on Anthropic key. GitHub: prism repo commit 87342f6.

[2026-06-28] cleanup | Vault refreshed to Chowmes-PRISM direction

Files touched: wiki/overview.md (rewritten), wiki/open-questions.md (refreshed), wiki/decisions/2026-06-27-persona-journey-ui-architecture.md (Superseded banner), wiki/decisions/2026-06-27-prism-as-ai-sales-toolkit-stage-cockpit.md (Partially-superseded banner), index.md Notes: Removed stale custom-SaaS/Temporal/web-UI framing from overview; refreshed open-questions to today's blockers + workstreams. Preserved ADR history (marked superseded, not deleted). Detector ADR kept (valid). dev-log/log append-only history kept.

[2026-06-28] record | Big build session: unified chat LIVE + standardization started

Files touched: wiki/decisions/2026-06-28-unified-chat-on-prism-hub.md, wiki/dev-log.md, wiki/open-questions.md, index.md Notes: ADR for unified chat (Hermes one-brain on prism-hub + Telegram, LIVE/proven). Dev-log covers skills hardening + security scrub + R1 deploy + Hermes API + report standardization in progress. Resume detail in repo spike-unify-audit/L-standardization-status.md.

[2026-06-30] record | About-splash redesign, auto-deploy, Cassandra rename, detect-search vendored, Wave-2 unblocked

Files touched: index.md, log.md, wiki/dev-log.md, wiki/open-questions.md, wiki/decisions/2026-06-30-.md (6 ADRs), wiki/entities/.md (8), wiki/concepts/right-tool-for-each-job.md Notes: 6 new ADRs; 8 entity pages (prism, hermes, cassandra, scout, detect-search, gemini-grounded-search, yfinance, chrome-browser) + routing concept, with relationship wikilinks (Scout to PRISM, Hermes to Cassandra to PRISM, detect-search to PRISM). No em dashes in new content.

[2026-07-03] record | Dell marathon fix session — 9 live bugs fixed, systemic schema-gate gap named, VPS-local uncommitted work discovered

Files touched: PIP repo docs/sop/lessons-log.md (3 lessons), arijit-skills template (12 commits, feat/gemini-grounded-search), prism-hub feat/prism-vps-hosting (8 commits, live on prism.chowmes.com/dell) Notes: Post-demo, freeze cleared. Fixed 9 rendering bugs on live Dell report found one at a time by Arijit (Solution Map blanks, vanished Buying Committee, blank Overview tiles, broken AI Discovery tile, 404 screenshots, mismatched finding G-number/category badges — this last one systemic across every report, not Dell-only). All traced to one root cause: no schema contract between producer modules and index-template.html; validate-json-schema.py is referenced by the render script but does not exist. Real mistake mid-session: fixed screenshot-404 via a path patch without checking Arijit's own prior-day correction workspace existed (docs/workspace/dell-screenshot-audit/), re-exposed old broken screenshots. Fixed correctly once found. Rewrote 10 stale-claim text locations built on an unverified "$2,000 results" claim Arijit had already disproven the day before. Critical discovery at session end: 1272 lines of uncommitted, unpushed VPS-local hardening work (Jul 1-2, more thorough array-safety sweep than today's fixes) found on the live Cassandra skill install — at risk of loss, decision pending with Arijit (asked, no response yet). Today's GitHub-pushed fixes have NOT reached the VPS's actual skill install (separate deploy target, confirmed). The per-skill-subagent architecture goal from 2026-07-02 remains ~0% built. Full detail: PIP repo SESSION.md + memory project-dell-marathon-fixes-2026-07-03.

Files touched: PIP repo SESSION.md, commit 0e8752e on feat/prism-e2e-cycle Notes: 18-company legal-risk sweep's real-work fixes committed (18 index.html, docs/PRISM-V2/, plans, cassandra-tooling runner, belk/dell workspace artifacts) — junk/.bak files deliberately left uncommitted. Arijit named PRISM V2 Phase 2 rearchitecture "the most important and very critical rearchitecture work" for next session, with a new research thread: evaluate the Claude Agent SDK (distinct from Agent Studio, already ruled weak-fit in Phase 1) as the executioner, "only if it makes sense." 3 older decisions (3-company content gap, homedepot-mexico demographics, VPS docker prune) remain unanswered after being asked twice this session. Full detail: PIP repo SESSION.md, memory project-prism-v2-phase2-executioner-agent-sdk.

[2026-07-06] decision | PRISM V2 full architecture locked; role-driven UX design in progress

Files touched: PIP repo docs/PRISM-V2/04-open-gaps-before-fable5-handoff.md, docs/PRISM-V2/05-role-driven-ia.md, SESSION.md; vault Projects/PRISM/wiki/V2/ (new, mirrors PIP repo's docs/PRISM-V2/ per Arijit's explicit dual-recording call this session) Notes: PRISM V2's executioner/data-store/agent-design questions from 2026-07-05 are now fully decided, not open anymore. Data store = Postgres + pgvector (zero Algolia in core architecture). Executioner + orchestrator + monitoring + chat = Claude Agent SDK, self-hosted, chosen over Google ADK/OpenAI Agents SDK on switching-cost grounds (25+ already-built Claude Code Skills), not brand preference. 6 agent roles, with Gate/QA redesigned into a 5-stage Verification Pipeline (mechanical validator, factcheck, 3-agent adversarial panel, quality scoring, final legal gate) after Arijit flagged zero-fabrication tolerance as the single highest-stakes design constraint. Moved into role-driven UX: 4 doors (AE/BDR/Sales-Leader/Marketer) + a global voice-enabled Jarvis cockpit layer, reviewed screen-by-screen with Arijit. Real corrections mid-design: AE's stage scope cut from 5 to 3 (PREP/SS1/SS2 only, sourced from the real FY27 AE Sales Process Field Guide), Business Case moved from SS4 to SS2, and a validated general principle emerged (audit-derivable vs Sales-input split, grounded in a real Belk whale-account playbook already in the repo). Session paused mid-review: AE screen redrawn but not reconfirmed, Marketer needs full re-review, BDR/Sales-Leader not touched this pass. Full detail: PIP repo SESSION.md, memory session_pointer.

[2026-07-06 continued, ~1am-4am] build | Gap #11-13 named + corrected; 3 real features shipped (staged, not deployed); overnight session

Files touched: PIP repo docs/PRISM-V2/00-manifesto.md, 04-open-gaps-before-fable5-handoff.md, SESSION.md; docs/workspace/cassandra-tooling/staged/prism-runner.py + tests/pipeline/test_runner_routes.py (commit 3d98947); prism-hub repo feat/ia-ab-prototype branch (commits ded009c, 10bb828); vault Projects/PRISM/wiki/V2/00-manifesto.md, 04-open-gaps-before-fable5-handoff.md (re-mirrored). Notes: Same-night continuation after the architecture-lock entry above. Arijit named a real, previously-uncaptured gap: agent-to-agent orchestration mechanics (exact prompts, data contracts, sequencing, retry) and multi-tenancy/security were completely undesigned despite the architecture being "locked" — captured as gaps #11-13. Investigation found this was partly already answered by an existing, deeper doc (docs/workspace/hermes-prism-integration/phase-b-cass-agent/L2-execution-orchestration-design.md, 2026-06-29) that hadn't been checked before drafting from scratch — corrected. Live-verified via VPS SSH (not just code-read) that run_audit/status-check tool-calling for the current V1/Hermes system genuinely works end-to-end; found and fixed a real plugin-drift bug (stale repo copy missing 2 shipped fixes) and a real manifest/tool-name mismatch (live_status vs audit_status). Shipped 3 real, tested features overnight after Arijit pushed to keep building past a natural stopping point: Cassandra LiveAvatar (embodied avatar chat, ded009c), proactive Telegram notify-on-job-completion (3d98947, 7 new tests, 41/41 passing), and the Marketer role-door page (10bb828, ui-validator caught and fixed a real WCAG AA contrast failure). All three staged/committed to feature branches only — nothing pushed to main, nothing deployed to the live VPS runner, per this project's own established "staged, attended cutover" convention. A status/execution dashboard build was attempted and correctly blocked mid-flight: its real data source only exists on VPS-internal loopback, and exposing it publicly is a real infrastructure decision requiring Arijit's explicit yes, not something a session should decide alone at 3am. Full detail: PIP repo SESSION.md (rewritten this persist to the full template), memory project-prism-agent-orchestration-gap-2026-07-06.

[2026-07-09] fix-marathon | Full Lululemon re-validation — 3 systemic pipeline bugs found+fixed; deployment-drift architecture problem surfaced and partially fixed; real live-fetch architecture started

Files touched (VPS): arijit-skills/skills/algolia-audit-skills/algolia-audit-factcheck/scripts/factcheck_mechanical.py, .../algolia-search-audit/scripts/generate-audit-data.py, .../calculate-roi.py, .../sync-live-page.py (new), .../algolia-intel-traffic/README.md + SKILL.md (live path was stuck on old v1.1); /opt/prism-executor/audits/lululemon/{research,deliverables}/* (traffic, tech_stack, executives, case studies, industry_context, partner_intel, solution map — all corrected); /opt/PRISM/v1/lululemon/index.html (9 JS field-mapping bugs fixed, full data resync, live-fetch boot logic added); /opt/PRISM/v1/{belk,dell,jbl,nike}/index.html (same JS fixes applied); /opt/PRISM/v1/server/chat-proxy.mjs (new /api/audit-data/{slug} Postgres-backed route — WIP, real bug found); /opt/prism-chat-proxy/.env, /opt/prism/scout/.env; Postgres audits.score/factcheck_score widened to NUMERIC(4,2); prism-platform-postgres-1 + redis containers restarted (had been down 2 days, undetected). Local: docs/PIPELINE-UNIFICATION-PLAN.md (written, revised twice, saved to VPS repo docs/).

Notes: Started as "fix Lululemon's SimilarWeb module" (dead-API fallback since 2026-07-01, never caught by the 2026-07-01 factcheck which incorrectly scored 9.4/10 PROCEED). Became a 6+hr forensic pass after Arijit kept finding the next broken thing live faster than fixes could land. 3 systemic bugs found (affect every audit, not just Lululemon): (1) generate-audit-data.py silently dropped the traffic module's degraded_mode/data_quality flag before it ever reached the deliverable JSON, so nothing downstream could check it — root cause of the false PROCEED; (2) calculate-roi.py Components 1 & 5 multiplied raw session count directly by a lift % with no baseline-conversion-rate anchor, inflating ROI totals by ~5x (conservative total dropped from an implausible $1.4B to a defensible $293.9M once fixed); (3) industry_context has been silently null on every audit ever run through this pipeline — a filename typo missing the numeric prefix every other research file uses. Ran the actual algolia-audit-factcheck skill full-tier, all 23 dimensions, with live external verification (curl/WebFetch against SEC EDGAR, Motley Fool, Algolia case studies) rather than spot-checks — found and fixed 2 dead case-study URLs (Gymshark, Arc'teryx — Arc'teryx was never in the real algolia_case_studies Postgres table at all), all 4 executives missing source citations since day one, a stale executive title, an invalid signal-type enum, a tech_stack contradiction, and 4 solution-map placeholders (all replaced with verified-live case-study proof).

Deployment-drift named as the real root cause tonight, not just a symptom: the arijit-skills GH repo and the live ~/.claude/skills execution path have diverged across ~40 skills with no sync mechanism — confirmed one live SKILL.md was stuck on the OLD dead-API-instructing version 5+ days after the fix was committed to the repo. Symlinked 2 confirmed-safe skills (repo↔live, byte-identical, verified). algolia-search-audit (the biggest skill, both orchestrator and shared script library other skills call into) has genuine divergence in BOTH directions — repo has 9 scripts+tests the live path lacks, live path has ~25 company-specific one-off scratch scripts the repo lacks — correctly NOT symlinked blind; needs manual pair review.

Corrected 3 of my own wrong assumptions after Arijit pushed back — verified live rather than argued: (1) Postgres is a real 13-table relational schema, not "just a jsonb blob" — module_executions.validation_json is an unused ready-made hook for per-skill factcheck gating; (2) Crossbeam MCP is authenticated and works — tested live, returned real data (assigned Algolia owner, 60 partner overlaps, a CRM-confirmed commercetools relationship that contradicts the audit's Gemini-guessed Salesforce Commerce Cloud claim) — the actual bug is algolia-intel-partner never calls Crossbeam MCP tools at all, Gemini-search-only; (3) Scout's local scrape was disabled by a SCOUT_PUBLIC_HOSTED_ONLY config flag, not fundamentally broken — flipped it, container properly recreated (plain docker restart does NOT reload .env), verified working, still 127.0.0.1-only.

Started the real architectural fix Arijit actually wants (live page fetches from Postgres at request time, zero static/baked copies) rather than another patch script: installed pg, wired DATABASE_URL, added an authenticated /api/audit-data/{slug} route to the live Node server, verified the underlying DB query returns real live data. Wiring the page's own JS to call it hit a genuine bug — Clerk's session "handshake" refresh flow returns a redirect that a plain fetch() can't follow (lands on HTML, fails to parse as JSON) — my first attempted fix would have weakened auth validation and was correctly blocked; left unresolved and documented rather than rushed. sync-live-page.py (the interim tool, now obsolete once live-fetch fully lands) was still built and run for all 5 real companies in the meantime, catching real drift on belk/dell/jbl too, not just Lululemon.

GitHub: one push landed (e49184d — factcheck gate fix, ROI fix, traffic README fix, industry_context fix). A second set of 3 commits (sync-live-page.py, the plan doc) is staged in a local clone, not yet pushed — Arijit asked to persist+handoff before pushing further.

Full detail: PIP repo SESSION.md (this persist), VPS arijit-skills/docs/PIPELINE-UNIFICATION-PLAN.md, memory project-prism-lululemon-fullrevalidation-2026-07-09.

2026-07-10 — Belk audit re-validation (resumed post-crash, 8 defects found+fixed, v6 gate WARN)

Picked up the Belk re-validation the crashed 2026-07-09 session had left mid-flight. First check found the crash had left a real hazard: research files were fixed but deliverables (audit-data.json, live page, PDF) were never regenerated from them, so fabricated hiring roles and a 3x-wrong Nordstrom revenue figure were still live and servable. Pulled the live page to a holding page immediately on confirming this, before doing anything else.

Defects found and fixed, in order: 1. A DB-write agent claimed it wrote the corrected JSON into Postgres but actually sourced from a stale file (/opt/PRISM/v1/server/belk-audit-data-corrected.json) — caught by checking the nested audit_data.traffic.monthly_visits field, not the top-level completed_at/factcheck_score columns that looked fine and made me report false-done once. Fixed by writing the real file directly myself, with a sanity guard. 2. partner_intel.tech_partners used field names (relationship, belk_status) that didn't match what the client renderer reads (confidence, co_sell_motion) — every one of 6 real Crossbeam partner entries rendered as an identical flat "MEDIUM" card with no text. Fixed field names, then per Arijit's explicit "only validated stays" instruction, removed all 5 unconfirmed entries — only Contentstack (real CRM-confirmed customer) remains. 3. All 5 findings referenced a screenshot filename that didn't match the real served file — every finding image 404'd silently. Fixed the reference. 4. Arijit's own manually-captured screenshot (passed the WAF challenge himself, part of the SOP's "Manual Testing Handoff") existed on disk but was never wired into any finding. Attached to F01 with accurate, non-overclaiming text about exactly what it does and doesn't prove. 5. An intelligence signal about a competitor (Constructor.io) was mislabeled badge_label: "Partnership" when its own category_tag said competitive_threat. Relabeled. 6. A hiring signal explicitly self-labeled "signal": "weak" was still rendering as a HIGH-urgency red Act-Now card because the renderer hardcodes severity for any open buying-committee role, ignoring the real confidence field. Changed the entry so it no longer trips that card. 7. Solution Map's 3 priority-play rows all said "See case studies below" because proof_url pointed to the quote's own evidence source, not an Algolia case study, and proof_company was missing entirely. Wired in real matching case studies (Everlane, Shoe Carnival, Lacoste). 8. The v6 gate was explicitly told to spot-check 3 sections nobody touched tonight (News/Social/ Investor signals) rather than assume they were clean — found a genuinely new defect: two intelligence_signals entries were the SAME press quote duplicated, both mislabeled leadership_change with a fabricated "new leadership resets the budget cycle" urgency rationale for a store-expansion signal that had nothing to do with leadership change. Deduped, relabeled "Store Expansion" with accurate why_lead text.

Also fixed: stale meta.audit_date (2026-07-03 → 2026-07-10), Belk missing entirely from the company hub listing page (/opt/PRISM/v1/reports/index.html — a static hand-maintained list that had silently never included it, plus 4 OTHER completed-audit companies: Foot Locker, Michael Kors, The North Face, Torrid — flagged, not fixed, out of scope tonight), a stale baked-in fallback snapshot in the static HTML (re-rendered via render-audit.ts, then the live-fetch+401-retry boot patch had to be manually re-applied since the renderer doesn't know about it), and a workspace-vs- served screenshot directory drift.

Final gate: v6, WARN, score 8.3, blocking_count 0. Zero fabricated numbers/companies/wrong-entity content ship on the live surface. WARN (not PROCEED) is cosmetic-only — same class of carried low-severity warning Lululemon shipped PROCEED with the night before.

Process lesson, the expensive way: verifying a database write landed is not the same as verifying it landed correctly. Checking completed_at/factcheck_score (the columns) said success; the actual audit_data payload (what the live page reads) still held the old wrong numbers. Every future DB-write verification needs a field-level spot-check of the nested payload, never just the wrapper columns.

Tooling note: the Chrome DevTools MCP browser tool hit repeated profile-lock contention tonight from a second, concurrent session sharing the same chrome-devtools-mcp/chrome-profile dir — killing the locking process worked but also destroyed an active Clerk auth session once. Real environment constraint, not a one-off; a second concurrent browser-tool session should expect this.

Not done: the other 17 companies queued for the same SOP re-validation (explicitly NOT authorized tonight — scope was Belk only); the 4 other hub-missing companies (Foot Locker/Michael Kors/ The North Face/Torrid); a from-scratch re-verification of every underlying citation (SEC filings, case-study URLs) rather than the consistency-check level done tonight.