What: internal/builder/replay363_test.go (TestReplay363), test-only, written with only what the builder had before #292.
How it works: the replay runs the builder whole: Build, then the packed bundle's digest. It builds a Go module from its repository's root at two commits that differ only in README.md, which is outside its build source. A runtime runs the toolchain container's command on this machine in the mounted directory, with the real git and the real Go compiler. One digest is wanted.
Why: this proves issue 363's built part (ADR 0267 rule 6, mesh-controller #292). Before #292, Go stamped the commit into a root-built binary. The node-engine on g14 carries vcs.revision=7a41e120…, so a README-only merge made a new digest.
Tested:
TestReplay363 fails on 1d244d5 (#292's first parent) with two digests, and passes on main cd6757f1.
mesh-lab go run ./cmd/prove R363 says PROVED.
go vet passes.
It needs no store, so it is not listed in testdata/store-tests.
Registered in mesh-lab as R363, on the same branch name.
Fixes issue 363 (its replay).
**What**: `internal/builder/replay363_test.go` (`TestReplay363`), test-only, written with only what the builder had before #292.
**How it works**: the replay runs the builder whole: `Build`, then the packed bundle's digest. It builds a Go module from its repository's root at two commits that differ only in `README.md`, which is outside its build source. A runtime runs the toolchain container's command on this machine in the mounted directory, with the real git and the real Go compiler. One digest is wanted.
**Why**: this proves issue 363's built part (ADR 0267 rule 6, mesh-controller #292). Before #292, Go stamped the commit into a root-built binary. The node-engine on g14 carries `vcs.revision=7a41e120…`, so a README-only merge made a new digest.
**Tested**:
- `TestReplay363` fails on 1d244d5 (#292's first parent) with two digests, and passes on main cd6757f1.
- mesh-lab `go run ./cmd/prove R363` says PROVED.
- `go vet` passes.
- It needs no store, so it is not listed in testdata/store-tests.
Registered in mesh-lab as R363, on the same branch name.
Fixes issue 363 (its replay).
mesh/merge-gate head 94c928b1f5af merged into trunk cd6757f1e3c8 — pass: builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step; every mach…
mesh/delivery stopped: a merged change never reached the machines: its walk plan-1791867648768608552 ended done before its word without building build-ag…
Deliverynovox/mesh-controller@94c928b1f5af — stopped since 2026-10-13T05:33:07Z
Delivery plan — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
tier 0: build-agent
tier 1: route-proxy
ace: receives build-agent, route-proxy
g14: receives build-agent
novox: receives build-agent, route-proxy
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent, route-proxy is judged on its first machine
composed together: pass — every machine composes with the change as it did without (4 of 4 compose) (run 2)
Transitions
2026-10-13 05:02 (new) → proposed (announced): novox/mesh-controller#293's head announced
2026-10-13 05:06 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-13 05:06 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-13 05:13 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-13 05:33 published → stopped (stop): a merged change never reached the machines: its walk plan-1791867648768608552 ended done before its word without building build-agent, route-proxy (moved nothing the mesh holds: nothing to walk), and no later merge into main that contains it delivered them (novox/hq issue 474)
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@94c928b1f5af` — **stopped** since 2026-10-13T05:33:07Z
**Delivery plan** — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: build-agent
- tier 1: route-proxy
- ace: receives build-agent, route-proxy
- g14: receives build-agent
- novox: receives build-agent, route-proxy
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent, route-proxy is judged on its first machine
**Group** `fix/363-replay`, in order: novox/mesh-controller@94c928b1f5af → novox/mesh-lab@5f13bf0aff9c
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose) (run 2)
**Transitions**
- 2026-10-13 05:02 (new) → proposed (announced): novox/mesh-controller#293's head announced
- 2026-10-13 05:06 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-13 05:06 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-13 05:13 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-13 05:33 published → stopped (stop): a merged change never reached the machines: its walk plan-1791867648768608552 ended done before its word without building build-agent, route-proxy (moved nothing the mesh holds: nothing to walk), and no later merge into main that contains it delivered them (novox/hq issue 474)
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Merge check at 94c928b1
Judged: head 94c928b1f5af merged into trunk cd6757f1e3c8; read beside it: mesh-catalog 53e51864969f, mesh-controller-main cd6757f1e3c8, mesh-host 7a41e120635b, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, route-proxy)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
tier 0: build-agent
tier 1: route-proxy
ace: receives build-agent, route-proxy
g14: receives build-agent
novox: receives build-agent, route-proxy
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent, route-proxy is judged on its first machine
Run by the build seat on ace as build-1791867723738433679 (builds --log build-1791867723738433679).
--- the gate: build-agent, route-proxy
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T05:01:44Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T05:01:44Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, route-proxy
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 154.812s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/route-proxy 1.132s
ok github.com/novox/mesh-controller/internal/artifacts 1.071s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.224s
ok github.com/novox/mesh-controller/internal/builder 38.906s
ok github.com/novox/mesh-controller/internal/catalogue 7.556s
ok github.com/novox/mesh-controller/internal/conditions 2.730s
ok github.com/novox/mesh-controller/internal/envfile 1.067s
ok github.com/novox/mesh-controller/internal/facts 1.027s
ok github.com/novox/mesh-controller/internal/identity 7.322s
ok github.com/novox/mesh-controller/internal/inventory 34.426s
ok github.com/novox/mesh-controller/internal/lease 17.717s
ok github.com/novox/mesh-controller/internal/licences 6.517s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.054s
ok github.com/novox/mesh-controller/internal/link 58.007s
ok github.com/novox/mesh-controller/internal/lint 2.801s
ok github.com/novox/mesh-controller/internal/outward 1.063s
ok github.com/novox/mesh-controller/internal/overlay 1.076s
ok github.com/novox/mesh-controller/internal/secrets 1.438s
ok github.com/novox/mesh-controller/internal/store 3.513s
ok github.com/novox/mesh-controller/internal/testbus 1.238s
ok github.com/novox/mesh-controller/internal/token 1.016s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.50s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.23s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.24s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.19s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.29s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.27s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.28s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.24s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.19s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.20s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.18s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.08s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
**Merge check** at `94c928b1`
Judged: head `94c928b1f5af` merged into trunk `cd6757f1e3c8`; read beside it: mesh-catalog `53e51864969f`, mesh-controller-main `cd6757f1e3c8`, mesh-host `7a41e120635b`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, route-proxy)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: build-agent
- tier 1: route-proxy
- ace: receives build-agent, route-proxy
- g14: receives build-agent
- novox: receives build-agent, route-proxy
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent, route-proxy is judged on its first machine
Run by the build seat on ace as `build-1791867723738433679` (`builds --log build-1791867723738433679`).
```
--- the gate: build-agent, route-proxy
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T05:01:44Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-13T05:01:44Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, route-proxy
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 154.812s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/route-proxy 1.132s
ok github.com/novox/mesh-controller/internal/artifacts 1.071s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.224s
ok github.com/novox/mesh-controller/internal/builder 38.906s
ok github.com/novox/mesh-controller/internal/catalogue 7.556s
ok github.com/novox/mesh-controller/internal/conditions 2.730s
ok github.com/novox/mesh-controller/internal/envfile 1.067s
ok github.com/novox/mesh-controller/internal/facts 1.027s
ok github.com/novox/mesh-controller/internal/identity 7.322s
ok github.com/novox/mesh-controller/internal/inventory 34.426s
ok github.com/novox/mesh-controller/internal/lease 17.717s
ok github.com/novox/mesh-controller/internal/licences 6.517s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.054s
ok github.com/novox/mesh-controller/internal/link 58.007s
ok github.com/novox/mesh-controller/internal/lint 2.801s
ok github.com/novox/mesh-controller/internal/outward 1.063s
ok github.com/novox/mesh-controller/internal/overlay 1.076s
ok github.com/novox/mesh-controller/internal/secrets 1.438s
ok github.com/novox/mesh-controller/internal/store 3.513s
ok github.com/novox/mesh-controller/internal/testbus 1.238s
ok github.com/novox/mesh-controller/internal/token 1.016s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.50s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.23s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.24s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.19s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.29s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.27s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.28s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.24s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.19s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.20s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.18s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.08s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
```
TestReplay363 uses only code from before #292. The single commit on this PR (94c928b) adds exactly one new file, internal/builder/replay363_test.go, as a direct child of cd6757f1 (the merge of #292); it calls only the exported Build function and implements the pre-existing Runner and Publisher interfaces, none of which #292 touched (#292's diff against its parent 1d244d5 is confined to toolchain.go's GOFLAGS string, six Dockerfiles, and internal/builder/reproducible_test.go). The test never references -buildvcs or any other detail of the fix itself.
I laid the test file over three commits in a worktree and ran go test ./internal/builder/ -run TestReplay363 -v at each. At 1d244d5 (the commit before #292): "--- FAIL: TestReplay363" with "one build source, two digests: sha256:a4c422ba... at 4576c4e93ea5, sha256:e231073... at 79d0358a5201 — a README-only merge is a new program". At cd6757f1 (the merge of #292): "--- PASS: TestReplay363" ("ok ... 0.218s"). At the PR head 94c928b: "--- PASS: TestReplay363" ("ok ... 0.206s").
This is a faithful replay rather than a pass for the wrong reason: the fake Runner only intercepts "docker run" and otherwise mirrors exactly the invocation shape builder.go's compile() constructs ("run", "--rm", "--volume", tree+":"+within, "--workdir", within, base, ...chain.Compile...), so Build() runs the real toolchain.Compile command (including the GOFLAGS the fix changed) through the real go and git on this machine rather than a stub. The two digests produced before the fix are distinct real sha256 values over the packed bundle, and the test fails closed (t.Fatalf) if Build ever errors or returns no artifact, so a build that silently did not happen cannot pass. I also confirmed mesh-lab #97's go run ./cmd/prove R363 reaches the same verdict: "R363 (issue 363): PROVED — before its fix fails, on its fix passes".
Verdict: approve at 94c928b1f5af099c328eb6950550b6380df24b31
TestReplay363 uses only code from before #292. The single commit on this PR (94c928b) adds exactly one new file, internal/builder/replay363_test.go, as a direct child of cd6757f1 (the merge of #292); it calls only the exported Build function and implements the pre-existing Runner and Publisher interfaces, none of which #292 touched (#292's diff against its parent 1d244d5 is confined to toolchain.go's GOFLAGS string, six Dockerfiles, and internal/builder/reproducible_test.go). The test never references -buildvcs or any other detail of the fix itself.
I laid the test file over three commits in a worktree and ran `go test ./internal/builder/ -run TestReplay363 -v` at each. At 1d244d5 (the commit before #292): "--- FAIL: TestReplay363" with "one build source, two digests: sha256:a4c422ba... at 4576c4e93ea5, sha256:e231073... at 79d0358a5201 — a README-only merge is a new program". At cd6757f1 (the merge of #292): "--- PASS: TestReplay363" ("ok ... 0.218s"). At the PR head 94c928b: "--- PASS: TestReplay363" ("ok ... 0.206s").
This is a faithful replay rather than a pass for the wrong reason: the fake Runner only intercepts "docker run" and otherwise mirrors exactly the invocation shape builder.go's compile() constructs ("run", "--rm", "--volume", tree+":"+within, "--workdir", within, base, ...chain.Compile...), so Build() runs the real toolchain.Compile command (including the GOFLAGS the fix changed) through the real go and git on this machine rather than a stub. The two digests produced before the fix are distinct real sha256 values over the packed bundle, and the test fails closed (t.Fatalf) if Build ever errors or returns no artifact, so a build that silently did not happen cannot pass. I also confirmed mesh-lab #97's `go run ./cmd/prove R363` reaches the same verdict: "R363 (issue 363): PROVED — before its fix fails, on its fix passes".
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What:
internal/builder/replay363_test.go(TestReplay363), test-only, written with only what the builder had before #292.How it works: the replay runs the builder whole:
Build, then the packed bundle's digest. It builds a Go module from its repository's root at two commits that differ only inREADME.md, which is outside its build source. A runtime runs the toolchain container's command on this machine in the mounted directory, with the real git and the real Go compiler. One digest is wanted.Why: this proves issue 363's built part (ADR 0267 rule 6, mesh-controller #292). Before #292, Go stamped the commit into a root-built binary. The node-engine on g14 carries
vcs.revision=7a41e120…, so a README-only merge made a new digest.Tested:
TestReplay363fails on1d244d5(#292's first parent) with two digests, and passes on maincd6757f1.go run ./cmd/prove R363says PROVED.go vetpasses.Registered in mesh-lab as R363, on the same branch name.
Fixes issue 363 (its replay).
Delivery
novox/mesh-controller@94c928b1f5af— stopped since 2026-10-13T05:33:07ZDelivery plan — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
Group
fix/363-replay, in order: novox/mesh-controller@94c928b1f5 → novox/mesh-lab@5f13bf0affTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
94c928b1Judged: head
94c928b1f5afmerged into trunkcd6757f1e3c8; read beside it: mesh-catalog53e51864969f, mesh-controller-maincd6757f1e3c8, mesh-host7a41e120635b, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, route-proxy)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791867723738433679(builds --log build-1791867723738433679).Verdict: approve at
94c928b1f5TestReplay363 uses only code from before #292. The single commit on this PR (
94c928b) adds exactly one new file, internal/builder/replay363_test.go, as a direct child ofcd6757f1(the merge of #292); it calls only the exported Build function and implements the pre-existing Runner and Publisher interfaces, none of which #292 touched (#292's diff against its parent1d244d5is confined to toolchain.go's GOFLAGS string, six Dockerfiles, and internal/builder/reproducible_test.go). The test never references -buildvcs or any other detail of the fix itself.I laid the test file over three commits in a worktree and ran
go test ./internal/builder/ -run TestReplay363 -vat each. At1d244d5(the commit before #292): "--- FAIL: TestReplay363" with "one build source, two digests: sha256:a4c422ba... at 4576c4e93ea5, sha256:e231073... at 79d0358a5201 — a README-only merge is a new program". Atcd6757f1(the merge of #292): "--- PASS: TestReplay363" ("ok ... 0.218s"). At the PR head94c928b: "--- PASS: TestReplay363" ("ok ... 0.206s").This is a faithful replay rather than a pass for the wrong reason: the fake Runner only intercepts "docker run" and otherwise mirrors exactly the invocation shape builder.go's compile() constructs ("run", "--rm", "--volume", tree+":"+within, "--workdir", within, base, ...chain.Compile...), so Build() runs the real toolchain.Compile command (including the GOFLAGS the fix changed) through the real go and git on this machine rather than a stub. The two digests produced before the fix are distinct real sha256 values over the packed bundle, and the test fails closed (t.Fatalf) if Build ever errors or returns no artifact, so a build that silently did not happen cannot pass. I also confirmed mesh-lab #97's
go run ./cmd/prove R363reaches the same verdict: "R363 (issue 363): PROVED — before its fix fails, on its fix passes".