Context
Leaf 2 of Epic #14565. First implementation leaf: evolution direction becomes computable by attributing work-graph motion to direction keys. Blocked-by the Decision-Record leaf (schema authority).
The Problem
Motion (merged PRs, commits, sessions, tickets, discussions) is directionless in the graph today. The hybrid representation from #14453 OQ1: declared anchors (EVOLUTION_GOAL nodes generalizing #14442's BUSINESS_GOAL; small-N capped; the release train seeds free) × versioned emergent clusters (concept-region + embeddings over the 20,526-concept spine) — and the mapping is the signal, deriving three states per unit of motion: aligned / unattributed (innovation-or-drift, human judges) / starved (INTENT_STARVED — declared intent nothing serves). June-2026 ("design and UX got fully lost", operator post-mortem) is the canonical INTENT_STARVED instance this pass must be able to represent.
The Architectural Reality
- Dream pipeline services own the pass (
ai/services/ — sibling precedent per structure map; exact placement via structural-pre-flight at implementation).
- Every concept reference routes through
canonicalizeConceptId (ai/services/graph/, merged — #14453 OQ1 RESOLVED_TO_AC); the 2,705-alias-cluster hazard is why.
- Attribution keys are
{directionKey, mappingVersion} pairs, append-only (re-clustering = new version writing NEW attributions, never rewriting).
- Durable facts land in graph/issue/summary substrate — never board columns (GPT STEP_BACK V-B-A anchor).
- New node class ⇒ #14426 post-sync integrity canary required.
The Fix
(a) EVOLUTION_GOAL node class per the DR; release-train anchors seeded; operator-owned intent weights (Tier-4 set, never computed). (b) The attribution pass: motion events → deterministic direction keys, emitting the three derived states; UNATTRIBUTED as first-class pool (below coverage floor: render the pool, never split). (c) Conservation identity Σ_D v_D + v_UNATTRIBUTED = v_total checked at L1 build (defect, not noise, on failure). (d) Anchor-staleness discipline: #14447 steward-cadence analog on goals (stale declarations corrupt ranking worse than none — Row A falsifier).
Acceptance Criteria
Out of Scope
Velocity composition (leaf 3); any render; OQ7 lattice edges; promise/ROI weighting.
Related
Parent: Epic #14565 (blocked-by its DR leaf). #14453 (source) · #14442 · #14422/#14472 (concept spine) · #14447 · #14426 · #14430.
Origin Session ID: a5af7cf6-45a3-42db-8a30-f04f4241a55c
Retrieval Hint: "direction attribution EVOLUTION_GOAL mapping aligned unattributed INTENT_STARVED conservation"
Context
Leaf 2 of Epic #14565. First implementation leaf: evolution direction becomes computable by attributing work-graph motion to direction keys. Blocked-by the Decision-Record leaf (schema authority).
The Problem
Motion (merged PRs, commits, sessions, tickets, discussions) is directionless in the graph today. The hybrid representation from #14453 OQ1: declared anchors (
EVOLUTION_GOALnodes generalizing #14442'sBUSINESS_GOAL; small-N capped; the release train seeds free) × versioned emergent clusters (concept-region + embeddings over the 20,526-concept spine) — and the mapping is the signal, deriving three states per unit of motion: aligned / unattributed (innovation-or-drift, human judges) / starved (INTENT_STARVED— declared intent nothing serves). June-2026 ("design and UX got fully lost", operator post-mortem) is the canonical INTENT_STARVED instance this pass must be able to represent.The Architectural Reality
ai/services/— sibling precedent per structure map; exact placement viastructural-pre-flightat implementation).canonicalizeConceptId(ai/services/graph/, merged — #14453 OQ1RESOLVED_TO_AC); the 2,705-alias-cluster hazard is why.{directionKey, mappingVersion}pairs, append-only (re-clustering = new version writing NEW attributions, never rewriting).The Fix
(a)
EVOLUTION_GOALnode class per the DR; release-train anchors seeded; operator-owned intent weights (Tier-4 set, never computed). (b) The attribution pass: motion events → deterministic direction keys, emitting the three derived states; UNATTRIBUTED as first-class pool (below coverage floor: render the pool, never split). (c) Conservation identityΣ_D v_D + v_UNATTRIBUTED = v_totalchecked at L1 build (defect, not noise, on failure). (d) Anchor-staleness discipline: #14447 steward-cadence analog on goals (stale declarations corrupt ranking worse than none — Row A falsifier).Acceptance Criteria
EVOLUTION_GOALminted through canonical ids only; regression fixture includes a known alias cluster.{directionKey, mappingVersion}append-only pairs; a v2 remap never rewrites v1 history.INTENT_STARVEDderivable per declared anchor (the June-2026 shape representable).falsifyingQuery(#14430).Out of Scope
Velocity composition (leaf 3); any render; OQ7 lattice edges; promise/ROI weighting.
Related
Parent: Epic #14565 (blocked-by its DR leaf). #14453 (source) · #14442 · #14422/#14472 (concept spine) · #14447 · #14426 · #14430.
Origin Session ID: a5af7cf6-45a3-42db-8a30-f04f4241a55c Retrieval Hint: "direction attribution EVOLUTION_GOAL mapping aligned unattributed INTENT_STARVED conservation"