docs(remediation): D-55e settled — the anomaly was a merge commit, and this repo shares the exposure

#1041 was never a squash. Verified on this repo: #1027, #1033 and #1032 have ONE parent and end with
(#N); #1041 has TWO and begins "Merge pull request". A merge commit's author is whoever created the
merge — ordinary git, not an anomaly. The rows differed by merge style, not by field, estate, path or
account state, and the discriminator was one field nobody had read: parent count.

Established with zero exceptions across four rows, two estates, two Gitea instances and three repos:
squash merge sets author = poster and committer = merger.

Of the three candidate discriminators I offered, merge path was correct and I had ranked it first. The
3-to-1 split was explicitly refused as a verdict, which is why the real answer stayed findable — a
majority reported as a conclusion would have closed the question on the wrong side.

And the resolution exposed a larger live problem, on THIS repo: mosaicstack/stack has
default_merge_style = "merge", with both styles enabled and both in live use. The default path produces
a merge commit, which attributes to the merger and loses authorship more completely than squash —
squash at least keeps the poster in author, a merge commit keeps nobody. Same configuration as the USC
repos, so this is not a USC problem. Merge style is itself load-bearing for attribution and must be
explicit, never defaulted.

Hard merge precondition for #1030: merged by the default path it becomes a merge commit and erases the
poster as well as all three branch authors. It must be merged with an explicit squash style. The three
prior deliveries are 1-parent only because merge-gate hardcodes {"Do":"squash"} — that fixed payload,
criticised on the message-field axis, is protective on this one because it cannot silently fall to the
repo default.

Also confirmed here: default_delete_branch_after_merge = False, so the RM-02 branch retention is not on
a timer.

Co-authored-by: tl-mosaic <[email protected]>
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
mos-dt-0
2026-08-05 15:22:32 -05:00
co-authored by tl-mosaic Claude Opus 5
parent 4c1b2a1fda
commit 806b763d97
+48
View File
@@ -794,6 +794,54 @@ required.
> merge until `pr-merge.sh` accepts a squash message — which is exactly why the trade was ALSO recorded
> in the PR body, where nothing needs to execute for it to survive.**
### D-55e — SETTLED: the anomaly was a MERGE COMMIT, and the discriminator was PARENT COUNT
**`#1041` was never a squash.** Verified independently on this repo:
| PR | parents | first line | author |
| --------- | ------- | -------------------------------------------------------- | ---------- |
| **#1027** | **1** | `RM-01: … (#1027)` | poster |
| **#1033** | **1** | `RM-61: … (#1033)` | poster |
| **#1032** | **1** | `fix(rm-03): … (#1032)` | poster |
| **#1041** | **2** | **`Merge pull request 'chore(sync): merge main → next`** | **merger** |
**A merge commit's author is whoever created the merge — ordinary git, not an anomaly.** The rows
differed by **MERGE STYLE**, not by field, estate, path, or account state. **The discriminator was one
field nobody had read: parent count.**
> **★ ESTABLISHED, ZERO EXCEPTIONS — SQUASH MERGE: `author` = POSTER · `committer` = MERGER.**
> Four rows, two estates, two Gitea instances, three repos.
**Of the three candidate discriminators offered, MERGE PATH was correct and was ranked first** — and the
"3-to-1" was explicitly refused as a verdict, **which is why the real answer was still findable.** A
majority reported as a conclusion would have closed the question on the wrong side.
> **★★ AND THE RESOLUTION EXPOSED A LARGER LIVE PROBLEM THAN THE ONE IT CLOSED — WHICH IS ON THIS REPO
> TOO. MEASURED:**
>
> ```
> mosaicstack/stack default_merge_style = "merge" allow_squash_merge = True
> allow_merge_commits = True default_delete_branch_after_merge = False
> ```
>
> **THE DEFAULT MERGE STYLE ON THIS REPO PRODUCES A MERGE COMMIT — AND A MERGE COMMIT ATTRIBUTES TO THE
> MERGER, LOSING AUTHORSHIP MORE COMPLETELY THAN SQUASH.** Squash at least keeps the poster in `author`;
> a merge commit keeps nobody. **Both styles are enabled and both are in live use here — `#1041` is the
> proof.** Same configuration as the USC repos; **this is not a USC problem.**
>
> **⇒ MERGE STYLE IS ITSELF LOAD-BEARING FOR ATTRIBUTION AND MUST BE EXPLICIT, NEVER DEFAULTED.**
**★ DIRECT CONSEQUENCE FOR #1030 (the keystone), and it is now a hard merge precondition:** if `#1030` is
merged by the DEFAULT path it becomes a **merge commit** and attributes to the merger — erasing not only
`coder-mos1`/`coder-mos2`/`f10-coder` but the poster as well. **It MUST be merged with an EXPLICIT squash
style.** The three prior deliveries (`#1027`/`#1033`/`#1032`) are 1-parent only because `merge-gate`'s
payload hardcodes `{"Do":"squash"}` — **that fixed payload, criticised on the message-field axis, is
PROTECTIVE on this one: it cannot silently fall to the repo default.** Keep it explicit when the message
field is added.
**Also confirmed here:** `default_delete_branch_after_merge = False`, so `feat/rm-02-gate-registry`'s
retention is **not on a timer** — consistent with the USC finding.
### 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