Context
Leaf A of Epic #12679's implementation decomposition (map: https://github.com/neomjs/neo/issues/12679#issuecomment-4862079789, posted 2026-07-02 after ADR 0028 reached twice-approved state on PR #14428). Filed pre-Accepted for planning visibility per ADR 0005 §2.3 ("Epics / tickets MAY be filed pre-ADR-merge"); the merge gate below is unconditional regardless.
⛔ Merge gate: this leaf's PR is merge-blocked until ADR 0028 is Accepted (PR #14428 merged), per the epic's #11376 §6 contract and ADR 0028 §5. Claim and design freely; do not hand off as merge-ready before the flip.
The Problem
The temporal pyramid's durable tiers (ADR 0028 §2.1) and dynamic tiers (§2.2) both need the storage substrate that does not exist yet: the temporal-summary Chroma collection and the per-level SQLite graph-label schema. Leaves B (L1/L2 aggregation lane) and C (L3–L5 synthesis) write into and read from this substrate — it sequences first.
The Architectural Reality
Bound by ADR 0028 (authority; re-verify Accepted at claim):
- §2.3: one
temporal-summary collection carrying {level, partition, windowStart, windowEnd, version} metadata — inside the unified store (ADR 0017 within-posture: collections + metadata are the separation mechanism; no new persist dir, no second daemon). Per-level SQLite graph labels (SUMMARY_DAILY, SUMMARY_WEEKLY, …) reserved for the deterministic aggregation lane — never written via SemanticGraphExtractor prompt widening (anti-anchor).
- §2.3 maintenance obligation: the new collection joins the Memory-Core-realm maintenance groups (defrag targets + backup/restore scope) in the same change — it sits on the MC side of ADR 0017's KB-as-cache / MC-as-store recovery model.
- §2.7 / ADR 0024 obligation (pre-declared): introducing
SUMMARY_* node types must update ADR 0024 §2.2's node-type table and cite ADR 0024 in the same PR (0024's own re-review trigger).
- Module placement for any new
.mjs is settled via structural-pre-flight at claim time (likely ai/services/ Memory Core territory; the contract here is deliberately directory-agnostic — design-first, placement validated at implementation).
The Fix
One PR: create the collection (creation path + metadata contract), define the SUMMARY_* label schema, register the collection in the MC maintenance groups, update ADR 0024 §2.2. No aggregation logic (Leaf B), no synthesis (Leaf C), no data written beyond schema/bootstrap.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
temporal-summary collection (new, in unified) |
ADR 0028 §2.3 + ADR 0017 |
Created with the five-field metadata contract; MC-realm maintenance registration |
Substrate absent (status quo; B/C blocked) |
ADR 0028 §2.3 |
Collection present + metadata shape asserted in tests |
SUMMARY_* SQLite labels |
ADR 0028 §2.3 |
Schema defined, reserved to the deterministic lane |
— |
ADR 0024 §2.2 (updated) |
Label constants + 0024 table updated in same PR |
| ADR 0024 §2.2 node-type table |
ADR 0024 §8 re-review trigger |
Amended with the SUMMARY_* types + source-of-truth pin |
— |
The amended § |
Reviewer verifies per 0024 §8 |
Decision Record impact
depends-on ADR 0028 (merge-blocked until Accepted) · amends ADR 0024 (§2.2 table, per its own trigger) · aligned-with ADR 0017.
Acceptance Criteria
Out of Scope
- The L1/L2 aggregation lane and velocity fields (Leaf B) and the L3–L5 dynamic synthesis (Leaf C) — sequenced after this leaf per the decomposition map.
- Any consumer surface (dashboards / cockpit / MCP query tools beyond what exists).
- Retention/versioning policy (Leaf B owns it within the
version field).
Avoided Traps
- Collection-per-level — rejected (ADR 0028 §3; one collection +
level metadata).
- New persist dir / daemon — rejected (ADR 0017 posture; within-store collection only).
- Widening the extractor prompt for labels — rejected (ADR 0028 anti-anchor; deterministic lane owns writes).
- Bundling aggregation logic "while we're here" — rejected (one-leaf-per-capability; B and C have their own contracts).
Related
Parent: #12679 (link via update_issue_relationship on file). Authority: ADR 0028 (PR #14428). Siblings (file-at-claim): Leaf B (L1/L2 lane), Leaf C (L3–L5 synthesis) per the decomposition map. Foundational sibling: #14427 (done, PR approved).
Live latest-open sweep: checked latest 10 open issues at 2026-07-02T04:06Z (+ latest-20 at 03:45Z); no equivalent found. A2A in-flight sweep: all-states scan at 04:06Z; no competing claim on this scope. Filed unclaimed — self-select per goal-scoping; claimer runs ticket-intake + structural-pre-flight.
Origin Session ID: 2251c81c-1446-4723-86b3-479322bbcc95
Retrieval Hint: "temporal-summary collection SUMMARY label schema Leaf A ADR 0028 storage sub"
Context
Leaf A of Epic #12679's implementation decomposition (map: https://github.com/neomjs/neo/issues/12679#issuecomment-4862079789, posted 2026-07-02 after ADR 0028 reached twice-approved state on PR
#14428). Filed pre-Acceptedfor planning visibility per ADR 0005 §2.3 ("Epics / tickets MAY be filed pre-ADR-merge"); the merge gate below is unconditional regardless.⛔ Merge gate: this leaf's PR is merge-blocked until ADR 0028 is
Accepted(PR#14428merged), per the epic's#11376§6 contract and ADR 0028 §5. Claim and design freely; do not hand off as merge-ready before the flip.The Problem
The temporal pyramid's durable tiers (ADR 0028 §2.1) and dynamic tiers (§2.2) both need the storage substrate that does not exist yet: the
temporal-summaryChroma collection and the per-level SQLite graph-label schema. Leaves B (L1/L2 aggregation lane) and C (L3–L5 synthesis) write into and read from this substrate — it sequences first.The Architectural Reality
Bound by ADR 0028 (authority; re-verify
Acceptedat claim):temporal-summarycollection carrying{level, partition, windowStart, windowEnd, version}metadata — inside theunifiedstore (ADR 0017 within-posture: collections + metadata are the separation mechanism; no new persist dir, no second daemon). Per-level SQLite graph labels (SUMMARY_DAILY,SUMMARY_WEEKLY, …) reserved for the deterministic aggregation lane — never written viaSemanticGraphExtractorprompt widening (anti-anchor).SUMMARY_*node types must update ADR 0024 §2.2's node-type table and cite ADR 0024 in the same PR (0024's own re-review trigger)..mjsis settled viastructural-pre-flightat claim time (likelyai/services/Memory Core territory; the contract here is deliberately directory-agnostic — design-first, placement validated at implementation).The Fix
One PR: create the collection (creation path + metadata contract), define the
SUMMARY_*label schema, register the collection in the MC maintenance groups, update ADR 0024 §2.2. No aggregation logic (Leaf B), no synthesis (Leaf C), no data written beyond schema/bootstrap.Contract Ledger Matrix
temporal-summarycollection (new, inunified)SUMMARY_*SQLite labelsSUMMARY_*types + source-of-truth pinDecision Record impact
depends-on ADR 0028(merge-blocked untilAccepted) ·amends ADR 0024(§2.2 table, per its own trigger) ·aligned-with ADR 0017.Acceptance Criteria
temporal-summarycollection exists in theunifiedstore with the{level, partition, windowStart, windowEnd, version}metadata contract enforced/documented.SUMMARY_*label schema defined; write path reserved to the deterministic aggregation lane (Leaf B consumes; no extractor-prompt changes).Accepted; the PR body states the gate.Out of Scope
versionfield).Avoided Traps
levelmetadata).Related
Parent: #12679 (link via
update_issue_relationshipon file). Authority: ADR 0028 (PR#14428). Siblings (file-at-claim): Leaf B (L1/L2 lane), Leaf C (L3–L5 synthesis) per the decomposition map. Foundational sibling: #14427 (done, PR approved).Live latest-open sweep: checked latest 10 open issues at 2026-07-02T04:06Z (+ latest-20 at 03:45Z); no equivalent found. A2A in-flight sweep: all-states scan at 04:06Z; no competing claim on this scope. Filed unclaimed — self-select per goal-scoping; claimer runs
ticket-intake+structural-pre-flight.Origin Session ID: 2251c81c-1446-4723-86b3-479322bbcc95 Retrieval Hint: "temporal-summary collection SUMMARY label schema Leaf A ADR 0028 storage sub"