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

new real ForgeKit product created — products/alloy/, Next.js 16 + Clerk

React components built, all reading real data or showing honest 'not connected' states
18

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
0

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)
2

real bugs found and fixed in the process (min-w-0/min-h-0 flex-shrink defaults, table-layout: auto width overflow)

Timeline

  1. 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.

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

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

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

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

  6. +6h

    Multi-round visual/layout refinement against reference mockups

    grid architecture measured from mockup pixels, multiple flex/table sizing bugs found and fixed

  7. 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?”
— Zeb, when asked to weigh convenience against correctness on the Workpiece entity question
Alloy — First Real Product Screen, Built Honest — July 18, 2026 · ForgeKit