experiment: test initial graph edge coherence (Exp 50)

Passive diagnostic. Coherent and scattered inputs produce identical
edge topology — every unknown connects to the summary node (kind=state)
via depends_on regardless of semantics. Shared edges are wiring, not
coherence evidence.
This commit is contained in:
2026-08-07 06:51:13 +01:00
parent 6f00a5e567
commit 85fd90af1d
3 changed files with 743 additions and 1 deletions
+88
View File
@@ -3274,3 +3274,91 @@ The production flow creates at most one emergent reasoning unknown per update, v
### Pending Rob's review. No production code or graph schema modified.
**Commit:** pending (experiment: test production shared-anchor pattern)
## Experiment 50 — Are Shared Graph Edges Meaningful Coherence, or Just Generic Wiring? (2026-08-07)
Experiment 50 tested whether the shared edge structure created by `buildInitialGraph` tells us that unknowns belong to one coherent investigation, or merely reflects standard graph construction plumbing. This was a passive diagnostic — no production code changed.
### Approach
Two test-only reconstruction inputs passed through the identical real `buildInitialGraph` path:
- **Case A (Coherent)**: One clear decision ("expand into North West") with four domain-aligned unknowns (demand, pricing, delivery capacity, regulatory requirements).
- **Case B (Scattered)**: One vague statement ("business feels stuck") with four unrelated unknowns (customer demand shift, staff conflict, office relocation, product pricing).
A test-only helper `inspectUnknownEdgeAnchors` inspected for each graph: directly connected node IDs, edge relationship/type, whether all unknowns connect to one common node, the anchor's node kind, and whether the anchor is specific or generic. Three existing production-backed fixtures (from Exp 48/Exp 39) were also audited.
### Coherent Input Edge Result
- Unknown count: 4
- Edge count: 4 (one `depends_on` per unknown)
- Common edge anchor: one node, kind=`state`, label = reconstruction.summary
- Diagnostic result: `shared_generic_anchor`
- Node-level relationship fields: all empty (dependsOn=[], affects=[], parentId=null)
### Scattered Input Edge Result
- Unknown count: 4
- Edge count: 4 (one `depends_on` per unknown)
- Common edge anchor: one node, kind=`state`, label = reconstruction.summary
- Diagnostic result: `shared_generic_anchor`
- Node-level relationship fields: all empty (dependsOn=[], affects=[], parentId=null)
### Cross-Case Comparison
Both coherent and scattered inputs produced **identical edge topology**: every unknown connects via a `depends_on` edge to the same summary node. The anchor is always kind=`state`. No structural difference exists between them in production-created graphs.
### Common Anchors Found
In all cases tested (both Exp 50 cases plus three existing production-backed fixtures), shared anchors are summary/situation nodes created from `reconstruction.summary`. Kind is always `state`. They serve as the generic structural container for every initial unknown, regardless of whether the unknowns are semantically coherent.
### Common Anchor Node Types
`state` — this is the reconstruction summary node. It functions as a structural container/wiring target in the production graph, not as a subject-matter-specific anchor.
### Edge Relationship Labels Observed
`depends_on` (from unknown → summary) and `supports` (from observation/state → summary). Neither label carries semantic coherence information.
### Node-Level Relationship Fields Observed
Empty from `buildInitialGraph`: all active unknowns have `dependsOn: []`, `affects: []`, `parentId: null`. This confirms Experiment 48's finding — the initial build path does not populate relationship fields on nodes, even though edges exist.
### Did Coherent and Scattered Cases Differ Structurally
No. Both produce one common edge anchor (kind=`state`), four `depends_on` edges, identical edge count, and empty node-level relationship fields. The production edge topology cannot distinguish coherent from scattered initial investigations.
### Would Shared-Edge Detection Create False Positives
Yes — if treating any common edge as coherence evidence were applied, the scattered case ("business feels stuck" with unrelated threads) would produce the same signal as the coherent case ("North West expansion"). This is a false positive for coherence.
### Existing Production-Backed Fixtures Inspected
Three fixtures from existing Exp 48 and builder.test.js tests containing multiple unknowns:
1. builder.test.js standard two-unknown scenario (revenue/complaints)
2. Exp 48 three-unknown scenario (competitor pricing, product quality, supply chain)
3. Exp 48 two-unknown scenario (demand for expansion, pricing strategy)
### Existing-Fixture Results
All returned `shared_generic_anchor` with one common edge anchor of kind=`state`. Node-level fields were empty in all cases. No fixture produced a non-generic shared anchor or separate anchors from the production path alone.
### Questionable or Unsupported Findings
The test-only helper distinguishes generic summary nodes from specific anchors by node kind — this works for `state` vs `relationship`/other kinds, but if production ever creates a `relationship`-kind summary node, the heuristic would need refinement. No such case exists in current production.
### Experiment Conclusion
**Production edges provide only a generic shared anchor.** Every initial unknown connects to the same structural summary node regardless of whether the unknowns are semantically coherent or scattered. Shared edge connectivity is wiring, not evidence of coherence. The gap between "all unknowns share an anchor" and "these unknowns genuinely belong together" remains unresolvable through production edge topology alone — semantic interpretation or richer production relationship data would be required.
### Test Results Summary
| Test File | Tests | Passed |
|---|---|---|
| `initial-edge-coherence.test.js` (Exp 50) | 26 | 26 |
| `shared-anchor-production-path.test.js` (Exp 49) | 36 | 36 |
| `unknown-relationship-population.test.js` (Exp 48) | 16 | 16 |
| `builder.test.js` (focused regression) | 32 | 32 |
### Pending Rob's review. No production code or graph schema modified.
**Commit:** pending (experiment: test initial graph edge coherence)