From 249335e5155f583558202d8d400a6ad06acc931e Mon Sep 17 00:00:00 2001 From: mos-dt-0 Date: Sat, 1 Aug 2026 09:20:15 -0500 Subject: [PATCH] =?UTF-8?q?docs(remediation):=20bank=20D-39/D-40=20?= =?UTF-8?q?=E2=80=94=20gate-ready=20reached,=20then=20withdrawn=20on=20a?= =?UTF-8?q?=20finding=20I=20disclosed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D-39: I contaminated an open independent review. RR12 was an open registered check and I sent rev-974 my CONCLUSION, not just my observation. rev-974 then downgraded an automated Codex review that had flagged RR12 as a blocker, in line with my framing. The bias sat in my instrument, not the reviewer's diligence — a subordinate is agreeable by construction, and the divergence instruction I attached cannot undo having named the answer first. Mos adopted the rule fleet-wide: a dispatcher may relay observations and reproductions into an open review, never its own verdict on an open check. Re-adjudicated by a mechanically fresh seat with no access to my framing: NON-BLOCKING, independently, on stronger evidence than either prior pass (accept-set matrix proving the accepted set is a strict subset of a correct case-insensitive comparison's, so it cannot false-certify; exploit path hunted and ruled out; all 0x110000 codepoints scanned for a fold that could smuggle non-hex onto a valid SHA). So contamination did not change the answer, and the finding stands anyway — a correct answer reached by a contaminated process still corrupts the process. D-40: that same fresh seat looked outside its question and found a type confusion inside the exact conjunction the exemption rests on. `step.get("exit_code") == 0` is True for JSON false, and coder-mos1 added the float case. Verified by me on the real #2188 record: false and 0.0 both yield exit 0 with exempted_steps 1 — the exemption GRANTED; "0" and null correctly block. Two of four near-miss types satisfy a conjunction whose whole justification is that it is exactly scoped. Consequence: I reported #1033 gate-ready at 033b2ffb (RR1-RR12 pass, review 69 APPROVED, CI #2193 success 9/9) and then had to hand Mos a finding that may disqualify what I had just certified. Better that than defending the report. Disposition is Mos's; coder-mos1 escalated it to blocker unilaterally and moved to push — held, because the author does not adjudicate their own PR and does not void a live APPROVED review plus terminal-green CI by pushing. Head frozen, fix prepared and unpushed, ACKed. Board doctrine now carries both rules: never relay a conclusion into an open review, and the author never adjudicates their own blocker status. Co-Authored-By: Claude Opus 5 (1M context) --- docs/remediation/BOARD.md | 32 +++++++++++--------- docs/remediation/TASKS.md | 64 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 15 deletions(-) diff --git a/docs/remediation/BOARD.md b/docs/remediation/BOARD.md index f3a4d1d1..12f2b13c 100644 --- a/docs/remediation/BOARD.md +++ b/docs/remediation/BOARD.md @@ -1,6 +1,6 @@ # mos-remediation — LIVE BOARD (keep < 8 KB) -**Phase:** EXECUTING — RM-03 at owner-merge; RM-02 blocked on RM-61; RM-61 **remediated, in re-review**. +**Phase:** EXECUTING — RM-03 at owner-merge; RM-02 blocked on RM-61; RM-61 **HELD on D-40 disposition (Mos)**. **Updated:** 2026-08-01 — rotation seam CROSSED; successor seat resumed, attested, and is driving. (Prior seat rotated at ~803k tokens, ~4x threshold.) @@ -15,21 +15,21 @@ ## In-flight -| Task | Owner | State | -| ------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RM-01 checkout | — | **MERGED** `f58b3699` (#1027) | -| RM-03 queue guard | **Jason** | **GO** @ `78ec47cd` (cmt 20392) — HELD FOR OWNER MERGE. Head unmoved; GO commit-bound, VOID if it moves — **do not push #1032** | -| RM-02 registry ★key | — | **BLOCKED on RM-61.** Complete @ `f9746b23`, head FROZEN, 2 live REQUEST_CHANGES. `ci-postgres` FAIL on #2187 **and** #2188 | -| RM-61 CI exemption | coder-mos1 | **@ `033b2ffb`** (#1033): RR1–RR12 **all PASS** (rev-974 review 68). CI #2193 terminal success 9/9. Metadata blocker (stale body) fixed **without moving the head** — discharge pending. **D-38** | -| 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 | +| Task | Owner | State | +| ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RM-01 checkout | — | **MERGED** `f58b3699` (#1027) | +| RM-03 queue guard | **Jason** | **GO** @ `78ec47cd` (cmt 20392) — HELD FOR OWNER MERGE. Head unmoved; GO commit-bound, VOID if it moves — **do not push #1032** | +| RM-02 registry ★key | — | **BLOCKED on RM-61.** Complete @ `f9746b23`, head FROZEN, 2 live REQUEST_CHANGES. `ci-postgres` FAIL on #2187 **and** #2188 | +| RM-61 CI exemption | coder-mos1 | **HELD @ frozen `033b2ffb`** (#1033). Gate-ready was reached (RR1–RR12 PASS, review 69 APPROVED, CI #2193 9/9) — then **D-40** landed. Mos rules; fix ready, unpushed | +| 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 | ### For the incoming orchestrator — read this before acting -1. **Nothing is waiting on you that is urgent.** RM-03 waits on Jason; RM-02 waits on RM-61; RM-61 is - in exact-head re-review. Read the record before touching any lane. -2. **`docs/remediation/TASKS.md` is authoritative**, not the newest voice in a chat. It holds 38 findings - (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-38 in TASKS.md), every ruling with its rationale, and the +1. **Nothing is waiting on you that is urgent.** RM-03 waits on Jason; RM-02 waits on RM-61; RM-61 + waits on Mos's D-40 ruling with its head frozen. Read the record before touching any lane. +2. **`docs/remediation/TASKS.md` is authoritative**, not the newest voice in a chat. It holds 40 findings + (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-40 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 five first-class principles**, all earned by live failures — observe the property not the proxy · pre-registration prevents retrofitting and nothing else · never ship an @@ -79,7 +79,9 @@ inside the correction for it. Real fix authorised, Mos owns it, sequenced at a quiet seam. **#1024 implicated.** Detail: D-37. - Standing worker-brief doctrine (mandatory in EVERY brief): re-export `MOSAIC_GIT_IDENTITY` (**D-34**); commit early/WIP (**D-31**); don't weaken a RED test to pass; if a check is unrunnable SAY SO, never - substitute; `agent-send -f` never `-m`; artifacts off shared `/tmp`; scan CI from `-f json` (**D-33**). + substitute; `agent-send -f` never `-m`; artifacts off shared `/tmp`; scan CI from `-f json` (**D-33**); + **relay observations into an open review, NEVER your own conclusion on an open check (D-39)**; the + **author never adjudicates their own PR's blocker status** — surface evidence, prepare the fix, hold. - Remote control: native `/remote-control` NOT wired in this runtime. Path is **Mos-relay** (Jason ↔ mos-claude via Discord ↔ mos-remediation via agent-send). Not a blocker. @@ -91,7 +93,7 @@ board is one of the six stale restatements below. ## Decisions log — full record in [`TASKS.md`](./TASKS.md) -All 38 findings (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-38 in `TASKS.md`) and every ruling with its +All 40 findings (D-1…D-6 in `BOARD-LEDGER.md`, D-7…D-40 in `TASKS.md`) and every ruling with its rationale live there. **Not duplicated here** — a second copy is a second thing to go stale, which this board had done three times in one night (gate list, capability registry, DECISION-1 status), and three more times by the next rotation seam (RM-61 "building", "nothing implemented yet", DECISION-1/2/3 diff --git a/docs/remediation/TASKS.md b/docs/remediation/TASKS.md index 870e306e..d5be90a7 100644 --- a/docs/remediation/TASKS.md +++ b/docs/remediation/TASKS.md @@ -322,6 +322,70 @@ merges cannot perform them. And the shape holds: **RM-03 is the fix for the queue guard, so this — the first delivery through the complete stack — is also the last one gated by a check that could not fail.** +### D-40 — a type confusion INSIDE the structural discriminator the whole design rests on + +`step.get("exit_code") == 0` is **True for JSON `false`**, because Python `False == 0`. Reproduced twice +independently (fresh adjudicator, then the orchestrator): rewriting `ci-postgres`'s `exit_code` as JSON +`false` in the real `#2188` record yields **exit 0, `terminal-green`, `exempted_steps 1`, anomalies 0** — +**the exemption is granted on a boolean.** + +**Why it is worth a finding despite being unreachable today.** Reachability requires the provider to emit +a boolean in an integer field; Woodpecker is Go with an `int` type and will not. It also only widens the +exemption to a step that ALREADY matches name, type, state and the exact ULID signature. But **"a failed +service step carrying `exit_code 0` under a SUCCESSFUL workflow" IS the structural discriminator this +entire exemption rests on** (see the RM-61 result above). A type confusion sitting inside that exact +conjunction earns a tracked owner even while unreachable — because RM-61's own doctrine is that +**correlates pass today and break the moment infrastructure shifts**, and the charter's rule is that a +documented gap with no owner becomes a permanent gap that reads as intentional. + +**Disposition:** recommended NON-BLOCKING for #1033 and routed to Mos/the merge-gate as a recommendation, +explicitly **not** an orchestrator ruling. Fix: `isinstance(x, int) and not isinstance(x, bool)`. + +**Provenance note worth keeping:** this was found by a seat dispatched to adjudicate something else +entirely (D-39's RR12 re-run), which looked outside its question and said so. The clean-context dispatch +paid for itself twice. + +### D-39 — the ORCHESTRATOR contaminated an open independent review by stating its own conclusion + +RR12 (case-sensitivity) was an **open registered check**. Before `rev-974` ruled, the orchestrator sent +it not merely the observation but **the conclusion**: _"my read is: acceptable, not a defect."_ `rev-974` +subsequently **downgraded an automated Codex review that had flagged RR12's false-block behaviour AS A +BLOCKER** to a bounded non-blocking note — in line with the orchestrator's framing. + +**The bias was in the orchestrator's instrument, not the reviewer's diligence.** A subordinate is +agreeable by construction; handing one a conclusion on a live question and then receiving agreement is +the **confirmation-query failure** (`MISSION.md`, query-for-refutation) committed by the seat that +authored the query. The divergence instruction that accompanied it ("if your run disagrees that is a +finding") is **necessary but insufficient — it cannot undo having named the answer first.** + +> **RULE ADOPTED — standing, fleet-wide (Mos, 2026-08-01).** A dispatcher (orchestrator included) MAY +> relay **observations and reproductions** into an open review. It **MUST NOT state its own verdict or +> conclusion on an open registered check** until the reviewer has ruled. **This belongs in every dispatch +> brief.** + +**Re-adjudication (ordered by Mos, not optional given an automated reviewer had independently blocked).** +RR12 was re-run by a seat with **zero prior context** and no access to the orchestrator's framing, the +orchestrator's conclusion, or Codex's — given the artifact and the criterion only, and told explicitly +that either ruling was useful. **Result: NON-BLOCKING, reached independently, on stronger evidence than +either prior pass** — a full accept-set matrix showing exit 0 occurs on exactly one record string, so the +accepted set is a strict SUBSET of a correct case-insensitive comparison's, and **narrowing an accept-set +cannot introduce a false certification**. Exploit path hunted specifically and ruled out (the commit +anomaly is appended BEFORE `exemption_applies` is computed; no `re.IGNORECASE`; all 0x110000 codepoints +scanned for a fold that could smuggle non-hex onto a valid SHA). + +`rev-974` separately volunteered that it had **already measured** the behaviour before the framing +arrived. That is recorded but **not leaned on** — it is self-report from the contaminated party. The +fresh seat is the actual check. + +**So contamination did not change the answer — and the finding stands anyway.** A correct answer reached +by a contaminated process still corrupts the process. Note also the shape: **the automated reviewer +disagreed and the human seat that agreed with the orchestrator was the one that got deferred to.** That +asymmetry is the signal, not the outcome. + +**Attaches to:** the dispatch-brief doctrine (every brief), and RM-58 (mechanical pre-dispatch reset) — +the re-adjudication was only trustworthy because the seat was **mechanically** fresh rather than asked to +be, which is D-4's lesson applied to independence rather than to context. + ### D-38 — a gate that certified the right RECORD for the wrong COMMIT (and the AC set that could not see it) **RM-61's terminal-green verifier reported the pipeline's commit and never bound it to the PR head.**