docs(research): upstream has no stable branch and no relay release train; no history rewriting observed (#356) - #375
Conversation
…ain; no history rewriting observed (#356) Signed-off-by: tucktuck101 <jeffreytaylorrobertson@gmail.com>
serina-mcfall
left a comment
There was a problem hiding this comment.
Independent review — no blockers, nothing to fix
Reviewed in a fresh context. I am an agent and do not approve — posting as a comment so @serina-mcfall can.
Verified exactly:
- Protected branches are
main,mobile-release/0.4.10,mobile-release/0.4.11— the same three names. releasebranch returns404 Branch not found.- 176 tags with the exact namespace breakdown (103 bare semver, 29 mobile, 28 desktop, 7 chart, 3 relay, 5 singles); relay tags are
relay-v0.1.1,v0.2.0,v0.2.1. - 116 releases, 0 of them relay.
- All five historical SHAs still ancestors of
upstream/main, with the dates claimed. CHANGELOG.md's heading structure matches, line numbers included.- Upstream branch protection 404s for a non-admin token, exactly as reported.
One number moved: 793 branches versus my 794 — a single branch, on a repo creating topic branches continuously. Not load-bearing to the branch-protection conclusion.
The claim most at risk of overreach is correctly bounded. "No history rewriting observed" is hedged in the document's own limits section: "Five reachability probes across two months is evidence of stability, not proof of a policy… I could not read upstream's branch protection settings, so I cannot confirm force-pushes are actually disallowed, only that the branch is marked protected." I independently reproduced both the 404 and all five ancestor checks that back it.
Not verified: whether the *-latest/canary tags move, and the full "103 bare-semver tags belong to the desktop train" inference beyond a three-tag spot check. The document flags both.
No blockers, no non-blocking findings, correct placement, no private-tooling paths.
benmitchell11
left a comment
There was a problem hiding this comment.
Reviewed as a research-finding PR (not a code/decision change). Note for the record: this PR's actual title/scope ("upstream has no stable branch and no relay release train; no history rewriting observed", closing #356) differs from what was listed for "#375" in my review assignment — the assignment's text for #375 actually matches PR #380. Reviewing the PR as it actually stands.
What I independently verified against the live repos (not just the pasted output):
.github/workflows/ci.ymltriggers onpush: [main, release]exactly as claimed — confirmed by reading the file directly.block/buzzbranch count: today shows 794 branches with exactly 3 protected (main,mobile-release/0.4.10,mobile-release/0.4.11) — matches the doc's protected-branch claim exactly; the total (793 vs 794) has drifted by one branch since the doc was written, which is expected given upstream's pace and not a defect.- Tag count:
git ls-remote --tagsagainstblock/buzz, deduped for^{}peels, gives exactly 176 — matches. - The three
relay-v*tags and their SHAs (68a0cc850→relay-v0.1.1,0d9be2fde→relay-v0.2.0,6e5c462ac→relay-v0.2.1) match exactly whatgit ls-remotereturns today. - GitHub Releases breakdown:
gh api repos/block/buzz/releasestoday gives 100 bare-semver + 12desktop-*+ 4 singletons = 116 total, 112 desktop-attributable — matches the doc's "112 of 116" claim exactly. - No
relay-*GitHub Release exists — confirmed, empty result.
Not independently re-verified (would require push access to block/buzz or a second point-in-time fetch): the 404 on upstream branch-protection settings (plausible — this is a read-only fork token), and the "no history rewriting" reachability probes themselves (would require pinning the exact historical SHAs and re-running merge-base checks against a full upstream clone, which I did not do given the other checks already corroborate the surrounding structural claims). The doc is explicit and honest that this is evidence, not proof, and says so in its own limits section.
Scope check: the doc reports facts and explicitly defers policy calls to #305/#306/#273 rather than deciding a pin criterion itself ("offered as input to #305, not as a choice"). No overreach found.
No factual errors found in what I could check. Citations, counts, and SHAs all reproduce against the live repos today.
serina-mcfall
left a comment
There was a problem hiding this comment.
Approved. Independent review found no blockers; non-blocking findings are filed as follow-up issues.
Summary
Adds one research document establishing that
block/buzzhas no stable, LTS orreleasebranch —mainis its only protected long-lived branch out of 793 — and that its tag and release machinery is a desktop release train, with the relay getting three tags in two months, no GitHub Release and no changelog section. No history rewriting was observed across five historical points spanning two months. Also records that upstream publishes a structuredCHANGELOG.mdwith PR links and commit SHAs, which is a better input for the drop report than deriving a narrative fromgit diff.Related issue
Closes #356
Issue type
Task
Agent provenance
Objective
Add
launchpad/Research/356-upstream-ref-conventions.mdrecording whatblock/buzz's branches and tags mean and whether a vendor pin is safe against upstream's history.Impacted components
Approach and rejected alternatives
Tested history stability by reachability rather than by policy: picked five historical points the fork actually depends on — the current merge-base, the current
mainpin, and all threerelay-v*tags — and checked whether each is still an ancestor ofupstream/main. A force-push would have orphaned at least one. Read ref structure from the API and ref meaning from the changelog's heading-to-tag correspondence.Rejected: reading upstream's branch protection to answer the rewriting question.
GET repos/block/buzz/branches/main/protectionreturns 404 for this token — it needs push access on that repository — so the settings are unavailable. Reachability probes are weaker evidence but they are evidence I can actually gather, and the document says which it is.Rejected: inferring tag meaning from tag names alone.
relay-v0.2.1looks like a relay release until you check whether a GitHub Release or a changelog section exists for it. Neither does, which changes what the tag can be relied on to mean.Rejected: asking an upstream maintainer. Out of scope for a read-only investigation, and the question was answerable from published refs.
Verification
Command run:
Raw output:
Not verified
"No history rewriting" is evidence, not proof. Five reachability probes across two months show stability; they cannot show a policy, and they would not reveal a rewrite that happened and was later restored. I could not read upstream's branch protection settings — the 404 is pasted above — so I cannot confirm force-pushes are disallowed on
main, only that the branch is marked protected. I did not establish whether the*-latestandcanarytags move; their names imply mutability and they currently point at April, June and July commits, which is consistent with either reading, and observing movement needs two fetches separated by time. I did not read upstream's contributing or release documentation, only its refs and changelog, so a ref policy stated in prose somewhere would have been missed. I did not verify that the 103 bare-semver tags belong to the desktop train — that rests on the## v0.5.18↔desktop-v0.5.18correspondence, which is an inference. I did not contact any upstream maintainer. I did not runjust ci; the diff is one markdown file.Security implications
None from the diff. One security-adjacent fact is recorded: because upstream publishes no relay-specific release notes and no relay changelog section, this fork has no upstream channel that would distinguish a relay security fix from any other commit. That bears on #364 and is stated in the document rather than left to be discovered.
Escalations
ci.ymltriggers on a branch that does not exist. Its trigger ispush: [main, release], and noreleasebranch exists inblock/buzzor inlaunchpad-26/buzz. Harmless today, but #299's analysis should not treat it as a live path, and someone should decide whether to remove it or create the branch. Not fixed here — it is an upstream-owned file and changing it would add a divergence, which is precisely what #307 is about.A method correction, recorded because a reader could repeat it. My first history-stability test checked whether
de1c127fb^2was still an ancestor ofupstream/main. It is not, and that briefly looked like rewriting. It is not:^2is the fork's own sync-branch head, not upstream's tip. The merge-base is the valid probe. Written into the document's limits section rather than quietly dropped.