experiment: choose minimum decision representation

This commit is contained in:
2026-08-12 18:34:18 +01:00
parent e6cf973d2a
commit 6dd9afbf6b
2 changed files with 741 additions and 0 deletions
+82
View File
@@ -2134,3 +2134,85 @@ Vitest run: NO
Ollama calls: 0
Dev server disturbed: NO
Read-only diagnosis: YES
### Experiment 60A.2 — Choosing the Minimum Decision Representation
**Branch:** `feature/question-formulation-v0.24`
**Date:** 2026-08-12
**Status:** Complete
**Following:** 60A.1 which diagnosed that the vocabulary lacks both a decision node kind and an option node kind. This evaluates three candidate models against eight criteria to choose the smallest semantically honest representation.
---
## Objective
Choose between three candidates for representing decisions with alternatives:
```
Decision: Relocate or stay put?
Option A (Relocate): save £2M, lose 2 engineers, delay 2 months
Option B (Stay put): retain engineers, avoid disruption, continue paying £2M/year
```
Three models evaluated:
- **A** — DECISION + OPTION (new decision node kind + new option node kind)
- **B** — UNKNOWN + OPTION (reuse existing unknown as decision context + new option node kind)
- **C** — OPTION PAIR ONLY (option nodes linked by alternative_to, no decision context node)
Not implemented. No code changed. Read-only design evaluation.
---
## Results
### Candidate A (DECISION + OPTION)
- Semantic honesty: HIGH | Recoverability: FULL | Lifecycle: NATIVE | Question: CLEAN | Consequences: YES | Baseline: CLEAN
- New primitives: 2 node kinds + 1 edge type + 1 optional field = **4**
- Semantic overload: NONE
- Verdict: Satisfies all criteria but adds the most primitives
### Candidate B (UNKNOWN + OPTION) ✅ WINNER
- Semantic honesty: MEDIUM | Recoverability: FULL | Lifecycle: NATIVE | Question: CLEAN | Consequences: YES | Baseline: WORKABLE
- New primitives: 1 node kind + 1 edge type + 1 optional field = **3**
- Semantic overload: LOW (unknown carries both "uncertainty" and "decision context" — natural overlap, not contradictory)
- Verdict: Smallest model satisfying all five decision-rule conditions
### Candidate C (OPTION PAIR ONLY)
- Semantic honesty: LOW | Recoverability: POOR | Lifecycle: AWKWARD | Question: WORKABLE | Consequences: YES | Baseline: WORKABLE
- New primitives: 1 node kind + 1 edge type = **2**
- Semantic overload: LOW-MEDIUM
- Verdict: Fails criteria 1 (decision context not recoverable) and 3 (no open/resolved lifecycle support). Minimalism too expensive semantically.
---
## Architectural Choice: B — UNKNOWN + OPTION
### What changes (exact boundary):
```javascript
// schema.js additions:
option: "option" // SituationKind enum value
contained_in: "contained_in" // SituationRelationship enum value
is_baseline: z.boolean().optional() // optional on option nodes (not required for v1)
```
### What does NOT change:
- `unknown` node kind retains its existing semantics; it now also serves as decision context via the new `option` children pattern
- All existing statuses, edge types, graph topology rules unchanged
- Question compatibility uses existing `selectedQuestion` mechanism without extension
- No migration of existing nodes required
### Decision lifecycle: NATIVE — open/resolved maps to unknown status transitions
### Additional questions answered:
1. Is `alternative_to` needed between options? **NO** — shared parent membership implies alternatives.
2. Is `is_baseline` flag required? **NOT NEEDED YET** — label/consequence patterns carry sufficient signal.
---
Production code changed: NO
Prompt changed during experiment: NO
Validator changed during experiment: NO
Vitest run: NO
Ollama calls: 0
Dev server disturbed: NO
Read-only design evaluation: YES