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

distinct Charges completed

website files rewritten, 3 phases
10

website files rewritten, 3 phases

Owner Loop test assertions passing
63

Owner Loop test assertions passing

stranded/stuck production requests recovered
5

stranded/stuck production requests recovered

Timeline

  1. Start

    Ignite — Pursuits investigation

    Why don't the first Pursuits have current understanding, and why can't Empty Canvas apps link to Pursuits

  2. +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

  3. +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'

  4. +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

  5. +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

  6. +7hr

    Website truth-audit — background research agent, ~70 tool calls

    Corrected 3 of the Charge's own assumptions before writing a word of copy

  7. +8hr

    Corrected Findings & Decisions Register written, Zeb decides Known's exposure

    Phase 0 artifact — Council's own recommended prerequisite before any copy work

  8. +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