experiment: choose minimum decision representation
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user