3.0 KiB
Checkpoint 60B.93 — Investigation Ownership Preservation
Starting state
- HEAD:
d908f37 - Branch:
feature/decision-closure-ownership-v0.47
Two ownership invariants implemented
1. Substantive-tie active ownership (lib/graph/utils.js)
When all leading structural candidates are tied after score, structural, and semantic checks, the currently active investigation target (activeUnknownNodeId) is preserved as the selection winner — provided it remains eligible (unresolved, not contradicted) and among the top ties. Stable label/display-order ordering is only used as a final fallback when there is no active candidate or the active node does not remain tied.
2. Question-rejection active ownership (lib/graph/apply-proposal.js)
When a selected candidate's graph-backed question formulation is rejected as too complex (decomposition-required), the system does NOT reseat investigation ownership to another candidate. The original selection target retains its identity with selectedQuestion = null and an explicit rejection reason.
Six exact verification commands and results
| # | Command | Result |
|---|---|---|
| 1 | npx vitest run tests/graph/utils.test.js |
PASS (83/83) |
| 2 | npx vitest run tests/graph/orchestrator.test.js -t "retains ownership when the strongest target's formulated question is rejected" |
PASS |
| 3 | npx vitest run tests/graph/orchestrator.test.js -t "replays the captured live product-launch start graph through deterministic graph-backed question selection" |
PASS |
| 4 | npx vitest run tests/graph/apply-proposal.test.js -t "QUESTION_CONTINUATION" |
PASS |
| 5 | npx vitest run tests/graph/question-formulator.test.js -t "60B.84" (located in question-formulator, not apply-proposal) |
PASS |
| 6 | npx vitest run tests/graph/apply-proposal.test.js -t "State B" |
PASS |
Classification: A — CHECKPOINT GREEN
Captured fixture path
tests/fixtures/live-product-launch-start-response.json
Reasoning files included
lib/graph/utils.js—classifyCandidateOrdering()active-node tie preservationtests/graph/utils.test.js— 5 new/modified ownership guard testslib/graph/apply-proposal.js— question-rejection no-res eating invarianttests/graph/orchestrator.test.js— 2 new product-launch regression tests
What this checkpoint establishes
- Active investigation ownership is preserved across complete substantive ties when the active node remains eligible.
- Question-formulation rejection does not transfer ownership to a weaker candidate.
- Neither fix breaks QUESTION_CONTINUATION, 60B.84, or State B.
- The captured live product-launch case deterministically preserves ntpt9ki as the active target through question rejection.
What remains unproved
- Live behavioural validation of the fixes in a full product-launch interaction
- Whether same-target reformulation would produce better user outcomes than no-question
- Full-suite state beyond these six guards
- The correctness of the underlying question-complexity heuristic (separate concern)