Skip to content

Commit f8ffd42

Browse files
committed
P-037 Phase B / B1-F2-F1: fix order/must_measure/non_goals wording
Owner review of B1-F2 (5579d80) found one real governance P1 and one P2 in the epoch record's prose fields -- the semantics and the new boundary itself were confirmed correct; only the record's own words were wrong. Record-only correction: no instrument path, population, implementation, or measurement output changes, so no new T_B/R_B is needed. T_B stays cfe7e19, R_B stays docs/evidence/p037-b- baseline-manifest.md, instrument_identity stays 3591d8056a1debabca046ad1faa1715c71516f0ef37d2037da817a3bde2c5d2d. P1 (order self-contradiction): order[]'s single "first semantic treatment" entry named production_diff_gate.rust's mutable scope as the whole of it -- directly contradicting the treatment.extractor_seam section this same B1-F2 commit added, which requires the extractor stage to happen (per the frozen A1 acceptance matrix's own two-layer-acceptance rationale, extractor-first). A future agent treating order as authoritative would read both "extractor treatment is required" and "first treatment is Rust-only" from the same record. Fixed by staging the single entry into two: "first semantic treatment, stage a (B2.1a)" (extractor-side abstention/delegation, governed by production_diff_gate. extractor) followed by "stage b (B2.1b/c)" (the original Rust-scope text, now explicit that it is sequenced strictly after stage a). P2 (extractor gate's own must_measure claim was the wrong unit): production_diff_gate.extractor.b1_f2_must_measure stated an IDENTICAL claim for rust/crates/own-bridge/ -- a true fact, but not this gate's own unit's fact, and not where a reader would expect to find it. Fixed to state the extractor unit's own IDENTICAL-against-bfa8647 claim primarily; added a symmetric production_diff_gate.rust_b1_f2_must_measure field so the Rust-side claim has its own proper home instead of living as a footnote inside a different gate's field. Also added a non_goals scope note (optional, owner-suggested): the array describes B1's/B1-F2's own task boundaries as each was written, not a standing Phase-B rule -- two of its entries ("no T_B/R_B naming", "no change to... the extractor") are already superseded by design in later steps of this same epoch. Verified: JSON valid, diff is exactly this one file. test_p037_a2d_epoch. py (governs a DIFFERENT epoch record, confirmed unaffected), p037_ evidence_b.py selftest and identity (zero closure problems), the extractor gate's own selftest, and the Rust gate's own selftest all stay green. ruff, mypy, full tests/run_tests.py clean. Nothing outside this one JSON file touched. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AN6xHbpovxrmZ4AMjS7WQA
1 parent 5579d80 commit f8ffd42

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

‎docs/evidence/p037-b-epoch.json‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,15 @@
102102
},
103103
"registered_new_items_policy": "empty by design in B1: no treatment exists yet to know what new production items it needs, and a treatment registers its own new items in the SAME commit that defines them -- exactly A2.2-D's own door-gate discipline, not a relaxation of it",
104104
"b1_must_measure": "IDENTICAL against 5571ba4 (the closed Phase-B entry-gate head): B1 adds tooling, ledgers and documentation and moves no byte of rust/crates/own-bridge/",
105+
"rust_b1_f2_must_measure": "IDENTICAL against bfa8647 (the closed, corrected-T_B B1-F1 head) for rust/crates/own-bridge/ -- this gate's own unit: B1-F2 moves no Rust production byte. A separate fact and a separate field from production_diff_gate.extractor.b1_f2_must_measure, which states the extractor unit's own IDENTICAL claim -- conflating the two under one field (stating this unit's fact inside the extractor's own must_measure) was the P2 wording defect B1-F2-F1 corrects.",
105106
"extractor": {
106107
"unit": "frontend/roslyn/OwnSharp.Extractor/",
107108
"tool": "scripts/p037_b_extractor_diff_gate.py",
108109
"note": "Added by B1-F2. A second, separate item-level gate -- not scripts/p037_door_diff_gate.py repointed a third time, and not scripts/p037_b_production_diff_gate.py extended: that module's Policy/compare_rust are Rust-syntax-specific (classify_chars/_item_head parse Rust item heads, not C#). The extractor gate reuses only p037_door_diff_gate.py's language-agnostic half (compare_items/Tree/snapshot/UnitReport/_normalize) plus its own C#-aware csharp_items() extraction -- the same relationship compare_python already has to that shared half, now a third instance of it.",
109110
"frozen_files": ["OwnSharp.Extractor.csproj"],
110111
"mutable_methods": ["ConsumeReleaseArgs", "ConsumesParam", "CallReleasesReceiver"],
111112
"registered_methods": [],
112-
"b1_f2_must_measure": "IDENTICAL against bfa8647 (the closed, corrected-T_B B1-F1 head) for rust/crates/own-bridge/ -- B1-F2 moves no Rust production byte either. Only scripts/p037_evidence_b.py (the provenance-closure carve-out), the new scripts/p037_b_extractor_diff_gate.py, this record, tests/test_p037_a2d_epoch.py's one-file allowlist addition and docs/notes/p037-formal-kernel.md move."
113+
"b1_f2_must_measure": "IDENTICAL against bfa8647 (the closed, corrected-T_B B1-F1 head) for frontend/roslyn/OwnSharp.Extractor/ -- this gate's own unit, and its own fact: B1-F2 moves no extractor production byte (Program.cs and OwnSharp.Extractor.csproj both untouched). rust/crates/own-bridge/ is a SEPARATE fact, recorded by production_diff_gate.rust_b1_f2_must_measure, not this field -- stating the Rust unit's claim here, under the extractor gate's own must_measure, was the P2 wording defect B1-F2-F1 corrects. Beyond both units: only scripts/p037_evidence_b.py (the provenance-closure carve-out), the new scripts/p037_b_extractor_diff_gate.py, this record, tests/test_p037_a2d_epoch.py's one-file allowlist addition and docs/notes/p037-formal-kernel.md move."
113114
}
114115
},
115116
"environment": {
@@ -184,14 +185,16 @@
184185
"proof-boundary audit GREEN (this task's stop condition, or RED with named gaps if not met)",
185186
"terminal-green T_B: named only after the audit is green on a reviewed head (not this task)",
186187
"new Phase-B baseline R_B: a governed take on its own qualified environment, never a2d's R_D reused (not this task)",
187-
"first semantic treatment: the frozen hypothesis above, implemented within production_diff_gate.rust's mutable scope (mos.rs's guarded-kernel items; lower.rs's lower_fn_params/unverified_transfer_calls/kill_sites_for_unverified/lower_full) (not this task)",
188+
"first semantic treatment, stage a (B2.1a): extractor-side abstention/delegation within treatment.extractor_seam's authorized_change_shape, in Program.cs's three named methods only, governed by production_diff_gate.extractor (not this task) -- this entry originally read as a single Rust-only step naming production_diff_gate.rust first; B1-F2-F1 corrects that self-contradiction (an authoritative order naming the Rust stage first, right next to a treatment.extractor_seam this same record added, requiring the extractor stage) -- see superseded_by_b1_f2",
189+
"first semantic treatment, stage b (B2.1b/c): the frozen hypothesis above, implemented within production_diff_gate.rust's mutable scope (mos.rs's guarded-kernel items; lower.rs's lower_fn_params/unverified_transfer_calls/kill_sites_for_unverified/lower_full) -- sequenced strictly after stage a, never before it: the two-layer-acceptance rationale (docs/notes/p037-formal-kernel.md) is that a Rust summary engine must not compensate a bad extractor fact with another heuristic (not this task)",
188190
"classified after measurement: the difference policy above applied for real (not this task)"
189191
],
190192
"measurement_policy": {
191193
"fact_diff": "not_applicable_pre_treatment",
192194
"note": "no take happens in this record; the field exists for shape-parity with the a2d record and is filled meaningfully only once R_B is planned in detail"
193195
},
194196
"non_goals": [
197+
"scope note (added B1-F2-F1): this array describes B1's and B1-F2's OWN task boundaries, as each was written at its own time -- not a standing Phase-B rule. In particular \"no T_B, R_B, B_treatment_head or B_after_evidence naming\" and \"no change to ownlang/ownir.py, the extractor, OwnIR guarded-fact vocabulary, verdict mapping or launcher behaviour\" below are already superseded by design: T_B/R_B ARE named (see named_later), and treatment.extractor_seam explicitly authorizes an eventual, narrowly-scoped extractor change (B2.1a, not yet performed). Read every entry below as \"not in the task that wrote it\", never as \"never, for the rest of Phase B\".",
195198
"no production semantic movement of any kind",
196199
"no move of formal/p037-kernel/ into rust/crates/own-bridge",
197200
"no new corpus/p036-bakeoff fixture for family 1 (corpus/p037-shapes/guard-mutated, already anchored, already CI-checked, already discharges it -- see first_semantic_hypothesis.g_v4_discharge_matrix)",

0 commit comments

Comments
 (0)