Canonical merge of #761 - #762
Merged
Merged
Conversation
Pushing the v1.1.3 tag printed `notes mirror (origin) failed: spawnSync git ETIMEDOUT`. Nothing was wrong with the transport, and nothing needed doing that the rest of the line did not already say -- but the sentence names the call that returned rather than the decision that was made, so it reads as git having failed and sends whoever gets it to look at a remote that is fine. The two seconds are this hook's. A notes mirror is auxiliary to a branch push, so the budget exists to stop an offline push feeling stuck, and declining to wait is the hook working. `spawnSync` had no way to say that, and the raw code reached the operator unchanged. The line now says whose budget ran out, and interpolates the value from `PRE_PUSH_NOTES_SYNC_TIMEOUT_MS` so the sentence cannot drift from the constant it describes. Every other failure detail is untouched -- a refused connection still reports as a refused connection, because that one is about the transport. This is #746 in a second hook: a message accurate about the mechanism and wrong about the situation costs more than a vague one. Limit: only ETIMEDOUT is rewritten, so a transport that hangs without setting that code still surfaces its raw detail Blast: local Undo: easy Certainty: firm Record-Id: r-etimeout Provenance: authored Verified: with dist unrebuilt the extended timeout test fails naming the real string it still matched, and passes after the rebuild with all six pre-push tests green; the assertions were first added to the wrong test in the same file and a deliberately impossible expectation still passed, which is how that was caught CommitLore-Version: 2.0.0
`build:canonical` on the merged tree, so the commit that lands matches the source it lands with. The pull request carried source only, which is what a contributor on a host that cannot run a linux/amd64 Docker build can produce (#720). Limit: this proves the bundle matches this tree; whether this tree is what a reviewer wants is what the pull request is for Blast: system Undo: easy Certainty: firm Record-Id: r-canonmerge761 Provenance: authored Verified: artifact:verify passed against the regenerated manifest in the same job, before any credential was available to it CommitLore-Version: 2.0.0
CommitLore — record lintTrailers: clean — 3 commits in Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
This was referenced Aug 18, 2026
Committing dist is what makes the checkout the product — and what makes every second PR rebuild
#719
Closed
MongLong0214
added a commit
that referenced
this pull request
Aug 18, 2026
The inline version required the canonical branch tip to have two parents. A real tip has one. #762's `6a88f2f4` is a rebuild commit whose parent `acfed4a5` is the two-parent merge, because the rebuild commits on top of the merge whenever `dist/` actually changes -- which is the ordinary case, not an edge one. The tests I wrote for it passed. They grep the workflow as text, and text cannot be run. So the check moves into `scripts/verify-canonical-handoff.mjs`, where the invariant is a commit graph and a graph can be built and mutated. `test/verify-canonical-handoff.test.ts` builds a repository shaped like a real run -- main with a committed bundle, a source-only branch, a `--no-ff` merge, a rebuild on top -- and applies one mutation per case: a workflow file added to the rebuild commit refused, names the path a source file added to the rebuild commit refused, names the path the merge's second parent replaced refused, names both commits an edit amended into the merge itself refused on the tree, right parents a source branch carrying `dist/` itself refused before anything else two commits stacked on the merge refused -- one rebuild, not two the two honest shapes accepted The tree check is the one the parent check cannot do. `git merge-tree --write-tree` recomputes the merge here from the two commits the caller resolved from GitHub, so a merge with the right parents and a smuggled edit does not survive having the right shape. The workflow-text test now asserts the inline form is *gone*, so it cannot return without the graph tests coming with it. Limit: the script trusts the two shas it is given, so it is only as good as the caller resolving them from GitHub rather than from the bundle Blast: module Undo: easy Certainty: firm Record-Id: r-handoffgraph Provenance: authored Verified: run against the real #762 handoff -- base ba9b0cf, source 09a1890, tip 6a88f2f -- which it accepts and which the inline version would have refused; deleting the script fails all eight graph tests and restoring it passes them CommitLore-Version: 2.0.0
This was referenced Aug 18, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The commit that will land for #761:
mainplus that source plus a canonical rebuild, built together so all eleven required contexts run on the tree that merges rather than on one that resembles it.#761 carries source only, which is what a contributor on a host that cannot run a
linux/amd64Docker build can produce (#720). Nothing was rebuilt by hand.Merge this with a merge commit, not a squash. This branch merged #761 with
--no-ff, so its head commit is an ancestor here: a merge commit lands that commit onmain, and GitHub then records #761 as merged because its head is reachable -- which is what T-1502 asks for. A squash lands new bytes instead, and #761 stays open with nothing to point at.This body deliberately carries no closing keyword. GitHub binds one only to the number straight after it, and a pull request closed by keyword is recorded closed rather than merged -- the opposite of the line above. Reachability does the closing here.
Opened by
canonical-merge.ymlfor #719.