LearnNewsExamplesServices
Frontmatter
id14568
titlePer-direction {v,s,r} composition on the temporal pyramid
stateClosed
labels
enhancementaiarchitecture
assigneesneo-fable, neo-fable-clio
createdAt3:13 AM
updatedAt6:02 PM
githubUrlhttps://github.com/neomjs/neo/issues/14568
authorneo-fable
commentsCount4
parentIssue14565
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 14434 Temporal-pyramid L1/L2 durable aggregation lane + velocity fields, [x] 14567 Direction-attribution pass: EVOLUTION_GOAL anchors + motion mapping
blocking[x] 14569 Hindcast validation harness: June fixture + May divergence holdout
closedAt6:02 PM

Per-direction {v,s,r} composition on the temporal pyramid

Closed Backlog/active-chunk-2 enhancementaiarchitecture
neo-fable
neo-fable commented on 3:13 AM

Context

Leaf 3 of Epic #14565 — the velocity substrate, owner-disposed on-thread by the temporal-pyramid owner. First-claim: @neo-fable-clio (her ADR-0028/#14433–#14435 substrate; OQ2 disposal DC…17512045 + DC…17512853; DR-leaf pairing + Lane-3 primary confirmed A2A f2c62c33). Blocked-by the attribution leaf.

The Problem

ADR-0028's SUMMARY_* fields are time-sufficient but attribution-blind. Per-direction velocity requires composition — and the composition shape was genuinely divergent until the owner disposed it: (i) attribute-then-aggregate, mappingVersion-pinned ((ii) aggregate-then-attribute REJECTED as the #14430-unfalsifiable class: retroactive membership drift silently rewrites history).

The Architectural Reality

  • Direction rides the EXISTING deterministic aggregation lane as a directionBreakdown map — NO sibling pipeline (ADR-0028 §2.3 single-writer stands; a second lane would double-schedule under §2.1 backpressure).
  • {v_D, s_D, r_D} three-component substrate: velocity / stall-mass / regression. Stalls never subtract into velocity — "fast-but-bleeding" must stay visible (row E consumer-rejection, #13751 needs separable s_D).
  • s_D keys #14447 stall classes through the same breakdown; r_D = cross-window attribution flow.
  • Field-fidelity ladder: mergedPrs/adrsLanded/sandboxesGraduated artifact-linked (strong, v1); devCommits via PR membership; session fields may stay null-direction in v1 (the nullable slot represents this honestly).

The Fix

Per the owner disposition, verbatim: directionBreakdown {"<directionKey>@<mappingVersion>": share} on L1/L2 records (one record per window; side-table layout fallback at the cardinality probe); {v,s,r} components aggregate FROM breakdowns upward, each with declared filter sets in windowSemantics, each falsifying query carrying the SAME filters + version pin (one number, one filter, both sides); cross-window comparison defined only within identical filter sets (type error otherwise).

Scope split (PR review, steward-executed): this ticket = the COMPOSITION CORE; the lane landing = #14811

The pure composition + probe merged as their own leaf; the L1/L2 single-writer emission and the F3 cost guard are #14811 (filed with the seam specified — the writer consumes the merged modules, never re-derives). Rationale: the composition math is deterministic and unit-provable NOW; the lane emission depends on the pyramid writer that the freshly-merged collection substrate enables.

Acceptance Criteria (this leaf — the composition core)

  • Conservation identity re-checked per window per event class at the composition boundary (machine-checked — F1).
  • {v_D, s_D, r_D} independently queryable rows; s_D separable (the #13751 consumer AC) — stall-mass never subtracts into velocity.
  • Filter-set + mappingVersion pins on every emitted row AND its falsifying query (same filters, same version, both sides).
  • Cardinality probe implemented (>20% of record bytes → side-table; conservative on unmeasurable).
  • Cross-window r_D defined only under identical filter sets and a single mapping version; refusals otherwise.

Deferred to #14811 (the writer leaf)

  • directionBreakdown on L1/L2 via the single deterministic lane; no second writer (grep-provable).
  • F3 cost guard inside the §2.1 maintenance-lane backpressure budget.

Out of Scope

Hindcast scoring (leaf 4); render (leaf 5); ETA propagation (OQ7 ladder).

Related

Parent: Epic #14565 (blocked-by the attribution leaf). #14433/#14434/#14435 · ADR-0028 · #14447 · #13751 · #14430.

Origin Session ID: a5af7cf6-45a3-42db-8a30-f04f4241a55c Retrieval Hint: "directionBreakdown attribute-then-aggregate v s r stall-mass filter-set mappingVersion temporal pyramid"

tobiu closed this issue on 6:02 PM
tobiu referenced in commit 81e956f - "feat(graph): velocity composition + hindcast harness — the June gate passes, the May holdout locked (#14568, #14569) (#14803) on 6:02 PM