OP_A_Candidate_Disposition.md
Memory Rebuild Docs/Flattening/Execution Ledger/OP-A Disposition/OP_A_Candidate_Disposition.md
# DOC80 Memory Rebuild — OP-A Candidate Disposition **Repository:** github.com/wbrody/Elnor-Specs — branch `main` **Started:** 2026-05-25 (Stage 4) **Last updated:** 2026-05-28 (Stage 5R2c — OPA-019 target_doc reframed from `DAMS V5` to `DOC84` (DAMS substrate inside DOC84 per SM-020); header row count corrected 34 → 35 (OPA-035 was added at Stage 5R2b but header was not updated). Prior: 2026-05-27 (Stage 5R2b — OPA-035 added: SourceBoundSynthesisAdapter convergence obligation. Renames applied: `NonAssertionExtractionOutcome` → `AlternativeExtractionRouting`; `SourceBoundSynthesisProjection` → `SourceBoundSynthesisAdapter`. Stage 5R2 had earlier reconciled OPA-001/004/005/011/012 against 8-member ownership model and added OPA-031–034.)) **Candidate rows:** 35 Per plan §16, every accepted cross-doc obligation must have either a proposed OP-A row ID or an explicit no-row-needed reason before final integration review. Candidate rows must exist BEFORE final integration; final OP-A landing may be patched later. Each row carries: target owner doc, target section/topic, obligation summary, blocking status, fixture/lint ref, migration/supersession implication, source refs. ## Rows | opa_id | source_doc | target_doc | obligation_summary | blocking_status | fixture_lint_ref | migration_implication | file_refs | |---|---|---|---|---|---|---|---| | OPA-001 | DOC82 | DOC72 + EC | **DOC82** owns the Assertion family schema/identity/lifecycle (per D-SEED-2 re-homing + Stage 5R B9); **DOC72** stores graph payload; **EC** is sole writer of durable Assertions. DOC72 amendment: defer the Assertion *schema* to DOC82; retain only the *graph storage* contract. | blocks E3 charter; DOC72 amendment promoted to Stage 6 charter pre-condition (was tracked-only at Stage 4) | `supersession.local_schema_redefinition`; `opa.row_contradicts_owner_map`; `opa.stale_doc72_assertion_schema_reference` | DOC82 schema; DOC72 storage; EC writes — three-way contract | ABC R0.2 §2.1 (semantics preserved; *placement* superseded by D-SEED-2); §7.2; Stage 5R B9; Stage 5R2 reconciliation 2026-05-27 | | OPA-002 | EC | DOC1 | EC routes durable write candidates through DOC1 Write Gate for final promotion approval. | blocks E5 (Extraction spine + promotion lifecycle) | fixture: DOC1 promotion gate (Stage 6 E5 charter) | EC cannot auto-promote provisional → active; DOC1 owns gate | ABC R0.2 §7.3 (stage H); Concept Model §13.1 | | OPA-003 | DOC25 | DOC73 | DOC25 emits SourceArtifact + ArtifactSegment + materialization state + parse-quality sidecars; DOC73 consumes and manages source-bound extraction. | blocks E4 charter (Source / Evidence lockstep with E3) | fixture: source-grounding handoff (E3/E4 lockstep) | Source-grounding contract must be defined before E3 finalizes EvidenceSupportEdge | ABC R0.2 §7.2 (stage B); §7.11 | | OPA-004 | DOC82 | DOC73 | **DOC82** owns `EvidenceRecord` + `EvidenceSupportEdge` schemas (per D-SEED-2 + Stage 5R B9); **DOC73** owns `ConsolidatedUnderstanding` (source-bound synthesis only — per ADQ-219) and may supply source-bound inputs to DOC82's evidence-edge contract. DAMS V5 is a **DOC84 substrate**, NOT an emitter/owner of evidence schemas (per SM-020). DOC73 amendment: defer the evidence schemas to DOC82; retain CU semantics. | blocks E3 + E4 lockstep | fixture: DOC82 evidence-edge contract + DOC73 CU consumption (E3/E4 charter); `opa.stale_doc73_evidence_owner_reference` | DOC82 defines evidence schemas; DOC73 supplies source-bound inputs; DAMS does NOT participate in this seam | ABC R0.2 §2.1 (*placement* superseded); §7.2; Stage 5R B9; ADQ-219; Stage 5R2 reconciliation 2026-05-27 | | OPA-005 | DOC83 | DOC82 + EC | **DOC83** owns the extraction spine + classification/triage tree (ABC §7.7 12-step decision tree + ABC §7.8 `AssertionCandidateDisposition`). DOC83 emits `AssertionCandidateEmission` with a *recommended* disposition into DOC82's resolution path. **DOC82** owns `AssertionResolution` + `AssertionDedupeOutcome` (separate orthogonal axis per ABC §7.8) + the anti-overlap rule. **EC** executes durable writes. **DAMS V5 is a substrate inside DOC84**, NOT a classifier or owner (SM-020). | blocks E5 (Canonical Extraction Spine) | fixture: DOC83 emission → DOC82 resolution handoff (E5/E3 charter); `opa.stale_dams_owner_reference`; `assertion.overlapping_resolution_disposition_enum` | DOC83 triage; DOC82 resolution+dedupe; EC writes; DAMS is substrate-only | ABC R0.2 §7.2; §7.7; §7.8; SM-020; Stage 5R B9; Stage 5R2 reconciliation 2026-05-27 | | OPA-006 | EC | DOC72 | EC writes Assertion / AssertionVariant / AssertionRelationEdge / EvidenceSupportEdge to DOC72 graph; owns identity. | blocks E3 (Canonical knowledge) | fixture: EC durable write contract (E3 charter) | All durable memory writes are EC's responsibility; DOC72 stores payload | ABC R0.2 §2.1; §3.5 | | OPA-007 | PropA | EC | PropA emits MemoryPolicyDecision inputs for all collection/extraction/write/retrieval/render/export/delegation/carryover/learning/inspect actions; EC compiles to EffectiveMemoryPolicy. | blocks E1, E2 (Scope/Policy lockstep) | policy lint suite (Round D §1.x) | PropA owns policy rules; EC owns per-object/action/destination evaluation | Round D R0.2 §1.2; Concept Model §11 | | OPA-008 | EC | PropA | EC emits PolicyObligation / PolicyStamp / PolicyStampInvalidation + violation/audit events to PropA for audit + learning. | blocks E2 (Scope/Policy pass 2) | policy enforcement fixture (E2 charter) | PropA learns from enforcement outcomes; EC is sole enforcer | Round D R0.2 §1.7–2.3 | | OPA-009 | DOC24 | KDA | DOC24 assembles MemoryContextPlan with ContextProducts + policy-gated manifests + proof refs; KDA consumes for rendering. | blocks E7 (Runtime context products + delivery) | fixture: DOC24 → KDA packet handoff (E7 charter) | DOC24 decides what to include; KDA decides how to render safely | Concept Model §13.2, §14 | | OPA-010 | KDA | DOC11 | KDA renders RenderBundle into final prompt spans + emits RenderSafetyProof (use-limit / warrant / safe-label survival); DOC11 is final runtime truth owner. | blocks E8 (Prompt shells / render safety / final-prompt proof) | fixture: render safety proof (E8 charter) | KDA proves safety constraints survived rendering; DOC11 owns final state | Round D R0.2 §9.2; DAMS V5 §12.13 | | OPA-011 | DOC11 | DOC85 | **DOC11** provides `ContextPacketProof` + final-prompt-proof span refs to **DOC85** (the memory-learning architecture owner — NOT legacy DOC8). No delivery utility or learning signal flows without proof. | blocks E8 + E9 | fixture: final-prompt-proof gating (E8/E9 charter); `proof.learning_signal_without_context_packet_proof`; `opa.stale_doc8_runtime_learning_reference` | Learning valid only if content was actually delivered through proof spine | Round D R0.2 §9.2; ABC R0.2 §7.13; ADQ-221; Stage 5R B6; Stage 5R2 reconciliation 2026-05-27 | | OPA-012 | DOC85 | EC | **DOC85** owns the memory-learning architecture; emits learning signals (storage / extraction / classification / organization / scope-resolution / injection / UI / prompt-shell — per Adjudication Delta §1.16). **EC** executes durable learning write-back. **BDSM v6.5 Draft v0.3.1** is consumed as a *partial* substrate (per ADQ-221) for utility computation where pinned. **Legacy DOC8 is capability-mining input only**, NOT a runtime participant. | blocks E9 | fixture: DOC85 learning signal → EC adjustment (E9 charter); `doc85.runtime_dependency_on_legacy_doc8`; `learning.writeback_without_ec_execution` | DOC85 architecture; BDSM partial; EC writes; DOC8 not a runtime participant | Concept Model §16; DAMS V5 §15; ADQ-221; Stage 5R B6; Stage 5R2 reconciliation 2026-05-27 | | OPA-013 | EC | Q/DOC20 | EC provides ECCommandRef + RegisteredRouteRef + degraded_noop_receipt_kind for every visible UI action; Q/DOC20 renders only closed commands. | blocks E10 (UI / Inspector / SearchAffordance) | ui.visible_action_without_command_route_or_noop lint | Every visible control must have real backend; no phantom actions | Round D R0.2 §5.3–5.5 | | OPA-014 | Q/DOC20 | DOC24 | Q/DOC20 consumes UserContextSurfacePlan + AvailabilityDisposition + safe-label policy + InspectorVisibilityPlan to render consistent UI state. | blocks E10 | fixture: UI plan consumption (E10 charter) | UI renders plans; plans are computed centrally by EC/DOC24 | Round D R0.2 §5.2, §6.1–6.4 | | OPA-015 | DOC23 | EC | DOC23 respects task_handoff_scope_envelope if provided; no silent Project-mode inheritance or external-LLM carryover stamp. | blocks E1 (Scope/Policy seam), E5 (Extraction) | fixture: task handoff scope envelope (E1 charter) | Task handoff is explicit; no silent scope leakage | Round D R0.2 §4.1; §19.8 | | OPA-016 | DOC72 | Q/DOC20 | DOC72 implements Inspector access control requiring policy-gated inspect + safe-label filtering; Inspector is not a debug bypass. | blocks E10 | ui.inspector_leak lint | Inspector visibility respects disclosure_class + policy; hides where policy forbids | Round D R0.2 §5.6; §16.4–6 | | OPA-017 | EC | Q/DOC20 | EC ensures SearchAffordance preflight confirms route exists + policy permits + at least some eligible result; no auto-pull for blocked / cross-scope / reference-only. | blocks E10 (SearchAffordance) | search_affordance.auto_pull_without_preflight lint | SearchAffordance is actionable or UI hint only; no phantom tools | Round D R0.2 §7.2–7.3 | | OPA-018 | DOC1 | EC | DOC1 emits promotion decisions (candidate → provisional → active → confirmed) and returns to EC for durable write. | blocks E5 | fixture: DOC1 promotion gate | DOC1 is gatekeeper; EC is executor | ABC R0.2 §7.13; §7.3 (stage H) | | OPA-019 | EC | DOC84 (DAMS substrate) | EC provides PolicyCappedDAMSInput with eligibility_ceiling before the DAMS substrate ranks; the DAMS substrate (hosted inside DOC84 per SM-020) respects ceiling + vetoes on contamination_risk threshold. (Stage 5R2c — target_doc reframed from `DAMS V5` per SM-020: DAMS is a substrate inside DOC84, not an independent owner doc.) | blocks E7 | dams.eligibility_ceiling_violation lint | DAMS substrate inside DOC84; policy + contamination control its output | Round D R0.2 §8.2–8.3; SM-020; Stage 5R2c | | OPA-020 | DOC72 | DOC23 | DOC72 provides entity graph + scope linking; DOC23 may attach task outputs / episode state if EC policy permits. | blocks E5, E6 (Temporal / episode integration) | fixture: task output → DOC72 entity link (E5/E6 charter) | DOC72 provides truth store; DOC23 contributes data but not truth | Concept Model §13.1; ABC R0.2 §1.2 (route-independence) | | OPA-021 | EC | DOC24 | EC resolves ScopeResolutionResult for every object in MemoryContextPlan; applies to delivery decisions (what renders, what is reference-only, what is blocked); DOC24 consumes scope result. | blocks E2, E7 | scope.fail_closed_candidate_tag_only lint | Scope resolution feeds policy; delivery respects both | Round D R0.2 §3.5–3.7 | | OPA-022 | TopicCollectionDirective | EC | TopicCollectionDirective emits policy_decision_ref + collection_mode; EC enforces governance rules before firing extraction. | blocks E1 (Scope/Policy), E4 | fixture: TopicCollectionDirective gate (E1/E4 charter) | Topics drive extraction; EC enforces policy gates | Concept Model §7.2; ABC R0.2 §6.2 | | OPA-023 | NullResultMemory | EC | NullResultMemory carries population/version proof; EC checks freshness before using for absence claims. | blocks E4, E6 | fixture: NullResultMemory freshness check (E4/E6 charter) | Null result is metadata claim; must not stale silently | Round D R0.2 §10.1 | | OPA-024 | DOC73 | DOC80 (Memory Control Plane core) | DOC73 → DOC80 RecentActivityRollup seam. DOC73 owns generation / source-bound rollup semantics. DOC80 owns the consumption contract, the can_orient_only invariant, delivery constraints, and lints/fixtures. DOC24/KDA consume only policy-cleared orientation products. RecentActivityRollup MAY orient the model/user, support resume/orientation, and point to source refs or episodes; MAY NOT supply evidentiary warrant, justify an Assertion, or be cited as support unless the underlying source is separately retrieved AND policy-cleared through the canonical evidence/assertion path. | blocks E6 (Temporal / working-state / RecentActivity / episode integration) | fixture: RecentActivityRollup orientation-only enforcement (E6 charter) — required E6 lint/fixture per ADQ-405 | DOC73 produces rollups; DOC80 core ensures they cannot be misused as evidence or warrant; cross-doc seam; DOC24/KDA only consume policy-cleared products | AC-003; ABC R0.2 §4.4; plan §6.4 (RecentActivityRollup crown-jewel family); ADQ-405 | | OPA-025 | DOC72 | DOC87 | DOC72 stores `MemoryMembershipEdge` graph payload; DOC87 owns the schema and invariants (per ADQ-220). | blocks E5R (new membership slice between E6 and E7) and DOC87 charter at Stage 6 | membership.* lints (DOC87 §5) | DOC72 retains storage; DOC87 defines the edge contract; one-owner rule applied | ADQ-220; Stage 5R Patch B2 step 12 | | OPA-026 | EC | DOC87 | EC executes durable membership writes against the DOC87 schema; DOC87 defines what counts as a confirmed vs candidate vs blocked vs removed membership. | blocks E5R / DOC87 charter | membership.edge_confirmed_without_EC_write lint | EC is sole writer; DOC87 owns the lifecycle states | ADQ-220; Stage 5R B2 step 12 | | OPA-027 | DOC84 | DOC87 | DOC84 consumes `MemoryMembershipEdge` for ContextProduct planning; DOC84 does NOT create or confirm membership. | blocks E7/E8 charter and DOC87 charter | membership.edge_owned_by_delivery lint | Delivery consumes; ownership stays at DOC87 | ADQ-220; Stage 5R B2 step 12 | | OPA-028 | DOC83 | DOC87 | DOC83 emits membership candidates from extraction (e.g. via TopicCollectionDirective); DOC87 owns candidate-to-confirmed lifecycle. | blocks E5/E6 charter and DOC87 charter | membership.candidate_rendered_as_confirmed lint | DOC83 references DOC87's Topic identity via lateral import; does not own Topic identity | ADQ-220; Stage 5R B2 step 12 | | OPA-029 | DOC86 | DOC87 | DOC86 renders membership and exposes command-closed UI controls (add/remove/pin/reject/confirm); DOC86 does NOT own `MemoryMembershipEdge` or `TopicActivationState`. | blocks E10 charter and DOC87 charter | membership.ui_control_without_command_closure lint | DOC86 was incorrectly assigned `TopicActivationState` in round-1 Stage 5; moved to DOC87 at Stage 5R | ADQ-220; Stage 5R B2 steps 4, 12 | | OPA-030 | DOC83 | DOC82 | DOC83 produces `AssertionCandidateEmission` against the DOC82-owned contract; DOC82 owns the full Assertion lifecycle/state machine (B9 / Stage 5R). | blocks E3/E5 charter (E3↔E5 handoff) | fixture: AssertionCandidateEmission handoff (E3/E5 charter) | Resolves the lifecycle-split bug from round-1 Stage 5 (B-2); E3↔E5 handoff is now named | Stage 5R Patch B9; round-1 review §B-2 + §B-3 | | OPA-031 | EC | DOC80 family (all members) | **`ECSeamContract`** (Stage 5R2 must-fix #9). EC is sole durable writer/executor for: durable Assertion writes (DOC82 schema), policy/scope execution (DOC81), membership writes (DOC87), learning write-back (DOC85), command execution (DOC86 UI commands), source-revocation execution. EC MUST revalidate `AssertionDedupeOutcome` against current state inside its serialized write (compare-and-swap) — OR `AssertionDedupeOutcome` carries `dedupe_basis_generation_id` (optimistic concurrency token). A candidate started under policy generation N must re-gate at resolution/write if policy generation has changed. `ExternalDependencyRecord(EC).dependency_status = partial / moving`. | gates ALL Stage 6 E-slice charters (EC seam appears in 5 of 8 members: DOC81/82/83/85/87) | `ec.dependency_not_marked_partial_or_moving`; `ec.durable_write_without_ec_execution`; `ec.dedupe_write_without_generation_revalidation`; `ec.policy_generation_changed_without_regate`; `ec.learning_writeback_without_ec_execution`; `proof.durable_write_by_non_ec_actor` | EC contract drafted as named cross-cutting seam; not assumed-stable | Stage 5R2 synthesis §4 #9; round-2 B-1/B-2 | | OPA-032 | DOC83 | DOC87 | **DOC83 ↔ DOC87 co-drafting for Topic identity** (Stage 5R2 must-fix #4). DOC83's `TopicCollectionDirective` references DOC87 Topic identity. A minimal DOC87-owned `TopicIdentityContract` stub (containing `MembershipTargetRef`, `OrganizationContainerRef`, `TopicRef`, `LibraryRef`, `ProjectMembershipRef`) MUST land before DOC83's TopicCollectionDirective is drafted. Full DOC87 membership semantics may be drafted in slice order; only the identity contract is the prerequisite. | unblocks E5 (DOC83) charter; required pre-condition before DOC83 finalization | fixture: DOC83 TopicCollectionDirective references resolve against DOC87 TopicIdentityContract (E5 + E_org charter) | Topic identity contract = minimum-viable DOC87 surface for DOC83 | Stage 5R2 must-fix #4; round-2 B-5 | | OPA-033 | DOC81 (`LegalHoldState`) | DOC72 §42 + DOC23 + DOC25 | **Legal-hold honoring on non-memory destructive jobs** (Stage 5R2 synthesis §6 final landing). DOC81 owns `LegalHoldState` (held / not held, with scope). Every automated destructive job MUST check `LegalHoldState` and skip held objects. Known destructive jobs outside DOC80: (a) DOC72 §42 nightly graph cleanup / entropy / semantic-folding / retention-driven auto-prune; (b) DOC23 task-output retention/expiry; (c) DOC25 source-deletion / materialization-clearing. Each external doc receives an amendment adding the `LegalHoldState` check. Hard destruction remains manual (architect adjudication: degradation, not destruction, is the privileged-clawback default). | blocks DOC72/DOC23/DOC25 amendments at Stage 6 charter authoring | `legal_hold.destructive_job_skipped_check`; `revocation.support_edge_survives_revoked_source` | DOC81 declares the flag; the destructive-job owners (DOC72/DOC23/DOC25) honor it | Synthesis §6 architect adjudication (Will, 2026-05-27): degradation default + manual hard destruction + legal-hold as freeze on existing deletion paths | | OPA-034 | DOC80 family | DOC73 / DOC25 / DOC23 (published surfaces) | **Memory-derived exposure on shared/published surfaces** (Stage 5R2 placeholder pending ADQ-222 resolution). Boundary invariant: DOC23 owns task graph / task page mechanics / task artifacts / task deliveries / task-specific share manifests; DOC80 governs ONLY memory-derived exposure, policy/proof/disclosure/learning effects on shared task surfaces. DOC73/DOC25 own Library/Corpus/source mechanics; DOC80 governs ONLY memory exposure on published Library/Corpus surfaces. Schema bodies (`PublishedViewEnvelope`, `TaskSharedMemoryExposureContract`, `PublishedLibraryCorpusExposureContract`) are NOT drafted at Stage 5R2 — gated on ADQ-222. | gates DOC23 / DOC73 / DOC25 amendments IF ADQ-222 resolves to support Phase-1 sharing in DOC80 V5 | placeholder pending ADQ-222 | OP-A seam row only; schema bodies are Stage 7 work conditional on ADQ-222 | Synthesis §7; ADQ-222 (opening at Stage 5R2) | | OPA-035 | DOC82 (`SourceBoundSynthesisAdapter`) | DOC73 (ConsolidatedUnderstanding semantics) | **SourceBoundSynthesisAdapter convergence obligation** (Stage 5R2b audit-gap fold). If the adapter activates (i.e. ADQ-219 reconciliation surfaces divergence between DOC82 Assertion semantics and DOC73 CU semantics that the wrapper must absorb), DOC73 MUST converge with DOC82 within a bounded Stage 6/7 charter window OR the architect must explicitly bless permanent divergence via a new ADQ. Permanent unblessed wrapper activation is a `code_smell`, not a stable design: the adapter is a transition seam, not a destination. The adapter is classified under `SemanticProjectionContract` as a `KnowledgeProjection` wrapper case (Owner Map Stage 5R2b additions). Renamed from `SourceBoundSynthesisProjection` at Stage 5R2b for semantic clarity; lineage-only retired entry recorded in `DOC80_Retired_Names.md`. | gates DOC73 amendment at Stage 6 charter authoring; escalates to architect if wrapper activates without convergence path | `adapter.activated_without_convergence_plan`; `adapter.permanent_activation_without_architect_blessing`; `cu_doc73.divergence_unresolved_after_charter` | The adapter exists to absorb a transition, not to enshrine a permanent split. If it cannot cleanly absorb, that becomes `architect_stop` per Import Graph §5.1 known-risk. | Stage 5R2b audit-gap item 13; ADQ-219 (CU/DOC73 alignment) | ## Notes - Rows extracted from ABC R0.2 + Round D R0.2 + Concept Model owner table at Stage 4. OPA-025 through OPA-030 added at Stage 5R for the new DOC87 family member + the AssertionCandidateEmission handoff. **Stage 5R2 (2026-05-27)** reconciled stale OPA-001/004/005/011/012 against the 8-member ownership model and added OPA-031–034 (EC seam, DOC83↔DOC87 co-drafting, legal-hold honoring, memory-derived exposure on shared surfaces). **Stage 5R2b (2026-05-27)** added OPA-035 (SourceBoundSynthesisAdapter convergence obligation) and applied two renames: `NonAssertionExtractionOutcome` → `AlternativeExtractionRouting` (DOC83) and `SourceBoundSynthesisProjection` → `SourceBoundSynthesisAdapter` (DOC82 wrapper-only); both renames recorded as lineage-only entries in `DOC80_Retired_Names.md`. - The aspirational completion rows AC-001, AC-002, AC-004, AC-005 also flag `op_a_candidate_required = yes`; those become additional rows here when their architect decisions resolve. AC-003 is linked to OPA-024. - **Stage 5R2 reconciliation discipline:** every OPA row must be re-checked against `DOC80_Owner_Map.md` at the close of each patch round. No OP-A row may contradict the canonical Owner Map. Anti-staleness lints: `opa.row_contradicts_owner_map`, `opa.stale_doc8_runtime_learning_reference`, `opa.stale_dams_owner_reference`, `opa.stale_doc72_assertion_schema_reference`, `opa.stale_doc73_evidence_owner_reference`.