fix(reasoning): preserve investigation ownership across selection and question rejection
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# 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 preservation
|
||||
- `tests/graph/utils.test.js` — 5 new/modified ownership guard tests
|
||||
- `lib/graph/apply-proposal.js` — question-rejection no-res eating invariant
|
||||
- `tests/graph/orchestrator.test.js` — 2 new product-launch regression tests
|
||||
|
||||
## What this checkpoint establishes
|
||||
1. Active investigation ownership is preserved across complete substantive ties when the active node remains eligible.
|
||||
2. Question-formulation rejection does not transfer ownership to a weaker candidate.
|
||||
3. Neither fix breaks QUESTION_CONTINUATION, 60B.84, or State B.
|
||||
4. 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)
|
||||
+58
-4401
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user