ELNOR REPO READER TEXT MIRROR Original path: Memory Rebuild Docs/Stage_6_Charters/E3_E4_DOC82_Knowledge_Source_Evidence/DOC82_Knowledge_Source_Evidence_Charter_Draft.md Source repo: /Users/OpenClaw1/Elnor/Elnor Specs Git branch: main Git commit: 98f25a3624ebcec0f7eade9eeadb12916dede4c6 Generated: 2026-06-18T18:34:37.209Z --- # DOC82 — Canonical Knowledge + Source/Evidence (Stage 6 E3/E4 Charter Draft R1) **Repository:** github.com/wbrody/Elnor-Specs — branch `main` **Document status:** `charter-draft (Stage 6 E3/E4, R1 — not reviewed, not ratified)`. Becomes the operative DOC82 member spec after architect review + red-team rounds + ratification. **Versioning discipline:** git-native — stable filename `DOC82_Knowledge_Source_Evidence_Charter_Draft.md`, no version suffix. Git history is the version record (Skeletal Baseline B5). **Family member:** DOC82 (member **3 of 8** — the Canonical Knowledge + Source/Evidence plane; the **truth plane**). Family = Memory Control Plane (ADQ-210/220). **Drafted as:** the **E3 + E4 lockstep** (plan §12.3). E3 = Knowledge (Assertion family + lifecycle + warrant ladder + bitemporal axes); E4 = Source/Evidence (SourceEnvelope, EvidenceRecord/EvidenceSupportEdge, corpus-hierarchy interface, parse-quality bounds). Drafted together because `EvidenceSupportEdge` depends on the source-span / `SourceEnvelope` contracts. **Governing inputs:** `E3_E4_Drafting_Commission_Claude_Code.md`; `Charter_Opening_Brief.md` (20 draft targets); `Charter_Input_Deck.md`; **`Pre_Charter_Analysis_ADQ202_ADQ219.md` (the resolved pre-conditions + the four architect locks — this draft is FROM those resolutions; it does not re-open them)**; ratified E0 (`DOC80_Core_Charter_Draft.md`) + ratified DOC81 (`DOC81_Scope_Policy_Charter_Draft.md` R3.1); `DOC80_Owner_Map.md`; `DOC80_Skeletal_Target_Baseline.md`; `DOC80_Import_Graph.md`; ABC R0.2 (`12_ABC_Consolidated_Structural_Patch_R0_2.md`); DOC73 Artifact 1 R0.5 §8.2 / Artifact 3 R0.3 §9.2; DOC25 V2.0; `OPA_V4.md` §6 (+ archived `OPA_V3_18.md` canonical bodies); `Architect_Decision_Queue.md`. --- ## §0. How to read this draft DOC82 is the **truth plane**: it owns the Assertion family (the only truth-apt objects in the system — E0 §6.3), the full assertion lifecycle/state machine, the warrant ladder, the evidence + source envelopes, and the bitemporal axes. Every other plane consumes it: DOC83 generates candidates *into* it, DOC84 caps delivery *on* it, DOC85 learns *from* it, DOC87 organizes *over* it; **EC executes its writes** (Owner Map §1–§2; Import Graph §2). DOC82 defines contracts; EC executes durable writes, warrant evaluation, and resolution/merge execution. Nothing in this plane writes durably by itself. ### §0.1 Citation convention (Commission §0) Every contract / field / enum / lint / fixture traces to one of: ABC R0.2 (`ABC §N.M` — **senior for SEMANTICS**, DR-001), an Owner Map row (`Owner Map line N` — **canonical for PLACEMENT**, D-SEED-2), a Skeletal section (`Skeletal §10.x/§11.x/§DOC82`), an ADQ (`ADQ-NNN`), an OPA obligation (`OBL-…`, body per archived `OPA_V3_18.md` where V4 §6 carries the retarget row only), an E0 section (`E0 §N.M`), a DOC81 section (`DOC81 §N.M`), the Pre-Charter Analysis (`PCA Finding 1/2`, `PCA Lock A/B/C/D`), or a Supersession Matrix row (`SM-NNN`). Untraceable claims are flagged `OPEN_FOR_ARCHITECT_REVIEW` in §13 (≤5). Coined lint/fixture tokens are tagged `[proposed]` (Stage 9 confirms); verbatim-source tokens are `[canonical]` (E0 §16.3 convention). ### §0.2 The ABC §2.1 placement-override note (load-bearing) **ABC R0.2 is senior for SEMANTICS** (identity / relation / warrant / disposition / merge / dedupe behavior — DR-001). **ABC §2.1's PLACEMENT is overridden by D-SEED-2:** ABC §2.1 assigns Assertion/AssertionVariant schema to DOC72 and EvidenceRecord/EvidenceSupportEdge to the DOC73/DAMS seam; the DOC80 family **re-homes those schemas to DOC82** (Skeletal §3.3; Owner Map lines 26–37, 57–58). This draft treats ABC §2.1 as authoritative for *semantics only*; `DOC80_Owner_Map.md` is the canonical placement source. Two placement-driven shape deviations from ABC §3.2 are recorded at §2.1: `memberships` moves out (DOC87 owns the membership edge, ADQ-220) and embedded arrays normalize to branded refs (E0 §8.5 / N12). The retired Concept Model §17.3 11-value disposition enum is **not reintroduced** (G-2). ### §0.3 Bind-by-reference list (consumed, NEVER redefined) **E0-owned (ratified 2026-06-01) — referenced by section number:** `ReasonCodeRegistry`/`ReasonCodeId` (E0 §2.1; **source-revocation reason codes route to DOC82's namespace per UR-37**); `DomainProfileRegistry`/`DomainProfileId` + conservative fallback (E0 §2.2 — its `warrant_policy_ref` points at DOC82's §3.7 `DomainProfileWarrantPolicy`); the warrant-degradation-trigger registry (E0 §2.4 — DOC82 consumes triggers into the §3 ladder; the §3.6 `authority_class` carveout key is DOC82-declared per E0 §2.4/UR-22); `MemoryFlowCertificate` union incl. `DurableWriteMFC` (E0 §3.3); `MemoryCoordinationTrace` (E0 §3.4); `SemanticProjectionContract` + axis registration (E0 §3.6 — DOC82 registers the `knowledge` axis, §9.2); `ContextPacketProof`/`RenderSafetyProof` (E0 §4.1/§4.2); `MemoryMutationEnvelope` (E0 §5.1, NAMED — every DOC82 durable mutation is one envelope event); `MemoryProvenanceGraph` (E0 §5.2, NAMED); the memory-object taxonomy (E0 §6 — DOC82 confirms/extends its rows, §12.5); `ExternalDependencyRecord` posture (E0 §7 — DOC72/DOC73/DOC25 rows per E0 §7.4); `ECSeamContract` (E0 §7.1 / OPA-031 — serialized writes, `dedupe_basis_generation_id` CAS, policy-generation re-gate); embedding-provenance fields (E0 §8.1, F28 comparability, UR-41 un-merge-through-review); the bitemporal carrier rule (E0 §8.2 — **DOC82 owns the axes**; the envelope carries them; UR-18 linkable-not-collapsed); the policy-generation carrier (E0 §8.3); global naming/brand conventions (E0 §8.5); `SourceRevocationCascade` invariant shape (E0 §12.1 — DOC82 drafts its per-plane execution at §8); the E0 §12.1 invariant set; the E0 §13.1 ABC-§21 dispositions (4 warrant objects assigned to DOC82 — drafted at §3). **DOC81-owned (ratified 2026-06-08) — referenced by section number:** the `Brand` pattern + foreign-vocabulary `ExternalVocabularyValueRef` (DOC81 §0); `ScopeResolutionResult` (+ `minimum_conservatism_floor`, `PrincipalScope`) (DOC81 §2.4 — **write gating reads the floor**); `EffectiveMemoryPolicy` meet + the five axes incl. **`mutation_authority`** (`none ⊏ candidate_only ⊏ durable_requires_review ⊏ durable_allowed`) (DOC81 §3.0–§3.2 — **write gating reads the mutation_authority ceiling**); `PolicyStamp` (`scope_items`) + `PolicyStampRestamp` (DOC81 §3.4); `EpisodePolicyEpoch` + `policy_generation_id` boundary (DOC81 §3.6); `disclosure_class` + `SafeLabelDisclosurePolicy` (DOC81 §4.2); `ExtractionRoutePolicyEnvelope` (DOC81 §4.3); `PolicyCappedDAMSInput` (DOC81 §4.4); the `CascadingSourceInvalidation` **envelope** + `CascadingSourceInvalidationRun` + `LastActiveSupportEdgeEvaluation` (DOC81 §5.1–§5.2 — **DOC82 owns only the source-side payload**, §8); source-revocation monotonicity + the polarity boundary note (DOC81 §5.3); `LegalHoldState` (DOC81 §6.1); policy monotonicity (DOC81 §6.3); the policy-generation re-gate boundary (DOC81 §6.4); the **`AssertionRelationEdge` traversal-scope-check policy** — `RelationTraversalScopeCheckPolicy`/`Registry`/`Budget`/`ExecutionTrace` (DOC81 §8 / ADQ-315 — DOC82 owns the edge; DOC81 owns the traversal policy; EC executes). **External owner docs (`ExternalDependencyRecord`-pinned per E0 §7.4):** **DOC72** (`stable`) — graph payload storage for Assertion family/edges/evidence, six-dimensional knowledge, `Entity`; **DOC73** (`partial`, `reconcile_at_charter`) — `ConsolidatedUnderstanding` semantics + `ConsolidatedUnderstandingSupportContract` (ABC §4.5; Owner Map line 40), `VersionedClaim` (DOC73 retains, DR-003), CU supersession lineage (ADQ-223), `PBEClusterDetectionResult` (ADQ-PASS2-01 — DOC73 owns; DOC82 consumes a read-model projection as equivalence *hints* only); **DOC25** (`stable`) — `SourceArtifact`/`ArtifactSegment` (OBL-D25-O-SOURCEARTIFACT-01; DOC25 V2.0+ §17), `SourceParseQualitySidecar` (ADQ-303 thresholds at DOC25/DAMS), file-materialization + provider profiles (ADQ-401), `LibrarySourceBinding`/`CorpusIndex`/`SourceCollection` (Owner Map lines 63–65), prompt-injection isolation (OBL-D25-PROMPTINJ-01), corpus-source-bindings completion (ADQ-402, depends on ADQ-202); **EC** (`partial/moving`, ECSeamContract OPA-031) — durable Assertion writes, warrant evaluation, resolution/merge execution, traversal scope checks, cascade execution. DOC82 **never re-declares** an E0 registry/carrier, a DOC81 policy/scope contract, DOC73's CU, or a DOC25 artifact/container schema (Commission Hard Constraints §2/§4). ### §0.4 Branded-ref types (declared here, used throughout) Per E0 §8.5 + DOC81 §0 (`Brand` — a bare `string` is not a brand; lint `schema.primary_id_not_branded`). Durable records extend `E0DurableRecord` (E0 §1.6.2). Timestamps RFC3339-UTC; hashes sha256 (E0 §8.5). ```typescript type Brand = T & { readonly __brand: B }; // DOC81 §0 pattern // ---- DOC82-owned primary-ID brands (truth plane) ---- type AssertionRef = Brand; type AssertionVariantRef = Brand; type AssertionCandidateRef = Brand; type AssertionCandidateEmissionRef = Brand; // DR-008 type AssertionResolutionRef = Brand; type AssertionDedupeOutcomeRef = Brand; type AssertionOperationRef = Brand; // merge/split/unmerge ops type AssertionRelationEdgeRef = Brand; type EquivalenceTestRef = Brand; type ResolutionTraceRef = Brand; type WarrantEvaluationResultRef = Brand; type WarrantRecomputeTraceRef = Brand; // §8 polarity recompute type PromotionGateRecordRef = Brand; // ---- DOC82-owned source/evidence brands ---- type SourceRef = Brand; // THE content-deduped source identity (PCA Lock C/D; §5.1) — the brand DOC81 §0 references as "a DOC82/DOC25 source id" type SourceEnvelopeRef = Brand; type SourceAuthorityScopeRef = Brand; type EvidenceRecordRef = Brand; type EvidenceSupportEdgeRef = Brand; type ExtractionRouteContextRef = Brand; // Owner Map line 60 (SM-201) type SourceInvalidationPayloadRef = Brand; // §8 — resolves DOC81 §5.1 source_side_payload_ref type LibrarySourceBindingConsumptionContractRef = Brand; type KnowledgeProjectionRef = Brand; type VersionedClaimLineageRowRef = Brand; type CuConsumptionBindingRef = Brand; // ---- §10 legal-profile (Bucket-A) brands ---- type FilingUnitRef = Brand; type FilingUnitVersionRef = Brand; type FilingPartVisibilityRef = Brand; type RulingDispositionRef = Brand; type CourtDispositionObservationRef = Brand; // ---- referenced (consumed, not owned) brands — owners noted; never redefined ---- type EntityRef = Brand; // DOC72-owned Entity type SourceArtifactRef = Brand; // DOC25-owned (OBL-D25-O-SOURCEARTIFACT-01) type ArtifactSegmentRef = Brand; // DOC25-owned type SourceParseQualitySidecarRef = Brand; // DOC25-owned (SM-207) type ParserRunRef = Brand; // DOC25-owned type MaterializationStateRef = Brand; // DOC25-owned (ADQ-401) type LibrarySourceBindingRef = Brand; // DOC25-owned (Owner Map line 63) type CorpusOrSourceCollectionRef = Brand; // DOC25-owned CorpusIndex/SourceCollection id (Owner Map line 65) type ConsolidatedUnderstandingRef = Brand; // DOC73-owned (ADQ-219) type VersionedClaimRef = Brand; // DOC73-owned (DR-003) type ClusterDetectionReadModelRef = Brand; // DOC73-owned (ADQ-PASS2-01) type MemoryMembershipEdgeRef = Brand; // DOC87-owned edge; brand per E0 §4.1 — a RUNTIME ref, not a schema import (Import Graph §2.2; §2.5 keeps DOC82 < DOC87 acyclic) type DocketRef = Brand; // legal-profile docket id (DOC23/DOC25 task/source plane); referenced // E0/EC/DOC81-owned brands referenced verbatim (Hard Constraint §2): ReasonCodeId, PolicyGenerationId, // DomainProfileId, MemoryFlowCertificateId, MemoryMutationEnvelopeRef, MemoryCoordinationTraceRef, // ScopeRef, ScopeResolutionResultRef, EffectiveMemoryPolicyRef, PolicyStampRef, ECReceiptRef, // CascadingSourceInvalidationRef, LastActiveSupportEdgeEvaluationRef, RelationTraversalScopeCheckPolicyRef, // RelationTraversalExecutionTraceRef, ContentHash, SchemaVersionRef, EffectiveStateGenerationId. /** Foreign vocabulary values use DOC81 §0's owner/version-qualified ref — never loose strings. */ // interface ExternalVocabularyValueRef { owner_doc; registry_id; value_id; registry_version } — DOC81 §0; referenced type VisibilityClassRef = /* ExternalVocabularyValueRef */ { owner_doc: string; registry_id: string; value_id: string; registry_version: SchemaVersionRef }; // see §13 flag 5 (PropA-vs-DOC82 vocabulary owner) ``` **Lints (Stage 9):** `schema.primary_id_not_branded` [canonical — DOC81 §0]; `schema.branded_ref_declared_as_plain_string` [canonical — DOC81 §0]; `schema.external_vocabulary_unversioned_string` [canonical — DOC81 §0]. --- ## §1. Identity, the E3/E4 lockstep, and what DOC82 owns / does not own ### §1.1 Member identity (family member 3 of 8) DOC82 is the **Canonical Knowledge + Source/Evidence** member (Skeletal §1; topological position 3: `DOC80 < DOC81 < DOC82 < DOC87 < DOC83 < DOC84 < {DOC85, DOC86}` — Import Graph §2.5). Its schema_import edges: **inbound** `DOC80 → DOC82`, `DOC81 → DOC82`; **outbound** `DOC82 → {DOC83, DOC84, DOC85, DOC87}` (Import Graph §2.1). The apparent DOC82↔DOC83 cycle is dissolved: `DOC83 → DOC82` is a **runtime_instance_flow** (`AssertionCandidateEmission` instances produced against the DOC82-owned contract — Import Graph §2.2, DR-008), not a schema import. Storage/execution flows: `DOC82 → DOC72` (graph payload), `DOC82 → EC` (durable writes) (Import Graph §2.4). ### §1.2 The lockstep (plan §12.3) **E3 declares the knowledge objects** (§2 Assertion family + §3 warrant ladder + bitemporal axes); **E4 declares + validates the source/evidence backing** (§5 SourceEnvelope/EvidenceSupportEdge + §6 corpus interface + parse-quality bounds). They are one charter because evidence support is meaningless without the source-span contracts: every `EvidenceSupportEdge` (§5.5) resolves through `SourceSegmentRef`/`SourceRegionRef` pointers (§5.2) into DOC25 artifacts, and the warrant ladder (§3) is computed over those edges. ### §1.3 What DOC82 owns (Owner Map lines 26–65, 94–95, 140 + E0 §13.1 slot-ins) - **The Assertion family + full lifecycle/state machine (B9):** `Assertion` · `AssertionVariant` · `AssertionCandidate` · `AssertionCandidateEmission` (DR-008 — the named E3↔E5 handoff; DOC83 generates instances) · `AssertionResolution` · `AssertionDedupeOutcome` (ABC §7.8) · `AssertionMergeOperation/Reconciliation/Split/Unmerge` · `AssertionRelationEdge` (schema only; DOC72 stores; EC executes traversal checks per DOC81 §8) · `AssertionIdentitySignature` · `AssertionLifecycleState` (the full machine) · `AssertionTemporalProfile` (Owner Map lines 26–36). - **The warrant ladder:** `EpistemicKind` / `UseWarrant` / `EffectiveWarrant` (Owner Map line 37; EC executes evaluation) + the E0 §13.1 slot-ins **`WarrantEvaluationResult`**, **`WarrantConsequenceRegistry`**, **`DomainProfileWarrantPolicy`**, **`PromotionGateRecord`** (Skeletal §10.17; E0 §13.1 assigns all four to DOC82; Owner Map rows added at discharge, §14.5). - **Source + evidence interface:** `SourceEnvelope` (Owner Map line 52) · `SourceRegionRef`/`SourceSegmentRef` (line 55) · `EvidenceRecord` (line 57) · `EvidenceSupportEdge` (line 58) · `SourceAuthorityScope`/`SourceAuthorityClass` (line 59) · `ExtractionRouteContext` (line 60, SM-201) · `VisualGroundingState` (line 61) · `LibrarySourceBindingConsumptionContract` (line 64) · the `CascadingSourceInvalidation` **source-side payload** (line 95). - **Bitemporal axes** on the Assertion family (Skeletal §DOC82 §1 / §11.8; E0 §8.2 — DOC82 owns the axes). - **Lineage + projection:** the `VersionedClaim → AssertionVariant` lineage table (line 42; DR-003) · `KnowledgeProjection` + `KnowledgeProjectionInvalidationPolicy` (line 140) · `SourceBoundSynthesisAdapter` (line 39 — **wrapper-only placeholder; documented-not-built per PCA Lock B**, §7.4). ### §1.4 What DOC82 does NOT own (one-owner; Commission Hard Constraint §4) - **`ConsolidatedUnderstanding` semantics + `ConsolidatedUnderstandingSupportContract`** → DOC73 (ADQ-219; Owner Map lines 38, 40). DOC82 consumes directly (§7). - **`SourceArtifact` / `ArtifactSegment` / `SourceParseQualitySidecar` / materialization / provider profiles** → DOC25 (OBL-D25-O-SOURCEARTIFACT-01; ADQ-303; ADQ-401). DOC82 consumes via envelope/segment refs (§5). - **Corpus containers — `CorpusIndex` / `SourceCollection` / `LibrarySourceBinding`** → DOC25; **Library-as-organizational-container + the corpus↔library identity mapping** → DOC87 (ADQ-202; ADQ-PASS2-02; ADQ-220). DOC82 owns the *interface*, zero containers (§6). - **Graph payload storage + six-dimensional knowledge + `Entity`** → DOC72. - **Policy/scope gates** → DOC81 (the whole §0.3 DOC81 list — incl. the `CascadingSourceInvalidation` *envelope* and the `AssertionRelationEdge` *traversal policy*). - **Registries + proof spine + taxonomy + quota** → DOC80 core (E0). - **Membership/organization** → DOC87 (ADQ-220 — an Assertion carries **no** membership array; DOC87 edges point at it; §2.1 placement deviation). - **Extraction triage + `AssertionCandidateDisposition` (the enum) + `AlternativeExtractionRouting`** → DOC83 (Owner Map lines 102–103; Skeletal §10.7 — DOC83 emits a *recommended* disposition; DOC82 is the canonical **resolution authority** and enforces the ABC §7.8 anti-overlap rule). - **Durable writes + warrant evaluation execution + resolution/merge execution + cascade execution** → EC (ECSeamContract, E0 §7.1). - **Treatment statuses (Linked/Indexed/Learned) + access policy** → DOC87/DOC26/DOC81 (PCA Lock C — DOC82 states only the consumption posture, §6.4). ### §1.5 Fail-closed posture DOC82 inherits the family fail-closed posture: a missing domain profile resolves conservative (E0 §2.2); an unresolved scope floors `fail_closed_candidate` (DOC81 §2.4); a candidate whose parse-quality bounds are failed/unknown is capped (§5.7 / ABC §7.11); an un-spanned CU can never support (§7.2 R-CU-1); an indeterminate support-edge survivor count fails closed to retained-but-degraded (DOC81 §5.1 `indeterminate_fail_closed`). **No DOC82 contract ever fails open into `assert`.** --- ## §2. The Assertion family + lifecycle (E3 — declare) **Source:** ABC §3.1–§3.12 (semantics — senior, DR-001); Owner Map lines 26–36 (placement); Skeletal §DOC82 §1.1–§1.9 + §10.7 + §11.8; B9 (DOC82 owns the whole machine); E0 §8.2 (bitemporal), §8.1 (embedding refs), §1.5 (EC serialized writes). **Owner:** DOC82 for every schema in this section. **Storage:** DOC72 (graph payload). **Execution:** EC (durable writes via `MemoryMutationEnvelope` + `DurableWriteMFC`); DOC1 executes the Write Gate (Owner Map line 35); DOC83 generates `AssertionCandidateEmission` instances (runtime flow). The vocabulary (ABC §3.1, verbatim): **Assertion** = canonical reusable truth-apt proposition (ADQ-201 — `Assertion` canonical; `Premise` is a use role only; namespaced `Claim` allowed). **AssertionCandidate** = staged extracted truth-apt candidate. **AssertionVariant** = scoped/temporal/authority-specific/precondition-specific/formulation-specific variant. **CU** = source-bound synthesis, **not** reusable truth. Rejected as canonical truth objects (ABC §3.1): PremiseFamily, generic Claim/Understanding, Topic/Library/Project facts, CU-as-law, RecentActivity-as-evidence, IssueFrame-as-Assertion, DAMS-as-truth-owner. ### §2.1 `Assertion` (+ the bitemporal axes) ```typescript /** Canonical reusable truth-apt proposition. schema_owner = DOC82 (Owner Map line 26; ADQ-201; SM-007/008). * DOC72 stores graph payload; EC executes writes. Shape per ABC §3.2 with two PLACEMENT deviations (§0.2): * (1) ABC's `memberships: MemoryMembershipEdge[]` is REMOVED — membership edges are DOC87-owned and point AT * the assertion (ADQ-220); an Assertion carries no membership state. * (2) embedded arrays normalize to branded refs (E0 §8.5 / N12) — variants/edges are independent durable * records with their own lifecycle, stored by DOC72, so they ref rather than embed. */ interface Assertion extends E0DurableRecord { assertion_id: AssertionRef; schema_owner: 'DOC82'; canonical_question: string; // REQUIRED identity anchor (ABC §3.2) canonical_statement?: string; // current best formulation; may change (ABC §3.2) domain_profile_ref?: DomainProfileId; // E0 §2.2 identity_signature: AssertionIdentitySignature; // §2.3 variant_refs: AssertionVariantRef[]; // ≥1 once past candidate stage assertion_edge_refs: AssertionRelationEdgeRef[]; // §4; DOC72 stores lifecycle_rollup: AssertionLifecycleRollup; // §2.8 — DERIVED from variant states factual_status: 'verified' | 'unverified' | 'not_truth_evaluable'; // OBL-D23-A-V6-PROMOTED-CLAIM-MEMORY-KIND-01 (§10.1) — queries MUST be able to filter by it // ---- bitemporal axes (Skeletal §11.8; E0 §8.2 — DOC82 owns the axes; E0 §6.2 row) ---- valid_time_start: string; // when the proposition holds in the world (RFC3339-UTC); open-ended via valid_time_end absent valid_time_end?: string; transaction_time_start: string; // when the system recorded it; closed by superseding mutations transaction_time_end?: string; } ``` **Bitemporal rules (Skeletal §11.8; E0 §8.2).** `valid_time` = in-world validity; `transaction_time` = system-record validity. The axes enable time-window warrant degradation (E0 §2.4 `time_window` trigger), litigation as-of queries ("what did I know about X as of date D" — Skeletal §DOC82 §1), and audit integrity. `MemoryMutationEnvelope` (E0 §5.1) propagates them family-wide; the envelope's `replay_order` is **NOT** the assertion's `valid_time` — linkable, never collapsed (UR-18). As-of *read* contracts are an E0-temporal-contract stub (DOC81 §13.7(c) honest-claim note) — DOC82 owns the axes and their write semantics; it does not over-claim a query engine here. **Lifecycle.** Created only through resolution (§2.6) of an emitted candidate (§2.5) — never minted directly by extraction, delivery, learning, or UI (route-independence, ABC §1.2). Durable creation/mutation = one `MemoryMutationEnvelope` event + `DurableWriteMFC`, EC-serialized (E0 §1.5; OPA-031). `transaction_time_end` is set exactly when a superseding mutation commits. **Unhappy paths.** *Missing `canonical_question`* → reject at resolution (identity anchor required, ABC §3.2). *Direct write bypassing the candidate pipeline* → `proof.durable_write_without_memory_flow_certificate` (E0 §3.3) + `assertion.created_outside_resolution_path` [proposed]. *Membership array smuggled back on* → `membership.edge_defines_non_membership_relation` [canonical — DOC87 §5 family] + one-owner violation. *Bitemporal fields absent* → `bitemporal.assertion_missing_valid_time` / `bitemporal.assertion_missing_transaction_time` [canonical — Skeletal §11.8]. **Lints (Stage 9):** the two bitemporal lints above; `assertion.created_outside_resolution_path` [proposed]; `assertion.canonical_question_missing` [proposed]; `assertion.memberships_embedded_on_truth_object` [proposed]; `taxonomy.truth_apt_outside_assertion_family` [canonical — E0 §6.3]. **Fixtures (Stage 8):** `fixture.assertion.bitemporal_axes_present_and_distinct_from_replay_order` (UR-18); `fixture.assertion.as_of_date_query_returns_what_was_known` (Skeletal §DOC82 §1 litigation case); `fixture.assertion.created_only_via_resolution`. **Cross-charter.** DOC84 consumes for delivery products; DOC85 reads outcomes; DOC87 minted membership edges point at `assertion_id`; DOC72 stores; EC writes. ### §2.2 `AssertionVariant` (scoped/conditional) + preconditions + safety ```typescript /** Scoped/conditional/formulation-specific variant. schema_owner = DOC82 (Owner Map line 27; SM-008). * Support edges attach at the VARIANT level — support is always for a formulation under specific * scope/preconditions (ABC §3.2 note). */ interface AssertionVariant extends E0DurableRecord { variant_id: AssertionVariantRef; schema_owner: 'DOC82'; assertion_ref: AssertionRef; statement: string; scope_conditions: ScopeCondition[]; // ABC §3.2; shape per §13.6 confirm-seed preconditions?: AssertionPrecondition[]; // ABC §3.11 source_support_refs: EvidenceSupportEdgeRef[]; // §5.5 contrary_support_refs: EvidenceSupportEdgeRef[]; // §5.5 — contrary edges are MANDATORY carriage, accumulate (ABC §3.5; E0 §6.2 SM-200 note) contributing_candidate_refs: AssertionCandidateRef[]; temporal_class: TemporalClass; // §3.1 (ABC §3.8) epistemic_kind: EpistemicKind; // §3.1 (ABC §3.8 + PCA Lock A) temporal_profile: AssertionTemporalProfile; // §3.2 (Owner Map line 36) lifecycle_state: AssertionLifecycleState; // §2.8 — the machine runs PER VARIANT staleness_state: AssertionStalenessState; // §3.4 (value set = §13 flag 3) default_use_warrant: UseWarrant; // §3.3 authority_class: WarrantAuthorityClass; // §3.6 — E0 §2.4/UR-22 degradation-carveout key safety_class: SafetyClass; // ABC §3.11 safety_relevance?: 'none' | 'advisory' | 'must_warn'; // ABC §3.2 origin_scope_ref: ScopeRef; // inherited from the emission origin-stamp (PCA Lock D; §2.5) origin_scope_resolution_ref: ScopeResolutionResultRef; // DOC81 §2.4 policy_stamp_ref?: PolicyStampRef; // DOC81 §3.4 // ---- bitemporal axes (same contract as §2.1; Skeletal §11.8) ---- valid_time_start: string; valid_time_end?: string; transaction_time_start: string; transaction_time_end?: string; } /** ABC §3.11 verbatim. */ type SafetyClass = 'none' | 'health_safety' | 'legal_exposure' | 'financial'; interface AssertionPrecondition { predicate_text: string; predicate_kind: 'user_action' | 'world_state' | 'time_window' | 'scope_state'; if_unmet_warrant: UseWarrant | 'blocked'; } /** Scope-condition shape — field exists per ABC §3.2; shape mirrors ABC §3.11's precondition * (predicate + kind + optional binding). Value set = §13.6 confirm-seed. */ interface ScopeCondition { condition_text: string; condition_kind: 'jurisdiction' | 'domain' | 'matter_scope' | 'time_window' | 'other'; // seed scope_ref?: ScopeRef; // DOC81 §2.1 when the condition binds a scope identity entity_refs?: EntityRef[]; // DOC72 entities when the condition binds entities } ``` **Variant-vs-new-Assertion rule (ABC §3.4, normative — the scienter-fixture correction):** an `AssertionVariant` is a scoped/preconditioned answer to the **same** `canonical_question`; distinct sub-rules with distinct canonical_questions are **distinct Assertions** linked by `AssertionRelationEdge`, never variants. **Safety rule (ABC §3.11):** safety-class variants must not be auto-superseded by extraction agents; a safety-class change requires confirmation before the conservative prior branch retires. Conditional facts are modeled as **active precondition-differentiated variants**, not flat supersession. **Rolling-operational rule (ABC §3.12):** a `rolling` variant MUST carry a `reverify_cadence` or a `source_watch_binding_ref` (§3.2 temporal profile) — otherwise it is not spec-valid. **Unhappy paths.** *Same-question scoped formulation filed as a new Assertion* (or distinct question filed as variant) → equivalence-test outcome misapplied, `assertion.variant_question_mismatch` [proposed]. *Safety-class auto-supersession* → `assertion.safety_class_auto_superseded` [proposed]. *Rolling variant without cadence/watch* → `assertion.rolling_variant_without_reverify_or_watch` [proposed]. *Contrary edge dropped on merge* → `assertion.contrary_edges_not_accumulated` [proposed] (ABC §3.5 `accumulate_all`). **Fixtures (Stage 8):** `fixture.assertion.distinct_subrules_are_distinct_assertions` (ABC §3.4 scienter correction); `fixture.assertion.safety_class_supersession_requires_confirmation`; `fixture.assertion.rolling_without_cadence_rejected`; `fixture.assertion.precondition_unmet_warrant_applies` (ABC §3.11 pineapple-fixture lineage). **Cross-charter.** DOC84 (variant is the delivery-grade unit; warrant consequences per §3.8), DOC81 §8 (traversal policy checks run per related variant), DOC85 (outcome reads), EC/DOC72. ### §2.3 `AssertionIdentitySignature` + equivalence + dedupe basis ```typescript /** Deterministic identity signature. schema_owner = DOC82 (Owner Map line 34; ABC §3.3 verbatim shape * + E0 §8.1 embedding-provenance fields where embeddings contribute). */ interface AssertionIdentitySignature { canonical_question_hash?: ContentHash; normalized_statement_hash: ContentHash; subject_entity_refs: EntityRef[]; predicate_key?: string; object_entity_refs?: EntityRef[]; jurisdiction_or_domain_scope?: string; temporal_scope?: string; authority_anchor_refs?: SourceRef[]; polarity: 'positive' | 'negative' | 'qualified' | 'unknown'; modality: 'asserted' | 'hypothesized' | 'argued' | 'observed' | 'inferred'; signature_version: 1; embedding_model_ref?: string; // E0 §8.1 — REQUIRED iff embeddings contribute to equivalence embedding_generation_id?: string; // E0 §8.1 } /** ABC §3.7 verbatim. */ interface EquivalenceTest { test_id: EquivalenceTestRef; signals: Array<'source_span_identity' | 'authority_citation_identity' | 'canonical_question_match' | 'embedding_similarity' | 'qualifier_set_match'>; domain_threshold_ref: DomainProfileId; // E0 §2.2 — thresholds live with the domain profile outcome: 'merge' | 'new_variant' | 'new_assertion' | 'human_review'; } ``` **Normative identity rule (ABC §3.3):** semantic equivalence may **propose** a merge, but deterministic identity signature, authority/citation matching, source-span dedupe, or user/manual review must **approve** a durable merge when collision risk is material. **Equivalence rules (ABC §3.7):** same canonical_question + differing formulation/scope/precondition → `new_variant`; different canonical_question → `new_assertion`; identical span/citation → `merge`; **qualifier_set mismatch → never auto-merge — absolute, no exceptions (ADQ-311)**; review band → `human_review` or degraded provisional state. **Embedding discipline (E0 §8.1).** Similarity/merge comparisons are valid only within the same `embedding_generation_id` (F28); cross-generation comparison requires re-embedding or explicit review. An embedding-model migration may require un-merging — **through review, never a silent split** (UR-41). Cluster-detection read-models consumed from DOC73 (ADQ-PASS2-01) are equivalence **hints** feeding `EquivalenceTest.signals` — never an auto-merge authority. **Lints (Stage 9):** `embedding.semantic_equivalence_without_model_generation` [canonical — E0 §8.1]; `embedding.cross_generation_comparison_without_reembed` [canonical — F28]; `embedding.silent_unmerge_on_model_migration` [proposed — UR-41]; `assertion.qualifier_set_mismatch_auto_merged` [proposed — ADQ-311]; `assertion.semantic_merge_without_deterministic_approval` [proposed — ABC §3.3]. **Fixtures (Stage 8):** `fixture.assertion.qualifier_mismatch_never_auto_merges` (ADQ-311); `fixture.assertion.semantic_proposal_requires_deterministic_approval`; `fixture.assertion.cross_generation_similarity_blocked` (F28). ### §2.4 `AssertionCandidate` ```typescript /** Staged extracted truth-apt candidate. schema_owner = DOC82 (Owner Map line 28; B9); DOC83 generates * via AssertionCandidateEmission; EC executes resolution. Grounding/origin per ABC §7.10. */ interface AssertionCandidate extends E0DurableRecord { candidate_id: AssertionCandidateRef; schema_owner: 'DOC82'; emission_ref: AssertionCandidateEmissionRef; // §2.5 — REQUIRED (Skeletal §10.7 seam) proposed_canonical_question: string; proposed_statement: string; proposed_scope_conditions: ScopeCondition[]; proposed_temporal_class: TemporalClass; // §3.1 proposed_epistemic_kind: EpistemicKind; // §3.1 — (temporal, epistemic) validity pre-checked at §3.5 candidate_origin: CandidateOrigin; // ABC §7.10 verbatim grounding_state: GroundingState; // ABC §7.10 verbatim claim_nature: ClaimNature; // ABC §7.10 verbatim target_memory_kind: TargetMemoryKind; // §10.1 (OBL-D23-A-V6-PROMOTED-CLAIM-MEMORY-KIND-01) evidence_record_refs: EvidenceRecordRef[]; // §5.4 — the staged support source_segment_refs: SourceSegmentRef[]; // §5.2 parse_quality_bound_check: 'within_bounds' | 'capped_review_required' | 'capped_evidence_or_cu_only'; // §5.7 (ABC §7.11 downstream_bounds) identity_signature_draft?: AssertionIdentitySignature; // §2.3 — computed for dedupe resolution_ref?: AssertionResolutionRef; // set when resolved (§2.6) } /** ABC §7.10 verbatim. */ type CandidateOrigin = 'source_text' | 'user_direct' | 'system_observation' | 'model_synthesis' | 'task_output' | 'cu_synthesis' | 'external_llm_carryover'; type GroundingState = 'span_backed' | 'source_backed_no_span' | 'system_observation_backed' | 'user_direct_backed' | 'cu_backed_with_underlying_spans' | 'cu_backed_without_spans' | 'model_synthesis_only' | 'ungrounded'; type ClaimNature = 'objective' | 'subjective' | 'normative'; ``` **Grounding rules (ABC §7.10, verbatim):** an AssertionCandidate is **never evidence of truth**; `model_synthesis_only`, `cu_backed_without_spans`, and `ungrounded` **cannot promote to `active`** (wired into the §2.8 machine); subjective observations use domain/project/source-bounded treatment, not authority verification. **Lifecycle.** Generated by DOC83 (Steps 0–11 of the ABC §7.7 triage tree — DOC83's plane); handed off via §2.5; resolved at §2.6; durable only from `provisional` onward. A candidate is **not** retained as a shadow truth store: unresolved candidates expire to the review queue (DOC83 §1.8, ADQ-306) or are rejected. **Unhappy paths.** *Candidate without emission ref* → `assertion.doc82_resolution_missing_doc83_emission_ref` [canonical — Skeletal §10.7]. *Ungrounded candidate promoted* → `assertion.ungrounded_candidate_promoted_to_active` [proposed — ABC §7.10]. *Parse-capped candidate claiming span-backed support* → `source.parse_capped_candidate_claimed_span_backed` [proposed — ABC §7.11]. **Fixtures (Stage 8):** `fixture.assertion.ungrounded_cannot_reach_active`; `fixture.assertion.cu_without_spans_cannot_reach_active` (ties §7.2 R-CU-1); `fixture.assertion.parse_capped_candidate_bounded`. ### §2.5 `AssertionCandidateEmission` — the E3↔E5 handoff (DR-008) + the origin-stamp lock (PCA Lock D) ```typescript /** THE named E3↔E5 handoff object (DR-008; Owner Map line 29; OPA-030). schema_owner = DOC82; * DOC83 GENERATES instances (runtime_instance_flow, Import Graph §2.2 — not a schema import). * PCA Lock D (binding): the emission MUST carry the originating library/scope membership so the * canonical Assertion inherits scope (DOC81) + membership (DOC87). Treatment gates EXTRACTION, * not injection — DOC84 injects by active-scope eligibility, never per-document treatment. */ interface AssertionCandidateEmission extends E0DurableRecord { emission_id: AssertionCandidateEmissionRef; schema_owner: 'DOC82'; produced_by: 'DOC83'; candidate_ref: AssertionCandidateRef; // 1:1 — one emission per candidate (batching is a DOC83 transport concern, not contract shape) recommended_disposition: AssertionCandidateDispositionRef_DOC83; // DOC83-OWNED enum, CONSUMED (see note below) extraction_route_context_ref: ExtractionRouteContextRef; // §5.6 — route is provenance, not identity (ABC §1.2/§7.4) triage_step_trace_ref?: string; // DOC83's ABC §7.7 Step 0–11 trace (DOC83-owned record; referenced) // ---- THE ORIGIN-STAMP BLOCK (PCA Lock D — load-bearing; lint below) ---- origin_scope_ref: ScopeRef; // DOC81 §2.1 — the scope the extraction ran under origin_scope_resolution_ref: ScopeResolutionResultRef; // DOC81 §2.4 — the resolution in force at extraction origin_membership_edge_refs: MemoryMembershipEdgeRef[]; // DOC87 edges (runtime refs; E0 §4.1 brand) — the originating library/container memberships origin_treatment_attestation: 'extracted_under_learned_treatment'; // PCA Lock C/D — extraction implies the source was Learned IN THIS scope; per-document treatment is NOT re-checked at injection // ---- policy-generation carriage (E0 §8.3; Skeletal §11.3) ---- policy_generation_id: PolicyGenerationId; // the generation extraction admission ran under (Step 0) effective_policy_ref: EffectiveMemoryPolicyRef; // DOC81 §3.2 extraction_route_policy_envelope_ref: string; // DOC81 §4.3 (ExtractionRoutePolicyEnvelopeRef; DOC81-owned brand) coordination_trace_ref: MemoryCoordinationTraceRef; // E0 §3.4 reason_codes: ReasonCodeId[]; // E0 §2.1 } /** DOC83-owned 7-value enum (ABC §7.8; Owner Map line 102; DR-006 verified values) — REFERENCED here, * never redefined (Skeletal §10.7: "do NOT relocate AssertionCandidateDisposition; it stays at DOC83"). * Verified value set: durable_eligible | durable_eligible_confirmation_required | session_scoped | * ephemeral_reroute | candidate_only_pending_issueframe | review_queue | reject_not_memory. * The Concept Model §17.3 11-value enum stays RETIRED (G-2); its 4 extra capabilities live at * DOC83's AlternativeExtractionRouting (Owner Map line 103). */ type AssertionCandidateDispositionRef_DOC83 = Brand; ``` **The disposition/resolution seam (Skeletal §10.7, verbatim posture).** DOC83 owns extraction triage and emits a *recommended* disposition. **DOC82 owns `AssertionCandidate`, `AssertionResolution`, `AssertionDedupeOutcome`, and the ABC §7.8 anti-overlap rule** — DOC82 is the canonical resolution authority; no second/overlapping resolution-or-disposition enum may exist anywhere in the family. (The Opening Brief's shorthand "ABC §7.8 enums defined at DOC82 only" is implemented precisely: `AssertionDedupeOutcome` is **defined** here (§2.6); `AssertionCandidateDisposition` is **DOC83-owned and referenced** — Owner Map line 102 is canonical for placement, Skeletal §10.7 for the seam. Neither enum is declared twice; the anti-overlap gate is DOC82's.) **The origin-stamp lock (PCA Lock D — the multi-treatment resolution).** A source may be **Learned in Library A** and merely **Indexed in Library B** (one content-deduped identity, many memberships — Lock C/D). Treatment is an **extraction-time gate**: extraction runs only over sources Learned in the active scope, and the emission stamps *which* scope/membership it ran under. The resulting canonical Assertion/Variant inherits `origin_scope_ref` (DOC81 scope) and the DOC87 memberships minted from `origin_membership_edge_refs`. **DOC84 then injects by active-scope eligibility** (DOC81 scope resolution + DOC87 membership + policy) — never by re-checking per-document library treatment. Cross-scope extracted knowledge routes through DOC81's cross-matter machinery (relevance, not direct injection). **Lint:** `assertion.emission_missing_origin_scope_membership` [canonical — Input Deck / PCA Lock D]. **Lifecycle.** DOC83 emits → DOC82 resolution consumes (§2.6) → resolution either lands the candidate or routes it back (review_queue / reject). If `policy_generation_id` changes between emission (Step 0 admission) and resolution/write, the candidate **re-gates at Step 0** under the new generation (E0 §8.3; Skeletal §11.3; EC resolution-side re-gate per OPA-031). **Unhappy paths.** *Origin-stamp block absent/empty* → blocked + `assertion.emission_missing_origin_scope_membership`. *Emission consumed under a stale policy generation without re-gate* → `ec.policy_generation_changed_without_regate` [canonical — E0 §7.1]. *DOC83 attempts final resolution* → `assertion.doc83_final_resolution_without_doc82` [canonical — Skeletal §10.7]. *A second disposition enum appears* → `assertion.overlapping_resolution_disposition_enum` [canonical — Skeletal §10.7 / E0 §12.1]. **Lints (Stage 9):** the four above + `assertion.emission_without_route_context` [proposed]; `assertion.emission_treatment_attestation_missing` [proposed]. **Fixtures (Stage 8):** `fixture.assertion.emission_origin_stamp_required_and_inherited` (Lock D end-to-end: emission → resolution → variant carries origin scope; DOC87 membership minted); `fixture.assertion.multi_treatment_source_extracted_only_in_learned_scope` (Learned-in-A/Indexed-in-B: extraction fires in A only; injection in B blocked by scope eligibility, not treatment re-check); `fixture.golden.policy_change_mid_extraction_regates` (E0 §18 case). **Cross-charter.** DOC83 (producer; OPA-030), DOC81 (scope/policy refs + cross-matter), DOC87 (membership minting), DOC84 (injects by active-scope eligibility), EC (resolution-side re-gate + write). ### §2.6 `AssertionResolution` + `AssertionDedupeOutcome` (the canonical-resolution pair) ```typescript /** Higher-level resolution audit record (ABC §3.6 verbatim shape + emission_ref per Skeletal §10.7). * schema_owner = DOC82 (Owner Map line 30); DOC83 + EC execute. Resolution confidence is NOT * epistemic confidence (ABC §3.6: "a high-confidence merge means 'same proposition,' not 'true * proposition'"). */ interface AssertionResolution extends E0DurableRecord { resolution_id: AssertionResolutionRef; schema_owner: 'DOC82'; candidate_ref: AssertionCandidateRef; emission_ref: AssertionCandidateEmissionRef; // REQUIRED (Skeletal §10.7 lint) resolution: 'landed' | 'review_queue' | 'rejected_not_memory' | 'rerouted'; // outcome of applying the dedupe outcome under policy; reroute target is DOC83's AlternativeExtractionRouting dedupe_outcome_ref: AssertionDedupeOutcomeRef; target_assertion_ref?: AssertionRef; target_variant_ref?: AssertionVariantRef; equivalence_test_ref?: EquivalenceTestRef; // §2.3 resolution_confidence: number; // 0..1 — same-proposition confidence ONLY support_strength_delta?: number; // ABC §3.6 epistemic_confidence_delta?: number; // ABC §3.6 resolved_by: 'rule' | 'model' | 'human'; resolution_trace_ref: ResolutionTraceRef; review_requirement?: 'none' | 'required' | 'completed'; policy_generation_id: PolicyGenerationId; // re-gate proof (E0 §8.3) scope_resolution_ref: ScopeResolutionResultRef; // DOC81 §2.4 — write gating reads the floor mutation_envelope_ref?: MemoryMutationEnvelopeRef; // E0 §5.1 — set when a durable write commits reason_codes: ReasonCodeId[]; } /** ABC §7.8 verbatim — the dedupe axis, ORTHOGONAL to DOC83's disposition (Owner Map line 31; SM-202). * Defined at DOC82 ONLY. */ interface AssertionDedupeOutcome extends E0DurableRecord { outcome_id: AssertionDedupeOutcomeRef; schema_owner: 'DOC82'; candidate_ref: AssertionCandidateRef; outcome: 'merge_to_existing_variant' | 'add_variant_to_existing_assertion' | 'create_new_assertion' | 'reroute_misclassified'; reroute_to?: string; // ExtractionOutputKind value (DOC83-owned vocabulary; referenced) target_ref?: AssertionRef | AssertionVariantRef; dedupe_basis: Array<'source_span_duplicate' | 'canonical_question_match' | 'semantic_equivalence' | 'authority_citation_match' | 'manual_user_merge' | 'no_match'>; confidence: number; requires_review: boolean; dedupe_basis_generation_id: string; // OPA-031 / E0 §1.5 — EC revalidates via compare-and-swap inside the serialized write embedding_model_ref?: string; // E0 §8.1 — required iff dedupe_basis includes semantic_equivalence embedding_generation_id?: string; } ``` **Write gating (the DOC81 bind).** A resolution may commit a durable write **only** when: (a) the `ScopeResolutionResult` floor permits (`minimum_conservatism_floor` not `fail_closed_candidate` — DOC81 §2.4); (b) the effective policy's **`mutation_authority`** axis allows it — `candidate_only` holds the candidate; `durable_requires_review` forces `review_requirement = 'required'`; `durable_allowed` may commit; `none` blocks (DOC81 §3.0–§3.2); (c) the `AssertionCandidateDisposition` recommendation is honored or **conservatively overridden** (DOC82 may demote a `durable_eligible` recommendation to review; it may never promote past policy); (d) EC revalidates `dedupe_basis_generation_id` by compare-and-swap inside the serialized write (E0 §1.5; OPA-031) — a stale basis re-runs dedupe, never overwrites. **Unhappy paths.** *Resolution without emission ref* → `assertion.doc82_resolution_missing_doc83_emission_ref` [canonical]. *Dedupe committed on a stale generation* → `ec.dedupe_write_without_generation_revalidation` [canonical — E0 §7.1]. *Resolution promotes past the mutation_authority ceiling* → `assertion.resolution_exceeded_mutation_authority` [proposed]. *Resolution-confidence used as truth confidence* → `assertion.resolution_confidence_used_as_epistemic` [proposed — ABC §3.6]. **Lints (Stage 9):** the four above + `assertion.overlapping_resolution_disposition_enum` [canonical]; `assertion.dedupe_semantic_basis_without_embedding_generation` [proposed — E0 §8.1]. **Fixtures (Stage 8):** `fixture.assertion.resolution_respects_floor_and_mutation_authority`; `fixture.assertion.concurrent_dedupe_cas_retries` (E0 §1.5); `fixture.assertion.merge_confidence_is_not_truth_confidence`. **Cross-charter.** EC (serialized write + CAS + re-gate), DOC1 (Write Gate at promotion, §2.8), DOC83 (reroute consumer), DOC85 (resolution outcomes feed learning eligibility). ### §2.7 Merge / Reconciliation / Split / Unmerge (reversible, auditable) ```typescript /** ABC §3.5 verbatim shapes (refs normalized per E0 §8.5). schema_owner = DOC82 (Owner Map line 32; * SM-204); EC executes. Merge must have inverse operations — route-independent resolution only works * if identity can be corrected (ABC §3.5). */ interface AssertionMergeOperation extends E0DurableRecord { operation_id: AssertionOperationRef; schema_owner: 'DOC82'; source_assertion_refs: AssertionRef[]; target_assertion_ref: AssertionRef; merge_basis: AssertionDedupeOutcome['dedupe_basis']; attribute_reconciliation: AssertionMergeReconciliation; policy_restamp_required: boolean; // most-restrictive-until-restamped ⇒ DOC81 §3.4 restamp path mutation_envelope_ref: MemoryMutationEnvelopeRef; // E0 §5.1 reason_codes: ReasonCodeId[]; } /** ABC §3.5 verbatim policy values — these strings ARE the normative merge rules. */ interface AssertionMergeReconciliation { evidence_edges_policy: 'accumulate_all'; contrary_edges_policy: 'accumulate_all'; memberships_policy: 'union_then_validate'; // executed by DOC87 (membership plane) on EC receipt policy_state_policy: 'most_restrictive_until_restamped'; // DOC81 §3.4 restamp is the only widening path warrant_policy: 'most_conservative_until_recomputed'; // §3 recompute, never inherited freshness_policy: 'least_fresh_until_domain_recomputed'; variants_policy: 'preserve_scope_conditions'; utility_policy: 'preserve_context_product_history_not_truth_confidence'; } interface AssertionSplitOperation extends E0DurableRecord { operation_id: AssertionOperationRef; schema_owner: 'DOC82'; original_assertion_ref: AssertionRef; child_assertion_refs: AssertionRef[]; split_basis: ReasonCodeId[]; evidence_reassignment_map: Record; // EvidenceSupportEdgeRef → child membership_reassignment_map: Record; // MemoryMembershipEdgeRef → children (DOC87 executes re-pointing) invalidate_projection_refs: KnowledgeProjectionRef[]; // §9.2 — projections over the split parent invalidate preserve_audit_history: true; mutation_envelope_ref: MemoryMutationEnvelopeRef; } interface AssertionUnmergeOperation extends E0DurableRecord { operation_id: AssertionOperationRef; schema_owner: 'DOC82'; prior_merge_operation_ref: AssertionOperationRef; restored_or_child_assertion_refs: AssertionRef[]; unmerge_basis: ReasonCodeId[]; // incl. embedding-migration recheck (UR-41 — through review, never silent) projection_invalidation_refs: KnowledgeProjectionRef[]; preserve_final_prompt_proof: true; // delivery history survives identity correction (ABC §3.5) mutation_envelope_ref: MemoryMutationEnvelopeRef; } ``` **Normative merge rules (ABC §3.5, verbatim):** identity merges; support edges accumulate; contrary edges accumulate; memberships union then validate; policy/review state takes the most restrictive until restamped; **warrant is recomputed, not inherited**; freshness is least-fresh until domain recomputation; utility history remains delivery history, not truth confidence. **Unhappy paths.** *Merge widens policy without restamp* → `monotonicity.policy_widened_without_restamp` [canonical — E0 §12.1]. *Merge inherits the more permissive warrant* → `assertion.merge_inherited_warrant_without_recompute` [proposed]. *Unmerge without prior-merge ref* → `assertion.unmerge_without_prior_merge` [proposed]. *Silent split on embedding migration* → `embedding.silent_unmerge_on_model_migration` [proposed — UR-41]. **Fixtures (Stage 8):** `fixture.assertion.merge_takes_most_restrictive_policy_and_recomputes_warrant`; `fixture.assertion.unmerge_restores_and_preserves_proof`; `fixture.assertion.split_reassigns_evidence_and_invalidate_projections`. ### §2.8 The full `AssertionLifecycleState` state machine (+ `PromotionGateRecord` + rollup) **Source:** ABC §7.13 (promotion rules — verbatim states/transitions); ADQ-304 (retire/audit_only); ABC §3.11 (safety gate); ABC §7.10 (grounding gate); ADQ-314 (validity flagged at transition); Owner Map line 35 (EC + DOC1 Write Gate execute); B9 (DOC82 owns the whole machine). The machine runs **per variant** (ABC §3.2 puts `lifecycle_state` on the variant); the Assertion-level `lifecycle_rollup` is derived. ```typescript /** The canonical lifecycle states. Each value is source-cited: candidate/provisional/active/confirmed/ * contested/superseded per ABC §7.13; retired/audit_only per ADQ-304. No other states exist. */ type AssertionLifecycleState = | 'candidate' // staged; not durable truth (ABC §7.13) | 'provisional' // resolution completed; policy permits candidate/provisional (ABC §7.13) | 'active' // promoted past the DOC1 Write Gate (ABC §7.13) | 'confirmed' // independently corroborated or user-confirmed (ABC §7.13) | 'contested' // contrary support edge present (ABC §7.13) | 'superseded' // newer assertion/variant covers same canonical proposition with overriding scope (ABC §7.13) | 'retired' // last lawful support edge lost (ADQ-304) or manual retirement | 'audit_only'; // ADQ-304 alternative to retirement — retained for audit, never delivered /** Derived Assertion-level rollup (ABC §3.2 lifecycle_rollup). Derivation rule = §13.6 confirm-seed: * contested if ANY variant contested; else the most-advanced state among non-superseded/retired variants; * audit_only/retired only when ALL variants are. NOT independently writable. */ interface AssertionLifecycleRollup { rollup_state: AssertionLifecycleState; contested_variant_refs: AssertionVariantRef[]; derivation_rule: 'any_contested_else_most_advanced_live_variant'; } /** Record of a promotion-gate decision (E0 §13.1 disposition: PromotionGateRecord → DOC82/E3; * DOC1 Write Gate EXECUTES — Owner Map line 35). One record per provisional→active attempt. */ interface PromotionGateRecord extends E0DurableRecord { gate_record_id: PromotionGateRecordRef; schema_owner: 'DOC82'; variant_ref: AssertionVariantRef; candidate_refs: AssertionCandidateRef[]; gate_executor: 'DOC1'; // Write Gate (Owner Map line 35; ABC §7.13) support_summary: { supporting_edge_count: number; contrary_edge_count: number; non_adversarial_support: boolean }; grounding_state_at_gate: GroundingState; // §2.4 — must not be in the §7.10 barred set validity_check: 'valid' | 'flagged_invalid_combo'; // §3.5 ADQ-314 check runs AT the transition outcome: 'approved' | 'denied' | 'deferred_review'; policy_generation_id: PolicyGenerationId; memory_flow_certificate_ref?: MemoryFlowCertificateId; // DurableWriteMFC on approval (E0 §3.3) reason_codes: ReasonCodeId[]; } ``` **The transition table (the machine — every durable transition is one `MemoryMutationEnvelope` event + `DurableWriteMFC`, EC-serialized):** | # | from → to | trigger | gate (runtime owner) | proof artifact | source | |---|---|---|---|---|---| | T1 | (extraction) → `candidate` | `AssertionCandidateEmission` consumed | DOC82 resolution authority; emission origin-stamp present (Lock D) | emission + coordination trace | ABC §7.13; §2.5 | | T2 | `candidate` → `provisional` | `AssertionResolution` completes; policy permits | DOC81 floor + `mutation_authority` ≥ `candidate_only`; EC CAS on dedupe basis | `DurableWriteMFC` + envelope | ABC §7.13; §2.6 | | T3 | `provisional` → `active` | sufficient non-adversarial source/user/system support **+ DOC1 Write Gate approval** | DOC1 Write Gate (`PromotionGateRecord`); grounding not in {model_synthesis_only, cu_backed_without_spans, ungrounded} (ABC §7.10); ADQ-314 validity check; `mutation_authority` ≥ `durable_requires_review`→review / `durable_allowed` | `PromotionGateRecord` + `DurableWriteMFC` | ABC §7.13; ABC §7.10; ADQ-314 | | T4 | `active` → `confirmed` | independent corroboration OR user confirmation | EC write; corroboration = a second independent supporting `EvidenceSupportEdge` (distinct `SourceRef`) or `user_direct` confirmation | `DurableWriteMFC` | ABC §7.13 | | T5 | any live → `contested` | contrary support edge added (`support_relation: 'contradicts'` or contrary polarity) | automatic on contrary-edge commit; never silent — reason code emitted | edge write envelope | ABC §7.13 | | T6 | `contested` → prior state | contrary support resolved (edge retired/refuted) + warrant recompute trace | EC recompute (§8 polarity-aware trace required) | `WarrantRecomputeTrace` | E0 §12.1 (UR-09); §8 | | T7 | any live → `superseded` | newer assertion/variant covers the same canonical proposition with overriding scope | supersession via `AssertionRelationEdge supersedes`; **safety-class variants require confirmation first** (ABC §3.11) | edge + envelope | ABC §7.13; ABC §3.11 | | T8 | any → `retired` \| `audit_only` | **last lawful support edge from another source lost** (ADQ-304) — per DOC81 §5.1 `LastActiveSupportEdgeEvaluation = 'lost'`; or manual retirement | EC cascade execution (§8); `indeterminate_fail_closed` does NOT retire (DOC81 §5.1) | cascade receipts + envelope | ADQ-304; DOC81 §5.1 | | T9 | `retired`/`audit_only` → `provisional` | **re-proof**: fresh `EvidenceSupportEdge` to a non-revoked source | DOC82 re-proof path (§8.3) — the ONLY eligibility-raising path post-revocation | new edge + `WarrantRecomputeTrace` | Skeletal §11.9; E0 §12.1 | **Machine-wide rules.** (a) **Partial support loss never retires** — warrant degradation only (ADQ-304; §8). (b) The **(temporal_class, epistemic_kind) validity check runs at every lifecycle transition** — invalid combos are flagged, blocking T3+ (ADQ-314; §3.5). (c) `lifecycle_state`, `staleness_state` (§3.4), and `UseWarrant` (§3.3) are **three orthogonal axes**: lifecycle = where the variant is in the machine; staleness = freshness posture; warrant = how it may be used. None substitutes for another. (d) Erasure/restamp/restore of assertion records ride E0 §3.3 certificate shells (`ErasureMFC`/`RestampMFC`/`RestoreMFC`) — the machine adds **no** erasure lifecycle engine (UR-29). (e) No spontaneous transitions: warrant transitions are a closed labeled machine (Skeletal §11.9). **Unhappy paths.** *T3 without `PromotionGateRecord`* → `assertion.promotion_without_write_gate_record` [proposed]. *Auto-supersession of a safety-class variant* → `assertion.safety_class_auto_superseded` [proposed — ABC §3.11]. *Retirement on partial loss* → over-retirement, guarded by DOC81 §5.1 denominator proof (`revocation.last_active_support_edge_boolean_without_denominator` [canonical — DOC81 §5]). *Rollup written independently* → `assertion.lifecycle_rollup_not_derived` [proposed]. *Transition under invalid (temporal, epistemic) combo* → `warrant.invalid_temporal_epistemic_combo_transitioned` [proposed — ADQ-314]. **Lints (Stage 9):** the five above + `assertion.spontaneous_lifecycle_transition` [proposed]; `assertion.audit_only_variant_delivered` [proposed]. **Fixtures (Stage 8):** `fixture.assertion.candidate_to_confirmed_full_path` (T1→T4 with every gate + proof); `fixture.assertion.contrary_edge_contests_then_recompute_restores` (T5/T6); `fixture.assertion.last_edge_lost_retires_partial_degrades` (T8; ADQ-304 — shared with DOC81 §5 fixture); `fixture.assertion.reproof_restores_via_fresh_edge` (T9); `fixture.golden.removed_membership_cannot_inject` consumed from E0 §12.1 (membership lifecycle is DOC87's; listed for the seam). **Cross-charter.** DOC1 (Write Gate execution), EC (every durable transition), DOC81 (floor/authority/restamp), DOC85 (T-outcomes feed learning; learning may never drive T-transitions directly — Skeletal §11.9 learning monotonicity), DOC86 (renders lifecycle + contested state), DOC84 (delivery eligibility honors lifecycle: `audit_only`/`retired` never deliver). --- ## §3. The warrant ladder (E3 — declare) **Source:** ABC §3.8–§3.10 (semantics — verbatim enums + evaluation/composition), §7.13 (degradation ladder + triggers), §11.5 (consequence language — the registry seed); ADQ-314 (the validity table — created at this charter); **PCA Lock A (`principal_authored` — binding)**; ADQ-223 (minimal lock only; deeper work deferred); E0 §2.4 (trigger registry + UR-22 carveout), §13.1 (the four warrant-object slots → DOC82); E0 §2.2 (`warrant_policy_ref` → §3.7); Owner Map line 37 (EC executes warrant evaluation). **Owner:** DOC82 for every schema here. **Executor:** EC (evaluation); DOC84 DAMS substrate executes `time_window`/`confidence` triggers (ADQ-312). ### §3.1 The two classification enums: `TemporalClass` + `EpistemicKind` ```typescript /** ABC §3.8 verbatim — the temporal/kind SPLIT. Kind labels were removed from the temporal enum * (standing_preference / procedure_heuristic / historical_fact are NOT temporal values — ABC §3.8). * This 7-value set supersedes the legacy pre-split "10 temporal classes" count carried in the * Owner Map line-36 note (ABC senior for semantics, DR-001; see §13 flag 4 for the discharge note). */ type TemporalClass = 'instant' | 'session' | 'incident' | 'rolling' | 'bounded' | 'durable' | 'static'; /** ABC §3.8's 8 kinds + `principal_authored` (PCA Lock A — architect lock 2026-06-08; ADQ-223 minimal lock). * principal_authored = the principal's own authoritative-but-not-citable statements (esp. legal statements * of law): first-class sources where the AUTHOR IS THE PRINCIPAL and the SPAN IS THE STATEMENT — not * "system synthesis without spans" (PCA Lock A amends R-CU-1's reach). */ type EpistemicKind = 'status' | 'operational' | 'doctrine' | 'preference' | 'heuristic' | 'historical_fact' | 'diagnosis' | 'subjective_observation' | 'principal_authored'; // PCA Lock A — minimal lock; deeper sub-kinds/settledness DEFERRED to ADQ-223 ``` ### §3.2 `AssertionTemporalProfile` ```typescript /** The temporal profile object (Owner Map line 36 — DAMS V5 + EC consume; SM-008). Carries the class * plus the class-conditional obligations ABC §3.12 imposes. */ interface AssertionTemporalProfile { temporal_class: TemporalClass; reverify_cadence?: string; // ISO-8601 duration; REQUIRED for 'rolling' unless source_watch_binding_ref present (ABC §3.12) source_watch_binding_ref?: string; // a source-watch hook (DOC25/DOC83 watch seam); the ABC §3.12 alternative session_ref?: string; // REQUIRED for 'session' (session-bound expiry — ADQ-312 trigger owner DOC24) incident_ttl_policy_ref?: string; // 'incident' TTL hook (ABC §7.14 stage-1 alignment) bounded_window?: { start: string; end: string }; // 'bounded' in-world window — feeds valid_time } ``` **Rule (ABC §3.12, verbatim):** a `rolling` operational variant without a `reverify_cadence` or `source_watch_binding_ref` is **not spec-valid**. Lint `assertion.rolling_variant_without_reverify_or_watch` [proposed] (§2.2). ### §3.3 `UseWarrant` + `WarrantEvaluationInput`/`WarrantEvaluationResult` ```typescript /** ABC §3.9 verbatim. `do_not_inject` is NOT a delivered-item warrant — it is a considered/excluded-ledger * disposition (ABC §3.9; the ledger is DOC84's ConsideredItemLedger per E0 §13.1). */ type UseWarrant = 'assert' | 'hedge' | 'verify_before_use' | 'orientation_only' | 'search_only'; /** ABC §3.9 verbatim shape (refs branded per E0 §8.5). EC executes the deterministic evaluation. */ interface WarrantEvaluationInput { assertion_variant_ref: AssertionVariantRef; source_support_edges: EvidenceSupportEdgeRef[]; contrary_support_edges: EvidenceSupportEdgeRef[]; source_authority_scopes: SourceAuthorityScopeRef[]; domain_profile_ref?: DomainProfileId; freshness_state: AssertionStalenessState; // §3.4 relation_edges: AssertionRelationEdgeRef[]; policy_render_state: string; // DOC81-derived render posture (PolicyRenderState — DOC81/DOC84 vocabulary; referenced) scope_relation: string; // DOC81 §2.3 ScopeAffinity value; referenced intended_use: 'answer_factually' | 'orient_work' | 'draft_argument' | 'search' | 'export' | 'delegate' | 'carryover'; } /** ABC §3.9 verbatim + E0 §13.1 slot-in (WarrantEvaluationResult → DOC82/E3, beside the §1.8 family). * Owner Map row added at discharge (§14.5). */ interface WarrantEvaluationResult extends E0DurableRecord { result_id: WarrantEvaluationResultRef; schema_owner: 'DOC82'; input: WarrantEvaluationInput; use_warrant: UseWarrant; reason_codes: ReasonCodeId[]; required_checks?: string[]; can_satisfy_factual_query: boolean; can_satisfy_evidence_query: boolean; // honors the ABC §4.4 supportability table (§5.8) } ``` **Required downgrade rules (ABC §3.9, verbatim):** policy blocked → no delivery / blocked_scope_notice; reference-only policy → reference_only_notice / `search_only` posture; freshness unknown in a high-stakes authority context → `verify_before_use`; unresolved contrary support → `hedge` or conflict notice; source-bound synthesis only → `orientation_only` unless source-specific query; model-generated source without backing → `orientation_only` or `search_only`; scope unresolved + sensitive tags → block / ask-user / reference-only. ### §3.4 `AssertionStalenessState` ```typescript /** The freshness axis (named at Skeletal §DOC82 §1.8; consumed by ABC §3.9 freshness_state). * VALUE SET = §13 OPEN flag 3 — no canonical source enumerates it; the four values below are * fragment-cited seeds: 'stale_possible' verbatim from ABC §4.6; 'reverify_due' from the ABC §3.12 * cadence obligation; 'fresh' as the zero state; 'expired_session_bound' from the ADQ-312 * session_bound_expiry trigger. Architect confirms or amends the set. */ type AssertionStalenessState = 'fresh' | 'stale_possible' | 'reverify_due' | 'expired_session_bound'; ``` Staleness transitions are driven by the E0 §2.4 trigger registry (`time_window`, `supporting_CU_stale`, `parse_quality_audit`, `session_bound_expiry`) and by source-population change (ABC §4.6). Staleness **feeds** warrant evaluation (§3.3); it never bypasses it. ### §3.5 The `(temporal_class, epistemic_kind)` validity table (ADQ-314) — incl. `principal_authored` (PCA Lock A) **ADQ-314 (resolved):** "create validity table at Stage 6 E3 charter; invalid combos (e.g., instant_status + standing_preference) flagged at lifecycle transition." The table below is that creation. **Check point:** every §2.8 lifecycle transition runs the check; an invalid combo flags (blocking T3+, per §2.8 rule (b)). Cell values are a **§13.6 confirm-seed** (the table's *existence and check point* are ADQ-314-mandated; the cells are this draft's reasoned proposal). Legend: ✓ = valid; F = flagged-invalid at transition; (✓) = valid with the stated warrant cap. | epistemic_kind \ temporal_class | instant | session | incident | rolling | bounded | durable | static | |---|---|---|---|---|---|---|---| | `status` | ✓ | ✓ | ✓ | ✓ | ✓ | F¹ | F¹ | | `operational` | ✓ | ✓ | ✓ | ✓ | ✓ | F¹ | F¹ | | `doctrine` | F² | F² | F² | (✓)³ | ✓ | ✓ | ✓ | | `preference` | F⁴ | ✓ | F⁴ | ✓ | ✓ | ✓ | F⁵ | | `heuristic` | F⁴ | ✓ | F⁴ | ✓ | ✓ | ✓ | F⁵ | | `historical_fact` | F⁶ | F⁶ | ✓ | F⁶ | ✓ | ✓ | ✓ | | `diagnosis` | ✓ | ✓ | ✓ | ✓ | ✓ | (✓)⁷ | F⁷ | | `subjective_observation` | ✓ | ✓ | ✓ | (✓)⁸ | ✓ | (✓)⁸ | F⁸ | | **`principal_authored`** (Lock A) | F⁹ | ✓ | ✓ | ✓ | ✓ | ✓ | (✓)⁹ | Cell rationales (seed): ¹ a status/operational reading is time-bound by nature — `durable`/`static` status is the ADQ-314 example class of mismatch (the resolved example "instant_status + standing_preference" is, in the split vocabulary, exactly a kind-label/temporal-class crossing). ² doctrine is not an instant/session/incident-lived proposition — short-lived doctrine is a status about doctrine. ³ rolling doctrine requires the ABC §3.12 cadence/watch (tracked-current-law case). ⁴ a preference/heuristic that lives one instant/incident is working state (IssueFrame plane), not reusable truth. ⁵ `static` preference/heuristic over-claims permanence — `durable` is the ceiling (preferences change; ADQ-223's settledness gradient is the deferred refinement). ⁶ a historical fact is not instant/session/rolling-lived; incident-shaped history (a thing that happened) is valid. ⁷ a `durable` diagnosis caps at `verify_before_use` absent re-corroboration; `static` diagnosis over-claims. ⁸ subjective observations stay source/project-bounded (ABC §7.10); rolling/durable subjective carries `hedge` cap; never `static`. ⁹ `principal_authored`: an `instant` principal statement is conversation, not a position (significance/Write-Gate territory — ADQ-223(a)); `static` principal statements are valid but warrant-capped like all of Lock A (below). **The `principal_authored` warrant profile (PCA Lock A — binding; the row's warrant cap, enforced at §3.3 evaluation + §3.8 consequences):** - **MAY:** be injected as **orientation** (`orientation_only`) and ground **hypothesis/drafting framing** (`verify_before_use` ceiling for `draft_argument` intended use), framed to the model as *"principal's stated understanding — not verified authority"* (exact framing string tuned at E7/DOC84+KDA per ADQ-223(c)). - **MAY NOT:** be cited as controlling authority — `UseWarrant` for brief-citation contexts (`answer_factually`/`export` in an authority-demanding domain profile) is **insufficient**; satisfying a citation requires external authority through the normal evidence path (`can_satisfy_evidence_query: false` for principal-authored-only support). - **Source posture:** the principal's statement is a **first-class source** (author = principal; span = the statement) — it flows through `SourceEnvelope` (§5.1, `source_authority_class: 'user_direct'`) and `EvidenceRecord` (`evidence_kind: 'user_direct_statement'`), so R-CU-1 (no-spans ⇒ no support) does **not** bar it: the span exists. - **Deferred (ADQ-223 — do NOT over-build here):** the provisionality gradient (tentative-vs-settled), claim-vs-directive delineation (DOC83 `AlternativeExtractionRouting` / DOC26 split), injection weight + framing tuning (E7/DOC84+KDA), settled-vs-tentative learning (E9). DOC82 lands ONLY the kind + this warrant profile + CU-supersession-lineage consumption (§9.1). **Lints (Stage 9):** `warrant.invalid_temporal_epistemic_combo_transitioned` [proposed — ADQ-314]; `warrant.principal_authored_cited_as_authority` [proposed — PCA Lock A]; `warrant.principal_authored_satisfied_evidence_query` [proposed]. **Fixtures (Stage 8):** `fixture.warrant.invalid_combo_flagged_at_transition` (ADQ-314 example cell); `fixture.warrant.principal_authored_orients_never_cites` (Lock A end-to-end: principal statement → envelope → evidence → variant → orientation injection OK; brief-citation blocked). ### §3.6 `EffectiveWarrant` + composition + the degradation carveout key ```typescript /** ABC §3.10 verbatim (BDSM/DOC8 reference reframed per SM-020/ADQ-221: the tightening adjuster is the * DOC84 DAMS substrate + DOC85 learning — DOC8 is phantom). EC executes the meet. */ interface WarrantInputs { variant_default: UseWarrant; staleness_derived: UseWarrant; policy_derived: UseWarrant; scope_derived: UseWarrant; } interface EffectiveWarrant { effective: UseWarrant; // the MOST CONSERVATIVE of inputs (ABC §3.10) band_floor: UseWarrant; bdsm_adjustment_applied: boolean; // DAMS-substrate tightening only (SM-020) inputs: WarrantInputs; } /** The E0 §2.4 / UR-22 degradation-carveout key. E0 names the enum and defers ownership to the * knowledge/policy planes ("owned by DOC82/DOC81 … referenced, not redefined"); one-owner resolves * it HERE — warrant-degradation exemption is warrant semantics (DOC82); DOC81 consumes for policy * (§14.6 records the disposition). */ type WarrantAuthorityClass = 'user_asserted' | 'authority_fixed' | 'source_derived' | 'inferred'; ``` **Composition rule (ABC §3.10, verbatim):** effective warrant is the most conservative result from variant, staleness, policy, and scope. The DAMS substrate / learning **may only tighten within that band** — it MUST NOT escalate a staleness-derived `verify_before_use` to `assert` (ABC §3.10; learning ceiling per E0 §12.1 UR-47). **Degradation (ABC §7.13 + E0 §2.4).** The ladder: `assert → hedge → verify_before_use → orientation_only → search_only → excluded (do_not_inject disposition)`. Triggers = the E0 §2.4 controlled registry (9 kinds; new kinds require an ADQ). **Carveout (UR-22):** a degradation trigger MUST NOT lower eligibility on `user_asserted`, `authority_fixed`, or user-locked content (static facts, fixed citations/dates/named entities); only `source_derived`/`inferred` content degrades on time/confidence triggers. Trigger **emission** lowers-or-holds only (E0 §2.4); the polarity-aware **recompute** (a contrary-source removal MAY raise net warrant) is §8's, with a mandatory trace. **Lints (Stage 9):** `warrant_trigger.emission_raised_eligibility` [canonical — E0 §2.4]; `warrant_degradation.authority_fixed_fact_degraded` / `warrant_degradation.static_fact_degraded` / `warrant_degradation.user_locked_memory_degraded` [canonical — E0 §2.4]; `warrant.effective_not_most_conservative` [proposed — ABC §3.10]; `warrant.dams_escalated_beyond_band` [proposed — ABC §3.10]. **Fixtures (Stage 8):** `fixture.warrant.effective_is_most_conservative_meet`; `fixture.warrant.user_asserted_fact_immune_to_time_window`; `fixture.warrant.dams_tightens_never_loosens`. ### §3.7 `DomainProfileWarrantPolicy` ```typescript /** Per-domain warrant policy — the value bundle E0 §2.2's DomainProfile.warrant_policy_ref points at * (E0 §13.1 disposition: DomainProfileWarrantPolicy → DOC82/E3; ADQ-313 knob-values-live-with-planes). * Owner Map row added at discharge (§14.5). */ interface DomainProfileWarrantPolicy extends E0DurableRecord { policy_id: string; // referenced by E0 §2.2 ExternalContractRef schema_owner: 'DOC82'; domain_profile_id: DomainProfileId; // FK to E0 §2.2 high_stakes_authority_context: boolean; // drives the ABC §3.9 freshness-unknown → verify_before_use rule default_warrant_by_epistemic_kind: Partial>; // e.g. legal.litigation: doctrine→verify_before_use, principal_authored→orientation_only citation_requires_authority_classes: SourceAuthorityClass[]; // §5.3 — e.g. legal: ['primary_source'] confirmation_requires_independent_source: boolean; // §2.8 T4 corroboration knob staleness_to_warrant_caps: Partial>; } ``` The **conservative fallback** profile (E0 §2.2) maps every kind to its most-restrictive cap (`orientation_only`/`search_only`); a missing profile never fails open (E0 §2.2 fallback rule). Per-profile cell values are §13.6 confirm-seeds. ### §3.8 `WarrantConsequenceRegistry` ```typescript /** The registry of model-visible warrant consequences (E0 §13.1 disposition → DOC82/E3, carrying the * E0 §16.1 item-2 placement flag — §13 flag 1). Seed rows VERBATIM from ABC §11.5; DOC84/KDA consume * the language at render (ABC §11.5 "every nontrivial warrant needs model-visible consequences"). */ interface WarrantConsequenceEntry { use_warrant: UseWarrant; required_consequence_language: string; // the ABC §11.5 cell, verbatim (below) render_constraint: 'scope_freshness_limited' | 'caveated' | 'draft_background_only' | 'orientation_frame_only' | 'availability_signal_only'; lifecycle_state: 'candidate' | 'active' | 'deprecated' | 'retired'; // E0 §1.6 RegistryEntryLifecycleState values } interface WarrantConsequenceRegistry extends E0DurableRecord { registry_id: 'doc82.warrant_consequence_registry'; schema_owner: 'DOC82'; entries: WarrantConsequenceEntry[]; // exactly one ACTIVE entry per UseWarrant value } ``` **Seed entries (ABC §11.5, verbatim):** `assert` → "May be used as stated within listed scope/freshness limits; do not generalize beyond scope." · `hedge` → "Use with caveat; present as likely, partial, contested, or source-limited." · `verify_before_use` → "Drafting/background only; do not present as current authority or final fact without verification." · `orientation_only` → "Orient task framing/sequencing/next steps only; not evidence, authority, or settled fact." · `search_only` → "Availability/navigation signal; do not infer unseen contents." **Plus the Lock A framing entry:** `principal_authored` content renders under its §3.5 framing string regardless of warrant level (exact string tuned at E7 — ADQ-223(c)). **Lints (Stage 9):** `warrant.consequence_entry_missing_for_warrant_value` [proposed]; `warrant.consequence_language_absent_from_render` [proposed — DOC84/KDA enforcement seam]. **Fixture (Stage 8):** `fixture.warrant.every_warrant_has_active_consequence_entry`. **Cross-charter (§3 roll-up).** EC executes evaluation + meet; DOC84 (DAMS tightening; consequence rendering; ADQ-312 time/confidence triggers); DOC85 (proof-gated degradation producer; learning ceiling); DOC81 (`policy_change` trigger → restamp eligibility; policy-derived warrant input); DOC73 (`supporting_CU_stale` trigger); DOC25 (`parse_quality_audit` trigger); DOC24 (`session_bound_expiry`); E0 §2.2 (warrant_policy_ref binding). --- ## §4. `AssertionRelationEdge` (schema only) **Source:** ABC §3.4 (semantics — verbatim); Owner Map line 33 (schema DOC82; **DOC72 stores; EC executes traversal scope checks**; B3 split); DOC81 §8 / ADQ-315 (the traversal-scope-check **policy** is DOC81's — consumed, never redefined). **Owner:** DOC82 (the edge schema only). ```typescript /** Typed assertion-to-assertion relation. schema_owner = DOC82 (Owner Map line 33); DOC72 stores; * EC executes traversal under the DOC81 §8 policy registry. ABC §3.4 verbatim (refs branded; * conflict sets are DERIVED projections over these edges, not a standalone AssertionConflictSet). */ interface AssertionRelationEdge extends E0DurableRecord { edge_id: AssertionRelationEdgeRef; schema_owner: 'DOC82'; source_assertion_variant_ref: AssertionVariantRef; target_assertion_variant_ref: AssertionVariantRef; relation_kind: AssertionRelationKind; relation_warrant: UseWarrant; // §3.3 — the warrant of the RELATION claim itself source_support_refs: EvidenceSupportEdgeRef[]; // §5.5 — relations need support too scope_conditions: ScopeCondition[]; // §2.2 injection_policy?: RelationInjectionPolicy; created_by_resolution_ref?: AssertionResolutionRef; lifecycle_state: 'active' | 'contested' | 'superseded' | 'retired'; // ABC §3.4 (edge-level; distinct from §2.8) // bitemporal carriage per §2.1 contract (Skeletal §11.8) valid_time_start: string; valid_time_end?: string; transaction_time_start: string; transaction_time_end?: string; } /** ABC §3.4 verbatim — 11 kinds. */ type AssertionRelationKind = 'supports' | 'contradicts' | 'qualifies' | 'narrows' | 'broadens' | 'exception_to' | 'supersedes' | 'is_superseded_by' | 'derived_from' | 'analogous_to' | 'same_question_different_scope'; /** ABC §3.4 verbatim. */ type RelationInjectionPolicy = 'do_not_inject' | 'inject_conflict_notice_only' | 'inject_preferred_with_caveat' | 'inject_all_with_comparison' | 'search_only'; ``` **Traversal (consumed from DOC81 §8 — the ADQ-315 split).** The edge **schema** is DOC82's; the **policy table** (`RelationTraversalScopeCheckPolicy`/`Registry`/`Budget`) is DOC81's; **EC executes**. Edge-kind → traversal-purpose mapping (DOC81 §8's closed `RelationTraversalPolicyKind`): `contradicts`/`qualifies`/`exception_to` → `conflict_projection`; `analogous_to` → `analogy`; `supersedes`/`is_superseded_by` → `supersession`; any kind rendered side-by-side → `comparison_injection`. Every traversal for those purposes runs scope-resolution + effective-policy **per related variant** (Round D §3.7 via DOC81 §8); a cross-scope/firewalled/not-disclosable related variant may not render, be summarized, or be named — at most a safe blocked notice if existence-disclosable. Unknown relation kinds default-deny via DOC81's registry. Traversal budgets + cycle handling are DOC81 §8's (`MAX_SCOPE_TRAVERSAL_DEPTH = 16` seed). **Derived conflict sets.** A "conflict set" is a **projection** over `contradicts`/`qualifies` edges (ABC §3.4 rejects a standalone `AssertionConflictSet`) — materialized, it is a `KnowledgeProjection` (§9.2) with source refs + invalidation. **Unhappy paths.** *Traversal without per-variant policy check* → `relation.traversal_without_scope_policy_check` [canonical — DOC81 §8]. *Cross-scope related variant leaked* → `relation.cross_scope_variant_leaked` [canonical — DOC81 §8]. *Edge minted without support* → `relation.edge_without_support_refs` [proposed] (relations are claims; ABC §3.4 `source_support_refs`). *Supersession edge auto-retiring a safety-class variant* → `assertion.safety_class_auto_superseded` (§2.2). **Lints (Stage 9):** the DOC81 §8 set (consumed: `relation.traversal_without_scope_policy_check`, `relation.cross_scope_variant_leaked`, `relation.analogy_traversal_bypassed_policy`, `relation.unknown_kind_without_default_deny`) + `relation.edge_without_support_refs` [proposed]; `relation.conflict_set_materialized_as_canonical` [proposed — must be a projection]. **Fixtures (Stage 8):** `fixture.relation.cross_scope_traversal_gated` (shared with DOC81 §8); `fixture.relation.contradicts_edge_contests_target` (ties §2.8 T5); `fixture.relation.conflict_set_is_projection_with_invalidation`. **Cross-charter.** DOC81 (policy table), EC (traversal execution + writes), DOC72 (storage), DOC84 (honors `RelationInjectionPolicy` + comparison gating), DOC86 (safe blocked notice). --- ## §5. Source + Evidence (E4 — declare + validate) **Source:** Owner Map lines 52–61 (placement + the envelope's field charter: "source ref, kind, authority, visibility, parse quality, injection risk, materialization"); ABC §4.1–§4.4 (semantics), §7.4 (route context), §7.10–§7.12 (grounding/parse/formatting), §11.6 (injection-risk vocabulary); **PCA Lock C/D + Finding 2 (binding)**; DOC73 §8.2 (span shape); DOC25 V2.0 (artifact/segment/dedupe — consumed); E0 §8.2 (edge temporal snapshot). **Owner:** DOC82 for every schema here (the *interface*); DOC25 owns artifacts/segments/sidecars/materialization; DOC72 stores evidence graph payload; EC writes. ### §5.1 `SourceEnvelope` — the one source-bound-discipline gateway (PCA Lock C/D) ```typescript /** THE source interface. schema_owner = DOC82 (Owner Map line 52; ABC §1.3 family 2). DOC83 consumes * (extraction); DOC84/DOC86 consume (delivery/inspection); DOC25 supplies the artifact side. * LOCK C/D (binding, PCA 2026-06-08): library-agnostic + multi-membership-safe — ONE content-deduped * source identity, MANY memberships. The envelope therefore carries NO library/treatment field: * memberships are DOC87 edges pointing at source_ref; treatment statuses live at DOC87/DOC26/DOC81. */ interface SourceEnvelope extends E0DurableRecord { envelope_id: SourceEnvelopeRef; schema_owner: 'DOC82'; source_ref: SourceRef; // the content-deduped single source identity (Lock C/D) content_hash: ContentHash; // dedupe anchor — same content ⇒ same source_ref (DOC25 §13 cross-surface dedupe executes; policy-zone split per DOC25 Q2 is honored: a different policy zone is a different source INSTANCE, referenced via source_instance_refs) source_instance_refs?: string[]; // DOC25 source_instance_ids when policy zones split instances (DOC25 V2.0 Q2; provenance only) source_kind: { owner_doc: 'DOC25'; registry_id: string; value_id: string; registry_version: SchemaVersionRef }; // ExternalVocabularyValueRef form (DOC81 §0) into the DOC25-owned artifact/surface-kind vocabulary (DOC25 V2.0 scope seed: corpus/email/browser/chat/demonstration/task_output/autonomous/direct_upload — §13.2 seed) source_artifact_ref?: SourceArtifactRef; // DOC25 (OBL-D25-O-SOURCEARTIFACT-01); optional — docket-text observations exist without an artifact (V3-AT-18, §10.4) // ---- authority ---- authority_scope_ref: SourceAuthorityScopeRef; // §5.3 source_authority_class: SourceAuthorityClass; // §5.3 (denormalized for hot-path bounding) // ---- visibility ---- visibility_class: VisibilityClassRef; // §13 flag 5 — PropA-vs-DOC82 vocabulary owner; carried as versioned external ref, never a loose string // ---- parse quality ---- parse_quality_sidecar_ref?: SourceParseQualitySidecarRef; // DOC25 (SM-207; ADQ-303 thresholds at DOC25/DAMS); §5.7 consumption // ---- injection risk ---- prompt_injection_risk: 'none' | 'low' | 'medium' | 'high' | 'unresolved'; // ABC §11.6 verbatim vocabulary injection_isolation_ref?: string; // DOC25 isolation wrapper receipt (OBL-D25-PROMPTINJ-01) // ---- materialization ---- materialization_state_ref?: MaterializationStateRef; // DOC25 (ADQ-401 — file-materialization stays DOC25) // ---- corpus/ingestion provenance (provenance ONLY — never membership, authority, or identity; Finding 2) ---- origin_corpus_refs?: CorpusOrSourceCollectionRef[]; // DOC25 CorpusIndex/SourceCollection ids library_source_binding_refs?: LibrarySourceBindingRef[]; // DOC25 bindings (consumed via §6.2 contract) // ---- source-version semantics (generic hook; legal-profile instantiation at §10.5) ---- source_version_ref?: string; // this envelope's version id within a version family supersedes_envelope_ref?: SourceEnvelopeRef; revocation_state: 'not_revoked' | 'revoked' | 'integrity_failed'; // §8 payload drives transitions; DOC81 §5.1 trigger_reason vocabulary governs causes } ``` **Lock C/D rules (binding).** (1) **One identity:** the same content reaching the system through any surface resolves to one `source_ref` (content-deduped; DOC25 executes dedupe; route is provenance — ABC §1.2). (2) **Library-agnostic:** no field on the envelope names a Library, a treatment status, or a membership — those are DOC87 edges / DOC87-DOC26-DOC81 statuses. (3) **Multi-membership-safe:** N libraries may hold membership edges to one `source_ref` with different treatments; the envelope is unchanged by membership churn. (4) **Provenance ≠ authority:** `origin_corpus_refs` and binding refs explain *where it came from*; they confer no authority (membership confers no source authority — Skeletal §10.4). **Unhappy paths.** *Envelope carries a library/treatment field* → `source.envelope_carries_library_or_treatment_state` [proposed — Lock C/D]. *Two envelopes for one content identity (un-deduped)* → `source.duplicate_envelope_for_content_identity` [proposed]. *Injection-risk `high`/`unresolved` content rendered outside a source sandbox* → ABC §11.6 rule; enforcement at DOC84/DOC24 render (`source.adversarial_text_rendered_unsandboxed` [proposed]; execution seam noted at §12). *Envelope minted without authority scope* → `source.envelope_missing_authority_scope` [proposed]. **Lints (Stage 9):** the four above + `source.doc82_redefined_corpus_container` [canonical — Input Deck / PCA] (fires if DOC82 ever declares a Library/Corpus/CorpusIndex/SourceCollection/LibrarySourceBinding schema). **Fixtures (Stage 8):** `fixture.source.one_content_identity_many_memberships` (Lock C/D: one envelope; Learned-in-A + Indexed-in-B memberships at DOC87; envelope unchanged); `fixture.source.policy_zone_split_preserved` (DOC25 Q2 — firewalled vs ambient instances don't collapse); `fixture.source.unresolved_injection_risk_sandboxed`. ### §5.2 The pointer types: `SourceRegionRef` / `SourceSegmentRef` + `VisualGroundingState` ```typescript /** ABC §4.3 verbatim — region-level grounding pointer INTO a DOC25 artifact. schema_owner = DOC82 * (Owner Map line 55); DOC25 generates refs; DOC82 consumes. */ interface SourceRegionRef { source_id: SourceRef; page_index?: number; bbox_normalized_1000?: [number, number, number, number]; element_label?: 'text' | 'table' | 'picture' | 'page_header' | 'page_footer' | 'caption' | 'footnote' | 'formula' | 'section_header' | 'title'; region_hash?: ContentHash; schema_version: 1; } /** Span/segment pointer into a DOC25 ArtifactSegment — the normalization target for DOC73's * source_spans {document_ref, span_start, span_end, span_hash} (DOC73 §8.2; PCA Finding 1 mapping row). * schema_owner = DOC82 (Owner Map line 55). ABC's loose `SourceSpanRef` resolves to THIS type. */ interface SourceSegmentRef { source_ref: SourceRef; source_artifact_ref?: SourceArtifactRef; // DOC25 artifact (absent for artifact-less observations, V3-AT-18) artifact_segment_ref?: ArtifactSegmentRef; // DOC25 segment id span_start?: number; // DOC73 §8.2 span fields span_end?: number; span_hash?: ContentHash; // tamper-evidence + dedupe basis 'source_span_duplicate' schema_version: 1; } /** ABC §4.3 verbatim (Owner Map line 61 — DOC82 owns; DOC25 generates). NO separate * GroundedEvidenceSupportEdge exists — EvidenceSupportEdge is extended instead (ABC §4.3). */ type VisualGroundingState = 'localized_classified_attributed' | 'localized_only' | 'attribution_uncertain' | 'ungrounded_text_only' | 'grounding_not_available'; ``` **Lint:** `source.span_ref_without_hash_on_dedupe_basis` [proposed] (a `source_span_duplicate` dedupe claim requires `span_hash`). **Fixture:** `fixture.source.doc73_spans_map_to_segment_refs` (PCA Finding 1 mapping row exercised). ### §5.3 `SourceAuthorityScope` + `SourceAuthorityClass` ```typescript /** ABC §4.1 verbatim. schema_owner = DOC82 (Owner Map line 59); DOC25 + EC + PropA consume. */ interface SourceAuthorityScope extends E0DurableRecord { scope_id: SourceAuthorityScopeRef; schema_owner: 'DOC82'; source_ref: SourceRef; authority_class: SourceAuthorityClass; authoritative_for: Array<'user_preference' | 'user_instruction' | 'observed_system_event' | 'source_self_description' | 'party_position' | 'legal_authority' | 'domain_authority' | 'task_execution_record' | 'model_generated_text' | 'unknown'>; not_authoritative_for?: string[]; } /** ABC §4.1 verbatim — 8 classes. */ type SourceAuthorityClass = 'user_direct' | 'primary_source' | 'secondary_source' | 'model_generated' | 'system_observed' | 'party_argument' | 'task_output' | 'unknown'; ``` **Rule (ABC §4.1, verbatim):** a source is authoritative **only** for the scope declared by `SourceAuthorityScope`. A party brief is primary evidence of *what the party argued*, not primary authority for the legal rule asserted. (`principal_authored` content is `user_direct` class, authoritative_for `user_instruction`/`party_position`-analogous uses — never `legal_authority`; Lock A.) **Lints:** `source.authority_exceeded_declared_scope` [proposed]; `source.party_argument_used_as_rule_authority` [proposed — the ABC §4.1 brief rule]. **Fixture:** `fixture.source.party_brief_grounds_position_not_rule`. ### §5.4 `EvidenceRecord` ```typescript /** ABC §4.2 verbatim (refs branded). schema_owner = DOC82 (Owner Map line 57; SM-200); DOC72 stores; * EC writes. Evidence is NOT truth-apt (E0 §6.2 row). */ interface EvidenceRecord extends E0DurableRecord { evidence_id: EvidenceRecordRef; schema_owner: 'DOC82'; source_envelope_ref: SourceEnvelopeRef; source_segment_refs: SourceSegmentRef[]; // ABC's source_span_refs → §5.2 type observed_content_summary: string; evidence_kind: 'quoted_text' | 'summarized_source_content' | 'system_observation' | 'task_output_record' | 'user_direct_statement' | 'citation_or_authority' | 'metadata_observation'; evidence_for_ref?: AssertionRef | AssertionCandidateRef | string; // IssueFrameQuestionRef (DOC83-owned; referenced) support_polarity?: 'supporting' | 'contrary' | 'mixed'; prompt_injection_risk?: 'none' | 'low' | 'medium' | 'high' | 'unresolved'; // ABC §11.6 vocabulary (per-record override of the envelope's) extraction_quality_band?: 'high' | 'medium' | 'low' | 'unacceptable'; // ABC §7.11 score_band vocabulary (ExtractionQuality is referenced-only in ABC; the band is the cited value set) } ``` ### §5.5 `EvidenceSupportEdge` (support_relation — ABC §4.2) ```typescript /** THE support edge. ABC §4.2 verbatim + the E0 §8.2 bitemporal source-span snapshot. schema_owner = * DOC82 (Owner Map line 58; SM-200 — contrary edges MANDATORY, E0 §6.2); DOC72 stores; EC writes. */ interface EvidenceSupportEdge extends E0DurableRecord { edge_id: EvidenceSupportEdgeRef; schema_owner: 'DOC82'; evidence_ref: EvidenceRecordRef | SourceSegmentRef | ConsolidatedUnderstandingRef; // CU allowed ONLY under §7.2 R-CU-1 (underlying spans exist) assertion_variant_ref: AssertionVariantRef; support_relation: 'supports' | 'contradicts' | 'qualifies' | 'reports' | 'mentions_only'; // ABC §4.2 — 5 values support_role: 'primary_authority' | 'secondary_authority' | 'party_argument' | 'user_direct' | 'system_observed' | 'model_generated' | 'task_output' | 'unknown'; support_polarity?: 'supporting' | 'contrary' | 'mixed'; authority_scope_ref?: SourceAuthorityScopeRef; confidence_contribution?: number; requires_review: boolean; source_region_refs?: SourceRegionRef[]; // ABC §4.3 — extend the edge, no separate grounded-edge type visual_grounding_state?: VisualGroundingState; parse_quality_sidecar_ref?: SourceParseQualitySidecarRef; edge_status: 'active' | 'invalidated' | 'verify_required'; // §8 — the DOC82 plane outcome vocabulary (E0 §12.1 / DOC81 §5.1) // ---- bitemporal source-span snapshot (E0 §8.2: "EvidenceSupportEdge carries the valid_time / // transaction_time of the underlying source-span snapshot") ---- span_snapshot_valid_time_start: string; span_snapshot_valid_time_end?: string; span_snapshot_transaction_time: string; } ``` **Edge rules.** (1) **Span-resolvable:** every supporting/contradicting edge must resolve to spans/regions or a span-backed evidence record — the not-evidence guardrail (§11.2) blocks orientation objects. (2) **Contrary edges are mandatory carriage** (E0 §6.2 SM-200 note): a contradicting edge is never dropped, merged away (ABC §3.5 `accumulate_all`), or filtered before warrant evaluation. (3) **Status is cascade-driven:** `invalidated`/`verify_required` transitions come from §8 (E0 §12.1 required outcome), never ad hoc. (4) A CU `evidence_ref` is lawful only via §7.2 (R-CU-1/R-CU-3). **Unhappy paths.** *Edge to a revoked source still `active`* → `revocation.support_edge_survives_revoked_source` [canonical — E0 §12.1]. *Snapshot fields absent* → `bitemporal.evidence_edge_missing_source_span_temporal_snapshot` [canonical — Skeletal §11.8]. *Contrary edge suppressed pre-evaluation* → `assertion.contrary_edges_not_accumulated` [proposed]. *mentions_only edge counted as support* → `evidence.mentions_only_counted_as_support` [proposed]. **Lints (Stage 9):** the four above. **Fixtures (Stage 8):** `fixture.evidence.contrary_edge_survives_merge_and_drives_contested`; `fixture.evidence.edge_snapshot_supports_as_of_queries`; `fixture.evidence.mentions_only_never_supports_warrant`. ### §5.6 `ExtractionRouteContext` (route is provenance, not identity) ```typescript /** ABC §7.4 verbatim (refs branded). schema_owner = DOC82 (Owner Map line 60; SM-201); DOC83 + DOC25 * consume; instances flow DOC83→downstream at runtime. Route may drive significance config, * adversarial-source clamps, permitted outputs, policy clamps, memberships, review requirements, * learning tags — route MUST NOT drive canonical identity (ABC §1.2/§7.4). */ interface ExtractionRouteContext extends E0DurableRecord { route_context_id: ExtractionRouteContextRef; schema_owner: 'DOC82'; route: 'library_ingestion' | 'corpus_deep_extraction' | 'topic_collection' | 'chat_capture' | 'room_capture' | 'project_mode_capture' | 'task_output_extraction' | 'browser_capture' | 'note_capture' | 'email_capture' | 'calendar_capture' | 'manual_user_add' | 'nightly_backfill' | 'cu_derived' | 'external_llm_carryover'; // ABC §7.4 — 15 routes verbatim surface_ref?: string; // SurfaceRef (DOC81 §0 brand; referenced) initiating_principal: 'user' | 'system' | 'scheduled_task' | 'extraction_agent'; triggering_directive_ref?: string; // TopicCollectionDirectiveRef (DOC83-owned; referenced) work_session_ref?: string; work_episode_ref?: string; // DOC83-owned; referenced collection_mode: 'do_not_collect' | 'observe_only' | 'extract_candidate' | 'extract_durable_eligible' | 'deep_extract'; // ABC §7.4 (DOC81 §7.1 suppression governance gates upstream) permitted_output_kinds: string[]; // ExtractionOutputKind values (DOC83-owned vocabulary; referenced) policy_decision_ref: string; // MemoryPolicyDecisionRef (DOC81 §3.1; referenced) policy_generation_id: PolicyGenerationId; corpus_scope_refs?: CorpusOrSourceCollectionRef[]; // PCA Finding 2: "corpus-scope extraction is carried as route metadata … not a new DOC82 container" reason_codes: ReasonCodeId[]; } ``` **Lints:** `route.context_drove_canonical_identity` [proposed — ABC §1.2/§7.4 rule: same statement via different routes must produce the same identity signature]; `route.corpus_scope_modeled_as_container` [proposed — Finding 2]. **Fixture:** `fixture.route.same_statement_two_routes_one_assertion` (ABC §1.2 route-independence end-to-end). ### §5.7 Parse-quality consumption (bounds candidate eligibility — ADQ-303 posture) DOC25 owns `SourceParseQualitySidecar` (SM-207) and the **numeric thresholds** (ADQ-303 — domain-profile-specific; owner DAMS/DOC25; thresholds are **not** set here). DOC82 consumes the sidecar's `downstream_bounds` (ABC §7.11): `max_grounding_state`, `may_support_assertion_candidate`, `may_support_evidence_record`, `may_support_cu`, `requires_review`. **Binding rules (ABC §7.11, verbatim):** a document-derived candidate cannot claim `span_backed` or active support unless parse quality suffices; content-faithfulness failed/unknown/unacceptable caps downstream candidates at review-required or evidence/CU-only; table-derived candidates require verified headers/cell relations; chart-derived numeric claims require verified data points; strikethrough/deletion markup is never current operative text (ABC §7.12 `SemanticFormattingSignal` — DOC25/DOC83 consume; DOC82 §5.7 enforces the support cap). **Lints (Stage 9):** `source.parse_capped_candidate_claimed_span_backed` [proposed]; `evidence.support_edge_exceeds_parse_quality_bounds` [proposed]; `source.struck_text_supported_assertion` [proposed — ABC §7.12]. **Fixtures (Stage 8):** `fixture.source.failed_faithfulness_caps_candidate`; `fixture.source.struck_text_cannot_support`. ### §5.8 The static supportability posture (ABC §4.4) The ABC §4.4 supportability table is consumed as the **static-by-object-kind** rule set (a static table, not a per-object enum — ABC §1.4). DOC82-plane rows (verbatim): Assertion/AssertionVariant = `can_ground_truth` (factual yes; evidence only with support edges; must respect warrant); EvidenceRecord = `can_ground_source_specific_truth` (source-specific only; evidence yes, requires source role); ConsolidatedUnderstanding = `can_ground_source_specific_truth` (evidence **only if source spans survive**; no general truth — ADQ-219). Non-DOC82 rows (Library/Corpus/RecentActivityRollup/IssueFrame/TopicLens etc. = `can_orient_only`; proof artifacts/DAMS output/utility ledgers = `cannot_ground_truth`) are honored via the §11.2 not-evidence guardrail. `WarrantEvaluationResult.can_satisfy_evidence_query` (§3.3) implements this table. --- ## §6. The corpus-hierarchy interface (ADQ-202 — RESOLVED; drafted FROM PCA Finding 2 + Locks C/D) **Source:** ADQ-202 (resolved Stage 4; hierarchy executed at PCA Finding 2 — **this section drafts FROM it**); ADQ-PASS2-02 (DOC87 owns the corpus↔library identity mapping); ABC §6.5 (Library/Corpus not synonymous; dedupe through canonical keys); Owner Map lines 63–65 + DOC87 §2.4 (containers elsewhere); Skeletal §11.13 (decomposition was gated on ADQ-202 — now resolved); ADQ-401/402 (DOC25 completion obligations). **Owner:** DOC82 owns the **interface** (envelope + pointers + consumption contracts) and **NO container schema**. ### §6.1 The 5-layer hierarchy (PCA Finding 2 — the ADQ-202 landing) | layer | what it is | owner | DOC82's relationship | |---|---|---|---| | **Library** | user-visible organizational container (curated set + treatment + access policy) | **DOC87** (container + corpus↔library identity mapping, ADQ-PASS2-02/ADQ-220); DOC26/DOC81 (treatment/access policy) | consumes the identity term as upstream vocabulary; never owns; never names it on the envelope (Lock C/D) | | **Corpus / SourceCollection / CorpusIndex** | internal ingestion/aggregation behind Libraries — provider profiles, dedupe, corpus-scope | **DOC25** (storage; ADQ-202: internal, NOT a user-facing parallel Library) | consumes corpus provenance via `ExtractionRouteContext.corpus_scope_refs` (§5.6) + envelope provenance refs (§5.1); never owns the container | | **Source** | one content-deduped source | **DOC25** `SourceArtifact` (the artifact) / **DOC82** `SourceEnvelope` (the discipline interface) | **owns `SourceEnvelope`** (§5.1) — the single gateway | | **Artifact / Segment** | parsed document + segmentation | **DOC25** (`SourceArtifact`/`ArtifactSegment`/`SourceParseQualitySidecar`) | **owns the pointer types** `SourceRegionRef`/`SourceSegmentRef` (§5.2) + consumes parse-quality bounds (§5.7) | **The library≠corpus separation (architect-confirmed, PCA "Also confirmed"):** the **user-facing Library** (DOC87/DOC26/DOC81) and the **ingestion Corpus** (DOC25) are DISTINCT objects with distinct owners; neither is renamed into the other; a `LibrarySourceSlice` and a corpus-level view dedupe through canonical source/span/assertion keys before rendering (ABC §6.5 temporary rule — now permanent under this interface). ### §6.2 `LibrarySourceBindingConsumptionContract` ```typescript /** DOC82's consumption side of DOC25's LibrarySourceBinding (Owner Map line 64 — distinct row from the * DOC25-owned binding schema, line 63; B2 step 6 decomposition). Source-bound discipline flows through * SourceEnvelope; the binding never becomes a truth or authority object. */ interface LibrarySourceBindingConsumptionContract extends E0DurableRecord { contract_id: LibrarySourceBindingConsumptionContractRef; schema_owner: 'DOC82'; binding_ref: LibrarySourceBindingRef; // DOC25-owned source_ref: SourceRef; // resolves to the §5.1 envelope (one identity) consumption_rules: { binding_confers_authority: false; // membership/binding ≠ authority (Skeletal §10.4) binding_confers_truth: false; envelope_is_sole_source_gateway: true; // no extraction/evidence path reads a binding directly }; reason_codes: ReasonCodeId[]; } ``` **Cross-doc completion obligations (recorded, owned elsewhere):** **ADQ-402** — DOC73 corpus-source-bindings, `minimum_completion_for_v5 = schema_plus_lints_and_fixtures`, **depends on ADQ-202 (now resolved — unblocked)**; **ADQ-401** — DOC25 file-materialization + provider profiles, `schema_plus_owner_boundary`. Both are DOC25/DOC73-side completions; DOC82 records the dependency direction only. **DR-002** (LibrarySourceBinding/CorpusIndex/SourceCollection Supersession-Matrix rows) stays a logged matrix gap (Import Graph §5.1 footnote) — rows ride the next matrix update; §14.7 carries the discharge pointer. ### §6.3 The no-container rule + lint DOC82 declares **zero** container schemas. Any DOC82-side declaration of `Library`, `Corpus`, `CorpusIndex`, `SourceCollection`, or `LibrarySourceBinding` fires `source.doc82_redefined_corpus_container` [canonical — Input Deck/PCA]. "Corpus-scope extraction" is route metadata (§5.6), never a DOC82 container. The Skeletal §11.13 gate (`library.decomposition_fragmented_before_adq_202_resolution`) is **discharged by this section** — ADQ-202 is resolved at this charter; the four owners (DOC87 container / DOC25 bindings / DOC82 interface / DOC86-DOC20 UI) may now draft their portions against §6.1. ### §6.4 The Indexed = source-memory posture (PCA Lock C — the consumption stance) **Lock C (architect-confirmed, 2026-06-08):** **Linked** = accessible on demand (not yet memory) < **Indexed** = the source IS durably in memory — a durable `SourceEnvelope` (DOC82) + DOC25 document intelligence; retrievable, citable, version-comparable; **NO Assertions/CUs mined from it** < **Learned** = Indexed PLUS DOC83 extraction has run → Assertions/CUs in the knowledge graph. DOC82's posture rules: (1) **"Source in memory" (Indexed or Learned) is DISTINCT from "knowledge mined from it" (Learned only)** — an Indexed source supports retrieval/citation of *the source itself* (source-specific queries via EvidenceRecord paths) but grounds **no** reusable Assertion until extraction runs. (2) Source durability begins at **Indexed** (the envelope is durable); assertion durability begins at **Learned** (the §2 pipeline). (3) The treatment statuses themselves (and their names) are **DOC87/DOC26/DOC81-owned** — DOC82 consumes the posture, never the status vocabulary. (4) ABC §6.6's naming caution ("avoid 'Learned' — implies Library-owned truth") is **discharged by Lock D**: treatment gates *extraction*, the resulting Assertions carry scope+membership inherited from the origin-stamp, and the library confers no truth (Skeletal §10.4) — the architect's later lock (2026-06-08) governs the vocabulary; the concern ABC encoded is enforced structurally rather than by avoiding the word. **Lints (Stage 9):** `source.indexed_source_grounded_assertion_without_extraction` [proposed — Lock C]; `source.linked_source_treated_as_in_memory` [proposed]. **Fixtures (Stage 8):** `fixture.source.indexed_retrievable_citable_not_mined`; `fixture.source.learned_requires_extraction_run`. **Cross-charter (§6 roll-up).** DOC87 (Library container + identity mapping + membership edges), DOC25 (corpus storage + bindings + ADQ-401/402 completions), DOC26/DOC81 (treatment/access policy), DOC83 (extraction gate reads treatment at extraction time — Lock D), DOC24 (consumes the corpus↔library mapping at search/onboarding; does not own — ADQ-PASS2-02). --- ## §7. CU consumption (ADQ-219 — RESOLVED = DIRECT CONSUME; drafted FROM PCA Finding 1) **Source:** ADQ-219 (resolved conditional rule, Stage 4); **PCA Finding 1 (the executed reconciliation — DIRECT CONSUME; adapter dormant→documented-not-built per Lock B)**; ABC §4.5 (the support contract — DOC73-owned per Owner Map line 40); DOC73 Artifact 1 §8.2 + Artifact 3 §9.2 (CU schema; INV-MVC-CU-1); OPA-035 (convergence obligation — **recorded as "convergence found, no adapter activation"**); OBL-D73-N-NOT-EVIDENCE-INV-01 (§10.3). **Owner:** DOC73 owns CU semantics + the `ConsolidatedUnderstandingSupportContract`; **DOC82 owns only this thin consumption binding.** ### §7.1 The reconciliation result (recorded, not re-opened) PCA Finding 1: DOC73's CU **matches** the source-bound-synthesis contract on both load-bearing axes — (1) source-span backing required (DOC73 INV-MVC-CU-1 non-empty `source_spans` ≡ ABC §4.5 `source_span_refs[]`); (2) never canonical reusable truth (DOC73's span-less fallback is framed "system synthesis; NOT cited as authority for legal work-product" ≡ ABC §4.5's "CU text alone may not support a reusable Assertion"). DOC73's extra richness (compositional reasoning, typed-input roles, aggregated authority, nesting) lives on DOC73's side; DOC82 consumes only the thin contract. **No divergence ⇒ direct consume; OPA-035 NOT triggered** — recorded as *"reconciliation found convergence — no adapter activation."* ### §7.2 The consumption binding (the thin schema) + the three guardrails ```typescript /** DOC82's binding of the DOC73-owned ConsolidatedUnderstandingSupportContract (ABC §4.5; Owner Map * line 40 — DOC73 owns the contract; DOC82 consumes). One row per CU consumed into the truth plane. * PCA Finding 1 mapping table, formalized. */ interface CuConsumptionBinding extends E0DurableRecord { binding_id: CuConsumptionBindingRef; schema_owner: 'DOC82'; cu_ref: ConsolidatedUnderstandingRef; // reference only — DOC82 NEVER mutates a CU display_kind_at_binding: 'synthesis_with_spans' | 'synthesis_summary_no_spans'; // DOC73 §8.2 verbatim enum source_segment_refs: SourceSegmentRef[]; // DOC73 source_spans[] mapped per §5.2 (PCA row 2) synthesis_quality_band: 'high' | 'medium' | 'low' | 'unacceptable'; // derived from display_kind + extraction state (PCA row 3); feeds §5.7-style eligibility bounding can_support_assertion_directly: boolean; // FORCED false whenever display_kind = synthesis_summary_no_spans (PCA row 4 — no spans ⇒ no support edge, EVER) support_conditions?: string[]; // ABC §4.5 passthrough cu_supersession_lineage_ref?: VersionedClaimRef; // DOC73 supersedes-lineage hook (ADQ-223 consumption; §9.1) } ``` **The three guardrails (PCA Finding 1 — binding; each is a §11 invariant with the full triple):** - **R-CU-1 (no-spans ⇒ no support):** a `synthesis_summary_no_spans` CU can NEVER back an `EvidenceSupportEdge` or support an Assertion — the legal-work-product safety rule. Lint `cu.no_spans_supported_assertion` [canonical — PCA]. *(Lock A boundary: a principal-authored statement is NOT a span-less CU — the statement IS the span, §3.5; R-CU-1 does not bar it.)* - **R-CU-2 (CU authority ≠ DOC82 warrant):** DOC73's internal `cu_authority` (aggregation score) is NOT inherited as `EffectiveWarrant`. A CU-derived candidate runs the canonical pipeline on its **source spans**, not DOC73's score. Lint `cu.authority_used_as_warrant` [canonical — PCA]. - **R-CU-3 (CU is synthesis, not evidence):** consuming a CU MUST NOT auto-create an `EvidenceSupportEdge` — the *spans* (via EvidenceRecord) are the evidence, not the CU (ties OBL-D73-N-NOT-EVIDENCE-INV-01, §10.3/§11.2). Lint `cu.consumption_auto_created_support_edge` [proposed]. **Grounding tie-in (ABC §7.10):** a CU-derived candidate is `cu_backed_with_underlying_spans` (eligible) or `cu_backed_without_spans` (**cannot promote to active**, §2.8 T3) — the §7.10 rule and R-CU-1 are the same gate seen from two planes. **Unhappy paths.** *Span-less CU offered as edge `evidence_ref`* → blocked + `cu.no_spans_supported_assertion`. *cu_authority copied into warrant inputs* → `cu.authority_used_as_warrant`. *CU mutation attempted from DOC82* → `cu.mutated_by_consumer` [proposed]. *Stale CU (DOC73 `supporting_CU_stale` trigger, E0 §2.4)* → staleness propagates to dependent variants (§3.4); never silent. **Fixtures (Stage 8):** `fixture.cu.no_spans_cannot_support` (R-CU-1); `fixture.cu.authority_not_inherited_as_warrant` (R-CU-2); `fixture.cu.consumption_never_auto_creates_edge` (R-CU-3); `fixture.cu.spanned_cu_supports_via_segment_refs` (the happy path: CU → spans → EvidenceRecord → edge → variant). ### §7.3 Cluster-detection read-model consumption (ADQ-PASS2-01) `PBEClusterDetectionResult` is **DOC73-owned** (DOC72 stores; EC writes — ADQ-PASS2-01). DOC82 consumes a **minimum read-model projection** (`ClusterDetectionReadModelRef`) as equivalence **hints** into `EquivalenceTest.signals` (§2.3) — hints may propose `semantic_equivalence`; they never approve a merge (ABC §3.3 rule) and never carry warrant. Lint `cu.cluster_hint_auto_merged` [proposed]. ### §7.4 The adapter escape hatch (PCA Lock B — DOCUMENTED, NOT BUILT) > **Escape hatch (one paragraph — the whole of it):** if a future DOC73 revision diverges from the ABC §4.5 source-bound-synthesis contract on either load-bearing axis (span backing; never-reusable-truth), the sanctioned fix is the `SourceBoundSynthesisAdapter` — a wrapper + explicit CU→DOC82 mapping table, classified as a `KnowledgeProjection` wrapper case (E0 §3.6; Owner Map line 39) — raised via a **new ADQ**, with OPA-035's convergence obligation attaching on activation (DOC73 converges OR the architect blesses permanent divergence; a permanent unblessed wrapper is a `code_smell` per ADQ-219 clause 7). Per **Lock B**, this charter carries **no adapter schema body** — the Owner Map line-39 row stays a placeholder pointer, and no dead contract is maintained. Lint `adapter.silent_ossification_without_convergence_obligation` [canonical — Skeletal §11.7] guards the activation path; `adapter.schema_body_drafted_while_dormant` [proposed] guards Lock B itself. **Cross-charter (§7 roll-up).** DOC73 (CU semantics + supersession lineage + cluster read-models + `supporting_CU_stale` trigger), DOC83 (`cu_derived` route + `cu_synthesis` origin), DOC84 (CU injection as source-bound synthesis product — `orientation_only` posture absent source-specific query, ABC §3.9/§4.4), OPA-035 (recorded discharge, §14.4). --- ## §8. Source-revocation source-side payload + polarity-aware warrant recompute **Source:** Owner Map line 95 (the payload — split from DOC81's envelope, line 94 / SM-208 / B3); DOC81 §5.1–§5.3 (the envelope + run + `LastActiveSupportEdgeEvaluation` + the polarity boundary note — consumed); E0 §12.1 (`SourceRevocationCascade` invariant shape; UR-08/09 polarity; the DOC82 plane row); ADQ-304 (last-edge rule); Skeletal §11.9 (monotonicity). **Owner:** DOC82 owns the **source-side payload** + the **warrant recompute (incl. polarity)** + the **re-proof path**; DOC81 owns the envelope; EC executes. ### §8.1 `SourceInvalidationPayload` (resolves DOC81 §5.1 `source_side_payload_ref`) ```typescript /** The DOC82-owned source-side payload of a CascadingSourceInvalidation (Owner Map line 95). * Names the truth-plane affected set; DOC81's envelope + run orchestrate; EC executes. */ interface SourceInvalidationPayload extends E0DurableRecord { payload_id: SourceInvalidationPayloadRef; schema_owner: 'DOC82'; invalidation_ref: string; // DOC81 §5.1 CascadingSourceInvalidationRef (envelope) source_ref: SourceRef; // the revoked identity (§5.1) revocation_scope: 'whole_source' | 'segment_subset' | 'version_subset'; // a partial revocation names its subset affected_envelope_refs: SourceEnvelopeRef[]; affected_segment_refs: SourceSegmentRef[]; // when segment-scoped affected_evidence_record_refs: EvidenceRecordRef[]; affected_support_edge_refs: EvidenceSupportEdgeRef[]; // the DOC82 rows of the affected-set manifest (E0 §12.1 R3 §(b)#5) affected_variant_refs: AssertionVariantRef[]; // variants whose support set intersects required_edge_outcome: 'invalidated' | 'verify_required'; // E0 §12.1 / DOC81 §5.1 doc82_support_edges vocabulary recompute_trace_refs: WarrantRecomputeTraceRef[]; // §8.2 — one per affected variant ec_receipt_refs: string[]; // ECReceiptRef (E0 §12.1) reason_codes: ReasonCodeId[]; // DOC82-namespace revocation codes (UR-37 — source-revocation reason codes route to DOC82) } ``` ### §8.2 `WarrantRecomputeTrace` — the polarity-aware recompute (the DOC82 side of DOC81 §5.3) ```typescript /** The mandatory trace for ANY net-warrant change driven by source removal (E0 §12.1 UR-09; * DOC81 §5.1 polarity_recompute_trace_ref resolves HERE). schema_owner = DOC82; EC executes. */ interface WarrantRecomputeTrace extends E0DurableRecord { trace_id: WarrantRecomputeTraceRef; schema_owner: 'DOC82'; variant_ref: AssertionVariantRef; triggering_payload_ref: SourceInvalidationPayloadRef; removed_edge_refs: EvidenceSupportEdgeRef[]; removed_edge_polarity: 'supporting' | 'contrary' | 'mixed'; surviving_support_summary: { supporting: number; contrary: number; indeterminate: number }; // from DOC81 §5.1 LastActiveSupportEdgeEvaluation tri-state inputs last_active_support_edge_evaluation_ref: string; // DOC81 §5.1 LastActiveSupportEdgeEvaluationRef — the denominator proof prior_effective_warrant: UseWarrant; recomputed_effective_warrant: UseWarrant; net_warrant_direction: 'lowered' | 'held' | 'raised'; raise_justification?: 'contrary_source_removed_from_contradicted_assertion'; // the ONLY lawful raise cause (UR-09 polarity; supported-only scoping) lifecycle_consequence: 'none' | 'contested_cleared' | 'retired' | 'audit_only' | 'degraded_only'; // §2.8 T6/T8; ADQ-304 policy_generation_id: PolicyGenerationId; reason_codes: ReasonCodeId[]; } ``` **The recompute rules (binding):** 1. **Supporting-source removal LOWERS** (or holds, when redundant support survives): partial loss → warrant degradation only; **total loss** (DOC81 §5.1 `last_active_support_edge_lost = 'lost'` — every remaining edge provably inactive) → the variant retires or becomes `audit_only` (ADQ-304; §2.8 T8). `indeterminate_fail_closed` → retained-but-degraded, never silent total loss (DOC81 §5.1). 2. **Contrary-source removal MAY RAISE net warrant** — only on a **contradicted** assertion (the supported-only scoping, E0 §12.1/DOC81 §5.3), only via this trace (`net_warrant_direction: 'raised'` requires `raise_justification`), and only as a **DOC82 warrant recompute** — never a DOC81 policy widening (the meet is never widened by a revocation; `PolicyStampRestamp` remains the only policy-widening path). 3. **Re-proof is the only post-revocation eligibility-raising path** for supported content: a fresh `EvidenceSupportEdge` to a non-revoked source (§2.8 T9; Skeletal §11.9). Trigger *emission* (E0 §2.4) never raises; the recompute may, under rule 2 only. 4. **Cascade ordering is DOC81/EC's** (freeze → 5 planes; idempotent monotone-down set-to-floor): DOC82's payload executes within the `doc82_support_edges` plane slot; DOC82 never reorders the cascade. **Unhappy paths.** *Net warrant changed with no trace* → `revocation.net_warrant_changed_without_recompute_trace` [canonical — E0 §12.1]. *Supporting removal not recomputed* → `revocation.supporting_source_removed_without_recompute` [canonical]. *Contrary removal not recomputed* → `revocation.contrary_source_removed_without_recompute` [canonical]. *Raise without justification / on a supported assertion* → `monotonicity.revocation_raised_eligibility` [canonical — polarity-aware tie, E0 §12.1]. *Edge survives revoked source* → `revocation.support_edge_survives_revoked_source` [canonical]. **Fixtures (Stage 8):** `fixture.revocation.lowers_until_reproof` (DOC81 §5.3 shared); `fixture.revocation.contrary_removal_raises_only_with_recompute_trace` (DOC81 §5.3 shared — the polarity case); `fixture.revocation.last_edge_lost_retires_partial_degrades` (ADQ-304; shared §2.8); `fixture.golden.revoked_source_invalidates_support_membership_delivery_learning_ui` (E0 §12.1 — the 5-plane golden case; DOC82 executes its plane); `fixture.revocation.indeterminate_edge_fails_to_degraded_not_total_loss` (DOC81 §5.1 shared). **Cross-charter.** DOC81 (envelope/run/denominator-proof — consumed), EC (executes; receipts), DOC87/DOC84/DOC85/DOC86 (sibling planes of the same cascade), E0 §12.1 (invariant shape). The DOC82 reason-code namespace carries the revocation codes (UR-37). --- ## §9. Lineage + projection ### §9.1 The `VersionedClaim → AssertionVariant` lineage table (DR-003; Skeletal §10.8) **Source:** DR-003 (closed at Stage 5R2 — VersionedClaim stays **DOC73-owned**; DOC82 defines the lineage table); Owner Map lines 41–42 (the charter-required field list, verbatim); Skeletal §10.8 (the two lints); ADQ-223 (DOC82 consumes DOC73's CU supersession lineage — the change-of-mind chain rides `VersionedClaim`/`supersedes`). **Owner:** DOC82 (the table); DOC73 supplies `VersionedClaim` refs. ```typescript /** One row per legacy VersionedClaim mapped into the truth plane (Owner Map line 42 — the nine * charter-named fields, verbatim). schema_owner = DOC82; DOC73 retains VersionedClaim. */ interface VersionedClaimLineageRow extends E0DurableRecord { row_id: VersionedClaimLineageRowRef; schema_owner: 'DOC82'; versioned_claim_ref: VersionedClaimRef; // DOC73-owned (DR-003) source_cu_ref?: ConsolidatedUnderstandingRef; // DOC73-owned source_span_refs: SourceSegmentRef[]; // §5.2 normalization of the claim's spans assertion_variant_ref?: AssertionVariantRef; // absent until migrated (lint below) lineage_kind: 'direct_migration' | 'split_into_variants' | 'merged_with_existing' | 'transformed_reformulated' | 'reference_only_not_migratable'; // §13.6 confirm-seed values preserved_fields: string[]; lost_or_transformed_fields: string[]; migration_status: 'pending' | 'migrated' | 'review_required' | 'declined_reference_only'; // §13.6 confirm-seed values review_required: boolean; supersession_chain_position?: { supersedes_ref?: VersionedClaimRef; superseded_by_ref?: VersionedClaimRef }; // the DOC73 supersedes lineage DOC82 consumes (ADQ-223 minimal-lock consumption — change-of-mind is ALREADY handled by this chain; DOC82 adds no second mechanism) } ``` **Rules.** (1) The table is the **only** bridge from legacy `VersionedClaim` lineage into the Assertion family — no direct VersionedClaim→Assertion write path exists. (2) A migrated row's variant carries the claim's spans through §5.2 refs (support survives migration or the row is `review_required`). (3) The DOC73 supersession chain is **consumed, not duplicated**: a superseded claim migrating after its successor maps to a `superseded` variant (§2.8 T7), preserving the principal's change-of-mind history (ADQ-223). (4) The table is append-auditable; rows never delete (migration corrections add rows). **Lints (Stage 9):** `versioned_claim.unmapped_to_assertion_variant` [canonical — Skeletal §10.8]; `versioned_claim.lineage_table_missing` [canonical — Skeletal §10.8]; `versioned_claim.direct_write_bypassing_lineage_table` [proposed]; `versioned_claim.supersession_chain_order_violated` [proposed]. **Fixtures (Stage 8):** `fixture.lineage.every_versioned_claim_mapped_or_flagged`; `fixture.lineage.superseded_claim_lands_as_superseded_variant`; `fixture.lineage.migration_preserves_spans_or_requires_review`. ### §9.2 `KnowledgeProjection` + `KnowledgeProjectionInvalidationPolicy` **Source:** Owner Map line 140 (DOC82-owned concrete projection axis, Stage 5R2b narrow); E0 §3.6 (`SemanticProjectionContract` umbrella + axis registration — `knowledge` axis → DOC82); Skeletal §11.10 (projection invariants); ABC §2.2 (projection rule — downstream views are projections, never parallel truth). **Owner:** DOC82. ```typescript /** The knowledge-axis concrete projection (E0 §3.6 SemanticProjectionAxisRegistration: * axis 'knowledge' → KnowledgeProjection, schema_owner DOC82). A derived consumer view over * Assertion/Source-Evidence objects — e.g. a conflict-set projection (§4), a variant-comparison * view, a source-coverage read-model. NEVER truth (E0 §3.6 projection_may_own_truth: false). */ interface KnowledgeProjection extends E0DurableRecord { projection_id: KnowledgeProjectionRef; schema_owner: 'DOC82'; axis: 'knowledge'; // E0 §3.6 projection_case: 'conflict_set' | 'variant_comparison' | 'source_coverage' | 'lineage_view' | 'source_bound_synthesis_adapter_case'; // the dormant Lock-B case slot (Owner Map line 39 classification; NO body — §7.4) source_refs: string[]; // E0 §3.6 required_fields — the canonical objects projected generation_id: string; // E0 §3.6 invalidation_policy: KnowledgeProjectionInvalidationPolicy; projection_owner: 'DOC82'; proof_or_read_model_refs: string[]; // E0 §3.6 } interface KnowledgeProjectionInvalidationPolicy { invalidate_on: Array<'source_object_mutation' | 'lifecycle_transition' | 'warrant_recompute' | 'source_revocation_cascade' | 'embedding_generation_change' | 'policy_generation_change'>; rebuild: 'lazy_on_read' | 'eager_on_invalidate'; staleness_tolerance: 'none' | 'orientation_only_when_stale'; } ``` **Projection invariants (Skeletal §11.10 / E0 §3.6, verbatim posture):** projection never owns truth; MUST carry source refs, generation id, invalidation policy, owner, and proof/read-model refs; `truth_apt? = N` by construction (E0 §6.3). A stale knowledge projection degrades to `orientation_only` or refuses, never serves as current truth. **Lints (Stage 9):** `projection.used_as_canonical_truth` / `projection.owner_missing` / `projection.missing_invalidation_policy` / `projection.missing_source_refs` [all canonical — E0 §3.6]; `projection.generation_id_missing` [proposed — E0 §3.6]; `projection.knowledge_axis_unregistered` [proposed]. **Fixtures (Stage 8):** `fixture.projection.revocation_invalidates_knowledge_projection` (ties §8 + Skeletal §10.11 DOC86/DOC84 sibling cases); `fixture.projection.stale_projection_degrades_not_serves`. --- ## §10. The 9 OPA Bucket-A obligations (bodies per archived `OPA_V3_18.md`; retargets per `OPA_V4.md` §6) **Source:** the 9 rows retargeted `→ DOC82` in OPA V4 §6 (lines 97–105) with canonical bodies in archived V3.18 (the DOC81 §13.3 lesson applied — bodies landed from the archive, not guessed). These are litigation-flavored; each lands as a **legal-domain-profile instantiation of a generic DOC82 pattern** (domain-agnostic core; legal is one profile — CLAUDE.md invariant). Field sets below carry exactly the body-named fields; extensions are confirm-seeds (§13.6). ### §10.1 `OBL-D23-A-V6-PROMOTED-CLAIM-MEMORY-KIND-01` (from DOC72) — promoted-claim memory kind **Body (V3.18 line 5498):** on a `ClaimPromotionRequest` (DOC23 Addenda A §A11.6 Submit-to-Memory-Review), store `target_memory_kind` (**factual_assertion / working_hypothesis / drafting_preference / argument_theory / user_note**) AND `factual_status` (**verified / unverified / not_truth_evaluable**) on the resulting record; downstream queries MUST filter by `factual_status` (evaluable:false claims never appear in factual-grounding contexts). **Landing:** `target_memory_kind` rides `AssertionCandidate` (§2.4, `TargetMemoryKind` below); `factual_status` rides `Assertion` (§2.1). Non-`factual_assertion` kinds route through DOC83's `AlternativeExtractionRouting` (working_hypothesis → IssueFrame plane; drafting_preference → preference kinds; user_note → not-memory) — the truth plane admits only truth-apt kinds. ```typescript type TargetMemoryKind = 'factual_assertion' | 'working_hypothesis' | 'drafting_preference' | 'argument_theory' | 'user_note'; // V3.18 body verbatim ``` **Lint:** `assertion.factual_status_not_filterable` [proposed]; `assertion.not_truth_evaluable_in_factual_grounding` [proposed — the body's query rule]. **Fixture:** `fixture.obl.promoted_claim_carries_kind_and_status`. ### §10.2 `OBL-D25-O-SOURCEARTIFACT-01` (from DOC25) — SourceArtifact ownership boundary + the D14 confirmation **Body (V3.18 line 3624):** DOC25 V2.0+ owns `SourceArtifact`/`ArtifactSegment` schemas (replacing V2's implicit DOC73 ownership; INV-V16-NO-LOCAL-SCHEMA-1). **D14 resolution (OPA V4 §9 D14 delegated this to the DOC82/E4 charter — CONFIRMED here):** the row stays retargeted **→ DOC82** as the **boundary-discipline obligation**: DOC82's source plane (§5) is the consumer that must hold the boundary (envelope/segment refs only; no artifact schema at DOC82), while **schema ownership itself stays DOC25** (Owner Map lines 53–54 — unchanged). The obligation row lives where the discipline is enforced; the schemas live at DOC25. OPA V4 row-state update (`pending_charter_resolution` → confirmed) is a §14.7 discharge item. **Lint:** `source.doc82_declared_artifact_or_segment_schema` [proposed — fires with §6.3's container lint family]. **Fixture:** `fixture.obl.artifact_schemas_stay_doc25`. ### §10.3 `OBL-D73-N-NOT-EVIDENCE-INV-01` — the not-evidence guardrail (renamed from ORIENTATION-INV, V3.11) **Body (V3.18 line 3852):** INV-N-NOT-EVIDENCE-1 + INV-N-NO-CIRCULAR-EVIDENCE-1 — RecentActivityRollup may inform query framing; it **cannot satisfy legal evidence queries** (without it, legal queries get answered from framing context and the authority hierarchy collapses). Acceptance V3-AT-22. **Landing:** the §11.2 cross-cutting guardrail (orientation/CU/RecentActivityRollup is NOT evidence; no auto `EvidenceSupportEdge`; no circular evidence — synthesis citing synthesis). Wired to ABC §4.4 (`can_orient_only` rows), R-CU-3 (§7.2), ADQ-405 (`can_orient_only` invariant — DOC83's consumption contract), and `WarrantEvaluationResult.can_satisfy_evidence_query` (§3.3). ### §10.4 `OBL-D73-O-COURT-DISPOSITION-OBS-01` — `CourtDispositionObservation` **Body (V3.18 line 3864):** a structured observation node kind: **ruling, scope_targets[], legal_basis, source_artifact_ref?** — without it, rulings extracted from docket text / minute orders have no schema and downstream reasoning lacks per-defendant scope. Acceptance V3-AT-18 (a docket-text minute order creates the observation **without** a SourceArtifact); V4-AT-31. ```typescript /** Legal-profile evidence-grade observation (retargeted DOC73→DOC82; the truth plane owns * evidence-bearing observation semantics; DOC83 owns operational observations — ABC §7.14). */ interface CourtDispositionObservation extends E0DurableRecord { observation_id: CourtDispositionObservationRef; schema_owner: 'DOC82'; ruling: string; // body field ruling_disposition_refs: RulingDispositionRef[]; // §10.8 (depends-on OBL-O-RULING-DISPOSITION-01) scope_targets: EntityRef[]; // body field — per-defendant scope; NON-EMPTY (V4-AT-31) legal_basis?: string; // body field source_artifact_ref?: SourceArtifactRef; // body field — OPTIONAL (V3-AT-18 docket-text case) source_envelope_ref: SourceEnvelopeRef; // the §5.1 gateway (docket-text observations get an artifact-less envelope) observation_lifecycle_state: ObservationLifecycleState; // §10.9 evidence_record_ref?: EvidenceRecordRef; // evidence_kind 'system_observation'/'citation_or_authority' when admitted as evidence } ``` **Fixture:** `fixture.obl.docket_minute_order_creates_observation_without_artifact` (V3-AT-18). ### §10.5 `OBL-D73-O-FILING-UNIT-VERSION-01` — `FilingUnitVersion` **Body (V3.18 line 3876):** **version_sequence_number, legal_version_kind precedence, supersession edges** — without versioning, amended filings collapse with the original and queries cite the wrong version. Acceptance V3-AT-17 (sealed_unredacted + public_redacted versions of one filing; a share-link retrieves only public and cannot cite sealed spans); V4-AT-32. ```typescript /** Legal-profile instantiation of the §5.1 source-version hook. */ interface FilingUnitVersion extends E0DurableRecord { version_id: FilingUnitVersionRef; schema_owner: 'DOC82'; filing_unit_ref: FilingUnitRef; // §10.6 source_envelope_ref: SourceEnvelopeRef; // one envelope per version (version-comparable — Lock C posture) version_sequence_number: number; // body field legal_version_kind: string; // body field — precedence vocabulary (e.g. sealed_unredacted, public_redacted, as_filed, amended); value set = §13.6 confirm-seed over the V3-AT-17 named pair supersedes_version_ref?: FilingUnitVersionRef; // body field — supersession edges part_visibility_refs: FilingPartVisibilityRef[]; // §10.7 } ``` **Fixtures:** `fixture.obl.sealed_and_public_versions_distinct_and_visibility_gated` (V3-AT-17 — the share-link case is DOC84/DOC81 egress enforcement reading §10.7 visibility); `fixture.obl.amended_filing_supersedes_not_collapses` (V4-AT-32). Cross-version extraction-cost amortization stays DOC73-side (`OBL-D73-O-VERSION-EXTRACTION-COST-V16-01` — not a DOC82 row). ### §10.6 `OBL-D73-O-FILINGUNIT-01` — `FilingUnit` semantics **Body (V3.18 line 3888):** FilingUnit + legal relationship semantics, **paired with the DOC25 boundary** (DOC25 produces artifacts; the memory plane consumes for legal semantics). Acceptance V3-AT-11 (a PACER bundle correctly segments into multiple ECF sub-documents). ```typescript /** The legal source unit — groups DOC25 artifacts into one legally-meaningful filing. */ interface FilingUnit extends E0DurableRecord { filing_unit_id: FilingUnitRef; schema_owner: 'DOC82'; docket_ref?: DocketRef; ecf_or_filing_number?: string; constituent_artifact_refs: SourceArtifactRef[]; // DOC25-owned artifacts (the V3-AT-11 sub-documents) version_refs: FilingUnitVersionRef[]; // §10.5 filing_relationship_kind?: string; // legal relationship semantics (motion/opposition/exhibit-of/…); vocabulary = §13.6 confirm-seed } ``` **Fixture:** `fixture.obl.pacer_bundle_segments_to_filing_units` (V3-AT-11). ### §10.7 `OBL-O-FILING-PART-VIS-01` — `FilingPartVisibility` **Body (V3.18 line 4392):** per-part visibility class within a FilingUnit — without it, one sealed exhibit seals the whole unit and public parts cannot expose independently. Acceptance V3-AT-17. ```typescript interface FilingPartVisibility extends E0DurableRecord { visibility_id: FilingPartVisibilityRef; schema_owner: 'DOC82'; filing_unit_ref: FilingUnitRef; part_ref: SourceSegmentRef | SourceArtifactRef; // the part (segment or whole sub-document) visibility_class: VisibilityClassRef; // §5.1 vocabulary (sealed / redacted / public — per the registry; §13 flag 5) visibility_basis?: 'sealing_order' | 'redaction' | 'protective_order' | 'public_record'; // §13.6 confirm-seed } ``` **Rule:** part-level visibility **overrides** the envelope-level class for that part; egress/disclosure enforcement is DOC81/DOC84's (DOC82 carries the facts). **Fixture:** `fixture.obl.sealed_exhibit_does_not_seal_public_parts`. ### §10.8 `OBL-O-RULING-DISPOSITION-01` — `RulingDisposition` **Body (V3.18 line 4404):** structured fields with **`scope_targets[]` MANDATORY** (an order disposing multiple defendants produces per-defendant dispositions; flattening rejected — V4-AT-31). ```typescript interface RulingDisposition extends E0DurableRecord { disposition_id: RulingDispositionRef; schema_owner: 'DOC82'; ruling_kind: string; // granted/denied/granted_in_part/…; vocabulary = §13.6 confirm-seed scope_targets: EntityRef[]; // MANDATORY NON-EMPTY (V4-AT-31; flattening rejected) legal_basis?: string; source_segment_refs: SourceSegmentRef[]; // span-backed (§5.2) } ``` **Lint:** `legal.ruling_disposition_scope_targets_empty` [proposed — V4-AT-31]. **Fixture:** `fixture.obl.multi_defendant_order_yields_per_defendant_dispositions` (V4-AT-31). ### §10.9 `OBL-OBSERVATION-LIFECYCLE-01` — the general observation-lifecycle pattern **Body (V3.18 line 4416):** the observation lifecycle generalizes (CourtDispositionObservation is one instantiation; future observation kinds reuse the pattern). DOC24-side consumption stays external (`OBL-D24-OBSERVATION-LIFECYCLE-V16-01`). ```typescript /** The general pattern for DOC82 evidence-grade observations (distinct from DOC83's operational * IncidentObservation/FrictionEvent ladder — ABC §7.14 stays DOC83's). States seeded from the ABC * §7.14 stage discipline + §10.4's needs; value set = §13.6 confirm-seed. */ type ObservationLifecycleState = 'observed' | 'corroborated' | 'superseded_by_later_ruling' | 'expired'; ``` **Pattern rules:** an observation is source/time-bounded (ABC §4.4 row); it may ground an AssertionCandidate (origin `system_observation`, §2.4) but is never itself reusable truth; supersession follows the court's own later action, not extraction-agent guesswork (the §2.2 safety posture generalized). **Fixture:** `fixture.obl.observation_lifecycle_general_pattern_reused` (V3-AT-18 instantiation). **§10 roll-up.** All 9 rows land: 1 → §2.1/§2.4 fields; 2 → boundary confirm (§5/§6 + D14); 3 → §11.2 guardrail; 4–9 → the legal-profile object set above, all span-backed through §5 and candidate-fed through §2. Per-row OPA-state updates (`carried` → landed-at-charter) are §14.7 discharge items. The six acceptance tests (V3-AT-11/17/18/22, V4-AT-31/32) map to the named fixtures. --- ## §11. Cross-cutting invariants (runtime gate + Stage-9 lint + Stage-8 negative fixture — the full triple per invariant) **Source:** Skeletal §11.4 (every named invariant has BOTH a runtime gate and a lint) + §11.9 (monotonicity laws); E0 §12.1 (the cross-family table + UR-48 fixture column — DOC82 rows consumed and completed here); Input Deck (origin-stamp lint; not-evidence guardrail; one-owner). DOC82 adds its member-specific gates per E0 §12.2. ### §11.1 The DOC82 invariants table | # | invariant | runtime gate (owner / location) | Stage 9 lint | Stage 8 negative fixture | |---|---|---|---|---| | I1 | **Warrant monotonicity — bound to DOC81's laws** (E0 §12.1; Skeletal §11.9): membership never raises warrant; learning never exceeds the non-learning ceiling (UR-47); revocation monotone-down until re-proof (polarity-aware, §8); policy meet never widened by DOC82 | DOC82 warrant evaluation (§3.3/§3.6) ignores membership; §2.8 closed machine (no spontaneous transitions); §8 recompute trace; EC executes | `monotonicity.membership_raised_warrant`; `monotonicity.learning_upgraded_warrant_without_evidence`; `monotonicity.revocation_raised_eligibility` [all canonical — E0 §12.1] | `fixture.golden.membership_raised_warrant_fails`; `fixture.golden.learning_upgraded_warrant_beyond_ceiling_fails`; `fixture.revocation.contrary_removal_raises_only_with_recompute_trace` | | I2 | **The not-evidence guardrail** (`OBL-D73-N-NOT-EVIDENCE-INV-01`, §10.3): orientation/CU/RecentActivityRollup/IssueFrame/NullResult/resume products are NOT evidence; consuming them MUST NOT auto-create an `EvidenceSupportEdge`; no circular evidence (synthesis citing synthesis) | DOC82 edge-creation gate (§5.5 rule 1: span-resolvable only); R-CU-3 (§7.2); DOC83 `can_orient_only` consumption contract (ADQ-405); DOC84 packet check | `cu.consumption_auto_created_support_edge` [proposed]; `revocation.recent_activity_used_as_evidence` [canonical — E0 §12.1]; `evidence.orientation_object_as_support` [proposed]; `evidence.circular_synthesis_support` [proposed] | `fixture.golden.recent_activity_used_as_evidence_fails` (E0 §12.1); `fixture.cu.consumption_never_auto_creates_edge`; `fixture.evidence.synthesis_citing_synthesis_blocked` | | I3 | **ABC §7.8 anti-overlap** — exactly one disposition enum (DOC83's) + one dedupe-outcome (DOC82's); DOC82 is the resolution authority (Skeletal §10.7; E0 §12.1 row) | DOC82 resolution-authority check at `AssertionResolution` (§2.6) | `assertion.overlapping_resolution_disposition_enum` [canonical] | `fixture.golden.overlapping_disposition_enum_fails` (E0 §12.1) | | I4 | **The origin-stamp lock** (PCA Lock D): every `AssertionCandidateEmission` carries the originating library/scope membership; the canonical Assertion inherits scope+membership; DOC84 injects by active-scope eligibility, never per-document treatment | DOC82 emission-consumption gate (§2.5 — blocked when absent); DOC83 produces the stamp; DOC84 packet planning reads scope eligibility only | `assertion.emission_missing_origin_scope_membership` [canonical — Input Deck/Lock D] | `fixture.assertion.emission_origin_stamp_required_and_inherited`; `fixture.assertion.multi_treatment_source_extracted_only_in_learned_scope` | | I5 | **One-owner placement vs ABC §2.1 semantics** (D-SEED-2; §0.2): re-homed schemas defined at DOC82 only; no container/CU/artifact/policy/membership schema declared here; retired Concept Model §17.3 enum never reintroduced (G-2) | charter-structural (this document); Stage 7 authors check the E0 §6 taxonomy first | `supersession.local_schema_redefinition` [canonical — plan §17.2]; `source.doc82_redefined_corpus_container` [canonical]; `supersession.retired_name_used` [canonical] | `fixture.obl.artifact_schemas_stay_doc25`; `fixture.taxonomy.only_assertion_family_is_truth_apt` (E0 §6) | | I6 | **R-CU-1/2/3** (PCA Finding 1; §7.2): no-spans⇒no-support; cu_authority≠warrant; CU≠evidence | DOC82 edge gate + §7.2 binding (`can_support_assertion_directly` forced false); EC write rejects | `cu.no_spans_supported_assertion` [canonical]; `cu.authority_used_as_warrant` [canonical]; `cu.consumption_auto_created_support_edge` [proposed] | `fixture.cu.no_spans_cannot_support`; `fixture.cu.authority_not_inherited_as_warrant` | | I7 | **Grounding promotion gate** (ABC §7.10): `model_synthesis_only` / `cu_backed_without_spans` / `ungrounded` never reach `active` | §2.8 T3 gate (`PromotionGateRecord.grounding_state_at_gate`); DOC1 Write Gate | `assertion.ungrounded_candidate_promoted_to_active` [proposed] | `fixture.assertion.ungrounded_cannot_reach_active` | | I8 | **Write gating reads the floor + mutation_authority** (DOC81 §2.4/§3.2; Input Deck): no durable assertion write under a `fail_closed_candidate` floor or beyond the `mutation_authority` ceiling | §2.6 write-gating rules (a)–(d); EC serialized write + CAS | `assertion.resolution_exceeded_mutation_authority` [proposed]; `ec.dedupe_write_without_generation_revalidation` [canonical — E0 §7.1] | `fixture.assertion.resolution_respects_floor_and_mutation_authority` | | I9 | **Bitemporal presence** (Skeletal §11.8; E0 §8.2): every Assertion/Variant carries both axes; every support edge carries the span snapshot; envelope axes never collapse into replay order (UR-18) | schema-structural (§2.1/§2.2/§5.5 required fields); EC write validation | `bitemporal.assertion_missing_valid_time`; `bitemporal.assertion_missing_transaction_time`; `bitemporal.evidence_edge_missing_source_span_temporal_snapshot` [all canonical] | `fixture.assertion.bitemporal_axes_present_and_distinct_from_replay_order` | | I10 | **Embedding comparability + un-merge review** (E0 §8.1; F28; UR-41): same-generation comparisons only; migration-driven splits through review | §2.3 signature/dedupe gates; EC | `embedding.cross_generation_comparison_without_reembed` [canonical]; `embedding.silent_unmerge_on_model_migration` [proposed] | `fixture.assertion.cross_generation_similarity_blocked` | | I11 | **Qualifier-set mismatch never auto-merges** (ADQ-311 — absolute) | §2.3 equivalence outcome gate; EC dedupe execution | `assertion.qualifier_set_mismatch_auto_merged` [proposed] | `fixture.assertion.qualifier_mismatch_never_auto_merges` | | I12 | **Safety-class no-auto-supersede** (ABC §3.11) | §2.8 T7 confirmation gate | `assertion.safety_class_auto_superseded` [proposed] | `fixture.assertion.safety_class_supersession_requires_confirmation` | | I13 | **Contrary edges accumulate, mandatory** (ABC §3.5; SM-200/E0 §6.2) | §2.7 merge reconciliation (`accumulate_all`); §5.5 rule 2 | `assertion.contrary_edges_not_accumulated` [proposed] | `fixture.evidence.contrary_edge_survives_merge_and_drives_contested` | | I14 | **Indexed ≠ Learned** (PCA Lock C; §6.4): an Indexed source grounds no Assertion until extraction runs | DOC83 extraction admission (treatment gate); DOC82 candidate origin requires a route context from a Learned scope (§2.5 attestation) | `source.indexed_source_grounded_assertion_without_extraction` [proposed] | `fixture.source.indexed_retrievable_citable_not_mined` | | I15 | **`principal_authored` orients, never cites** (PCA Lock A; §3.5) | §3.3 evaluation + §3.7 domain policy (`citation_requires_authority_classes`); DOC84 render consequence (§3.8) | `warrant.principal_authored_cited_as_authority` [proposed] | `fixture.warrant.principal_authored_orients_never_cites` | ### §11.2 The not-evidence guardrail, stated once (the I2 text) > **Orientation is not evidence.** RecentActivityRollup (`can_orient_only` — ADQ-405), IssueFrame/IssueFrameUpdate, NullResultMemory (absent its narrow absence-claim allowance — ABC §4.6), TopicLens/Library/Corpus views, ResumeCard/projections (E0 §5.3), DAMS outputs, proof artifacts, utility ledgers, and **CU text without surviving spans** (ABC §4.4) can NEVER be the `evidence_ref` of an `EvidenceSupportEdge`, satisfy an evidence query, or contribute warrant. No consumption path auto-creates a support edge (R-CU-3). **No circular evidence:** a synthesis object citing another synthesis object grounds nothing — support bottoms out in source spans, system observations, or user-direct statements (INV-N-NO-CIRCULAR-EVIDENCE-1, §10.3). Legal evidence queries are satisfied only through the §5 evidence plane under §3.3's `can_satisfy_evidence_query`. ### §11.3 Member obligations (E0 §20 instance) DOC82's per-member obligation rows (E0 §20; filled per the E0 §15.4 gate): `MemoryCoordinationTrace` obligations — every resolution/dedupe/merge/recompute names `coordination_trace_ref` (§2.5/§2.6); **degraded states DOC82 surfaces** — `scope_unresolved_conservative` (consumed, DOC81 §2.4), `parse_quality_capped` (§5.7), `cu_spanless_orientation_only` (§7.2), `warrant_recompute_pending` (§8.2), `lineage_migration_review_required` (§9.1). Health counters contributed (E0 §9.2 seeds): `contested_assertion_rate`, `warrant_distribution`, `source_revocation_backlog` (DOC82-plane share). --- ## §12. Cross-charter (binds · hands · golden scenario · taxonomy) ### §12.1 What DOC82 binds to (consume-by-reference; §0.3) E0: §1.6 (shared value types + `E0DurableRecord`), §2.1 (ReasonCode — DOC82 namespace incl. revocation codes per UR-37), §2.2 (DomainProfile + `warrant_policy_ref` → §3.7), §2.4 (degradation triggers + UR-22 carveout → §3.6), §3.3/§3.4 (MFC + trace on every durable write), §3.6 (projection umbrella → §9.2), §4 (proof spine), §5.1/§5.2 (envelope/provenance NAMED concepts), §6 (taxonomy — §12.5), §7 (dependency posture: DOC72 `stable`, DOC73 `partial/reconcile_at_charter`, DOC25 `stable`, EC `partial/moving`), §7.1 (ECSeamContract — CAS + re-gate), §8.1/§8.2/§8.3/§8.5 (conventions), §12.1 (invariants + cascade shape), §13.1 (the four warrant-object slots), §15.4 (gates DOC82 satisfies: UR-08 plane execution → §8; UR-31 knowledge axis → §9.2; `WarrantConsequenceRegistry` → §3.8; ABC §21 Owner Map rows → §14.5; `SourceBoundSynthesisAdapter` convergence → §7 — resolved-no-activation). DOC81: §2.4 (floor), §3.0–§3.2 (meet + `mutation_authority`), §3.4 (stamps/restamps), §3.6 (epoch), §4.2 (disclosure), §4.3 (route policy envelope), §4.4 (`PolicyCappedDAMSInput` — DOC84-facing; DOC82 supplies the warrant facts it caps), §5 (envelope/run/denominator — §8 plugs in), §6.1 (LegalHold — cascade destruction defers), §6.3/§6.4 (monotonicity + re-gate), §8 (traversal policy → §4). External: DOC72/DOC73/DOC25/EC per §0.3. ### §12.2 What DOC82 hands downstream (Import Graph §2.1: `DOC82 → {DOC83, DOC84, DOC85, DOC87}`) - **→ DOC83 (E5/E6):** the `AssertionCandidateEmission` contract (§2.5 — DOC83 produces instances; OPA-030/DR-008); `AssertionCandidate` (§2.4); `ExtractionRouteContext` (§5.6 — DOC83 consumes + populates); `SourceEnvelope` + parse-bounds consumption (§5.1/§5.7); the disposition seam (§2.5 note — DOC83's enum recommended, DOC82 resolves); the reroute target back to `AlternativeExtractionRouting` (§2.6). - **→ DOC84 (E7/E8):** Assertion/Variant + lifecycle/staleness/warrant axes for product assembly; `EffectiveWarrant` + `WarrantConsequenceRegistry` language (§3.8 — KDA renders); the ADQ-314 validity facts; `RelationInjectionPolicy` + traversal-gated comparison products (§4); `EvidenceRecord`/`EvidenceSupportEdge` for evidence products; source-sandbox facts (`prompt_injection_risk`, §5.1 — DOC84/DOC24 enforce ABC §11.6 at render); `KnowledgeProjection` (§9.2); `audit_only`/`retired` never deliver (§2.8). - **→ DOC85 (E9):** assertion lifecycle/resolution outcomes + `PromotionGateRecord` streams (proof-gated learning inputs); false-suppression sampling inputs (Owner Map line 176 — DOC82 assertion outcomes feed it); the learning warrant ceiling (I1; learning adjusts eligibility/staleness, never warrant beyond the non-learning ceiling). - **→ DOC87 (E_org):** Assertion/Variant/SourceEnvelope as membership **targets** (DOC87 edges point at `assertion_id`/`source_ref`); the origin-stamp fields DOC87 consumes to mint memberships (§2.5); the Lock C posture (§6.4 — treatment statuses are DOC87/DOC26/DOC81's). ### §12.3 The golden scenario (E0 §18) — DOC82-owned steps DOC82 owns, within the family phase order: **extraction admission → emission → canonical resolution (AssertionResolution + AssertionDedupeOutcome) → durable write** (the §2 pipeline between DOC83's triage and DOC87's membership step), plus the warrant facts every later step reads. **The revocation case (E0 §18 / Skeletal §10.11):** source revocation → DOC81 envelope → §8.1 payload names the DOC82 affected set → edges `invalidated`/`verify_required` → §8.2 recompute (polarity-aware) → ADQ-304 retire-or-degrade → siblings (DOC87/84/85/86) fan out → `fixture.golden.revoked_source_invalidates_support_membership_delivery_learning_ui`. **The policy-change-mid-extraction case (E0 §18; Skeletal §11.3):** `policy_generation_id` changes between Step-0 admission and resolution → DOC83 re-gates at Step 0 (extraction side); DOC82's §2.6 write re-gates at EC (resolution side, OPA-031) → `fixture.golden.policy_change_mid_extraction_regates`. **Degraded states surfaced to the plan:** §11.3's five. ### §12.4 E0 §15.4 gate rows discharged by this charter | gate (E0 §15.4) | how discharged | |---|---| | UR-08 `SourceRevocationCascade` per-plane execution (E3/E4) | §8 (payload + recompute + plane outcome) | | UR-31 `SemanticProjectionContract` knowledge axis (E3) | §9.2 (`KnowledgeProjection` + invalidation) | | `WarrantConsequenceRegistry` (E4 blocked; E3 confirm) | §3.8 drafted at DOC82 per E0 §13.1 recommendation; placement confirm = §13 flag 1 | | `IngestionCostBudget` (E3 blocked; E4 confirm) | §13 flag 2 — recommendation recorded (DOC25/E4 declaration against E0 §10.1); DOC82 declares no schema | | `SourceBoundSynthesisAdapter` convergence (OPA-035, conditional) | §7.1/§7.4 — convergence found; no activation; adapter documented-not-built (Lock B) | | Seven ABC §21 Owner Map rows (E3/E4 share) | §14.5 discharge rows for the four DOC82 objects; IngestionCostBudget flagged; ConsideredItemLedger/PromptShellExposure are DOC84's (not ours) | | ADQ-202 Corpus hierarchy (gates AC-005 completion) | §6 lands the resolution; AC-005/ADQ-404 completion unblocked on the DOC82 side (EC-side work remains EC's) | ### §12.5 Memory-object taxonomy additions (E0 §6 — rows DOC82 confirms/adds) E0 §6.2 seed rows for Assertion/AssertionVariant/CU/EvidenceRecord/EvidenceSupportEdge/KnowledgeProjection are **confirmed unchanged**. DOC82 adds (same column set; `audit_replay_class` per A11): | object_family | owner | truth_apt? | source_bound? | durable? | derived_projection? | policy_gated? | delivery_eligible? | ui_visible? | learning_eligible? | audit_replay_class | notes | |---|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|---| | AssertionCandidate | DOC82 | N | Y | Y | N | Y | N | Y | N | canonical | Staged; never evidence of truth (ABC §7.10); not delivery-eligible pre-resolution | | AssertionCandidateEmission | DOC82 | N | Y | Y | N | Y | N | Y | N | durable_audit | The E3↔E5 handoff (DR-008); origin-stamp carrier (Lock D) | | AssertionResolution / AssertionDedupeOutcome | DOC82 | N | N | Y | N | Y | N | Y | Y | durable_audit | Resolution audit pair (§2.6); learning reads outcomes | | AssertionRelationEdge | DOC82 | N | Y | Y | N | Y | Y | Y | Y | canonical | Traversal-gated (DOC81 §8); DOC72 stores | | SourceEnvelope | DOC82 | N | Y | Y | N | Y | Y | Y | N | canonical | Durable at Indexed (Lock C); library-agnostic (Lock C/D) | | SourceAuthorityScope | DOC82 | N | Y | Y | N | Y | N | Y | N | canonical | Authority declaration (ABC §4.1) | | ExtractionRouteContext | DOC82 | N | Y | Y | N | Y | N | Y | Y | durable_audit | Provenance, not identity (ABC §1.2) | | WarrantEvaluationResult / PromotionGateRecord | DOC82 | N | N | Y | N | Y | N | Y | Y | durable_audit | Warrant/gate audit records (§3.3/§2.8) | | SourceInvalidationPayload / WarrantRecomputeTrace | DOC82 | N | Y | Y | N | Y | N | Y | N | durable_audit | The §8 revocation pair | | VersionedClaimLineageRow | DOC82 | N | Y | Y | N | Y | N | Y | N | durable_audit | DR-003 bridge; append-auditable | | CuConsumptionBinding | DOC82 | N | Y | Y | N | Y | N | Y | N | durable_audit | The §7.2 thin binding | | FilingUnit / FilingUnitVersion / FilingPartVisibility / RulingDisposition / CourtDispositionObservation | DOC82 | N | Y | Y | N | Y | Y | Y | N | canonical | Legal-profile source/observation set (§10) | --- ## §13. Open items + architect-review flags (≤5) + confirm-seeds ### §13.1 OPEN_FOR_ARCHITECT_REVIEW (exactly 5) 1. **`WarrantConsequenceRegistry` placement — DOC82/E3 vs DOC80-core registry (inherited: E0 §16.1 item 2).** Drafted at §3.8 per E0 §13.1's recommendation (warrant consequences have a plane: warrant). The core-registry alternative (analogy: the E0 §2.4 trigger registry) remains open for the architect's confirm. If core is preferred, §3.8 moves verbatim; consumers (DOC84/KDA) are unaffected. 2. **`IngestionCostBudget` row choice — DOC25 external-row vs DOC82-seam object (inherited: E0 §16.1 item 1; E0 §15.4 says "E3 blocked, E4 confirm").** Recommendation (matching E0's): **DOC25/E4 declaration against the E0 §10.1 envelope** — ingestion cost stays with the ingestion owner; DOC82 declares **no schema** and records only the seam (§12.4). Architect confirms the external-row mechanics at ratification. 3. **`AssertionStalenessState` value set (§3.4).** No canonical source enumerates the staleness enum; the drafted 4-value set is fragment-cited (`stale_possible` ABC §4.6; `reverify_due` ABC §3.12; `expired_session_bound` ADQ-312; `fresh` zero-state). Confirm, amend, or extend. 4. **`AssertionTemporalProfile` "10 temporal classes" (Owner Map line-36 note) vs ABC §3.8's 7-value `TemporalClass`.** Drafted with ABC's 7 (ABC senior for semantics, DR-001; ABC §3.8 explicitly evicts the three kind-labels from the temporal enum — which is precisely the 10→7 delta). The Owner Map note is read as the pre-split legacy count; **discharge item:** reconcile the line-36 note at the next baseline pass. Architect confirms this reading. 5. **`visibility_class` vocabulary owner — PropA vs DOC82 (§5.1; §10.7).** DOC81 §0 annotates the vocabulary "PropA/DOC82-owned" — a compound that one-owner forbids. Drafted as a versioned `ExternalVocabularyValueRef` with **PropA recommended as vocabulary owner** (classification/sensitivity vocabularies are PropA's pattern — ADQ-308 analogy; DOC81 §2.4 sensitivity_inputs), DOC82 carrying refs only. Architect confirms the owner; either answer changes no DOC82 schema shape. ### §13.2 Architect-confirm seeds (value-constants, NOT open design questions — DOC81 §13.6 pattern) | seed | location | default (seed) | basis | |---|---|---|---| | ADQ-314 validity-table cells | §3.5 | the drafted ✓/F/(✓) grid + 9 rationales | table mandated by ADQ-314; cells are this draft's proposal | | `principal_authored` framing string | §3.5/§3.8 | "principal's stated understanding — not verified authority" | PCA Lock A; exact tuning is E7's (ADQ-223(c)) | | Lifecycle transition matrix details (T1–T9 triggers/gates) | §2.8 | as drafted | states verbatim ABC §7.13/ADQ-304; transition wiring is the charter's assembly | | `AssertionLifecycleRollup.derivation_rule` | §2.8 | `any_contested_else_most_advanced_live_variant` | derived-not-writable posture (E0 §4.2 UR-06 analogy) | | `ScopeCondition` shape + kinds | §2.2 | drafted 5-kind seed | ABC §3.2 names the field; §3.11 shape analogy | | `lineage_kind` / `migration_status` value sets | §9.1 | drafted 5/4-value seeds | Owner Map line 42 names the fields, not the values | | `KnowledgeProjectionInvalidationPolicy.invalidate_on` set | §9.2 | drafted 6 triggers | Skeletal §11.10 invariants; §8/§2.7 events | | Legal-profile vocabularies (`legal_version_kind`, `ruling_kind`, `filing_relationship_kind`, `visibility_basis`, `ObservationLifecycleState`) | §10 | drafted seeds over the V3-AT/V4-AT-named values | OPA bodies name fields + acceptance pairs; full vocabularies are profile work | | `DomainProfileWarrantPolicy` per-profile cells (e.g. legal.litigation) | §3.7 | doctrine→`verify_before_use`; principal_authored→`orientation_only`; citation requires `primary_source` | ABC §3.9 downgrade rules + Lock A | | `source_kind` seed vocabulary | §5.1 | DOC25 V2.0 surface list (corpus/email/browser/chat/demonstration/task_output/autonomous/direct_upload) | DOC25 V2.0 scope statement; DOC25 owns the registry | ### §13.3 ADQ-223 deferred-work note (minimal lock landed — do NOT over-build) DOC82 lands **only**: the `principal_authored` kind (§3.1), its validity-table row + warrant profile (§3.5), its source posture (§3.5/§5.3), and CU-supersession-lineage consumption (§7.2/§9.1). **Deferred + tracked at ADQ-223:** (a) the provisionality gradient (tentative-vs-settled epistemic sub-kinds or settledness signal at capture) — DOC73 CU revision + a future DOC82 pass; (b) claim-vs-directive delineation at capture — DOC83 `AlternativeExtractionRouting` + the DOC26 Project-Instructions/State-Card split; (c) injection weight + framing-string tuning — E7 (DOC84/KDA); settled-vs-tentative learning — E9 (DOC85). An `architect_stop` follow-up rises only if a sub-problem proves it needs a contract DOC82 cannot defer (ADQ-223 recommended_answer). --- ## §14. Sources + lineage ### §14.1 ADQ landings (every ADQ pinned to E3/E4 → its landing section) | ADQ | resolution (abbrev.) | landing | |---|---|---| | **ADQ-202** | corpus hierarchy behind Libraries; resolved via PCA Finding 2 (5-layer; DOC82 = interface, zero containers) | §6 (whole); §5.6 route metadata; Skeletal §11.13 gate discharged | | **ADQ-219** | CU reconciliation = DIRECT CONSUME; adapter documented-not-built; OPA-035 not triggered | §7 (whole) | | **ADQ-314** | (temporal_class, epistemic_kind) validity table; invalid combos flagged at lifecycle transition | §3.5 (table + check point at §2.8) | | **ADQ-303** | parse-quality numeric thresholds = domain-profile-specific, owner DAMS/DOC25; DOC82 consumes to bound eligibility | §5.7 (consumption posture only) | | **ADQ-401** (AC-001) | DOC25 file-materialization + provider profiles; `schema_plus_owner_boundary` | §5.1 `materialization_state_ref`; §6.2 obligation note | | **ADQ-402** (AC-002) | DOC73 corpus-source-bindings; `schema_plus_lints_and_fixtures`; **depends on ADQ-202 — now unblocked** | §6.2 obligation note | | **ADQ-304** | last-active-support-edge rule (retire/audit_only iff no other lawful edge; partial → degrade) | §8.2 rules 1; §2.8 T8 | | **ADQ-311** | qualifier_set mismatch never auto-merges (absolute) | §2.3; I11 | | **ADQ-312** | degradation triggers initial controlled registry (E0 §2.4 home); per-trigger owners | §3.6 consumption | | **ADQ-223** | principal-authored: DOC82 lands the MINIMAL lock; deeper work deferred | §3.1/§3.5; §13.3 | | **ADQ-PASS2-01** | PBEClusterDetectionResult: DOC73 owns; DOC82 consumes read-model hints | §7.3 | | **ADQ-PASS2-02** | corpus↔library identity mapping: DOC87 owns; DOC25 storage; DOC24 consumes | §6.1 (Library row); §6.4 | | ADQ-201 / ADQ-315 / ADQ-316 / ADQ-405 / ADQ-313 (cross-cutting, pinned elsewhere) | Assertion canonical / traversal policy at E1 / restamp ceilings / can_orient_only / domain registry | §2 vocabulary / §4 / §2.7 restamp note / §11.2 / §3.7 | ### §14.2 The four architect locks (PCA 2026-06-08) — landing confirmation | lock | landing | status | |---|---|---| | **A — `principal_authored`** | §3.1 (kind) + §3.5 (row + warrant profile + source posture) + §3.8 (framing entry) + I15 | landed (minimal; ADQ-223 note §13.3) | | **B — adapter documented-not-built** | §7.4 (one-paragraph escape hatch; no schema body; Owner Map line 39 stays placeholder) + §9.2 (dormant case slot) | landed | | **C — Indexed = source-memory** | §6.4 (posture + rules) + §5.1 (durable envelope at Indexed) + I14 | landed | | **D — extraction origin-stamp** | §2.5 (the stamp block + lint) + §2.2 (variant inheritance) + I4 | landed | ### §14.3 Skeletal §10/§11 + §DOC82 fold-in landings | Skeletal § | content | landing | |---|---|---| | §DOC82 §1 | bitemporal axes on the Assertion family | §2.1/§2.2/§4/§5.5; I9 | | §DOC82 §2 | source-bound synthesis consumption (ADQ-219) | §7 | | §10.7 | DOC82↔DOC83 disposition/resolution seam (anti-overlap; resolution authority) | §2.5/§2.6; I3 | | §10.8 | VersionedClaim lineage table + 2 lints | §9.1 | | §10.11 | CascadingSourceInvalidation 5-plane fan-out (DOC82 plane) | §8; I1 | | §10.12 / §14 | taxonomy seed rows (Assertion/Variant/CU/Evidence/SupportEdge) + body | §12.5 | | §10.14 | embedding-model-migration refs | §2.3; I10 | | §10.17 | ABC §21 slot-ins (the four DOC82 warrant objects) | §3.3/§3.7/§3.8/§2.8; §14.5 | | §11.4 | invariant enforcement-point naming (gate + lint + fixture) | §11 (the triple table) | | §11.8 | bitemporal contract | §2.1; I9 | | §11.9 | monotonicity laws (warrant/revocation/learning) | §3.6/§8; I1 | | §11.13 | Library-decomposition ADQ-202 gate | §6.3 (discharged) | | §18 | golden scenario + revocation + policy-change-mid-extraction cases | §12.3 | ### §14.4 OPA-row landings (the 9 Bucket-A rows + the convergence seam) | OBL row | landing | note | |---|---|---| | `OBL-D23-A-V6-PROMOTED-CLAIM-MEMORY-KIND-01` | §10.1 (→ §2.1/§2.4 fields) | kinds/status verbatim | | `OBL-D25-O-SOURCEARTIFACT-01` | §10.2 (+§5/§6 boundary) | **D14 confirmed:** obligation at DOC82; schemas stay DOC25 | | `OBL-D73-N-NOT-EVIDENCE-INV-01` | §10.3 → §11.2 (I2) | incl. no-circular-evidence | | `OBL-D73-O-COURT-DISPOSITION-OBS-01` | §10.4 | V3-AT-18 artifact-less case honored | | `OBL-D73-O-FILING-UNIT-VERSION-01` | §10.5 | V3-AT-17/V4-AT-32 fixtures | | `OBL-D73-O-FILINGUNIT-01` | §10.6 | V3-AT-11 fixture | | `OBL-O-FILING-PART-VIS-01` | §10.7 | part-level visibility override | | `OBL-O-RULING-DISPOSITION-01` | §10.8 | scope_targets mandatory (V4-AT-31) | | `OBL-OBSERVATION-LIFECYCLE-01` | §10.9 | general pattern; DOC24 side stays external | | **OPA-035** (`SourceBoundSynthesisAdapter` convergence) | §7.1 | **discharged: "reconciliation found convergence — no adapter activation"** | | OPA-030 (emission handoff) | §2.5 | DR-008 contract drafted | ### §14.5 Owner Map confirmations + discharge rows (charter is read-only on the Owner Map — rows recorded here for the ratification sweep) **Confirmed as drafted:** lines 26–37 (Assertion family — §2/§3), 39 (adapter placeholder stays placeholder — Lock B), 40 (CU support contract stays DOC73 — §7), 41–42 (VersionedClaim DOC73 / lineage table DOC82 — §9.1), 52–61 (source/evidence — §5), 63–65 (DOC25 bindings/containers consumed — §6), 94–95 (envelope DOC81 / payload DOC82 — §8), 140 (KnowledgeProjection — §9.2). **Rows to ADD at discharge (E0 §13.2 delegation):** `WarrantEvaluationResult` → DOC82 (§3.3); `WarrantConsequenceRegistry` → DOC82 (§3.8; subject to §13 flag 1); `DomainProfileWarrantPolicy` → DOC82 (§3.7); `PromotionGateRecord` → DOC82 (§2.8); plus the §10 legal-profile set (`FilingUnit`/`FilingUnitVersion`/`FilingPartVisibility`/`RulingDisposition`/`CourtDispositionObservation` → DOC82) and the §8 pair (`SourceInvalidationPayload`/`WarrantRecomputeTrace` → DOC82, line-95 expansion). **NOT added:** `IngestionCostBudget` (flag 2 — DOC25/E4 recommended), `ConsideredItemLedger`/`PromptShellExposure` (DOC84 — E0 §13.1). **Note check (flag 4):** line-36 "10 temporal classes" note → reconcile to ABC §3.8's 7. Per E0 §16.1's process note, the four warrant-object dispositions should be **verified against ABC §21 source** at the sweep (ABC §21 was not in the E0 read-list; §3.3/§3.9-§3.10 grounding here is direct). ### §14.6 In-draft dispositions recorded (for the CODEX fidelity audit) 1. **`AssertionCandidateDisposition` placement:** stays DOC83 (Owner Map line 102; Skeletal §10.7); DOC82 references the verified 7-value set (DR-006) on the emission and enforces anti-overlap — the Opening Brief's "defined at DOC82 only" shorthand is implemented as "declared once, at its Owner-Map owner; dedupe outcome at DOC82; anti-overlap gate at DOC82" (§2.5 note). 2. **`authority_class` (UR-22 carveout key):** E0 §2.4 says "owned by DOC82/DOC81"; one-owner resolves to **DOC82** (warrant semantics — §3.6 `WarrantAuthorityClass`); DOC81 consumes. 3. **D14 (`OBL-D25-O-SOURCEARTIFACT-01`):** confirmed at §10.2 (obligation at DOC82; schemas at DOC25). 4. **ABC §6.6 "avoid Learned":** superseded by PCA Lock C's architect-confirmed vocabulary (2026-06-08); ABC's underlying concern (library-owned truth) is enforced structurally by Lock D + Skeletal §10.4 (§6.4 rule 4). 5. **`SourceRef` brand home:** declared at DOC82 (§0.4) as the content-deduped identity — matching DOC81 §0's annotation ("a DOC82/DOC25 source id"); DOC25 owns artifacts/instances behind it. 6. **DR-002:** LibrarySourceBinding/CorpusIndex/SourceCollection matrix rows remain a logged gap (Import Graph §5.1) — not expanded here; rides the next matrix update. ### §14.7 Discharge sweep (ratification-time; Skeletal §10.19 closing-step discipline) 1. Owner Map: add the §14.5 rows; reconcile the line-36 note; keep line 39 placeholder. 2. OPA V4: mark the 9 §6 rows landed-at-charter; resolve D14 `pending_charter_resolution` → confirmed (§10.2); record OPA-035 discharge text (§7.1); OPA-030 contract-drafted. 3. ADQ ledger: mark ADQ-202/219 **executed at E3/E4** (resolutions were Stage-4; execution recorded per PCA); ADQ-314 table created; ADQ-223 minimal lock landed (row stays open for the deferred work). 4. Supersession Matrix: confirm SM-200/201/204/207/208 landings; DR-002 rows at next matrix update. 5. E0 §15.4 gate rows per §12.4. 6. Cross-artifact drift sweep (plan-file §12.3 slice status; Input-Deck pre-condition block → "executed"). 7. The §13.1 flags + §13.2 seeds to the architect-confirm pass. --- *End of DOC82 E3/E4 charter draft R1. Acceptance self-audit (Commission §4) reported in the drafting-session report; independent CODEX fidelity audit follows per commission.*