Build Log · September 14, 2026
Pursuits Fix, Canvas-1 Recovery, Two Owner Loop Charges, and forgekits.build Tells the Truth
A four-part session: fixed Alloy Pursuits' product-linking gap, recovered and redesigned canvas-1 for a real user, shipped two Owner Loop hardening Charges (Steward the Whole Product, Make App Differences Boring), then audited and rewrote the entire public website end to end against real evidence instead of memory.
- Alloy
- Canvas-1
- Owner Loop
- Website
- Multi-Charge
- distinct Charges completed
- 4
- website files rewritten, 3 phases
- 10
- Owner Loop test assertions passing
- 63
- stranded/stuck production requests recovered
- 5
distinct Charges completed
website files rewritten, 3 phases
Owner Loop test assertions passing
stranded/stuck production requests recovered
Timeline
Start
Ignite — Pursuits investigation
Why don't the first Pursuits have current understanding, and why can't Empty Canvas apps link to Pursuits
+1hr
Pursuits fixed, canvas-1 recovery begins
Real product-link claim gathering shipped; 4 stranded canvas-1 Owner Loop requests found and recovered from actor-candidate branches
+3hr
canvas-1 redesigned — nav shell, not just color
First color-only pass corrected by Zeb: 'this does not look like medinaCHF... Pages, home page, navigation'
+4hr
Steward the Whole Product Charge — Council reviewed, built
PRODUCT.md pattern, pending_owner_disclosures, coherence-decision requirement — smallest vertical slice per Zeb's 5 tightening amendments
+6hr
Make App Differences Boring Charge — built to full completion
owner_loop app-contract namespace, 15 files migrated off hand-duplicated literals, cross-runtime Alloy/OS reader parity test, new drift-guard gate
+7hr
Website truth-audit — background research agent, ~70 tool calls
Corrected 3 of the Charge's own assumptions before writing a word of copy
+8hr
Corrected Findings & Decisions Register written, Zeb decides Known's exposure
Phase 0 artifact — Council's own recommended prerequisite before any copy work
+11hr
Phases 1-3 built and shipped, deployed to forgekits.build
Global shell, homepage, About, MedinaCHF family, Research/Labs, Hearth/Forge/Leashline/PilotLight, Known, then Guides/Community/Journal/Brochure light-touch pass
What shipped
products/alloy/lib/pursuits/synthesize.ts — gatherClaims() now follows productIds links to real Workpieces, not just directly-linked ones
forgekit-os/product-registry.json — added canvas-1..4 entries, fixed a regressed medina-chf/medinachf key drift
experiments/canvas-1/ — recovered 3 real stranded Owner Loop candidates via cherry-pick, plus a full navigation/visual redesign (BottomNav, real Home page, teal design tokens, Fraunces/Source Sans fonts)
forgekit-os/charges/steward-the-whole-product-2026-09-14.md — Council-reviewed, Zeb-tightened Charge doc
experiments/canvas-1/PRODUCT.md — bootstrapped durable product-knowledge doc
experiments/canvas-1/lib/db/schema.ts — pendingOwnerDisclosures table
forgekit-os/scripts/finalize-owner-intent.mjs — disclosure prepend at the one real terminal write path
forgekit-os/scripts/dispatch-owner-loop-requests.mjs — PRODUCT.md injection into every Owner Loop Charge
forgekit-os/charges/make-app-differences-boring-2026-09-13.md — final Charge doc with full Proof section
forgekit-os/config/apps.json — owner_loop namespace added to all 5 apps
forgekit-os/scripts/lib/owner-loop-app-contract.mjs + owner-loop-operations.mjs — the real fail-closed contract/operations layer
15 forgekit-os/scripts/ files migrated off hand-duplicated HAS_CANONICAL_COLUMNS/TABLE_NAME_BY_APP literals onto the contract
forgekit-os/scripts/check-owner-loop-app-shape-literals.mjs — new drift-guard gate, wired into test:os
products/alloy/lib/owner-loop-app-contract.ts + .test.ts — Alloy's own reader, cross-checked byte-identical against the OS's .mjs loader via a real spawned node subprocess
forgekit-os/charges/website-truth-corrected-findings-2026-09-14.md — Phase 0 Corrected Findings & Decisions Register, Known exposure decision recorded
forgekit-website/app/layout.tsx, app/page.tsx, app/about/page.tsx, components/Footer.tsx, public/manifest.json — Phase 1, global shell/homepage/About
forgekit-website/app/medinachf/{page,case-study/page,story/page}.tsx — Phase 2, MedinaCHF family's Act 2 (Owner Loop ownership story)
forgekit-website/app/research/page.tsx, app/labs/page.tsx — Phase 2, reorganized by real evidence status instead of a flat portfolio grid
forgekit-website/app/forgehome/page.tsx, app/forge/page.tsx — Phase 2, dead cross-site #contact anchors fixed
forgekit-website/app/known/page.tsx, app/known/prototype/layout.tsx — Phase 2, public-research-preview framing + noindex on the raw prototype demo
forgekit-website/app/brochure/page.tsx, app/journal/page.tsx — Phase 3, pricing correction + stale case-studies claim fixed
forgekit-website deployed to production — all 33 routes verified live at forgekits.build
“Truth-audit first, Crucible on the audit findings + plan, then build page-by-page.”