wiki/decisions/2026-07-12-finishing-build-plan-phased-execution.md
PRISM Finishing Build Plan — decisions + phased execution
Context
The 2026-07-06 V2 handoff package (docs/PRISM-V2/06-v2-execution-map.md + 08/09) was never fully executed. Live VPS/GitHub/local recon this session (2026-07-12) found: role doors (AE/BDR/Marketer) + a real landing-page builder (Dell/Nike) DID ship same-day 2026-07-06, then all attention moved to the Belk/Lululemon audit-revalidation effort (07-09/07-10) and the architecture work (Hermes removal, executioner rebuild, chat-as-operator) never started. Hermes/Cassandra is still the live executioner; zero Claude Agent SDK code exists anywhere. Full ground truth recorded in PIP repo docs/plans/2026-07-12-prism-finishing-build-plan.md §0.
Also found, unrelated: POST /api/chat on prism.chowmes.com is unauthenticated in prod today — a live security hole, patched as the first step of this plan regardless of everything else.
Decisions
- Executioner = upgrade
prism-runner.py(plain Python, subprocess-dispatch ofclaude -pper skill), NOT a Claude Agent SDK rewrite. Built behind a cleandispatch()/gate()interface so an SDK migration later is additive, not a rewrite. Reasoning: the SDK's real benefits (native hooks, unified executioner+chat framework) only pay off once multi-tenancy/chat-as-operator actually need them; it was "decided" 2026-07-06 but never proof-of-concept'd — stacking an unproven framework onto a full Hermes removal + greenfield Figma/Jahia integration in one push is the overreach that causes stalls. - Full Hermes/Cassandra rip-and-replace, not staged — Arijit's explicit call, de-risked via a proven-on-non-prod-path-first cutover sequence (see plan §Track C step 5) and a rollback plan (archived containers/compose, not deleted).
- Build the real Figma → Jahia integration for the Marketer landing-page builder, not just reuse of the existing static template — Arijit's explicit call. Real risk flagged: Jahia MCP isn't installed, prior research called Figma "wireframe-only" — scoped as its own research spike before the build commits to a shape.
- Scope = Tracks A–H, full productization (multi-tenancy, domain-pack, GTM, pricing) — Arijit's explicit call, this is now a sellable-product build, not just an internal-tool finish.
- Execution model: 6 phases, NOT one autonomous Fable-5 run. Each phase is issued as its own goal with its own definition of done; Fable 5 stops and reports at the phase boundary; Arijit reviews before the next phase's prompt is issued — never auto-chained. Reasoning: the 2026-07-06 "run this loop yourself, don't stop unless a Mandate Boundary" framing already produced a half-finished, silently-diverged result once (docs claimed things were unbuilt that were actually built, and vice versa — nobody caught it for 6 days). This plan also mixes irreversible steps (Hermes removal, prod cutover) with real unknown-unknowns (Figma/Jahia, an untested-since-07-02 concurrency ceiling) — a single unsupervised loop can't be course-corrected mid-run.
The 6 phases
- Foundation (SEC0 auth patch + Track A door re-verify + Track B design-system reconciliation) — merged into one phase: both halves are low-risk, non-irreversible, and don't depend on or block each other, so one review gate covers both.
- Executioner + Verification Pipeline + Hermes removal (Tracks G+C) — highest-risk phase; the actual Hermes container removal needs Arijit's explicit yes even though the decision-in-principle is already made (§decision 2).
- Landing pages (Track L) — Belk/Lululemon via existing builder first, then the Figma/Jahia spike as its own checkpoint before the integration build.
- Modular rearchitecture (Track E).
- Multi-tenancy + domain-pack (Track F) — gated on running the concurrency test that's been open since 2026-07-02 (does the Claude subscription sustain 3+ concurrent audits).
- Production readiness + GTM + pricing/metering (Track H).
The anti-handwaving fix (Arijit's top concern this session)
A 5-stage Verification Pipeline (mechanical validator → fact-check agent → 3-agent adversarial panel → quality/completeness agent → legal gate), wired into the upgraded prism-runner.py's gate() call so no module's output is accepted before the next module dispatches. This is code-enforced, not a skill Claude has to remember to invoke. Full design in the PIP plan doc §2.
Full detail
Canonical plan: PIP repo docs/plans/2026-07-12-prism-finishing-build-plan.md (supersedes docs/PRISM-V2/06-v2-execution-map.md / 08 / 09 on "what's built" — those retain design value, reused where accurate).