Context
Leaf 2 of epic #14581 (Convergence-weighted Golden Path), graduated from Discussion #14548. This is the compute leaf: it computes the convergence weighting over the goal→sub-goal lattice, generator-firewalled, on the canonical ids established by Leaf 1 (#14633). Resolves OQ7 (independence budget) and carries the OQ8 firewall's standing input-manifest invariant.
The Problem
Given N imagined future-paths overlaid on the goal→sub-goal lattice, weight each node by how many viable futures it lies on — the psychohistory "narrow way through the choke-points every trajectory crosses". Two correctness hazards:
- Correlated-future inflation (OQ7). If the N futures are not independent, a node's convergence weight is inflated by redundancy, not genuine cross-future invariance. The compute must carry an independence budget: fields quantifying how independent the future set actually is, so downstream readers can discount correlated agreement.
- Self-fulfilling contamination (OQ8, standing invariant). Every compute run must prove it read neither peer future-sets nor prior convergence output — otherwise convergence feeds back into generation and becomes a prophecy. Each run emits an input-manifest attesting this isolation.
The annotation is additive and fail-open: it never blocks or mutates Golden Path routing; a compute failure degrades to "no convergence annotation", never to a routing change.
The Architectural Reality
- Owning folder:
ai/services/graph/ — sibling to GoldenPathSynthesizer.mjs (same compute layer). Consumes Leaf 1's (#14633) canonical-id convergence-snapshot schema; produces the snapshot instances Leaf 3 renders.
- Fail-open boundary: the compute is annotation-only over the lattice; it has no write path into
computedGoldenPathRouting.mjs's routing decisions.
The Fix
In ai/services/graph/:
- Compute the convergence weight per canonical lattice node from the N future-path overlays (additive annotation).
- Populate OQ7 independence-budget fields per snapshot (an inter-future independence measure), so correlated futures do not silently inflate convergence.
- Emit a generator-firewall input-manifest per run, attesting no read of peer future-sets or prior convergence output (OQ8).
- Guarantee fail-open: any compute error yields an absent/degraded annotation, never a routing mutation.
Acceptance Criteria
Out of Scope
- Schema definition (Leaf 1 / #14633) and human-facing rendering (Leaf 3).
- The fold-rung deliverable (gated).
- Any write path into GP routing (compute is annotation-only by construction).
Related
Epic #14581 · blocked-by Leaf 1 #14633 (needs the canonical-id schema) · sibling #14565 · Discussion #14548 · ai/services/graph/GoldenPathSynthesizer.mjs.
Decision Record impact
aligned-with ADR-0023; depends-on ADR-0024 (operates on the Leaf 1 node class); depends-on ADR-0028 (via the shared EVOLUTION_GOAL schema).
Origin Session ID: 9a6b25ba-1dd8-4269-8fbf-57a461fd0978
Retrieval Hint: "convergence-snapshot compute independence budget generator firewall OQ7 OQ8 #14581 Leaf 2"
Context
Leaf 2 of epic #14581 (Convergence-weighted Golden Path), graduated from Discussion #14548. This is the compute leaf: it computes the convergence weighting over the goal→sub-goal lattice, generator-firewalled, on the canonical ids established by Leaf 1 (#14633). Resolves OQ7 (independence budget) and carries the OQ8 firewall's standing input-manifest invariant.
The Problem
Given N imagined future-paths overlaid on the goal→sub-goal lattice, weight each node by how many viable futures it lies on — the psychohistory "narrow way through the choke-points every trajectory crosses". Two correctness hazards:
The annotation is additive and fail-open: it never blocks or mutates Golden Path routing; a compute failure degrades to "no convergence annotation", never to a routing change.
The Architectural Reality
ai/services/graph/— sibling toGoldenPathSynthesizer.mjs(same compute layer). Consumes Leaf 1's (#14633) canonical-id convergence-snapshot schema; produces the snapshot instances Leaf 3 renders.computedGoldenPathRouting.mjs's routing decisions.The Fix
In
ai/services/graph/:Acceptance Criteria
Out of Scope
Related
Epic #14581 · blocked-by Leaf 1 #14633 (needs the canonical-id schema) · sibling #14565 · Discussion #14548 ·
ai/services/graph/GoldenPathSynthesizer.mjs.Decision Record impact
aligned-with ADR-0023;depends-on ADR-0024(operates on the Leaf 1 node class);depends-on ADR-0028(via the sharedEVOLUTION_GOALschema).Origin Session ID: 9a6b25ba-1dd8-4269-8fbf-57a461fd0978 Retrieval Hint: "convergence-snapshot compute independence budget generator firewall OQ7 OQ8 #14581 Leaf 2"