E1_E2_R2_Application_Fidelity_Audit_CODEX.md
Memory Rebuild Docs/Stage_6_Charters/E1_E2_DOC81_Scope_Policy/Reviews/E1_E2_R2_Application_Fidelity_Audit_CODEX.md
# E1/E2 DOC81 R2 Application Fidelity Audit - CODEX
## Repo Access + Bottom Line
Repo access confirmed: local working tree `/Users/OpenClaw1/Elnor/Elnor Specs`, branch `main`, remote `https://github.com/wbrody/Elnor-Specs.git`. I read the commission, adjudication card, R2 application commission/report, the R2 draft, the three cited review bodies, E0, OPA V3.18 section 6.25, and the relevant ground-truth snippets named below.
One-line bottom line: **FIXES_NEEDED_BEFORE_DELTA_REVIEW**. Most adjudicated edits landed, but the R2 meet algorithm has a real ordering/source-of-truth defect around disclosure-vector derivation and coherence, and the self-report's "zero bare-string primary IDs" regression check is false.
## Verdict
**FIXES_NEEDED_BEFORE_DELTA_REVIEW**
Verified disposition count: **60 mapping items** (`U1-U33`, `F1-F10`, `R-1-R-5`, `D1-D12`), **8 trap-list checks**, **10 regression checks**, and **3 field-by-field large-body diffs**.
## Reads
- `DOC81_Scope_Policy_Charter_Draft.md`
- `E1_E2_CODEX_Application_Audit_Prompt.md`
- `E1_E2_Adjudication_Card.md`
- `E1_E2_R2_Application_Commission_Claude_Code.md`
- `E1_E2_R2_Application_Report.md`
- `Reviews/E1_E2_Design_Review_Claude_Opus_4.8.md`
- `Reviews/DOC81_consolidated_red_team_final_review_AUDITED.md`
- `Reviews/S6 E1:E2 DOC81 Charter Grok RT Reviews.md`
- `../E0_DOC80_Core/DOC80_Core_Charter_Draft.md`
- `OP-A and Operations and Trackers/Archived DOC OP-A and Operations DOCS/OPA_V3_18.md`
## Findings By Severity
### Blocking
#### B-1. `meet_v2` derives the disclosure scalar after coherence, so coherence can cap against stale disclosure and obligation ceilings can be undone
**Evidence in R2 draft:**
- The meet pipeline declares step order normative and says coherence is last among tightening steps at `DOC81_Scope_Policy_Charter_Draft.md:720`.
- The disclosure vector is met at `DOC81_Scope_Policy_Charter_Draft.md:748`.
- Obligations are reconciled by setting the scalar axis, e.g. `hide_existence => disclosure_class=not_disclosable`, at `DOC81_Scope_Policy_Charter_Draft.md:760` and reiterated at `DOC81_Scope_Policy_Charter_Draft.md:885`.
- Then the draft runs `makeCoherent(eff)` before deriving the scalar from the vector at `DOC81_Scope_Policy_Charter_Draft.md:762-764`.
- `makeCoherent` caps content using the current scalar disclosure value at `DOC81_Scope_Policy_Charter_Draft.md:545-551`.
- The draft also declares the scalar is always derived from the vector at `DOC81_Scope_Policy_Charter_Draft.md:701-703` and `DOC81_Scope_Policy_Charter_Draft.md:1182-1183`.
**Authority violated:**
- Adjudication card U1 requires reveal-direction coherence with "capability capped down to the disclosure ceiling" and coherence last (`E1_E2_Adjudication_Card.md:62`).
- Adjudication card U8 requires the scalar `disclosure_class` to be "always derived from the vector" and never independently set (`E1_E2_Adjudication_Card.md:69`).
- Adjudication card U9 requires obligation-to-disclosure reconciliation and re-coherence (`E1_E2_Adjudication_Card.md:70`).
- GPT section 4.5 says the scalar should be derived after vector meet (`DOC81_consolidated_red_team_final_review_AUDITED.md:493-496`).
- The application report claims the meet v2 body landed and checklist item 7 passes (`E1_E2_R2_Application_Report.md:22`, `E1_E2_R2_Application_Report.md:58`), but the actual algorithm does not satisfy the accepted ordering/source-of-truth semantics.
**Why this matters:**
If an obligation such as `hide_existence` sets `disclosure_class = not_disclosable` but the vector remains more permissive, line 764 can derive a more permissive scalar after coherence has already run. Conversely, if the vector is more restrictive than the scalar, line 763 caps content against stale disclosure and line 764 tightens the scalar afterward, leaving capability above the final disclosure ceiling. This defeats the exact leak-prevention invariant the B6/U8/U9 fix was supposed to make executable.
**Paste-ready fix:**
Replace §3.2 steps 5-6 and the §3.3 reconciliation wording so obligations tighten the disclosure vector, the scalar is derived from that final vector, and coherence runs after scalar derivation:
```text
# 5. Obligations: union + transitive-dominance closure (U9/CL §2.6); genuine conflict residue -> fail-closed for the action.
obligations = resolveObligations(applicable.flatMap(d => d.obligations))
conflicts = detectObligationConflicts(obligations)
if conflicts.any(blocking): return blockedBottomPolicy('policy.obligation_conflict', conflicts)
# Obligation-induced disclosure ceilings tighten the VECTOR, not an independently-set scalar (U8/U9).
obligation_vectors = obligationDisclosureVectorCeilings(obligations)
if obligation_vectors not empty:
eff.disclosure_vector = meetDisclosureVectors([eff.disclosure_vector, ...obligation_vectors])
# 6. Scalar derivation + coherence LAST (U1/U8/B6/B16).
eff.disclosure_class = deriveDisclosureClass(eff.disclosure_vector)
eff = makeCoherent(eff)
```
Add a helper table in §3.3:
```typescript
const OBLIGATION_DISCLOSURE_VECTOR_CEILING: Record<string, DisclosurePermissionVector> = {
hide_existence: bottomDisclosureVector(),
show_generic_existence_only: {
may_disclose_existence: true,
may_disclose_container_type: true,
may_disclose_topic_label: true,
may_disclose_source_title: false,
count_disclosure_mode: 'bucketed',
may_disclose_reason_summary: false,
max_summary_fidelity: 'none',
},
};
```
Then update §10 row "disclosure coherence" and the NI-1 fixture notes to include a case where `hide_existence` and a more-open vector appear together; the final scalar must remain `not_disclosable` and content must be capped to `none`.
### Substantive
#### S-1. The R2 draft still has bare-string primary IDs on DOC81-owned schemas, contradicting U31 and the regression checklist
**Evidence in R2 draft:**
- §0 says "every DOC81-owned primary ID + ref uses the `Brand<T,B>` pattern" and a bare string is not a brand at `DOC81_Scope_Policy_Charter_Draft.md:23-27`.
- The draft names `schema.primary_id_not_branded` at `DOC81_Scope_Policy_Charter_Draft.md:83` and again at `DOC81_Scope_Policy_Charter_Draft.md:597`.
- The application report claims checklist item 6 passes: "all primary IDs are `Brand<string, '...'>`" at `E1_E2_R2_Application_Report.md:57`.
- Counterexamples in DOC81-owned records include:
- `RestampChainIntegrity.chain_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:970`
- `PolicyStampRestampBase.restamp_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:990`
- `PolicyStampInvalidation.invalidation_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1008`
- `SafeLabelDisclosurePolicy.policy_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1228`
- `PolicyCappedDAMSInput.capped_input_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1309`
- `DestinationPolicyCrosswalk.crosswalk_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1500`
- `CascadingSourceInvalidationRun.run_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1590`
- `LegalHoldState.hold_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1672`
- `CollectionModeSuppressionGovernance.governance_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:1859`
- `PolicyUIExport.export_id: string` at `DOC81_Scope_Policy_Charter_Draft.md:2052`
**Authority violated:**
- Commission checklist item 6 requires "zero `| string` escapes and zero bare-string primary IDs on owned schemas" (`E1_E2_R2_Application_Commission_Claude_Code.md:44-46`).
- Adjudication U31 requires real brands for DOC81 primary IDs (`E1_E2_Adjudication_Card.md:100`).
**Paste-ready fix:**
Do a branded-ID sweep. Add missing ref brands to §0 and replace each primary ID field with its corresponding brand. Example pattern:
```typescript
type RestampChainIntegrityRef = Brand<string, 'RestampChainIntegrityRef'>;
type PolicyStampRestampRef = Brand<string, 'PolicyStampRestampRef'>;
type PolicyStampInvalidationRef = Brand<string, 'PolicyStampInvalidationRef'>;
type SafeLabelDisclosurePolicyRef = Brand<string, 'SafeLabelDisclosurePolicyRef'>;
type PolicyCappedDAMSInputRef = Brand<string, 'PolicyCappedDAMSInputRef'>;
type DestinationPolicyCrosswalkRef = Brand<string, 'DestinationPolicyCrosswalkRef'>;
type CascadingSourceInvalidationRunRef = Brand<string, 'CascadingSourceInvalidationRunRef'>;
type LegalHoldStateRef = Brand<string, 'LegalHoldStateRef'>;
type CollectionModeSuppressionGovernanceRef = Brand<string, 'CollectionModeSuppressionGovernanceRef'>;
type PolicyUIExportRef = Brand<string, 'PolicyUIExportRef'>;
```
Then change the fields:
```typescript
chain_id: RestampChainIntegrityRef;
restamp_id: PolicyStampRestampRef;
invalidation_id: PolicyStampInvalidationRef;
policy_id: SafeLabelDisclosurePolicyRef;
capped_input_id: PolicyCappedDAMSInputRef;
crosswalk_id: DestinationPolicyCrosswalkRef;
run_id: CascadingSourceInvalidationRunRef;
hold_id: LegalHoldStateRef;
governance_id: CollectionModeSuppressionGovernanceRef;
export_id: PolicyUIExportRef;
```
Repeat for every DOC81-owned primary ID currently typed as `string`; non-primary strings such as prose hashes, generation IDs not owned by DOC81, and literal registry IDs can remain as appropriate.
## Trap-List Results
| Trap | Result | Evidence |
|---|---:|---|
| D12 `TopicRiskClass.risk_level` keeps `unbounded_requires_review`; no `unknown` swap | PASS | `risk_level` value set at `DOC81_Scope_Policy_Charter_Draft.md:1384-1388`; confirmation additions at `DOC81_Scope_Policy_Charter_Draft.md:1375-1393`; D12 decline at `E1_E2_Adjudication_Card.md:153`. |
| F7 `visible_action_disposition` excluded from `PolicyUIExport` | PASS | `PolicyUIExport` scope items carry facts only and note excision at `DOC81_Scope_Policy_Charter_Draft.md:2051-2063`; guard lint at `DOC81_Scope_Policy_Charter_Draft.md:2087`. |
| F1 malformed axis floors that axis, with audit, not whole-action block | PASS | F1 prose at `DOC81_Scope_Policy_Charter_Draft.md:554`; `excluded_decision_refs` includes `malformed_axis` at `DOC81_Scope_Policy_Charter_Draft.md:687-694`; step 1 floors axis at `DOC81_Scope_Policy_Charter_Draft.md:740-742`. |
| F2 MIN-over-spanning cluster confidence + explicit firewall binding | PASS | `cluster_confidence = MIN over spanning bindings` at `DOC81_Scope_Policy_Charter_Draft.md:194-204`; firewall explicit binding rule at `DOC81_Scope_Policy_Charter_Draft.md:211`; stricter alternative recorded as declined at `DOC81_Scope_Policy_Charter_Draft.md:2191`. |
| D3 crosswalk is a constraint table, not GK total function; E0 outbound set remains exact 8 | PASS | Constraint table language at `DOC81_Scope_Policy_Charter_Draft.md:1494-1510`; E0 exact 8 outbound values at `DOC80_Core_Charter_Draft.md:1719-1721`. |
| F10 exactly 5 settled planes; DOC83 freeze pre-fanout; published views in DOC84 plane | PASS | Five-plane wording and published-view row note at `DOC81_Scope_Policy_Charter_Draft.md:1568-1577`; wiring table and "no 6th plane" statement at `DOC81_Scope_Policy_Charter_Draft.md:1625-1639`. |
| R-2 supersedes F8; human only for firewalled crossing; send-time gate rationale present | PASS | `RestampAuthority` and IFF rule at `DOC81_Scope_Policy_Charter_Draft.md:974-982`; rationale paragraph at `DOC81_Scope_Policy_Charter_Draft.md:1020`; card supersession at `E1_E2_Adjudication_Card.md:132`. |
| D1/D2/D4 non-changes | PASS | D2 absent and explicitly declined at `DOC81_Scope_Policy_Charter_Draft.md:1058-1062`; D4 forward-flagged, not added to E0, at `DOC81_Scope_Policy_Charter_Draft.md:1114` and `DOC81_Scope_Policy_Charter_Draft.md:2160`; no camelCase migration found. |
## Field-by-Field Diff Results For Largest Adopted Bodies
| Body | Result | Notes |
|---|---:|---|
| §3.0 `PolicyLattice` + rank maps | PASS with downstream caveat | Rank maps match GPT §4.4 (`DOC81_consolidated_red_team_final_review_AUDITED.md:438-473`) and R2 lines `DOC81_Scope_Policy_Charter_Draft.md:494-524`; CL coherence mapping matches R2 lines `DOC81_Scope_Policy_Charter_Draft.md:545-551`. The failure is not in §3.0 itself; it is that §3.2 calls the functions in the wrong order. |
| §3.2 meet v2 pipeline | FAIL | F1, U5/U6/U7 filters, domain contribution, floor, sticky-restrictive, and obligation conflict structure are present (`DOC81_Scope_Policy_Charter_Draft.md:720-760`), but scalar derivation after coherence at `DOC81_Scope_Policy_Charter_Draft.md:762-764` violates U1/U8/U9. |
| §3.4 stamp/ceiling/restamp | PASS | Triple-binding landed at `DOC81_Scope_Policy_Charter_Draft.md:928-953`; root ceiling and no-ratcheting at `DOC81_Scope_Policy_Charter_Draft.md:957-971`; R-2 firewalled-only authority at `DOC81_Scope_Policy_Charter_Draft.md:974-982`; keep/downgrade/block union at `DOC81_Scope_Policy_Charter_Draft.md:984-999`; invalidation deltas at `DOC81_Scope_Policy_Charter_Draft.md:1001-1010`. |
## 2.A Mapping-Table Results
### U-Clusters
| ID | Result | Evidence / note |
|---|---:|---|
| U1 | FAIL | §3.0 body landed (`DOC81_Scope_Policy_Charter_Draft.md:485-554`), but §3.2 coherence/scalar order fails; see B-1. |
| U2 | PASS | `ConservatismFloorEffect` and F3 seed at `DOC81_Scope_Policy_Charter_Draft.md:1432-1456`; seed table at `DOC81_Scope_Policy_Charter_Draft.md:2184`. |
| U3 | PASS | `PolicyCeilingSnapshot`, root comparison, no ratcheting at `DOC81_Scope_Policy_Charter_Draft.md:957-982` and `DOC81_Scope_Policy_Charter_Draft.md:1016-1028`. |
| U4 | PASS | Per-item triple binding at `DOC81_Scope_Policy_Charter_Draft.md:928-953`; invalidation deltas at `DOC81_Scope_Policy_Charter_Draft.md:1001-1010`. |
| U5 | PASS | Freshness key at `DOC81_Scope_Policy_Charter_Draft.md:559-570`; step 0 at `DOC81_Scope_Policy_Charter_Draft.md:726-729`; epoch CAS at `DOC81_Scope_Policy_Charter_Draft.md:1108-1114`. |
| U6 | PASS | Evaluation context at `DOC81_Scope_Policy_Charter_Draft.md:573-590`; applicability filtering at `DOC81_Scope_Policy_Charter_Draft.md:735-739`. |
| U7 | PASS | Egress precondition at `DOC81_Scope_Policy_Charter_Draft.md:730-734`; crosswalk at `DOC81_Scope_Policy_Charter_Draft.md:1494-1510`. |
| U8 | FAIL | Disclosure vector and derivation function landed at `DOC81_Scope_Policy_Charter_Draft.md:1182-1211`, but §3.2 derives scalar after coherence; see B-1. |
| U9 | FAIL/PARTIAL | Obligation machinery and dominance wording landed at `DOC81_Scope_Policy_Charter_Draft.md:875-885`, but obligation-induced disclosure ceilings are applied to scalar rather than vector and can be overwritten; see B-1. |
| U10 | PASS | Equivalence cluster MIN and firewall guard at `DOC81_Scope_Policy_Charter_Draft.md:194-211`. |
| U11 | PASS | Closed relation-kind and budget/trace region at `DOC81_Scope_Policy_Charter_Draft.md:1986-2036`; only `| string` hits are removal comments. |
| U12 | PASS | Legal hold selector, registry default-block, clearance at `DOC81_Scope_Policy_Charter_Draft.md:1659-1710`. |
| U13 | PASS | DOC81 to DOC86 export at `DOC81_Scope_Policy_Charter_Draft.md:2048-2089`; F7 boundary preserved. |
| U14 | PASS | §14.2 replacement is row-accurate against §7.3 at `DOC81_Scope_Policy_Charter_Draft.md:2212-2229`. |
| U15 | PASS | Cascade run and 5-plane fan-out at `DOC81_Scope_Policy_Charter_Draft.md:1555-1639`. |
| U16 | PASS | Scope identity/equivalence additions and threshold/protection material at `DOC81_Scope_Policy_Charter_Draft.md:152-211` and `DOC81_Scope_Policy_Charter_Draft.md:319-407`. |
| U17 | PASS | Domain thresholds/evaluation at `DOC81_Scope_Policy_Charter_Draft.md:1471-1489`; seed defaults at `DOC81_Scope_Policy_Charter_Draft.md:2189`. |
| U18 | PASS | Collection-mode governance and ambiguity handling at `DOC81_Scope_Policy_Charter_Draft.md:1844-1897`. |
| U19 | PASS | Extraction envelope at `DOC81_Scope_Policy_Charter_Draft.md:1259-1296`; source-exclusion filter at `DOC81_Scope_Policy_Charter_Draft.md:1901-1932`. |
| U20 | PASS | `same_firewall_only` in learning rank map at `DOC81_Scope_Policy_Charter_Draft.md:497`; V15 landing at `DOC81_Scope_Policy_Charter_Draft.md:1946`. |
| U21 | PASS | `PolicyCappedDAMSInput` and derivation at `DOC81_Scope_Policy_Charter_Draft.md:1299-1328`. |
| U22 | PASS | Membrane disposition derivation closes §13.4 at `DOC81_Scope_Policy_Charter_Draft.md:889-918` and `DOC81_Scope_Policy_Charter_Draft.md:2174`. |
| U23 | PASS | Disambiguation request/answer region at `DOC81_Scope_Policy_Charter_Draft.md:1032-1080`; D2 not added. |
| U24 | PASS | `ScopeSearchCoverageProof` at `DOC81_Scope_Policy_Charter_Draft.md:458-478`. |
| U25 | PASS | Quota envelope at `DOC81_Scope_Policy_Charter_Draft.md:1821-1836`. |
| U26 | PASS | Cache keys at `DOC81_Scope_Policy_Charter_Draft.md:1797-1819`. |
| U27 | PASS | Non-overlap / monotonicity / portability and re-gate material at `DOC81_Scope_Policy_Charter_Draft.md:1722-1795`. |
| U28 | PASS | Lifecycle and lineage additions appear in `PolicyStamp.lifecycle_state` at `DOC81_Scope_Policy_Charter_Draft.md:944` and §14.3 additions at `DOC81_Scope_Policy_Charter_Draft.md:2231-2245`. |
| U29 | PASS | Action closure and predicate table at `DOC81_Scope_Policy_Charter_Draft.md:1521-1545`. |
| U30 | PASS | `ExternalVocabularyValueRef` and `VisibilityClassRef` at `DOC81_Scope_Policy_Charter_Draft.md:69-74`; renames in §14.3 at `DOC81_Scope_Policy_Charter_Draft.md:2245`. |
| U31 | FAIL | Brand block exists at `DOC81_Scope_Policy_Charter_Draft.md:23-83`, but primary IDs remain bare strings; see S-1. |
| U32 | PASS | Owner-map discharge additions at `DOC81_Scope_Policy_Charter_Draft.md:2231-2245`. |
| U33 | PASS | M1 lint count at `DOC81_Scope_Policy_Charter_Draft.md:2126-2128`; topic confirmation at `DOC81_Scope_Policy_Charter_Draft.md:1375-1393`; golden scenario additions at `DOC81_Scope_Policy_Charter_Draft.md:2158`. |
### Forks
| ID | Result | Evidence / note |
|---|---:|---|
| F1 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:554`, `DOC81_Scope_Policy_Charter_Draft.md:740-742`. |
| F2 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:194-211`, `DOC81_Scope_Policy_Charter_Draft.md:2191`. |
| F3 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:1432-1456`, `DOC81_Scope_Policy_Charter_Draft.md:2184`. |
| F4 | PASS | `same_firewall_only` at `DOC81_Scope_Policy_Charter_Draft.md:497`; V15 mapping at `DOC81_Scope_Policy_Charter_Draft.md:1946`. |
| F5 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:1494-1510`. |
| F6 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:889-918`, `DOC81_Scope_Policy_Charter_Draft.md:2174`. |
| F7 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:2051-2063`, `DOC81_Scope_Policy_Charter_Draft.md:2087`. |
| F8 | PASS as superseded by R-2 | `DOC81_Scope_Policy_Charter_Draft.md:974-982`, `DOC81_Scope_Policy_Charter_Draft.md:1020`; card at `E1_E2_Adjudication_Card.md:132`. |
| F9 | PASS | DOC84-owned measurement at `DOC81_Scope_Policy_Charter_Draft.md:1333-1340`. |
| F10 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:1568-1577`, `DOC81_Scope_Policy_Charter_Draft.md:1625-1639`. |
### Architect Rulings
| ID | Result | Evidence / note |
|---|---:|---|
| R-1 | PASS | §4.0 exhaustive four-block list and non-blockers at `DOC81_Scope_Policy_Charter_Draft.md:1134-1148`. |
| R-2 | PASS | `DOC81_Scope_Policy_Charter_Draft.md:974-982`, `DOC81_Scope_Policy_Charter_Draft.md:1020-1028`. |
| R-3 | PASS | Surface-keyed notice posture at `DOC81_Scope_Policy_Charter_Draft.md:1245-1247`; lints/fixtures at `DOC81_Scope_Policy_Charter_Draft.md:1247`. |
| R-4 | PASS | `defer_review_fail_closed` and no interrupting prompt at `DOC81_Scope_Policy_Charter_Draft.md:1870-1886`. |
| R-5 | PASS | Phase-2 readiness note and principal keys at `DOC81_Scope_Policy_Charter_Draft.md:2160`; required `principal_ref` at `DOC81_Scope_Policy_Charter_Draft.md:580`. |
### Declines / Non-Changes
| ID | Result | Evidence / note |
|---|---:|---|
| D1 | PASS | No camelCase migration found; fields remain snake_case / PascalCase type style. |
| D2 | PASS | No `defer_to_safe_label_only`; explicit decline at `DOC81_Scope_Policy_Charter_Draft.md:1062`. |
| D3 | PASS | Constraint table, not total function, at `DOC81_Scope_Policy_Charter_Draft.md:1494-1510`. |
| D4 | PASS | No E0 `PolicyEpochVersion`; forward flag at `DOC81_Scope_Policy_Charter_Draft.md:1114` and `DOC81_Scope_Policy_Charter_Draft.md:2160`. |
| D5 | PASS | Same as F7. |
| D6 | PASS | Formal proofs not added; NI-1 property fixtures at `DOC81_Scope_Policy_Charter_Draft.md:2130`. |
| D7 | PASS | Full-pairwise equivalence only as declined stricter alternative at `DOC81_Scope_Policy_Charter_Draft.md:2191`. |
| D8 | PASS | No `composeOutputPolicy(sources)` found; output privilege inheritance remains withdrawn. |
| D9 | PASS | Disambiguation timeout handled by §3.5 union at `DOC81_Scope_Policy_Charter_Draft.md:1032-1063`. |
| D10 | PASS | Aggregate inference remains Phase-2 forward flag in report/card; no new Phase-1 query-correlation mechanism added. |
| D11 | PASS | No multi-principal axis added to `ScopeAffinity`; principal keys remain in context/result. |
| D12 | PASS | See trap-list D12. |
## 2.E Regression Checklist Results
| # | Check | Result | Evidence |
|---:|---|---:|---|
| 1 | No E0 contract re-declared | PASS | Bind-by-reference text at `DOC81_Scope_Policy_Charter_Draft.md:21`; E0 outbound set only referenced. |
| 2 | No retired names reintroduced | PASS | Checked trap terms; occurrences are replacement/retired context only. |
| 3 | §9 acyclicity downward-only | PASS | DOC81 to DOC86 export and no import back at `DOC81_Scope_Policy_Charter_Draft.md:2048-2089`; schema import edge statement at `DOC81_Scope_Policy_Charter_Draft.md:2156`. |
| 4 | §7.3 and §14.2 row-for-row consistent | PASS | §7.3 table at `DOC81_Scope_Policy_Charter_Draft.md:1942-1953`; §14.2 table at `DOC81_Scope_Policy_Charter_Draft.md:2216-2229`; OPA V3.18 source rows at `OPA_V3_18.md:3218`, `OPA_V3_18.md:3228`, `OPA_V3_18.md:3240-3290`, `OPA_V3_18.md:5449`. |
| 5 | One-owner incl. F7/F9 boundaries | PASS | F7 export carries facts only at `DOC81_Scope_Policy_Charter_Draft.md:2051-2063`; F9 DOC84-owned measurement at `DOC81_Scope_Policy_Charter_Draft.md:1333-1340`. |
| 6 | Zero `| string` escapes and zero bare-string primary IDs | FAIL | `| string` escapes are removal comments only (`DOC81_Scope_Policy_Charter_Draft.md:1986`, `DOC81_Scope_Policy_Charter_Draft.md:1992`, `DOC81_Scope_Policy_Charter_Draft.md:2036`), but bare-string DOC81 primary IDs remain; see S-1. |
| 7 | Gate/lint/fixture triple for every new invariant | FAIL/PARTIAL | §10 rows exist at `DOC81_Scope_Policy_Charter_Draft.md:2095-2118`, but the disclosure-coherence runtime gate description says `makeCoherent` runs last at `DOC81_Scope_Policy_Charter_Draft.md:2111` while actual §3.2 runs scalar derivation after it; see B-1. Other rows pass. |
| 8 | Golden scenario + §18 fixtures updated for `same_firewall_only` and egress phase | PASS | §12-bis additions at `DOC81_Scope_Policy_Charter_Draft.md:2158`; property fixture family at `DOC81_Scope_Policy_Charter_Draft.md:2130`. |
| 9 | §0 bind-list + counts/header updated | PASS | Header/status/count at `DOC81_Scope_Policy_Charter_Draft.md:1-5`; bind list at `DOC81_Scope_Policy_Charter_Draft.md:21-23`. |
| 10 | §1.5/§1-bis boundary audit | PASS | R-1 boundary at `DOC81_Scope_Policy_Charter_Draft.md:1134-1148`; destination classification remains E0/DOC5 via crosswalk and E0 §22; confirmations remain request/egress surfaces, not DOC81 execution. |
## 2.F No-Phantom + Structural Integrity
Sampled more than 20 new R2 contracts/enums/lints across §2-§9. The sampled items carried citations/provenance or seed markers: `ScopeEquivalenceCluster`, `ScopeSearchCoverageProof`, `PolicyRuntimeFreshnessKey`, `PolicyEvaluationContext`, `EffectiveMemoryPolicy`, `PolicyObligationConflict`, `PolicyStampScopeItem`, `PolicyCeilingSnapshot`, `RestampAuthority`, `DisclosurePermissionVector`, `SafeLabelDisclosurePolicy`, `ExtractionRoutePolicyEnvelope`, `PolicyCappedDAMSInput`, `ContaminationRiskMeasurement`, `TopicRiskConfirmation`, `DestinationPolicyCrosswalk`, `MemoryPolicyActionClosureRule`, `CascadingSourceInvalidationRun`, `LegalHoldState`, `CollectionSuppressionEvaluation`, `SourceExclusionFilterRule`, `RelationTraversalPolicyRegistry`, and `PolicyUIExport`.
Structural checks:
- Code fences: **PASS**. 80 fence markers, balanced.
- Duplicate shared type/interface definitions: **PASS** on sampled shared definitions (`DisclosureClass`, `MemoryPolicyAction`, axis types, `PolicyRuntimeFreshnessKey`, `PolicyEvaluationContext`, `EffectiveMemoryPolicy`, `PolicyStamp`, `DestinationPolicyCrosswalk`, `PolicyUIExport` each declared once).
- § numbering: **PASS**. New §3.0, §4.0, §4.7, §6.5-§6.7, and §12-ter inserts are present and monotonic.
- OFAR count: **PASS**. `OPEN_FOR_ARCHITECT_REVIEW` appears only in the §0 convention and the §13 zero-open statement at `DOC81_Scope_Policy_Charter_Draft.md:17` and `DOC81_Scope_Policy_Charter_Draft.md:2166`.
- §13.6 seed set: **PASS**. Seed table at `DOC81_Scope_Policy_Charter_Draft.md:2182-2191` lists F3 floor cells, U29 predicate minima, U16 protection rank, U19 closure default, traversal depth/budget, U17 threshold defaults, F5 crosswalk rows, and F2 stricter-alternative note. It includes a couple of extra value seeds beyond the audit prompt's minimum list (`MAX_SCOPE_TRAVERSAL_DEPTH`, `THRESHOLD_DEFAULTS`, crosswalk rows), but those are explicitly seeded in the draft and not open design questions; I do not treat them as phantom content.
## Overall Bottom Line
The R2 application is close but not fidelity-clean. The two required fixes are specific: repair the §3.2 disclosure-vector/scalar/coherence ordering so U1/U8/U9 are actually executable, and complete the U31 branded-primary-ID sweep. After those patches, the draft should be ready for a short re-audit of the changed lines before delta design review.