diff --git a/docs/remediation/BOARD.md b/docs/remediation/BOARD.md index fbb7a257..5bc8d5c8 100644 --- a/docs/remediation/BOARD.md +++ b/docs/remediation/BOARD.md @@ -20,7 +20,7 @@ | ------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | RM-01 checkout | — | **MERGED** `f58b3699` (#1027) | | RM-03 queue guard | Jason (re-sync) | ✅ **MERGED** `58b971ab` (#1032), #1019 closed. ⚠ **NOT DELIVERED**: installed guard still the broken one (291 lines / 0 `ASSERTED_NOT_READY` vs main 482 / 5). Re-sync via `mosaic upgrade`, then **prove it blocks a KNOWN-RED pipeline** — **D-51** | -| RM-02 registry ★key | **coder-mos2** | **Round 4 dispatched** @ `fbb61912` (3rd NO-GO). Blockers 2+3 + **(d)-strict** history removal per Jason INCREMENT. **NO 4th anchor — RM-60 is the anchor, tracked.** f10-coder parked read-only as reference | +| RM-02 registry ★key | **coder-mos2** | Round 4 @ `fbb61912`. Blocker 2 hit **RM-60 again (D-52, CWE-353)** — seat stopped, both orchestrator AND coordinator had authored the error. Ruled **(b) honest narrowing**; blocker 3 + (d)-strict unchanged. **2 anchors now need RM-60** | | RM-61 CI exemption | — | ✅ **MERGED** `f4fd5967` (#1033). #1034 closed; **#1000 stays OPEN** (retirement trigger). Exemption is on `main` | | RM-59 / RM-60 | Jason (infra) | tracked deps; RM-60 option **B** | | #1023 queue attempt | Jason | SUPERSEDED-PENDING-JASON — live REQUEST_CHANGES, do **not** merge | @@ -31,8 +31,8 @@ three times in one session by duplicating that table (D-26's class). Read the table. ⚠ **And re-derive any board claim from the provider before load-bearing use (D-43)** — the board is sole-written and has no independent verifier. -2. **`docs/remediation/TASKS.md` is authoritative**, not the newest voice in a chat. It holds 52 findings - (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-51 + D-38c in TASKS.md), every ruling with its rationale, and the +2. **`docs/remediation/TASKS.md` is authoritative**, not the newest voice in a chat. It holds 53 findings + (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-52 + D-38c in TASKS.md), every ruling with its rationale, and the requirements each finding placed on RM-02/RM-34/RM-50/RM-55. 3. **`MISSION.md` carries the first-class principles** — read them there, they are not listed here. Two added 2026-08-01: **the anchor must live outside the audited party's authority** (D-19/D-25/D-45, @@ -78,6 +78,6 @@ Roster rolled verbatim to [`BOARD-LEDGER.md`](./BOARD-LEDGER.md); live truth is ## Decisions log — full record in [`TASKS.md`](./TASKS.md) -All 52 findings (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-51 + D-38c in `TASKS.md`) and every ruling with +All 53 findings (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-52 + D-38c in `TASKS.md`) and every ruling with its rationale live there. **Not duplicated here.** The history of _why_ this board must not restate — six stale copies across two seams — is rolled verbatim into [`BOARD-LEDGER.md`](./BOARD-LEDGER.md). diff --git a/docs/remediation/TASKS.md b/docs/remediation/TASKS.md index 25c0eaf1..0e9855fa 100644 --- a/docs/remediation/TASKS.md +++ b/docs/remediation/TASKS.md @@ -586,6 +586,61 @@ is that discipline without a mechanism eventually fails."_ > a failed round **or by a lucky manual sweep.** Interim: both coordinator and orchestrator sweep — and > **the mechanism retires the sweep.** +### D-52 — the FIFTH arrival defeated the orchestrator AND the coordinator, in the same turn, on a principle they had both just written + +`coder-mos2` implemented blocker 2's fix — a `gates/required-gates.baseline.json` "protected/base +artifact" — then ran independent code **and security** review **on its own fix**, and returned +**HIGH CWE-353 against its own work**: the baseline is not protected, because **verifier, manifest, +baseline, tests and lifecycle code are ALL PR-controlled.** Rewrite them consistently and the registry +**self-certifies**. It **stopped rather than invent a fourth local anchor.** + +**Both the orchestrator and the coordinator authored this error, in the same turn:** + +| who | what they said | +| ------------------ | -------------------------------------------------------------------------------------- | +| orchestrator | dispatched blocker 2 as _"must come from a PROTECTED/BASE artifact"_ | +| coordinator | ruled blockers 2+3 _"fixable in-PR"_ | +| **the same brief** | told the seat blocker 1 had **no local fix**, because PR code executes before the gate | + +**And the orchestrator's own pre-registered check P2 had already named it** — _"the seven required gate +IDs are an ANCHOR LIST. If the author can edit it, that is D-45 one level in."_ Registered by the +orchestrator, **confirmed as a blocker by `rev-974`**, and then a remediation reproducing it one level +down was dispatched anyway. + +> **★ THIS IS THE STRONGEST EVIDENCE THE PRINCIPLE IS REAL: it defeats the people who wrote it, every +> time, until the anchor is external.** Knowing the rule does not protect you from it — only moving the +> anchor outside the audited party's authority does. + +**RULING — (b) HONEST NARROWING, and the sibling distinction is what makes it correct rather than a +climbdown (Mos, 2026-08-01):** + +| blocker | local check can… | therefore | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | +| **1** history provenance | be **vacuously passed** (`seam=HEAD` empties the range) — certifies over NOTHING | **REMOVE** the claim (d-strict) | +| **2** inventory anchoring | **detect ACCIDENTAL drift** — inconsistent changes ARE caught; fails only against an adversary rewriting baseline + manifest + verifier consistently | **NARROW** the claim, keep the check | + +Accidental and incompetent drift is **most real-world drift**, so the mechanism retains genuine value. +Both track **RM-60** for the adversarial guarantee; both state the boundary in **both directions**. + +> **★ THE WORDING IS THE WHOLE RULING — D-48 territory, and neither seat may make that mistake twice.** +> The artifact must **NOT** say "protected" or "independently anchored" over a same-checkout baseline. +> It must state the positive claim and the adversarial gap **IN THE SAME BREATH**: _"detects accidental +> and incompetent inventory drift within a checkout; does NOT survive an adversary who rewrites +> baseline, manifest and verifier consistently — that guarantee requires RM-60's external boundary."_ +> **Plus a NEGATIVE CONTROL: a registered case that goes RED if the check ever claims protection it +> does not have.** A narrowed claim with no negative control is a gate with no proven failure path. + +**★ INCREMENT TRAJECTORY — surfaced to Jason.** **TWO** RM-02 anchors now require RM-60, and **each one +thins the (d)-strict increment.** The increment choice stands and (b) lands real value now, but the +trade-off should be decided **with the trend visible**: _if a third anchor needs the same boundary, the +increment may thin past worth._ + +**Seat conduct banked as the standard (`coder-mos2`):** stopped at the boundary rather than improvising +a fourth anchor; ran independent code + security review **on its own fix**; committed the delta as +**WIP** so a pending decision could not cost it (D-31); recorded sandbox attempts as **UNRUNNABLE** +(EROFS/EPERM) rather than substituting; named exit-97 as the known **#973/D-16** limitation rather than +a finding. + ### D-51 — the fix is merged, the issue is closed, and the RUNNING TOOL IS STILL BROKEN `#1032` merged (`58b971ab`), `#1019` closed, both verified by property. **RM-03 is delivered to `main`.**