Build Log
Transcript Backfill — From 1 Real Session to 28
July 18, 2026
Ran the Crucible on the backfill approach, corrected two Council-flagged risks structurally (a second disambiguation signal beyond date, and a separate always-correctable mapping file instead of mutating sealed session JSONs), then built the matcher and found three real bugs in its own dry run before applying anything.
Timeline
What shipped
forgekit-os/scripts/arc/match-transcripts.mjs — correlates session JSONs to real transcripts via same-day date (candidate filter) + content-keyword overlap + duration plausibility (mandatory disambiguation signals), with structural collision detection and _TEMPLATE.json exclusion
classifyFromScoredCandidates — pure decision function proving same-day alone can never produce high_confidence, and multiple equally-strong candidates are never silently disambiguated
resolveCollisions — downgrades BOTH sessions to ambiguous when two independently claim the same transcript uuid, never picks a winner
verifyMapping / --verify CLI flag — checks every mapped transcript's real sourceIntegrity via the proven loadClaudeCodeTranscript parser and persists the result back into the mapping file
forgekit-os/arc-interpretations/transcript-match-map.json — the separate, always-correctable mapping file (never the sealed session JSONs) recording 28 real matches with content scores, matched keywords, and verified source integrity
npm run arc:match — CLI command (dry run by default, --apply to write, --verify to re-check integrity)
20 new tests covering the pure matching/collision/apply/verify logic — all passing (108/108 total across npm run test:os)
“agreed on both counts. we can move”