ForgeKitFORGEKIT

Build Log

Arc Foundation Promotion — Transcript Provenance, Not Omniscience

July 18, 2026

Promoted only the transcript source-reference from the Arc spike into canonical session JSON — a durable pointer to an exact provider transcript range, with every analysis field (timings, hashes, chapters) deliberately left derived and recomputable, never persisted.

ForgeKit OSArc SliceSchemaProvenance
1
new canonical schema field — transcript_reference, documented in _SCHEMA.md
14/14
new provider-adapter tests passing — malformed/unsupported/inaccessible all fail honestly, backward compat and privacy both proven
identical
sha256 hash across two independent derivations of the real proof session's transcript range

Timeline

Start
Crucible ran (architect/qe/steward)
session_coverage flagged as undercooked by all three personas; recompute-on-verify and the new top-level key both confirmed sound
+15m
Read-and-map complete
_SCHEMA.md, build-session.mjs, gate-accounting.mjs, patterns.md all checked — no competing provenance structure found; renderer confirmed to pass unknown top-level keys through inertly
+25m
Schema documented + provider adapter written
transcript_reference added to _SCHEMA.md with tightened session_coverage semantics; claude-code.mjs adapter + resolve-transcript-reference.mjs verification script written, wrapping the spike's proven transcript-adapter.mjs unmodified
+35m
Real anchors recovered for the proof session
Located the actual JSONL transcript for arc-slice-transcript-adapter-2026-07-18 (284dbdf9-...), distinguished it from the crashed prior session (b8387ec2-...) by content grep, verified anchors resolve cleanly (sourceIntegrity: complete, endBoundaryStatus: complete)
+45m
Reproducibility proven
Ran resolve-transcript-reference.mjs against the populated proof session — identical sha256 hash across two independent derivations, matching the manual spike run
+55m
Backward compat + privacy tests written and passing
14 new tests: malformed syntax, unsupported provider, inaccessible source, historical session unaffected, canonical block excludes all derived fields, no transcript content in public HTML
+60m
Non-blocking Harvest proposal helper added
propose-transcript-reference.mjs — optional, exit 0 on any outcome, never invents an anchor, always defaults session_coverage to unknown unless independently corroborated

What shipped

forgekit-os/sessions/_SCHEMA.md — documented transcript_reference as an optional top-level canonical field, with per-value session_coverage semantics tightened after Council review, an explicit list of what must never be persisted (derived-only), and the provider-boundary rule

forgekit-os/scripts/provider-adapters/claude-code.mjs — canonical, narrow provider adapter: locates a transcript by provider_session_id on this workstation, resolves a source range via the proven spike adapter, returns honest ok:false results (never throws) for not-found/unsupported/unresolvable cases

forgekit-os/scripts/provider-adapters/resolve-transcript-reference.mjs — validates reference shape (malformed syntax fails clearly), resolves every source through its registered adapter, derives structured metrics via the spike's buildArcPreview, and proves reproducibility by running resolution twice and comparing hashes

forgekit-os/scripts/provider-adapters/propose-transcript-reference.mjs — optional Harvest-time helper, not a gate, not wired into any validation path; proposes a transcript_reference with honestly-derived anchors or reports why it can't, always exits 0

forgekit-os/scripts/provider-adapters/tests/resolve-transcript-reference.test.mjs — 14 new tests covering malformed syntax, unsupported provider, inaccessible source, backward compatibility (a real historical session with no transcript_reference builds unchanged), valid-reference reproducibility, canonical-field exclusion of derived data, and privacy (no raw transcript content in the verification result or public HTML)

Populated forgekit-os/sessions/arc-slice-transcript-adapter-2026-07-18.json with a real, verified transcript_reference — the proof session, using its actual recovered Claude Code transcript anchors (session_coverage: complete, since both true ForgeKit session boundaries were independently confirmed against the real first/last entries)

.claude/rules/ignition.md §8 HARVEST — added one optional, non-blocking line describing how to run the proposal helper; explicitly not a gate, not required, does not affect any existing close behavior

ForgeKit sessions gain provenance, not omniscience.

Charge — Arc Foundation Promotion