From e01cfd44cbf29a30a1b59fc7b1d883bb0bd9836d Mon Sep 17 00:00:00 2001 From: mos-dt-0 Date: Wed, 5 Aug 2026 15:18:23 -0500 Subject: [PATCH] =?UTF-8?q?docs(remediation):=20correct=20D-55=20=E2=80=94?= =?UTF-8?q?=20"took=20the=20poster"=20is=20not=20established,=20and=20I=20?= =?UTF-8?q?discarded=20my=20own=20evidence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tl-mosaic found #1041 on mosaicstack/stack where poster == branch author == coder-mos2 and the squash took NEITHER — it took the merger. Mos re-tested its own 22 and found 0 of 24 rows had poster != merged_by, so none could distinguish the hypotheses. Its own framing is the sharpest statement of the class: a sample can be decisive for one question and empty for the next one asked of it. I made the mirror error. I excluded #1033 and #1032 as non-discriminating and said so explicitly, believing it made my evidence more careful. That exclusion was correct for "is the branch author discarded?" — poster equalled branch author, so no loss was visible — and wrong for "poster or merger?", where they discriminate cleanly because merged_by differs from the poster in both. I threw away my own discriminating rows by carrying a classification forward across questions. Mos reused a control across questions; I reused an exclusion. Re-measured, and this is the first data separating poster from merger: #1027 poster mos-dt-0 / merger Mos / author mos-dt-0 supports POSTER; #1033 and #1032 poster coder-mos1 / merger mos-dt-0 / author coder-mos1 both support POSTER; #1041 poster coder-mos2 / merger mos-dt-0 / author mos-dt-0 supports MERGER. Three to one, genuinely contradictory, one instance and one repo. Reported as contradictory data rather than a majority verdict — 3-to-1 is a hypothesis to test, not a conclusion to adopt, and a third factor such as merge path or a settings change is not excluded. What survives is the half that matters and it is untouched: the branch commit author is discarded, at 29 discriminating rows across three repos and two estates. Every mitigation rests on that half. Which is why Co-authored-by trailers are the only sound mitigation rather than belt-and-braces: they are robust to all three hypotheses, and the withdrawn poster-equals-author rule would have failed #1041 outright, where the poster WAS the author and attribution was lost anyway. Co-authored-by: tl-mosaic Co-Authored-By: Claude Opus 5 (1M context) --- docs/remediation/TASKS.md | 54 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/docs/remediation/TASKS.md b/docs/remediation/TASKS.md index 648b579a..198e146b 100644 --- a/docs/remediation/TASKS.md +++ b/docs/remediation/TASKS.md @@ -643,8 +643,11 @@ a finding. ### D-55 — the squash discards the branch author, and every pre-merge gate is blind to it -**Measured across two estates, two Gitea instances, three repos: 23/23 discriminating merges took the PR -POSTER as the squash author.** Diagnosed by the **USC orchestrator** (whose sentence — _"I verified the +**⚠ CORRECTED 2026-08-05 — SEE THE CORRECTION BLOCK BELOW. The "took the POSTER" half of this finding is +NOT ESTABLISHED.** What is established: **the branch commit author is DISCARDED.** What replaces it is +open. + +**Originally reported as: 23/23 discriminating merges took the PR POSTER as the squash author.** Diagnosed by the **USC orchestrator** (whose sentence — _"I verified the input to the operation and not its output"_ — is the doctrine); confirmed independently on mosaicstack by this seat: @@ -686,6 +689,53 @@ limitation stated, and **`feat/rm-02-gate-registry` marked MUST-NOT-DELETE** — confirmed on the squash, the branch is the only provider-side record. Verified by read-back: head unmoved, three trailers present, `Fixes #1029` intact. +### D-55a — CORRECTION: a sample decisive for one question, empty for the next — and I made the mirror error + +**`tl-mosaic` found the counterexample on `mosaicstack/stack`: PR #1041, where poster == branch author == +`coder-mos2`, and the squash took NEITHER — it took the MERGER (`mos-dt-0`).** The coordinator then +re-tested its own 22: **0 of 24 rows had `poster != merged_by`, so none could distinguish the two.** + +> **The coordinator's own words, and the sharpest statement of the class tonight: _"A sample can be +> decisive for one question and EMPTY for the next one asked of it. I asked the second question of the +> first question's control."_** It had written, about someone else's sample, that _"a sample which cannot +> distinguish the hypotheses is not weak evidence, it is none"_ — and then published one. + +**★ AND I MADE THE MIRROR ERROR.** I excluded **#1033 and #1032** as **"non-discriminating"** and said so +explicitly, believing that made my evidence more careful. **That exclusion was correct for _"is the branch +author discarded?"_ (poster == branch author, so no loss is visible) and WRONG for _"poster or merger?"_** +— for the second question they discriminate cleanly, because `merged_by` differs from the poster in both. +**I threw away my own discriminating rows by carrying forward a classification made for a different +question.** Same defect, opposite direction: the coordinator reused a control across questions; I reused +an **exclusion** across questions. + +**RE-MEASURED ON `mosaicstack/stack` — the first data that separates poster from merger:** + +| PR | poster | merged_by | squash author | supports | +| --------- | ------------ | ---------- | ------------- | ---------- | +| **#1027** | `mos-dt-0` | **`Mos`** | `mos-dt-0` | **POSTER** | +| **#1033** | `coder-mos1` | `mos-dt-0` | `coder-mos1` | **POSTER** | +| **#1032** | `coder-mos1` | `mos-dt-0` | `coder-mos1` | **POSTER** | +| **#1041** | `coder-mos2` | `mos-dt-0` | `mos-dt-0` | **MERGER** | + +**3 for POSTER, 1 for MERGER, on one instance, one repo. Genuinely contradictory — not a tie, and not +enough to rule.** A third factor is not excluded (merge path UI vs API, a settings change over time, or +something about `#1041` specifically). **Reported as contradictory data, not as a majority verdict — +3-to-1 is a hypothesis to test, not a conclusion to adopt.** + +> **WHAT SURVIVES UNCHANGED, AND IT IS THE PART THAT MATTERS: THE BRANCH COMMIT AUTHOR IS DISCARDED.** +> `enhance`, `Hermes Agent`, `f10-coder`, `mos-dt`, `coder-mos2` and `mos-claude` are erased from their +> `main` histories. **Every mitigation decision rests on that half, which is established at 29 +> discriminating rows across 3 repos and 2 estates.** + +**⇒ AND THIS IS WHY `Co-authored-by:` TRAILERS ARE THE ONLY SOUND MITIGATION** — not belt-and-braces, but +**the only one robust to ALL THREE hypotheses.** The withdrawn "poster == branch author" rule **would have +FAILED #1041 outright**: the poster _was_ the author and the attribution was lost anyway. **A mitigation +that survives a counterexample the alternative fails is better endorsed than one everyone agreed with.** + +**Rotation decisions resting on reason 1 ("the squash takes the poster, so rotate to protect authorship") +lose that reason** — if the squash takes the merger, rotation protects nothing. Decisions stand on their +other reasons; **the reason that _felt_ decisive is the one that was not measured.** + ### D-55b — two parties quoting a third is not corroboration The coordinator wrote _"installer-7's live-panel GREEN was the last thing before the command"_ **having