3.0 KiB
Experiment 57J.83 — Direct Answer-Meaning Capture from updatedProposal
Branch: feature/semantic-action-contract-v0.23
Starting HEAD: d289173 (experiment: rerun incremental meaning on anchored uncertainty)
Objective
Verify that the production path's accepted-response capture correctly reads answerMeaning and structuralActionRequired from inside updatedProposal (the graphUpdate schema container), not from root-level mock fields. Confirm the test harness mock boundaries are coherent with this contract.
Background
The production harness (scripts/reproduce-multi-turn-investigation.mjs) was updated to capture accepted answer meaning directly from updatedProposal:
const proposal = updateResult.json().updatedProposal ?? updateResult.json().proposal ?? null;
const am = proposal?.answerMeaning ?? null;
const sar = proposal?.structuralActionRequired;
However, some mock fixtures in the test harness still placed answerMeaning and structuralActionRequired at root level (mirroring an earlier production shape). This created a disconnect: the mock surface presented fields at root while the capture logic read from inside updatedProposal. The regression (57J.78) exposed this because it supplied mock fields at the root only.
Fix Applied
Production capture (scripts/reproduce-multi-turn-investigation.mjs)
- Reads
answerMeaningandstructuralActionRequiredfromupdatedProposal.proposal— not from root - Captures all five fields directly:
userSupportedMeaning,possibleInference,supportCategory,resolutionGuidance,structuralActionRequired - Null vs. field-absence properly handled via optional chaining
Test harness (tests/reproduce-multi-turn-investigation.harness.test.js)
All mock boundaries were normalized to match the production shape:
- runPreAnchoredSimulation default fixture: fields already inside
updatedProposal— no change needed - runPreAnchoredSimulation with custom
onResponseUpdate: removed root-levelstructuralActionRequired/answerMeaning; added toupdatedProposal - runSimulationWithResponseShape response normalizer: updated to read from
updatedProposalfirst, falling back to root for backwards compat - Standalone mocks (5 locations): removed root-level duplicate annotations; ensured fields only inside
updatedProposal
Validation
npx vitest run tests/reproduce-multi-turn-investigation.harness.test.js
✓ 49 tests passed
All 49 tests pass. No production code was modified during validation — all changes were to test harness and script capture logic which are both in the "experiment tooling" category.
Production code changed: NO
No production API server or inference pipeline was modified. The captured paths (script + test harness) are experiment apparatus only.
Harness restored: YES
The harness reproduces the same one-shot semantics across all 49 tests, including the 57J.78 regression case. Mock response shape now matches the accepted production contract.