cmd/mesh-controller/replay201_test.go: TestReplay201ThePlansSend, a store test (named in testdata/store-tests). The control node, anchor, was last sent the newer controller c2 while the mesh's record is the build before it, c1, which passed its gate. A send composed as a plan's send composes it (keepingRecorded, what sendKeeps gives every send but a person's push) must carry the controller at c2; a person's push still carries the record c1. The build carried is read from declarationFor's Builds, what the send records.
Why
mesh-lab's replay R201 lays its test over the commit before the fix (#273, merge 84deb53). The fix's own TestReplay201 uses names the fix added (withScope/sendScope.puttingBack, recordedKept's core keep, coreDowngradeObservation, settleCoreDowngrades), so it does not build there. This test uses only what existed before: the inventory's RecordBuild, RecordGate, RegisterModule, Assign, RecordSent, RestoreModule, and aMesh, nodeID, keepingRecorded, planFor, declarationFor. Same approach as R401 (#274). Its name differs from TestReplay201 so it can sit beside the fix's test, and its -run ^TestReplay201ThePlansSend prefix matches nothing else.
How it was tested
On 84deb53^1 (a681227), with this file laid over: FAIL, a plan's send carried anchor the controller c1aaaaaa, older than the c2bbbbbb anchor was last sent.
On main (with the fix): PASS, beside the fix's TestReplay201.
sh merge-check.sh with MESH_TEST_POSTGRES (a throwaway local postgres): passes, every store test listed ran and passed, including this one.
No code change; test only. Replay for hq issue 201 (the fix is #273).
## What
`cmd/mesh-controller/replay201_test.go`: `TestReplay201ThePlansSend`, a store test (named in `testdata/store-tests`). The control node, anchor, was last sent the newer controller c2 while the mesh's record is the build before it, c1, which passed its gate. A send composed as a plan's send composes it (`keepingRecorded`, what `sendKeeps` gives every send but a person's push) must carry the controller at c2; a person's push still carries the record c1. The build carried is read from `declarationFor`'s `Builds`, what the send records.
## Why
mesh-lab's replay R201 lays its test over the commit before the fix (#273, merge 84deb53). The fix's own `TestReplay201` uses names the fix added (`withScope`/`sendScope.puttingBack`, `recordedKept`'s core keep, `coreDowngradeObservation`, `settleCoreDowngrades`), so it does not build there. This test uses only what existed before: the inventory's `RecordBuild`, `RecordGate`, `RegisterModule`, `Assign`, `RecordSent`, `RestoreModule`, and `aMesh`, `nodeID`, `keepingRecorded`, `planFor`, `declarationFor`. Same approach as R401 (#274). Its name differs from `TestReplay201` so it can sit beside the fix's test, and its `-run ^TestReplay201ThePlansSend` prefix matches nothing else.
## How it was tested
- On 84deb53^1 (a681227), with this file laid over: FAIL, `a plan's send carried anchor the controller c1aaaaaa, older than the c2bbbbbb anchor was last sent`.
- On main (with the fix): PASS, beside the fix's `TestReplay201`.
- `sh merge-check.sh` with `MESH_TEST_POSTGRES` (a throwaway local postgres): passes, every store test listed ran and passed, including this one.
No code change; test only. Replay for hq issue 201 (the fix is #273).
The fix's own TestReplay201 reads what #273 added (sendScope.puttingBack,
recordedKept's core keep, the condition), so it cannot be laid over the
commit before. TestReplay201ThePlansSend composes a plan's send to the
control node through keepingRecorded, planFor and declarationFor and holds
that it carries the controller the machine was last sent, not the older
record; it fails on 84deb53^1 and passes on 84deb53. For mesh-lab's R201
(hq issue 201).
Deliverynovox/mesh-controller@45a1783ba9a4 — delivered since 2026-10-12T20:22:49Z
Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
2026-10-12 19:18 (new) → proposed (announced): novox/mesh-controller#275's head announced
2026-10-12 20:21 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-12 20:21 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-12 20:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-12 20:22 published → delivered (done): nothing for a walk to move
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@45a1783ba9a4` — **delivered** since 2026-10-12T20:22:49Z
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Transitions**
- 2026-10-12 19:18 (new) → proposed (announced): novox/mesh-controller#275's head announced
- 2026-10-12 20:21 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-12 20:21 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-12 20:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-12 20:22 published → delivered (done): nothing for a walk to move
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Independent review (replay of issue 201 for mesh-lab R201).
What I checked:
TestReplay201ThePlansSend exercises issue 201's symptom. The control node (anchor) was last sent the newer controller c2, and the mesh's record of the controller is the older build c1, which passed its gate. A send composed as a plan's send composes it (keepingRecorded, which is what sendKeeps gives every send but a person's push) must carry c2, not c1. A person's push (no keepingRecorded) must still carry the record c1. Both assertions are there.
Every name it uses exists on 84deb530^1 (a681227, the commit before the fix#273): aMesh, keepingRecorded, planFor, declarationFor, inventory.RecordBuild/Build/Artifact, RecordGate/GateVerdict/GatePassed, RegisterModule/Source, Assign, RecordSent, RestoreModule, nodeID, short, declared.Builds.
Ran mesh-lab #88's prover locally (go run ./cmd/prove R201, throwaway Postgres as MESH_TEST_POSTGRES, GOTMPDIR=/var/tmp): R201 PROVED. Before the fix it fails at replay201_test.go:84: "a plan's send carried anchor the controller c1aaaaaa, older than the c2bbbbbb anchor was last sent", which is the issue's symptom. On 84deb530 it passes, including the person's-push assertion.
The branch is cut from current main 84deb530, so the store-tests line merges cleanly. On that merge TestReplay201 (the fix's own) and TestReplay201ThePlansSend both pass, and go vet ./cmd/mesh-controller is clean.
Statuses at this head: mesh/merge-gate pending (building on g14 since 21:18), mesh/repo-check missing, mesh/delivery pending (waits for its check). There is no mesh/delivery-group status: this branch is test/201-replay while mesh-lab #88's is fix/201-replay, so the two are not one delivery group. Not mergeable until both required checks are green and read.
For the merge: mesh-lab #88's R201 names HomeRef 45a1783b (this head). Merge this one with a merge commit, not a squash or rebase, and before or together with mesh-lab #88.
Verdict: approve at 45a1783ba9a43fd466a518ee85673c701223b517
Independent review (replay of issue 201 for mesh-lab R201).
What I checked:
1. TestReplay201ThePlansSend exercises issue 201's symptom. The control node (anchor) was last sent the newer controller c2, and the mesh's record of the controller is the older build c1, which passed its gate. A send composed as a plan's send composes it (keepingRecorded, which is what sendKeeps gives every send but a person's push) must carry c2, not c1. A person's push (no keepingRecorded) must still carry the record c1. Both assertions are there.
2. Every name it uses exists on 84deb530^1 (a681227, the commit before the fix #273): aMesh, keepingRecorded, planFor, declarationFor, inventory.RecordBuild/Build/Artifact, RecordGate/GateVerdict/GatePassed, RegisterModule/Source, Assign, RecordSent, RestoreModule, nodeID, short, declared.Builds.
3. Ran mesh-lab #88's prover locally (go run ./cmd/prove R201, throwaway Postgres as MESH_TEST_POSTGRES, GOTMPDIR=/var/tmp): R201 PROVED. Before the fix it fails at replay201_test.go:84: "a plan's send carried anchor the controller c1aaaaaa, older than the c2bbbbbb anchor was last sent", which is the issue's symptom. On 84deb530 it passes, including the person's-push assertion.
4. The branch is cut from current main 84deb530, so the store-tests line merges cleanly. On that merge TestReplay201 (the fix's own) and TestReplay201ThePlansSend both pass, and go vet ./cmd/mesh-controller is clean.
Statuses at this head: mesh/merge-gate pending (building on g14 since 21:18), mesh/repo-check missing, mesh/delivery pending (waits for its check). There is no mesh/delivery-group status: this branch is test/201-replay while mesh-lab #88's is fix/201-replay, so the two are not one delivery group. Not mergeable until both required checks are green and read.
For the merge: mesh-lab #88's R201 names HomeRef 45a1783b (this head). Merge this one with a merge commit, not a squash or rebase, and before or together with mesh-lab #88.
Out of date when it landed: out of date: judged against trunk 84deb530ee, the trunk is now 4dbd4066ca54; judged again on a recheck or when it is merged
**Merge check** at `45a1783b`: head 45a1783ba9a4 merged into trunk 84deb530ee5a, pass
**Out of date when it landed**: out of date: judged against trunk 84deb530ee5a, the trunk is now 4dbd4066ca54; judged again on a recheck or when it is merged
Merge check at 45a1783b
Judged: head 45a1783ba9a4 merged into trunk c0c379af2b3c; read beside it: mesh-catalog ac2d4dc46f4c, mesh-controller-main c0c379af2b3c, mesh-host 303d4037e84e, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent → ace, g14, novox, shanks; no bus step
tier 0: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives build-agent
shanks: receives build-agent
build-agent 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 is judged on its first machine
Run by the build seat on ace as build-1791834726575860245 (builds --log build-1791834726575860245).
--- the gate: build-agent
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:45:38Z 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-12T19:45:38Z
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 1 module(s) in 1 tier(s): build-agent
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.035s
ok github.com/novox/mesh-controller/cmd/mesh-controller 245.106s
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.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.132s
ok github.com/novox/mesh-controller/internal/artifacts 1.054s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.067s
ok github.com/novox/mesh-controller/internal/builder 32.595s
ok github.com/novox/mesh-controller/internal/catalogue 7.652s
ok github.com/novox/mesh-controller/internal/conditions 2.595s
ok github.com/novox/mesh-controller/internal/envfile 1.065s
ok github.com/novox/mesh-controller/internal/facts 1.080s
ok github.com/novox/mesh-controller/internal/identity 4.457s
ok github.com/novox/mesh-controller/internal/inventory 87.455s
ok github.com/novox/mesh-controller/internal/lease 17.689s
ok github.com/novox/mesh-controller/internal/licences 4.039s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.028s
ok github.com/novox/mesh-controller/internal/link 59.187s
ok github.com/novox/mesh-controller/internal/lint 2.296s
ok github.com/novox/mesh-controller/internal/outward 1.058s
ok github.com/novox/mesh-controller/internal/overlay 1.044s
ok github.com/novox/mesh-controller/internal/secrets 1.424s
ok github.com/novox/mesh-controller/internal/store 3.367s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.023s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.45s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.49s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.45s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.43s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.41s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.37s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.34s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.46s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.45s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.47s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.42s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.42s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.46s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.44s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.41s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.40s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.43s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.40s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.39s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.48s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.34s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.32s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.34s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.49s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.45s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.26s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.25s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.26s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.26s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.24s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.25s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.25s)
Out of date when it landed: out of date: judged against trunk c0c379af2b, the trunk is now 13711fb5b91b; judged again on a recheck or when it is merged
**Merge check** at `45a1783b`
Judged: head `45a1783ba9a4` merged into trunk `c0c379af2b3c`; read beside it: mesh-catalog `ac2d4dc46f4c`, mesh-controller-main `c0c379af2b3c`, mesh-host `303d4037e84e`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent → ace, g14, novox, shanks; no bus step
- tier 0: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives build-agent
- shanks: receives build-agent
- build-agent 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 is judged on its first machine
Run by the build seat on ace as `build-1791834726575860245` (`builds --log build-1791834726575860245`).
```
--- the gate: build-agent
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:45:38Z 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-12T19:45:38Z
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 1 module(s) in 1 tier(s): build-agent
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.035s
ok github.com/novox/mesh-controller/cmd/mesh-controller 245.106s
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.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.132s
ok github.com/novox/mesh-controller/internal/artifacts 1.054s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.067s
ok github.com/novox/mesh-controller/internal/builder 32.595s
ok github.com/novox/mesh-controller/internal/catalogue 7.652s
ok github.com/novox/mesh-controller/internal/conditions 2.595s
ok github.com/novox/mesh-controller/internal/envfile 1.065s
ok github.com/novox/mesh-controller/internal/facts 1.080s
ok github.com/novox/mesh-controller/internal/identity 4.457s
ok github.com/novox/mesh-controller/internal/inventory 87.455s
ok github.com/novox/mesh-controller/internal/lease 17.689s
ok github.com/novox/mesh-controller/internal/licences 4.039s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.028s
ok github.com/novox/mesh-controller/internal/link 59.187s
ok github.com/novox/mesh-controller/internal/lint 2.296s
ok github.com/novox/mesh-controller/internal/outward 1.058s
ok github.com/novox/mesh-controller/internal/overlay 1.044s
ok github.com/novox/mesh-controller/internal/secrets 1.424s
ok github.com/novox/mesh-controller/internal/store 3.367s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.023s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.45s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.49s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.45s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.43s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.41s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.37s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.34s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.46s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.45s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.47s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.42s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.42s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.46s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.44s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.41s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.40s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.43s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.40s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.39s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.48s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.34s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.32s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.34s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.49s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.45s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.26s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.25s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.26s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.26s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.24s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.25s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.25s)
```
**Out of date when it landed**: out of date: judged against trunk c0c379af2b3c, the trunk is now 13711fb5b91b; judged again on a recheck or when it is merged
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
cmd/mesh-controller/replay201_test.go:TestReplay201ThePlansSend, a store test (named intestdata/store-tests). The control node, anchor, was last sent the newer controller c2 while the mesh's record is the build before it, c1, which passed its gate. A send composed as a plan's send composes it (keepingRecorded, whatsendKeepsgives every send but a person's push) must carry the controller at c2; a person's push still carries the record c1. The build carried is read fromdeclarationFor'sBuilds, what the send records.Why
mesh-lab's replay R201 lays its test over the commit before the fix (#273, merge
84deb53). The fix's ownTestReplay201uses names the fix added (withScope/sendScope.puttingBack,recordedKept's core keep,coreDowngradeObservation,settleCoreDowngrades), so it does not build there. This test uses only what existed before: the inventory'sRecordBuild,RecordGate,RegisterModule,Assign,RecordSent,RestoreModule, andaMesh,nodeID,keepingRecorded,planFor,declarationFor. Same approach as R401 (#274). Its name differs fromTestReplay201so it can sit beside the fix's test, and its-run ^TestReplay201ThePlansSendprefix matches nothing else.How it was tested
a681227), with this file laid over: FAIL,a plan's send carried anchor the controller c1aaaaaa, older than the c2bbbbbb anchor was last sent.TestReplay201.sh merge-check.shwithMESH_TEST_POSTGRES(a throwaway local postgres): passes, every store test listed ran and passed, including this one.No code change; test only. Replay for hq issue 201 (the fix is #273).
Delivery
novox/mesh-controller@45a1783ba9a4— delivered since 2026-10-12T20:22:49ZDelivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Verdict: approve at
45a1783ba9Independent review (replay of issue 201 for mesh-lab R201).
What I checked:
a681227, the commit before the fix #273): aMesh, keepingRecorded, planFor, declarationFor, inventory.RecordBuild/Build/Artifact, RecordGate/GateVerdict/GatePassed, RegisterModule/Source, Assign, RecordSent, RestoreModule, nodeID, short, declared.Builds.84deb530it passes, including the person's-push assertion.84deb530, so the store-tests line merges cleanly. On that merge TestReplay201 (the fix's own) and TestReplay201ThePlansSend both pass, and go vet ./cmd/mesh-controller is clean.Statuses at this head: mesh/merge-gate pending (building on g14 since 21:18), mesh/repo-check missing, mesh/delivery pending (waits for its check). There is no mesh/delivery-group status: this branch is test/201-replay while mesh-lab #88's is fix/201-replay, so the two are not one delivery group. Not mergeable until both required checks are green and read.
For the merge: mesh-lab #88's R201 names HomeRef
45a1783b(this head). Merge this one with a merge commit, not a squash or rebase, and before or together with mesh-lab #88.Merge check at
45a1783b: head45a1783ba9merged into trunk84deb530ee, passOut of date when it landed: out of date: judged against trunk
84deb530ee, the trunk is now 4dbd4066ca54; judged again on a recheck or when it is mergedMerge check at
45a1783bJudged: head
45a1783ba9a4merged into trunkc0c379af2b3c; read beside it: mesh-catalogac2d4dc46f4c, mesh-controller-mainc0c379af2b3c, mesh-host303d4037e84e, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791834726575860245(builds --log build-1791834726575860245).Out of date when it landed: out of date: judged against trunk
c0c379af2b, the trunk is now 13711fb5b91b; judged again on a recheck or when it is merged