internal/catalogue/replay166_test.go adds TestReplay166, following the pattern of #285 (R279, R412). It uses only what the catalogue had before #281: ParseManifest, Resolve, and the resolve tests' shelf, reachable and names helpers.
The test does three things:
It registers a grafana manifest that marks influxdb-api optional.
It assigns grafana on a mesh where influxdb is only in the catalogue. Assigning must not be refused, nothing besides grafana may be installed, and grafana gets no binding.
Once influxdb is offered on anchor, grafana binds to it.
Why
Issue 166 is resolved with a replay: it must fail on the commit before its fix and pass on the fix. The fix's own tests read fields the fix added, so they cannot be laid over the commit before.
How it was tested
On main (contains the fix, merge 4473bc7): go test -race ./internal/catalogue -run TestReplay166 passes.
Laid over 454a3db, the commit before the fix: it fails with cannot unmarshal object into manifestFields.requires.0 of type string. That is the incident: a manifest could not say the requirement is optional.
cmd/prove R166 in mesh-lab proves it (see the mesh-lab register PR).
For issue 166 (its replay).
## What
`internal/catalogue/replay166_test.go` adds `TestReplay166`, following the pattern of #285 (R279, R412). It uses only what the catalogue had before #281: `ParseManifest`, `Resolve`, and the resolve tests' `shelf`, `reachable` and `names` helpers.
The test does three things:
1. It registers a grafana manifest that marks `influxdb-api` optional.
2. It assigns grafana on a mesh where influxdb is only in the catalogue. Assigning must not be refused, nothing besides grafana may be installed, and grafana gets no binding.
3. Once influxdb is offered on anchor, grafana binds to it.
## Why
Issue 166 is resolved with a replay: it must fail on the commit before its fix and pass on the fix. The fix's own tests read fields the fix added, so they cannot be laid over the commit before.
## How it was tested
- On main (contains the fix, merge 4473bc7): `go test -race ./internal/catalogue -run TestReplay166` passes.
- Laid over 454a3db, the commit before the fix: it fails with `cannot unmarshal object into manifestFields.requires.0 of type string`. That is the incident: a manifest could not say the requirement is optional.
- `cmd/prove R166` in mesh-lab proves it (see the mesh-lab register PR).
For issue 166 (its replay).
A replay must fail on the commit before its fix and pass on it; the fix's own tests read what the fix
added, so this one uses only ParseManifest, Resolve and the resolve tests' helpers, and can be laid
over the commit before #281.
Deliverynovox/mesh-controller@b1baa8d8baf0 — delivered since 2026-10-13T00:33:02Z
Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
2026-10-13 00:27 (new) → proposed (announced): novox/mesh-controller#287's head announced
2026-10-13 00:32 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-13 00:32 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-13 00:33 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:33 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@b1baa8d8baf0` — **delivered** since 2026-10-13T00:33:02Z
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Transitions**
- 2026-10-13 00:27 (new) → proposed (announced): novox/mesh-controller#287's head announced
- 2026-10-13 00:32 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-13 00:32 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-13 00:33 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:33 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 of the replay for hq issue 166 (ADR 0330). Posted as a comment review: the forge refuses an APPROVED event from a tool (ADR 0266).
Uses only what existed before the fix. The test calls ParseManifest, Resolve, FromAnywhere, World.Offered / Provider, Resolution.Needs (From, For) and the resolve tests' shelf, reachable and names. I laid the file over 454a3db (the first parent of the #281 merge) and it compiles there: the failure is at run time, not a build error.
Fails before, passes on the fix. Run locally (GOFLAGS=-mod=vendor, go test ./internal/catalogue -run 'TestReplay166$' -count=1):
on 454a3db: FAIL at replay166_test.go:18, "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string";
on this head b1baa8d (parent 4473bc7, one file added): ok, and the whole internal/catalogue package passes with go vet clean.
Asserts the incident. An optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, places only grafana and gives no binding; once influxdb runs on another machine grafana binds to it (From anchor, For grafana). That matches the register entry's Asserts in mesh-lab #92.
Words and comment are accurate; the comment says why the fix's own tests cannot serve as the replay. anchor and anchor.internal are a role name and a reserved name; nothing sensitive.
Minor, not blocking: before the fix the replay stops at the parse, so the 'installs nothing' and 'binds' halves are only exercised on the fix. That is inherent (before the fix a manifest could not express the requirement at all) and is the right failure. mesh/merge-gate and mesh/delivery were still pending at this head when reviewed; read them before merging.
Independent review of the replay for hq issue 166 (ADR 0330). Posted as a comment review: the forge refuses an APPROVED event from a tool (ADR 0266).
1. Uses only what existed before the fix. The test calls ParseManifest, Resolve, FromAnywhere, World.Offered / Provider, Resolution.Needs (From, For) and the resolve tests' shelf, reachable and names. I laid the file over 454a3db (the first parent of the #281 merge) and it compiles there: the failure is at run time, not a build error.
2. Fails before, passes on the fix. Run locally (GOFLAGS=-mod=vendor, go test ./internal/catalogue -run 'TestReplay166$' -count=1):
- on 454a3db: FAIL at replay166_test.go:18, "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string";
- on 4473bc7 (the merge of #281): ok;
- on this head b1baa8d (parent 4473bc7, one file added): ok, and the whole internal/catalogue package passes with go vet clean.
3. Asserts the incident. An optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, places only grafana and gives no binding; once influxdb runs on another machine grafana binds to it (From anchor, For grafana). That matches the register entry's Asserts in mesh-lab #92.
4. Words and comment are accurate; the comment says why the fix's own tests cannot serve as the replay. anchor and anchor.internal are a role name and a reserved name; nothing sensitive.
Minor, not blocking: before the fix the replay stops at the parse, so the 'installs nothing' and 'binds' halves are only exercised on the fix. That is inherent (before the fix a manifest could not express the requirement at all) and is the right failure. mesh/merge-gate and mesh/delivery were still pending at this head when reviewed; read them before merging.
Verdict: approve at b1baa8d8baf0289b76e8082b3b95d146af6a973e
After-the-fact independent review: this pull request was merged on a review from an agent its own builder spawned, so this is a separate check against a fresh clone, not a rubber stamp of that review.
Uses only code that existed before #281. TestReplay166 calls ParseManifest, Resolve, and the resolve tests' shelf, reachable and names helpers. I checked each: shelf and names are defined in internal/catalogue/resolve_test.go and reachable in internal/catalogue/brokered_test.go, both already present and unchanged at 454a3db (the commit before #281, first parent of the #281 merge 4473bc7). The test's {"name": "influxdb-api", "optional": true} long form of a requirement did not exist before #281 (manifest.go's Requires []string took only bare names); that is exactly the incident, not a dependency the test takes on post-fix code.
Fails on #281's parent, passes on #281's merge. I laid the test file over three commits in separate worktrees:
454a3db (before #281): go test ./internal/catalogue -run 'TestReplay166$' fails with "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string" — matching the PR body's claimed failure exactly.
b1baa8d (this PR's head, one file added on top of 4473bc7): passes, and go vet ./internal/catalogue is clean.
The assertions match the incident: an optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, installs only grafana and gives it no binding; once influxdb is offered on a node, grafana binds to it. That is issue 166 (a soft dependency forced hard) end to end, and it lines up with the Asserts field mesh-lab #92 registers for R166.
Nothing public-repo-sensitive: "anchor" and "anchor.internal" are the documented role/reserved names, not real hostnames.
Gitea statuses at this head (b1baa8d8ba) are all success: mesh/delivery ("delivered"), mesh/merge-gate ("head b1baa8d8ba merged into trunk 4473bc7d73 — pass: the change touches no module of the mesh's graph"), mesh/repo-check ("its merge-check.sh passed"). The pending entries earlier in the history are the normal build-queue progression before the merge.
Minor, not blocking: before the fix the replay stops at the manifest parse, so only the fix's run exercises the "installs nothing" and "binds once offered" halves of the assertion. That is inherent — before the fix a manifest could not express an optional requirement at all — and is the correct failure shape for a replay, not a gap in coverage.
Verdict: approve at b1baa8d8baf0289b76e8082b3b95d146af6a973e
After-the-fact independent review: this pull request was merged on a review from an agent its own builder spawned, so this is a separate check against a fresh clone, not a rubber stamp of that review.
1. Uses only code that existed before #281. TestReplay166 calls ParseManifest, Resolve, and the resolve tests' shelf, reachable and names helpers. I checked each: shelf and names are defined in internal/catalogue/resolve_test.go and reachable in internal/catalogue/brokered_test.go, both already present and unchanged at 454a3db (the commit before #281, first parent of the #281 merge 4473bc7). The test's `{"name": "influxdb-api", "optional": true}` long form of a requirement did not exist before #281 (manifest.go's `Requires []string` took only bare names); that is exactly the incident, not a dependency the test takes on post-fix code.
2. Fails on #281's parent, passes on #281's merge. I laid the test file over three commits in separate worktrees:
- 454a3db (before #281): `go test ./internal/catalogue -run 'TestReplay166$'` fails with "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string" — matching the PR body's claimed failure exactly.
- 4473bc7 (the merge of #281): passes.
- b1baa8d (this PR's head, one file added on top of 4473bc7): passes, and `go vet ./internal/catalogue` is clean.
3. The assertions match the incident: an optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, installs only grafana and gives it no binding; once influxdb is offered on a node, grafana binds to it. That is issue 166 (a soft dependency forced hard) end to end, and it lines up with the Asserts field mesh-lab #92 registers for R166.
4. Nothing public-repo-sensitive: "anchor" and "anchor.internal" are the documented role/reserved names, not real hostnames.
5. Gitea statuses at this head (b1baa8d8baf0) are all success: mesh/delivery ("delivered"), mesh/merge-gate ("head b1baa8d8baf0 merged into trunk 4473bc7d7315 — pass: the change touches no module of the mesh's graph"), mesh/repo-check ("its merge-check.sh passed"). The pending entries earlier in the history are the normal build-queue progression before the merge.
Minor, not blocking: before the fix the replay stops at the manifest parse, so only the fix's run exercises the "installs nothing" and "binds once offered" halves of the assertion. That is inherent — before the fix a manifest could not express an optional requirement at all — and is the correct failure shape for a replay, not a gap in coverage.
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/catalogue/replay166_test.goaddsTestReplay166, following the pattern of #285 (R279, R412). It uses only what the catalogue had before #281:ParseManifest,Resolve, and the resolve tests'shelf,reachableandnameshelpers.The test does three things:
influxdb-apioptional.Why
Issue 166 is resolved with a replay: it must fail on the commit before its fix and pass on the fix. The fix's own tests read fields the fix added, so they cannot be laid over the commit before.
How it was tested
4473bc7):go test -race ./internal/catalogue -run TestReplay166passes.454a3db, the commit before the fix: it fails withcannot unmarshal object into manifestFields.requires.0 of type string. That is the incident: a manifest could not say the requirement is optional.cmd/prove R166in mesh-lab proves it (see the mesh-lab register PR).For issue 166 (its replay).
Delivery
novox/mesh-controller@b1baa8d8baf0— delivered since 2026-10-13T00:33:02ZDelivery 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.Independent review of the replay for hq issue 166 (ADR 0330). Posted as a comment review: the forge refuses an APPROVED event from a tool (ADR 0266).
Uses only what existed before the fix. The test calls ParseManifest, Resolve, FromAnywhere, World.Offered / Provider, Resolution.Needs (From, For) and the resolve tests' shelf, reachable and names. I laid the file over
454a3db(the first parent of the #281 merge) and it compiles there: the failure is at run time, not a build error.Fails before, passes on the fix. Run locally (GOFLAGS=-mod=vendor, go test ./internal/catalogue -run 'TestReplay166$' -count=1):
454a3db: FAIL at replay166_test.go:18, "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string";4473bc7(the merge of #281): ok;b1baa8d(parent4473bc7, one file added): ok, and the whole internal/catalogue package passes with go vet clean.Asserts the incident. An optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, places only grafana and gives no binding; once influxdb runs on another machine grafana binds to it (From anchor, For grafana). That matches the register entry's Asserts in mesh-lab #92.
Words and comment are accurate; the comment says why the fix's own tests cannot serve as the replay. anchor and anchor.internal are a role name and a reserved name; nothing sensitive.
Minor, not blocking: before the fix the replay stops at the parse, so the 'installs nothing' and 'binds' halves are only exercised on the fix. That is inherent (before the fix a manifest could not express the requirement at all) and is the right failure. mesh/merge-gate and mesh/delivery were still pending at this head when reviewed; read them before merging.
Verdict: approve at
b1baa8d8baVerdict: approve at
b1baa8d8baAfter-the-fact independent review: this pull request was merged on a review from an agent its own builder spawned, so this is a separate check against a fresh clone, not a rubber stamp of that review.
Uses only code that existed before #281. TestReplay166 calls ParseManifest, Resolve, and the resolve tests' shelf, reachable and names helpers. I checked each: shelf and names are defined in internal/catalogue/resolve_test.go and reachable in internal/catalogue/brokered_test.go, both already present and unchanged at
454a3db(the commit before #281, first parent of the #281 merge4473bc7). The test's{"name": "influxdb-api", "optional": true}long form of a requirement did not exist before #281 (manifest.go'sRequires []stringtook only bare names); that is exactly the incident, not a dependency the test takes on post-fix code.Fails on #281's parent, passes on #281's merge. I laid the test file over three commits in separate worktrees:
454a3db(before #281):go test ./internal/catalogue -run 'TestReplay166$'fails with "a manifest cannot say grafana runs without influxdb-api: ... cannot unmarshal object into manifestFields.requires.0 of type string" — matching the PR body's claimed failure exactly.4473bc7(the merge of #281): passes.b1baa8d(this PR's head, one file added on top of4473bc7): passes, andgo vet ./internal/catalogueis clean.The assertions match the incident: an optional requirement parses; assigning grafana with influxdb only in the catalogue is not refused, installs only grafana and gives it no binding; once influxdb is offered on a node, grafana binds to it. That is issue 166 (a soft dependency forced hard) end to end, and it lines up with the Asserts field mesh-lab #92 registers for R166.
Nothing public-repo-sensitive: "anchor" and "anchor.internal" are the documented role/reserved names, not real hostnames.
Gitea statuses at this head (
b1baa8d8ba) are all success: mesh/delivery ("delivered"), mesh/merge-gate ("headb1baa8d8bamerged into trunk4473bc7d73— pass: the change touches no module of the mesh's graph"), mesh/repo-check ("its merge-check.sh passed"). The pending entries earlier in the history are the normal build-queue progression before the merge.Minor, not blocking: before the fix the replay stops at the manifest parse, so only the fix's run exercises the "installs nothing" and "binds once offered" halves of the assertion. That is inherent — before the fix a manifest could not express an optional requirement at all — and is the correct failure shape for a replay, not a gap in coverage.