2.3 KiB
Experiment 60B.45 — Closure metadata capture in canonical live harness
Date: 2026-08-14
Branch: feature/closure-metadata-capture-v0.39
Purpose
Expose activeUnknownNodeId and selectedQuestion explicitly in the canonical live harness output/capture layer so the exact 60B.44 live closure case can be rerun and classified from direct evidence rather than inference.
Why this was needed
60B.44 already confirmed live graph-level closure:
- customer factor resolved in place
- decision resolved in place
- both options preserved
- zero new unknowns
But the canonical harness did not explicitly emit/store:
- final
activeUnknownNodeId - final
selectedQuestion
That meant null closure had to be inferred from omission instead of being evidenced directly.
Exact harness change
Modified only the canonical harness layer:
scripts/reproduce-multi-turn-investigation.mjstests/reproduce-multi-turn-investigation.harness.test.js
For accepted updates, the harness now explicitly exposes:
finalActiveUnknownNodeIdfinalSelectedQuestion
Raw source of each field
finalActiveUnknownNodeId←updatedSituationGraph.activeUnknownNodeIdfinalSelectedQuestion←updateResult.json.selectedQuestion
If either value is actually null, the harness now prints/stores null explicitly rather than omitting the field.
Explicit null distinction
This was the critical apparatus gap:
nullmeans the production result explicitly cleared the field- omitted/unavailable means the harness never captured it
The updated harness now preserves that distinction.
Focused deterministic tests
Added focused coverage in tests/reproduce-multi-turn-investigation.harness.test.js for:
- explicit null
finalActiveUnknownNodeId - explicit null
finalSelectedQuestion - populated values surviving unchanged
- all existing harness capture/regression behaviour remaining green
Validation
Command run:
npx vitest run tests/reproduce-multi-turn-investigation.harness.test.js
Result:
- PASS —
67/67
What is now possible
The exact 60B.44 live closure case can now be rerun once and classified from direct harness evidence for:
finalActiveUnknownNodeId: nullfinalSelectedQuestion: null
without changing any production reasoning logic or production API shape.