Context
Consumer-3 leaf of epic #14472 — institution-native belief revision, claim-scoped. Filed in the operator-directed full-fledging pass; live latest-open sweep 2026-07-02T19:37:34Z: no equivalent ticket.
The scoping is settled authority (#14422 OQ3, RESOLVED_TO_SCOPING_RULE): belief revision defaults claim-scoped — the claim class decides the verification surface; concept-scoped conflict detection remains available as a query pattern over claim-anchored data (burden on its advocates); NOT absorbed into #12679 (bird's-eye navigation may consume outcomes; it is not the granularity SSOT). Implementation vehicle: extend the shipped supersede primitive, never reinvent (ai/services/memory-core/CoalescingEngineService.mjs, the #14418 lineage — supersede-not-duplicate + weak-digest tier collision + sourceTier/degraded fidelity fields).
The Problem
Two memories disagreeing is invisible until an agent trips over the older one. The swarm's empirical failure classes (the graduation's seven specimen events across five classes — frame-import, parallel-wake self-contradiction, token-collision re-filing, recency-surface undersell, single-snapshot temporal overclaim) are all governance-caught today — by peers reading carefully, not by substrate. A stale claim ("v13.1 owner benched", "mailbox healthy", "the flat root must stay empty") keeps surfacing at full confidence after reality moved. Supersession exists mechanically (#14418) but nothing SURFACES candidate conflicts to drive it.
The Architectural Reality
- Vehicle:
ai/services/memory-core/CoalescingEngineService.mjs — the supersede primitive with fidelity axes (sourceTier, degraded, usedTier alignment per #14418 AC-3).
- Anchor substrate: claims live in memories; memories attach to concepts (
TAGGED_CONCEPT, unified post-#14502) — a claim-conflict candidate = two memories in the SAME concept neighborhood making incompatible assertions of the same claim class.
- Claim classes (initial vocabulary, extensible):
state-assertion (X is open/closed/owner/green), env-assertion (local/cloud, path, config), quantity (counts, versions), disposition (decided/parked/superseded). The class decides the verification surface (state → live tracker; env → primary config; quantity → regeneration command; disposition → the deciding artifact).
- Sequencing authority: OQ3's own note — a claim-conflict probe runs only after the route/read buckets are observable (#14454 done; #14474 the read half).
The Fix
One PR:
- Claim-class annotation on the supersede path: superseding writes gain an optional
claimClass + verificationSurface pair (extending CoalescingEngine's existing metadata, no new node classes).
- Conflict-candidate surfacer (read-only query pattern): within a concept neighborhood, pairs of non-superseded memories with same claim-class + incompatible assertions (heuristic slice 1: negation/numeric-divergence patterns; NO NLP ambition — candidates, not verdicts) → emitted to a queue artifact with per-pair confidence.
- Dream-cycle wiring: the surfacer runs in the consolidation window (
ai/daemons/orchestrator/services/DreamService.mjs cadence), feeding candidates to the existing REM/coalescing flow — a surfaced pair either coalesces (supersede, existing primitive) or gets marked reviewed-compatible.
- Measurements artifact: first full-store run — candidate count, class distribution, precision sample (N=20 hand-checked in-PR, honest precision number stated).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Docs |
Evidence |
CoalescingEngineService supersede metadata |
#14418 lineage |
Additive optional claimClass/verificationSurface; absent = today's behavior |
Unknown class values pass through unvalidated-but-logged (vocabulary extensible) |
Service JSDoc |
Unit spec |
| Conflict queue artifact |
OQ3 ruling |
Candidates with confidence, never auto-supersede |
Low-confidence flood → per-class caps, stated in config |
Artifact header |
Precision sample in-PR |
Decision Record impact
aligned-with ADR 0024 + the #14418 decision lineage. Concept-scoped detection stays a query pattern (no schema commitment) per the OQ3 ruling.
Acceptance Criteria
Out of Scope
- Auto-supersession (surfacing ≠ deciding; the actuator stays the reviewed coalescing flow).
#12679 temporal navigation (adjacent consumer, never the owner).
- NLP-grade contradiction detection (slice 1 is patterns + neighborhoods; escalate ambition only with precision data).
Avoided Traps
- Reinventing supersession — the primitive exists (#14418); this leaf extends metadata + adds surfacing only.
- Concept-scoped-by-default drift — claim-scoped is the ruling; concept-scoped remains a query pattern with the burden on its advocates.
- Auto-acting on candidates — a false-positive auto-supersede destroys a true memory; candidates are review inputs, permanently.
Sequencing
Gated on #14474's read-side observability (per the OQ3 ruling's own sequencing note); consumes the unified spine (#14502) for neighborhood quality — soft dependency, degrades to per-alias neighborhoods before it.
Related: #14472 (parent epic), #14418 lineage (vehicle), #14474 / #14502 (gates), #12679 (adjacent, non-owner), Discussion #14422 (OQ3)
Origin Session ID: 8cf234b7-e698-47ca-99e2-bf865196b6aa
Retrieval Hint: claim scoped belief revision supersede extension conflict candidate surfacer dream cycle
Context
Consumer-3 leaf of epic #14472 — institution-native belief revision, claim-scoped. Filed in the operator-directed full-fledging pass; live latest-open sweep 2026-07-02T19:37:34Z: no equivalent ticket.
The scoping is settled authority (#14422 OQ3, RESOLVED_TO_SCOPING_RULE): belief revision defaults claim-scoped — the claim class decides the verification surface; concept-scoped conflict detection remains available as a query pattern over claim-anchored data (burden on its advocates); NOT absorbed into
#12679(bird's-eye navigation may consume outcomes; it is not the granularity SSOT). Implementation vehicle: extend the shipped supersede primitive, never reinvent (ai/services/memory-core/CoalescingEngineService.mjs, the #14418 lineage — supersede-not-duplicate + weak-digest tier collision +sourceTier/degradedfidelity fields).The Problem
Two memories disagreeing is invisible until an agent trips over the older one. The swarm's empirical failure classes (the graduation's seven specimen events across five classes — frame-import, parallel-wake self-contradiction, token-collision re-filing, recency-surface undersell, single-snapshot temporal overclaim) are all governance-caught today — by peers reading carefully, not by substrate. A stale claim ("v13.1 owner benched", "mailbox healthy", "the flat root must stay empty") keeps surfacing at full confidence after reality moved. Supersession exists mechanically (#14418) but nothing SURFACES candidate conflicts to drive it.
The Architectural Reality
ai/services/memory-core/CoalescingEngineService.mjs— the supersede primitive with fidelity axes (sourceTier,degraded,usedTieralignment per #14418 AC-3).TAGGED_CONCEPT, unified post-#14502) — a claim-conflict candidate = two memories in the SAME concept neighborhood making incompatible assertions of the same claim class.state-assertion(X is open/closed/owner/green),env-assertion(local/cloud, path, config),quantity(counts, versions),disposition(decided/parked/superseded). The class decides the verification surface (state → live tracker; env → primary config; quantity → regeneration command; disposition → the deciding artifact).The Fix
One PR:
claimClass+verificationSurfacepair (extending CoalescingEngine's existing metadata, no new node classes).ai/daemons/orchestrator/services/DreamService.mjscadence), feeding candidates to the existing REM/coalescing flow — a surfaced pair either coalesces (supersede, existing primitive) or gets marked reviewed-compatible.Contract Ledger Matrix
CoalescingEngineServicesupersede metadataclaimClass/verificationSurface; absent = today's behaviorDecision Record impact
aligned-with ADR 0024 + the #14418 decision lineage. Concept-scoped detection stays a query pattern (no schema commitment) per the OQ3 ruling.
Acceptance Criteria
claimClass/verificationSurfaceadditive metadata on the supersede path; absent-means-unchanged spec-pinnedResolvesthis leaf,Refs#14472Out of Scope
#12679temporal navigation (adjacent consumer, never the owner).Avoided Traps
Sequencing
Gated on #14474's read-side observability (per the OQ3 ruling's own sequencing note); consumes the unified spine (#14502) for neighborhood quality — soft dependency, degrades to per-alias neighborhoods before it.
Related: #14472 (parent epic), #14418 lineage (vehicle), #14474 / #14502 (gates), #12679 (adjacent, non-owner), Discussion #14422 (OQ3)
Origin Session ID: 8cf234b7-e698-47ca-99e2-bf865196b6aa
Retrieval Hint:
claim scoped belief revision supersede extension conflict candidate surfacer dream cycle