You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(P-022): parity-work discipline + status reconciliation at fdcb222
Two halves of one change, deliberately together: the rules that say how to
stop status drift, and the reconciliation that clears the drift those rules
were learned from.
## Parity-work discipline (new section)
Four rules, each paid for by a real defect during step 5a (#255, PRs
#319/#320/#321), written wider than this port so they outlive P-022:
1. Oracle over reviewer prose — a finding is a hypothesis until reproduced
against the reference; keep the observed behaviour, not the reviewer's
explanation. (A review argued the word-boundary rule from single-ended
probes; the reference builds a both-ended pattern. Right conclusion,
wrong reason — implementing the reason would have been wrong.)
2. Mutation over plausible tests — a regression test is not evidence until
the matching mutation fails it THROUGH the production surface it claims
to protect. (The ordering replay sorted a parallel vector with a copy of
the key; it would have passed against sort_unstable_by, the exact defect
it existed for.)
3. No fail-fast during mutation campaigns — expose all catching layers, not
the first failing target. (cargo test halts on the first target; with
--no-fail-fast the same mutation showed three catchers, and a second
mutation was caught only at the replay layer.)
4. Insertion-stable generated goldens — vocabulary-derived shape must depend
on stable item identity, never ordinal position.
Rule 4's law is the INVARIANT, not the mechanism:
insert one synthetic vocabulary member
existing-record churn == 0
new-record delta == 1
A content hash is today's way of satisfying it, not the requirement; any
stable mapping conforms and swapping it is not a violation. Writing the hash
into the norm would turn an implementation detail into scripture.
Single home by design — not duplicated into AGENTS.execution-surfaces.md,
because two copies of one law drift, which is what the status-drift rule
exists to prevent.
## Status reconciliation
Written fresh against the tree at fdcb222, NOT carried over from the earlier
unmerged reconciliation: a stale block patched with a stale fix stays stale.
The old branch is abandoned rather than cherry-picked.
What was wrong on main:
- #258 still described as "land with PR #297, in independent review; not on
main yet" — closed completed, both spec documents on main.
- own-lowered and own-bridge absent from the workspace list; both are
members.
- 5a listed as a future step — #255 closed completed today.
- own-diagnostics described as the data-only layer — it now carries the full
normalized contract.
What it says now: checkpoint-level status with each open step separating its
normative blocker from #250's preferred sequencing, #259 broken out per its
own five checkpoints (2 and 3 complete with counts, 1 partial, 4 not
started, 5 unblocked-but-not-done), and #260/#269 keeping the
sliceable-vs-declarable distinction. Preferred queue recorded: #256 →
#259 remaining → #260/#269.
The proposals index row is corrected in the same change — a third status
surface for the same fact, and leaving it stale would repeat the defect.
#250 is a GitHub issue and cannot ride in a git commit; its body is
synchronised in the same move, per its own rule that both surfaces change
together.
Docs only. No code, fixtures or acceptance touched. The executable guard for
rule 4 currently implements `churn == 0`; extending it to `delta == 1`, plus
three review nitpicks from #321, lands in the follow-up test PR.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CJF7MBi1ijU5m9cJVWgQsM
| 6a | OwnIR **bridge semantics formalized** before the port |#258 (deliverable written — `spec/Bridge.md` + `spec/BridgeBehaviorMatrix.md`**land with PR #297**, in independent review; not on `main` yet) |
| 1 — typed OwnIR validation |**partial**|`OwnIr::from_json` + the #294 OD-2 fail-loud unknown-kind rule. Full validation acceptance/rejection parity (fixture layer 1) is out of the current slice |
| 3 — interprocedural MOS |**complete for the stage-1 domain**|`dump_summaries()` byte-identical to `python -m ownlang summaries` across **35**`*.summaries.json` goldens. Container-valued metadata is **outside** the declared scalar-metadata parity domain — a separate #294-class door decision, not a silent gap |
56
+
| 4 — analysis wiring |**not started**| the crate states its own boundary: "no diagnostics, no analysis" |
57
+
| 5 — full fact-to-verdict parity |**unblocked, not done**| its comparison set (message, severity, subject, resource kind, ordered Evidence) is now delivered by #255 — but the checkpoint still needs checkpoint 4's wiring to produce verdicts to compare |
58
+
59
+
**Open steps — each owned by exactly one child issue under #250:**
| 5b |`.ownreport.json` + SARIF projection, canonical parity |#256|**ready** — its normative blocker (#255) is satisfied. The **preferred next step**: it stays on the diagnostic/output seam #255 just finished, and completing it widens #259 checkpoint 5 to its full Layer-5 surface in one pass instead of two visits |
65
+
| 5c |`own-codegen` (analysis-independent sibling) |#257|**ready**, independent of the analysis path — parallelizable |
66
+
| 6a | OwnIR **bridge semantics formalized** before the port |#258|**complete** — see above |
0 commit comments