Build Log
Build Log Ingest — Closing the Silent Publish Gap and a Sort-Order Bug
August 8, 2026
Traced a visible build-log gap to an unprovisioned API credential, wired the missing publish path into npm run retro, backfilled 7 unpublished sessions, and fixed a sort-order bug the backfill itself exposed.
Timeline
What shipped
forgekit-os/scripts/publish-retro.mjs — plain-JS reimplementation of Alloy's outbox publish logic (content-hash, fail-closed public projection, ingest API POST), used because the shared forgekit-retro-contract package ships raw .ts with no build step
forgekit-os/scripts/retro.mjs — wired a new best-effort 2.7/3 publish step, and fixed the script to actually load .env.local at all (it never did before)
forgekit-os/scripts/provision-publisher-key.mjs — one-off admin script (run by Zeb, never Claude) that creates a publisher + API key row and prints the raw secret exactly once
package.json — retro npm script now runs with --env-file=.env.local, matching the existing crucible/arc:classify convention
forgekit-website/lib/retro-ingest/read.ts — listPublishedSessionsForIndex now sorts by the session's real work date (parsed from publicRetro.sessionDate) instead of lastPublishedAt, falling back to lastPublishedAt only when the date string is unparseable
Backfill-published 7 sessions that were committed to git but never reached the public build-log: build-log-ingest-api-implementation-2026-08-02, corpus-workshop-3d-scene-perf-and-polish-2026-08-02, medinachf-event-authoring-and-guides-2026-08-03, game-builder-first-horizon-disappearing-platform-2026-08-03, sketchforge-research-architecture-2026-08-03, alloy-commons-recognition-field-and-wander-2026-08-07, medinachf-public-refresh-and-member-redesign-2026-08-07
“still confused. so should I be looking at it locally or not?”