Build Log · July 18, 2026
Alloy — First Real Product Screen, Built Honest
Built the first real Alloy product (products/alloy/) — a working Next.js + Clerk app rendering the Orient screen from real ForgeKit OS session data, with every unwired panel showing an honest 'not connected' state instead of the mockup's invented metrics.
- Alloy
- ForgeKit OS
- New Product
- UI
- new real ForgeKit product created — products/alloy/, Next.js 16 + Clerk
- 1
- React components built, all reading real data or showing honest 'not connected' states
- 18
- invented/fabricated metrics shipped — every number traces to a real session JSON field or is explicitly absent
- 0
- real bugs found and fixed in the process (min-w-0/min-h-0 flex-shrink defaults, table-layout: auto width overflow)
- 2
new real ForgeKit product created — products/alloy/, Next.js 16 + Clerk
React components built, all reading real data or showing honest 'not connected' states
invented/fabricated metrics shipped — every number traces to a real session JSON field or is explicitly absent
real bugs found and fixed in the process (min-w-0/min-h-0 flex-shrink defaults, table-layout: auto width overflow)
Timeline
Start
Crucible run on the Alloy design spec
Round 1 cold: hold off. Round 2 reframed (Zeb: 'this WILL be built'): ship narrow, real data only.
+30m
Anvil Check: where does Alloy live
products/alloy/ as a real product from day one; first build stays small (deferred commitments, not deferred identity)
+1h
Discovered Arc Intelligence classifier already existed
taxonomy.mjs, classify.mjs, render-arc-trace.mjs — real classifier output for one session, built same-day by prior sessions
+2h
Scaffolded products/alloy/, wired Clerk auth
Next.js 16, new Clerk app created via CLI, real sign-in/sign-up, proxy.ts auth gate
+4h
Built and wired all Orient-screen panels to real data
session listing, Workpiece Blueprint, Gate Effectiveness, What Changed, Open Obligations, Evidence Tray — all reading forgekit-os/sessions/*.json directly
+6h
Multi-round visual/layout refinement against reference mockups
grid architecture measured from mockup pixels, multiple flex/table sizing bugs found and fixed
End
Anvil Check: Workpiece entity scoping
Determined session=workpiece is a real category error requiring a new schema field + entity; deferred to next session
What shipped
products/alloy/ — new Next.js 16 + Clerk product, real sign-in/sign-up, honest dark UI matching the reference mockups' visual language
lib/forgekit-os.ts — reads forgekit-os/sessions/*.json and arc-interpretations/*.json directly off disk, no database, no synthetic data
18 real components: TopRail, Sidebar, ForgeArcRail, GoodMorningPanel, WorkpieceIntake, RecentForgeArcs, BlueprintSummaryPanel (renamed from session_contract fields, not invented Objectives/Constraints), WhatChangedPanel (real built[] with a working 'View Change Log' link to the real forgekits.build/build-log/<slug>.html page), OpenObligationsPanel (real nextItems[]), CommandLedgerPanel (honest placeholder), GateEffectivenessPanel (real gate_checks[], rendered as a bordered table with a colored footer row), WorkpieceStatusPanel, EvidenceTrayPanel (real stats[]), ColdFlamePanel + ScaleHeatLossPanel (honest placeholders), CruciblePanel/AnvilPanel/MechanismRackPanel (honest placeholders)
lib/asset-version.ts — cache-busting for public/ assets keyed to real file mtime, fixing repeated stale-image caching during logo/background-art iteration
Strike + Anvil entries in anvils.md/strikes.md: Alloy placement decision (product-with-deferred-commitments, not product-vs-tool)
“What is the right thing to do? Regardless of cost, effort, time... what is the right thing to do?”