ForgeKitFORGEKIT

Build Log

Pursuits Fix, Canvas-1 Recovery, Two Owner Loop Charges, and forgekits.build Tells the Truth

September 14, 2026

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.

AlloyCanvas-1Owner LoopWebsiteMulti-Charge
4
distinct Charges completed
10
website files rewritten, 3 phases
63
Owner Loop test assertions passing
5
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.

Zeb, steering the website Charge's sequencing before any copy work began