experiment: validate native option structure live

This commit is contained in:
2026-08-12 19:49:02 +01:00
parent 57c9f2205e
commit 3db6f40fdc
2 changed files with 331 additions and 0 deletions
+63
View File
@@ -2216,3 +2216,66 @@ Vitest run: NO
Ollama calls: 0
Dev server disturbed: NO
Read-only design evaluation: YES
### Experiment 60A.4 — Native Two-Option Structure Live Validation
**Branch:** `feature/decision-options-v0.25`
**Date:** 2026-08-12
**Status:** Complete
**Following:** 60A.3 which committed `option` node kind and `contained_in` edge to production. This tests whether the live model actually uses both new vocabulary items on the exact two-option case that previously collapsed.
**Fixed starting graph:** `tests/fixtures/pre-anchored-update-savings-realism.json`
**Fixed answer (verbatim 59B.4):** "There are really two options now. Option 1 is relocate: we save £2 million per year, but two senior engineers leave and delivery could be delayed by up to two months. Option 2 is stay where we are: we keep both engineers and avoid the delivery disruption, but we continue paying the extra £2 million every year. I am deciding which of those two options leaves us better off overall."
**Execution:** qwen-claude:latest at http://192.168.1.111:11434. startCalls=0, updateCalls=1, totalCalls=1.
**Result:** HTTP 200, stage = update_applied, no validation errors.
```
updatedNodes: []
resolvedUnknownNodeIds: []
addedNodes: [
{ id: n_relocation_decision, label: "Which option leaves us better off overall?", kind: unknown, status: unknown },
{ id: n_option_relocate, label: "Relocate to Manchester", kind: option, status: known },
{ id: n_option_stay, label: "Stay in London (Status Quo)", kind: option, status: known }
]
addedEdges: [
{ fromNodeId: n_option_relocate, toNodeId: n_relocation_decision, relationship: contained_in },
{ fromNodeId: n_option_stay, toNodeId: n_relocation_decision, relationship: contained_in }
]
selectedQuestion: "What evidence would clarify which option leaves us better off overall?"
```
### Assessment
1. **Decision context:** EXPLICIT SHARED DECISION UNKNOWN — `n_relocation_decision` (kind=unknown, status=unknown) is a single shared unresolved decision node.
2. **Relocate branch:** OPTION NODE — `n_option_relocate`, kind=`option`, all three consequences preserved in description.
3. **Stay-put branch:** OPTION NODE — `n_option_stay`, kind=`option`, all three consequences preserved in description.
4. **Membership:** BOTH CORRECT — both options link to the same `n_relocation_decision` via `contained_in`.
5. **Consequence attribution:** BOTH BRANCHES CLEAR — each consequence set lives within its distinct option node; branch ownership is structurally unambiguous.
6. **Selected question:** GOOD — continues the comparison, targets `n_relocation_decision`, no introduced assumptions.
7. **Savings-realism:** REMAINS OPEN (correct — answer did not address it).
### What the engine understood correctly:
1. Dual-option decomposition into two `option` nodes
2. Shared decision context via single unresolved unknown
3. Correct use of `contained_in` for option → decision membership
4. Consequence attribution per branch without collapse or cross-contamination
5. Decision-question alignment with user's stated intent
### What this establishes:
The live model CAN create native two-option graph structure when the user explicitly presents two alternatives. Both options survive as first-class `option` nodes with structural membership to a shared decision context, and downstream graph-only reasoning can recover both branches and their distinct consequences.
### Classification: A — NATIVE TWO-OPTION STRUCTURE CONFIRMED
Production code changed: NO
Prompt changed during experiment: NO
Validator changed during experiment: NO
Harness changed during experiment: NO
Vitest run: NO
Ollama calls beyond harness count: 0
Dev server disturbed: NO