What: two test files in internal/catalogue, TestReplay279 and TestReplay412, each written only with what the catalogue had before its fix, so mesh-lab's prover can lay them over the commit before.
TestReplay279: a directory owned by ${setting:puid}:${setting:pgid} is composed for a machine whose settings give 1001:2000, and must reach the node-engine owned by 1001:2000 (fix: #260).
TestReplay412: a module declaring /etc/hosts without claiming node-hostname is refused naming the seat, and a node-hostname claim declaring neither /etc/hosts nor /etc/hostname is refused by CanHold naming both (fix: #267).
Why: issues 279 and 412 are delivered and resolve with a replay in mesh-lab's register; the fixes' own tests read what the fixes added and do not build at the commit before.
Tested: go test -run '^TestReplay(279|412)$' ./internal/catalogue passes on main; mesh-lab go run ./cmd/prove R279 R412 says PROVED for both: before #260 the machine does not compose (${setting:…} is not filled in this field), before #267 nothing refuses the stranger declaring /etc/hosts. Registered in novox/mesh-lab (same branch name).
Tests only; no behaviour changes. Replays for issue 279 and issue 412.
What: two test files in internal/catalogue, `TestReplay279` and `TestReplay412`, each written only with what the catalogue had before its fix, so mesh-lab's prover can lay them over the commit before.
- `TestReplay279`: a directory owned by `${setting:puid}:${setting:pgid}` is composed for a machine whose settings give 1001:2000, and must reach the node-engine owned by 1001:2000 (fix: #260).
- `TestReplay412`: a module declaring /etc/hosts without claiming node-hostname is refused naming the seat, and a node-hostname claim declaring neither /etc/hosts nor /etc/hostname is refused by CanHold naming both (fix: #267).
Why: issues 279 and 412 are delivered and resolve with a replay in mesh-lab's register; the fixes' own tests read what the fixes added and do not build at the commit before.
Tested: `go test -run '^TestReplay(279|412)$' ./internal/catalogue` passes on main; mesh-lab `go run ./cmd/prove R279 R412` says PROVED for both: before #260 the machine does not compose (`${setting:…} is not filled in this field`), before #267 nothing refuses the stranger declaring /etc/hosts. Registered in novox/mesh-lab (same branch name).
Tests only; no behaviour changes. Replays for issue 279 and issue 412.
So the lab's prover can lay them over the commit before mesh-controller #260 and #267 and see them fail
there and pass on the fix (hq issues 279, 412).
composed together: pass — the change touches no module of the mesh's graph
Transitions
2026-10-13 00:03 (new) → proposed (announced): novox/mesh-controller#285's head announced
2026-10-13 00:44 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-13 00:44 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-13 00:45 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 00:45 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@3bdab29a5a0e` — **delivered** since 2026-10-13T00:45:39Z
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Group** `fix/279-412-replays`, in order: novox/mesh-controller@3bdab29a5a0e → novox/mesh-lab@671d56a08a47
- composed together: pass — the change touches no module of the mesh's graph
**Transitions**
- 2026-10-13 00:03 (new) → proposed (announced): novox/mesh-controller#285's head announced
- 2026-10-13 00:44 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-13 00:44 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-13 00:45 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 00:45 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`.
Proved with mesh-lab's prover (go run ./cmd/prove --repos ... R279 R412 from mesh-lab #90's branch): both PROVED, each failing before its fix and passing on it.
TestReplay279 asserts the issue's acceptance: a directory owned by ${setting:puid}:${setting:pgid} reaches the node-engine owned by the numbers the machine's settings give (1001:2000). Before #260 it fails for the right reason: Compose refuses ${setting:...} in an owner ("is not filled in this field"), which is the literal-owner limitation the issue names. It also asserts the module is not left out, so a pass cannot come from the module being dropped.
TestReplay412 asserts both of the issue's points: a module declaring /etc/hosts without claiming node-hostname is refused by CatalogueProblems, naming the seat, and CanHold refuses a node-hostname holder that declares neither path, naming /etc/hosts and /etc/hostname. Before #267 it fails at the first assertion (no problem reported), which is the issue's symptom. It does not cover the rest of ADR 0287 (no two seats name one path, the seats listing shows paths). That is acceptable for a replay of the core symptom.
Pre-fix API only: both tests compile at the commit before each fix and fail on an assertion, not a build error.
Tests only, no behaviour change. The issues are named in the file comments and the title.
Nit (not blocking): the 412 file comment lists Shelf among the pre-fix API, but the mesh-lab register comment does not. Harmless.
Verdict: approve at 3bdab29a5a0ed0f15cbfdb4738a321f968ac9467
Checked:
- Proved with mesh-lab's prover (`go run ./cmd/prove --repos ... R279 R412` from mesh-lab #90's branch): both PROVED, each failing before its fix and passing on it.
- TestReplay279 asserts the issue's acceptance: a directory owned by `${setting:puid}:${setting:pgid}` reaches the node-engine owned by the numbers the machine's settings give (1001:2000). Before #260 it fails for the right reason: Compose refuses `${setting:...}` in an owner ("is not filled in this field"), which is the literal-owner limitation the issue names. It also asserts the module is not left out, so a pass cannot come from the module being dropped.
- TestReplay412 asserts both of the issue's points: a module declaring /etc/hosts without claiming node-hostname is refused by CatalogueProblems, naming the seat, and CanHold refuses a node-hostname holder that declares neither path, naming /etc/hosts and /etc/hostname. Before #267 it fails at the first assertion (no problem reported), which is the issue's symptom. It does not cover the rest of ADR 0287 (no two seats name one path, the seats listing shows paths). That is acceptable for a replay of the core symptom.
- Pre-fix API only: both tests compile at the commit before each fix and fail on an assertion, not a build error.
- Tests only, no behaviour change. The issues are named in the file comments and the title.
Nit (not blocking): the 412 file comment lists Shelf among the pre-fix API, but the mesh-lab register comment does not. Harmless.
Out of date when it landed: out of date: judged against trunk 454a3db69a, the trunk is now 4473bc7d7315; judged again on a recheck or when it is merged
**Merge check** at `3bdab29a`: head 3bdab29a5a0e merged into trunk 454a3db69a1e, pass
**Out of date when it landed**: out of date: judged against trunk 454a3db69a1e, the trunk is now 4473bc7d7315; judged again on a recheck or when it is merged
This is an independent review. It replaces the earlier approval from a reviewer the builder spawned. The code needs no change. The required checks are not green yet: they must be rechecked and read green before a merge.
Statuses on the head:
mesh/merge-gate pending ("out of date: judged against trunk 454a3db69a, the trunk is now 4473bc7d7315; judged again on a recheck or when it is merged").
mesh/repo-check pending (the same "out of date" text).
mesh/delivery pending ("checking").
mesh/delivery-group pending ("group fix/279-412-replays checking: 0 of 2 member(s) ready").
Ask mesh-delivery.recheck and merge only on the new verdict. This change has to merge before mesh-lab #90, because #90's HomeRef is this commit.
The replays use only code from before each fix. I ran the lab's prover from mesh-lab #90 (go run ./cmd/prove R279 R412) against an offline copy of mesh-controller. It laid these two files over the commit before each fix and over each fix:
R279 (issue 279): PROVED. It fails on 5facd8b, the first parent of #260's merge 9eddf36, at replay279_test.go:24 ("the machine did not compose: sonarr's resource recycle-bin holds ${setting:puid} in its owner, and ${setting:…} is not filled in this field"). It passes on 9eddf36.
R412 (issue 412): PROVED. It fails on 84deb53, the first parent of #267's merge 4dbd406, at replay412_test.go:18 ("a module declaring /etc/hosts without claiming node-hostname was not refused"). It passes on 4dbd406.
In both cases the test fails as a test, not as a build error, so every symbol it uses already existed before the fix. I also checked by name. anAdoptedAnchor, anchorRendering, byID, Layer and LeftOut existed at 5facd8b. CatalogueProblems, Shelf, SeatNamed, CanHold and Claim.Serves existed at 84deb53.
I ran go test -run '^TestReplay(279|412)$' ./internal/catalogue at this head and on the current trunk 4473bc7 with the two files added. Both tests pass in both places.
What each replay asserts matches its issue. R279 checks that a directory owned by ${setting:puid}:${setting:pgid} reaches the node-engine as 1001:2000. R412 checks two things: a module declaring /etc/hosts without the node-hostname claim is refused, and a node-hostname holder declaring neither path is refused, naming both.
Verdict: approve at 3bdab29a5a0ed0f15cbfdb4738a321f968ac9467
This is an independent review. It replaces the earlier approval from a reviewer the builder spawned. The code needs no change. The required checks are not green yet: they must be rechecked and read green before a merge.
Statuses on the head:
- mesh/merge-gate pending ("out of date: judged against trunk 454a3db69a1e, the trunk is now 4473bc7d7315; judged again on a recheck or when it is merged").
- mesh/repo-check pending (the same "out of date" text).
- mesh/delivery pending ("checking").
- mesh/delivery-group pending ("group fix/279-412-replays checking: 0 of 2 member(s) ready").
Ask mesh-delivery.recheck and merge only on the new verdict. This change has to merge before mesh-lab #90, because #90's HomeRef is this commit.
The replays use only code from before each fix. I ran the lab's prover from mesh-lab #90 (go run ./cmd/prove R279 R412) against an offline copy of mesh-controller. It laid these two files over the commit before each fix and over each fix:
- R279 (issue 279): PROVED. It fails on 5facd8b, the first parent of #260's merge 9eddf36, at replay279_test.go:24 ("the machine did not compose: sonarr's resource recycle-bin holds ${setting:puid} in its owner, and ${setting:…} is not filled in this field"). It passes on 9eddf36.
- R412 (issue 412): PROVED. It fails on 84deb53, the first parent of #267's merge 4dbd406, at replay412_test.go:18 ("a module declaring /etc/hosts without claiming node-hostname was not refused"). It passes on 4dbd406.
In both cases the test fails as a test, not as a build error, so every symbol it uses already existed before the fix. I also checked by name. anAdoptedAnchor, anchorRendering, byID, Layer and LeftOut existed at 5facd8b. CatalogueProblems, Shelf, SeatNamed, CanHold and Claim.Serves existed at 84deb53.
I ran go test -run '^TestReplay(279|412)$' ./internal/catalogue at this head and on the current trunk 4473bc7 with the two files added. Both tests pass in both places.
What each replay asserts matches its issue. R279 checks that a directory owned by ${setting:puid}:${setting:pgid} reaches the node-engine as 1001:2000. R412 checks two things: a module declaring /etc/hosts without the node-hostname claim is refused, and a node-hostname holder declaring neither path is refused, naming both.
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: two test files in internal/catalogue,
TestReplay279andTestReplay412, each written only with what the catalogue had before its fix, so mesh-lab's prover can lay them over the commit before.TestReplay279: a directory owned by${setting:puid}:${setting:pgid}is composed for a machine whose settings give 1001:2000, and must reach the node-engine owned by 1001:2000 (fix: #260).TestReplay412: a module declaring /etc/hosts without claiming node-hostname is refused naming the seat, and a node-hostname claim declaring neither /etc/hosts nor /etc/hostname is refused by CanHold naming both (fix: #267).Why: issues 279 and 412 are delivered and resolve with a replay in mesh-lab's register; the fixes' own tests read what the fixes added and do not build at the commit before.
Tested:
go test -run '^TestReplay(279|412)$' ./internal/cataloguepasses on main; mesh-labgo run ./cmd/prove R279 R412says PROVED for both: before #260 the machine does not compose (${setting:…} is not filled in this field), before #267 nothing refuses the stranger declaring /etc/hosts. Registered in novox/mesh-lab (same branch name).Tests only; no behaviour changes. Replays for issue 279 and issue 412.
Delivery
novox/mesh-controller@3bdab29a5a0e— delivered since 2026-10-13T00:45:39ZDelivery plan — builds nothing: the change touches no module of the mesh's graph
Group
fix/279-412-replays, in order: novox/mesh-controller@3bdab29a5a → novox/mesh-lab@671d56a08aTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Verdict: approve at
3bdab29a5aChecked:
go run ./cmd/prove --repos ... R279 R412from mesh-lab #90's branch): both PROVED, each failing before its fix and passing on it.${setting:puid}:${setting:pgid}reaches the node-engine owned by the numbers the machine's settings give (1001:2000). Before #260 it fails for the right reason: Compose refuses${setting:...}in an owner ("is not filled in this field"), which is the literal-owner limitation the issue names. It also asserts the module is not left out, so a pass cannot come from the module being dropped.Nit (not blocking): the 412 file comment lists Shelf among the pre-fix API, but the mesh-lab register comment does not. Harmless.
Merge check at
3bdab29a: head3bdab29a5amerged into trunk454a3db69a, passOut of date when it landed: out of date: judged against trunk
454a3db69a, the trunk is now 4473bc7d7315; judged again on a recheck or when it is mergedVerdict: approve at
3bdab29a5aThis is an independent review. It replaces the earlier approval from a reviewer the builder spawned. The code needs no change. The required checks are not green yet: they must be rechecked and read green before a merge.
Statuses on the head:
454a3db69a, the trunk is now 4473bc7d7315; judged again on a recheck or when it is merged").Ask mesh-delivery.recheck and merge only on the new verdict. This change has to merge before mesh-lab #90, because #90's HomeRef is this commit.
The replays use only code from before each fix. I ran the lab's prover from mesh-lab #90 (go run ./cmd/prove R279 R412) against an offline copy of mesh-controller. It laid these two files over the commit before each fix and over each fix:
5facd8b, the first parent of #260's merge9eddf36, at replay279_test.go:24 ("the machine did not compose: sonarr's resource recycle-bin holds ${setting:puid} in its owner, and ${setting:…} is not filled in this field"). It passes on9eddf36.84deb53, the first parent of #267's merge4dbd406, at replay412_test.go:18 ("a module declaring /etc/hosts without claiming node-hostname was not refused"). It passes on4dbd406.In both cases the test fails as a test, not as a build error, so every symbol it uses already existed before the fix. I also checked by name. anAdoptedAnchor, anchorRendering, byID, Layer and LeftOut existed at
5facd8b. CatalogueProblems, Shelf, SeatNamed, CanHold and Claim.Serves existed at84deb53.I ran go test -run '^TestReplay(279|412)$' ./internal/catalogue at this head and on the current trunk
4473bc7with the two files added. Both tests pass in both places.What each replay asserts matches its issue. R279 checks that a directory owned by ${setting:puid}:${setting:pgid} reaches the node-engine as 1001:2000. R412 checks two things: a module declaring /etc/hosts without the node-hostname claim is refused, and a node-hostname holder declaring neither path is refused, naming both.