docs: record closure reconciliation consolidation

This commit is contained in:
2026-08-14 11:02:00 +01:00
parent 998ff2fcb7
commit a00112e157
2 changed files with 99 additions and 0 deletions
+8
View File
@@ -250,6 +250,14 @@ Experiment 54N tested whether an interpretation disagreement can be judged for m
- Focused validation passed via `npx vitest run tests/reproduce-multi-turn-investigation.harness.test.js` (`67/67`).
- The exact 60B.44 live closure case can now be rerun once with direct evidence for active-target clearing and final-question clearing.
### 60B.55 closure-normalization consolidation
- Consolidated the proven closure-normalization fix: reverse resolution reconciliation, same-turn stale `selectedQuestion` clearing before strict validation, prompt clarification that `selectedQuestion` must remain unresolved after applying the proposal, and repaired deterministic 60B.47 regression structure.
- Focused verification passed via `npx vitest run tests/graph/apply-proposal.test.js tests/graph/prompt-builder.test.js -t "60B.49|60B.52|60B.54|60B.43|60B.11|replaces downstream pricing|selectedQuestion|resolution"` (`38 passed | 151 skipped`).
- Verified exact negative closure state deterministically: customer resolved, decision resolved, both resolved IDs present, `activeUnknownNodeId = null`, `selectedQuestion = null`.
- Existing forward reconciliation, fallback-to-real-unresolved target, 60B.43, 60B.11, pricing prerequisite-first, and prompt-builder selectedQuestion rule all remained green.
- Repository is now ready for one bounded live rerun of the exact 60B.47 negative-outcome closure.
### When This Knowledge-Management Phase Is Complete
Provisional criteria for review (all confirmed met by Experiment 38 cold-start test):
+91
View File
@@ -0,0 +1,91 @@
# Experiment 60B.55 — Closure-normalization consolidation
**Date:** 2026-08-14
**Branch:** `feature/closure-selection-reconciliation-v0.41`
## Purpose
Consolidate and commit the already-proven closure-normalization fix after focused regression verification.
## Implementation state consolidated
The committed fix consists of four bounded changes only:
1. reverse resolution reconciliation
- `updatedNodes.newStatus = "resolved"`
- `-> resolvedUnknownNodeIds` automatically includes that existing unknown node
2. stale same-turn selectedQuestion clearing
- if `selectedQuestion.nodeId` is resolved by the same proposal
- `-> selectedQuestion = null` before strict validation
3. prompt clarification
- `selectedQuestion` must remain unresolved after applying the proposal
- if all consequential unknowns resolve, `selectedQuestion` must be null
4. repaired deterministic 60B.47 negative-closure regression structure
## Focused verification result
Command run:
```bash
npx vitest run \
tests/graph/apply-proposal.test.js \
tests/graph/prompt-builder.test.js \
-t "60B.49|60B.52|60B.54|60B.43|60B.11|replaces downstream pricing|selectedQuestion|resolution"
```
Result:
- PASS — `38 passed | 151 skipped`
## Verified behaviours
### Exact negative closure regression
The exact 60B.47-shaped deterministic regression now passes through `applyValidatedProposal(...)` with:
- customer factor resolved
- decision resolved
- `resolvedUnknownNodeIds` / resulting `resolvedNodeIds` containing both IDs
- `activeUnknownNodeId = null`
- `selectedQuestion = null`
### Reconciliation invariants
Verified preserved:
- forward reconciliation
- already-consistent proposal unchanged
- no duplicate resolved IDs
- non-unknown nodes are not auto-added
- non-resolved statuses are not auto-added
### Fallback preservation
Verified preserved:
- stale same-turn resolved selectedQuestion clears cleanly
- another genuine unresolved candidate still becomes the fallback target
### Existing behavioural regressions preserved
Verified preserved:
- 60B.43 terminal post-mutation closure regression
- 60B.11 preferred-target behaviour
- pricing prerequisite-first regression
- prompt-builder selectedQuestion rule regression
## What is now guaranteed
The deterministic engine now normalizes same-turn closure structure coherently before strict validation:
- resolved existing unknowns are represented in both status and `resolvedUnknownNodeIds`
- a same-turn resolved `selectedQuestion` cannot survive as stale structure
- strict validator semantics remain intact
## What remains unproven
The exact live negative-outcome closure still needs one bounded rerun after this deterministic fix to confirm the same end state through the live model-driven path.