docs(research): divergence history mixes convergence and merge scaffolding (#339) - #434
docs(research): divergence history mixes convergence and merge scaffolding (#339)#434tucktuck101 wants to merge 2 commits into
Conversation
…pstream (#339) Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
serina-mcfall
left a comment
There was a problem hiding this comment.
Blocker — the provenance table maps runtime.rs to one commit; three wrote it, and the omitted content is behavioural
"Four commits produced all nine files" (lines 33-52) attributes runtime.rs to the ratchet extraction alone.
$ git log --format='%h %an | %s' f8692fa9b..origin/launchpad -- desktop/src-tauri/src/managed_agents/runtime.rs
43366affa Serina Mcfall | fix(desktop): keep managed_agents/runtime.rs under the file-size ratchet
523fb9ad9 Serina Mcfall | chore: sync launchpad with upstream block/buzz main
975e6d444 joshuavial | dial the configured relay when spawning managed agents
Three commits, and 975e6d444 is the relay behaviour fix. (The merge 523fb9ad9 lists the file at all because its conflict resolution differs from both parents.)
The consequence is a direct self-contradiction inside the document:
- Line 23 files
runtime.rs/summary.rsas "scaffolding the merge itself forced … Would converge? no", and line 103 titles the section "the merge created this, not a design view." - Line 22 classifies joshuavial's change as "an upstream behaviour bug fix … yes, clearly [convergent]".
Half of runtime.rs's divergence is the same change, filed in both rows. A convergent, upstreamable, behavioural fix is recorded as permanent merge scaffolding.
That breaks the "eight convergent / one permanent" arithmetic at lines 26-31, and it breaks the conclusion at 145-147 — "which leaves, once again, restore.rs and runtime_commands.rs as the only place where criterion 4 is unambiguously right." runtime.rs belongs in that set.
This is the same defect as #433's, surfacing in a second document, and #434 cites #338's verdict as settled input at 99-101. Fixing either note alone leaves the contradiction standing. The correct downstream statement for #290's criterion 4 is three unprotected behavioural files, with runtime.rs:245 as the primary assertion target.
Medium — "none of the nine is a disagreement with upstream" has no falsifiable test
The universal rests on nine "would converge if offered" verdicts, each of which is a reading of a diff rather than a stated intention.
Rated Medium rather than High because you disclose this explicitly and specifically at 166-171 — "I did not ask the authors… Every 'would converge' verdict above is my reading of the code and commit message, not a stated intention" — and name the three people who could settle it. The claim is also about characterisation, and none of the four commit subjects frames itself as a standing position, so the commit messages do support it as far as they go.
What is right — the mechanical work is excellent
- Exactly nine, and the list matches #433's. Confirmed.
- All four named commits, authors and subjects are exact.
- Every
runtime.rsline count is correct, to the line: 996 at the merge-base, 994 after975e6d444, 1007 after the sync, 742 after the extraction;summary.rs283. The 1007-over-1000 causal story checks out precisely — that is a genuinely satisfying piece of reconstruction. - The ratchet:
desktop/scripts/check-file-sizes.mjs:8 const MAX_LINES = 1000;and thesrc-tauri/src/.rsconfig at :11, quoted verbatim — and correctly identified as upstream's, present at the merge-base. - The ADR-0021 quote and the
launchpad/AGENTS.md:85"not currently sending fixes upstream" quote are both accurate. - The recurrence argument — upstream files near the 1000-line ceiling will re-trip on future drops — is sound, and you correctly flag it at 186-188 as an argument rather than a measurement.
The provenance defect is one row in one table. Everything the table is built on is right.
Reviewed at head 291136a22. The commit list above was produced by me directly.
🤖 Review drafted by Claude Code (claude-opus-5) for @serina-mcfall.
Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
Summary
Answers #339 by tracing each of the nine product-code divergences to its introducing commit. None of them is a disagreement with upstream — eight are upstreamable fixes or features nobody has offered, and the ninth pair is scaffolding the merge process itself forced. That breaks the model ADR-0021 (open in #308) builds the divergence ledger on, which presumes divergence means disagreement.
Related issue
Closes #339
Issue type
Task
Agent provenance
Objective
Add
launchpad/Research/339-divergence-permanence.mdclassifying each of the nine product-code divergences as permanent, converging, or unknown, with the reason.Impacted components
launchpad/Research/339-divergence-permanence.md
Approach and rejected alternatives
Grouped the nine files by introducing commit rather than reporting nine independent verdicts. Four commits produced all nine, and the clusters have genuinely different characters — a feature, two bug fixes, and a merge artefact — so a per-file table would have repeated the same answer four times while hiding the one distinction that matters.
Traced the
runtime.rsline count across the history rather than accepting "refactor" at face value. That is what turned the vague "extraction, probably nothing to protect" reading into a specific causal chain: the upstream merge left the file at 1007 lines against upstream's own 1000-line ceiling.Rejected classifying from the diffs alone without the commit messages. The
cfg(unix)cluster in particular is indistinguishable from a stylistic change until you read that it is titled a fix and see which platform job denies warnings.Verification
Command run:
Raw output:
Not verified
I did not ask the authors, and #339 asked me to. It requested classification sourced from the introducing commits and from whoever wrote them; I did the first half only. Every "would converge" verdict is my reading of code and commit messages, not a stated intention. The three people who can confirm are Serina McFall (the
--format jsonand file-split clusters), Ben Mitchell (cfg(unix)) and joshuavial (configured relay).Whether any of these was already offered upstream. I did not search
block/buzz's pull requests — the GraphQL quota was exhausted while this was written. If Ben Mitchell'scfg(unix)fix is already an open upstream PR, that cluster changes from "unoffered" to "in flight", which is a materially different answer.Whether upstream would accept them. "Upstreamable" here means generic and not fork-specific; it is not a prediction about
block/buzz's review.The other 33 changed upstream files are out of scope — and they may well contain the genuine standing disagreements ADR-0021's model fits, the lefthook pin (ADR-0017) being exactly that shape.
Whether the ratchet problem will recur is argued structurally, not measured. I did not enumerate how many other
src-tauri/srcfiles sit near 1000 lines, which would make it a measurement.Security implications
None from the document. Worth flagging for reviewers, carried over from #338: the
restore.rs/runtime_commands.rsdivergence governs which relay a managed agent dials, it is unprotected by any test, and this document concludes it is the one divergence where a regression test is unambiguously the right instrument.Escalations
launchpad/AGENTS.md§3 says the cohort does not send fixes upstream, and ADR-0017 reasons about one specific case rather than setting general policy. Whether these eight should be offered is undecided, and the answer is either eight regression tests or eight pull requests toblock/buzz.runtime.rsdid. Worth adding to that record's consequences; not something I should edit.