The indexer judges every manifest once and says its verdict; the checker judges a change with the same judge (ADR 0578, 0579) #129

Merged
mesh-tools merged 21 commits from feat/judge-once into main 2026-11-01 07:54:35 +00:00
Member

Delivery group feat/judge-once (mesh-sdk, mesh-delivery, mesh-catalog, mesh-host, mesh-controller, mesh-tools), one check, one Approve. Issue 1585. Decisions: ADR 0578 (a manifest is judged once, by the indexer; every other part decodes it and takes the verdict; packages carry contracts only), ADR 0579 (a stricter judge never holds a module already running: it warns), and ADR 0573 §2/§4 built (each build takes the latest published package; a group check builds against the group's package heads).

Quick fix (readers hold a refused module, ~4 h) weighed against the thorough fix (judge once, ~32 h) and the thorough fix chosen with the operator (2026-11-01): the kind (a reader with an old judge silences itself) was met twice on 2026-10-31.

Rule bent, said here: mesh-delivery's unit tests rise 662 -> 892 because the judge's tests moved there from mesh-sdk (1686 -> 1440); the mesh-wide total falls. After the delivery every Go module rebuilds against the latest mesh-sdk (about 120 modules; all compile against it).

Controller research "The controller, NATS-native": manifest judgement leaves the controller; it reads the indexer's verdicts state.

This member: the judge package and mesh-judge in the indexer; verdicts written only when they differ, re-judged when the judge changes, refusals and outgrown warnings said and raised by the watchman; assigner, grants, builder decode and take the verdict; the checker judges a change against the trunk case, fills Packages and the predefined list, and no longer refuses pins; fingerprints take package versions.

Reviewed-by: reviewer-1585@shanks at 8e9cc58301
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL

The first group check failed only on gofmt (one blank line in mesh-sdk go/catalogue/streams.go); the fix is whitespace only, and every member re-pinned mesh-sdk 8af6e72; the reviewer checked each diff mechanically.

The third group check failed on five mesh-controller integration tests: three asserted judging the controller no longer does (ADR 0578), two exposed a real credential regression from mesh-sdk #141 (the push would have sealed a random value as a module's bus credential), fixed by refusing an unissued bus account before the push. Whole local integration runs of all six members passed before this head (the lead allowed them, said here).

The fourth check failed only on a judge test that read mesh-host beside it; the checker places mesh-delivery, mesh-sdk and mesh-catalog beside a mesh-delivery check. The sibling reader now reads mesh-host from its captured copy (refreshed to mesh-host 233bb23b) and keeps every other missing sibling fatal. Suites passed locally with the checker's layout and with none.

Delivery group feat/judge-once (mesh-sdk, mesh-delivery, mesh-catalog, mesh-host, mesh-controller, mesh-tools), one check, one Approve. Issue 1585. Decisions: ADR 0578 (a manifest is judged once, by the indexer; every other part decodes it and takes the verdict; packages carry contracts only), ADR 0579 (a stricter judge never holds a module already running: it warns), and ADR 0573 §2/§4 built (each build takes the latest published package; a group check builds against the group's package heads). Quick fix (readers hold a refused module, ~4 h) weighed against the thorough fix (judge once, ~32 h) and the thorough fix chosen with the operator (2026-11-01): the kind (a reader with an old judge silences itself) was met twice on 2026-10-31. Rule bent, said here: mesh-delivery's unit tests rise 662 -> 892 because the judge's tests moved there from mesh-sdk (1686 -> 1440); the mesh-wide total falls. After the delivery every Go module rebuilds against the latest mesh-sdk (about 120 modules; all compile against it). Controller research "The controller, NATS-native": manifest judgement leaves the controller; it reads the indexer's verdicts state. This member: the judge package and mesh-judge in the indexer; verdicts written only when they differ, re-judged when the judge changes, refusals and outgrown warnings said and raised by the watchman; assigner, grants, builder decode and take the verdict; the checker judges a change against the trunk case, fills Packages and the predefined list, and no longer refuses pins; fingerprints take package versions. Reviewed-by: reviewer-1585@shanks at 8e9cc5830119328ac13e0832f81dfb73931cc5bb Pushed-by: lead-47@shanks https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL The first group check failed only on gofmt (one blank line in mesh-sdk go/catalogue/streams.go); the fix is whitespace only, and every member re-pinned mesh-sdk 8af6e72; the reviewer checked each diff mechanically. The third group check failed on five mesh-controller integration tests: three asserted judging the controller no longer does (ADR 0578), two exposed a real credential regression from mesh-sdk #141 (the push would have sealed a random value as a module's bus credential), fixed by refusing an unissued bus account before the push. Whole local integration runs of all six members passed before this head (the lead allowed them, said here). The fourth check failed only on a judge test that read mesh-host beside it; the checker places mesh-delivery, mesh-sdk and mesh-catalog beside a mesh-delivery check. The sibling reader now reads mesh-host from its captured copy (refreshed to mesh-host 233bb23b) and keeps every other missing sibling fatal. Suites passed locally with the checker's layout and with none.
mesh-tools added 17 commits 2026-11-01 02:19:50 +00:00
Issue 1585, S5: judge.Shelf judges each manifest alone and the rules between them, giving a problem between
manifests to each module whose removal ends it (naming alone blamed the module mounts for f1-circuits' problem).
cmd/mesh-judge answers a composer request so a Go build module runs it as it runs the composer.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S9: verdicts keyed by digest, written only when they differ; a module's value carries a refusal; a
new refusal is said as manifest-refused. Judged at start (a new judge judges again) and after every merge.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S10: the watchman watches the indexer's modules and finds manifest-refused for a module whose value
carries a refusal, ending it once accepted. Its mesh-sdk pin moves to the group head, so it takes health.Finding's
Ref (issue 1952 renamed Token).

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S11: world and wants read with catalogue.Decode; a trunk refusal is held, named and handed to the
composer in its input; a proposal's composition read that fails is said, not dropped; a reader that cannot read a
changed field is a warning, no longer a failure.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S12: grants, builder and checker read with catalogue.Decode and grants holds a module the indexer
refused; the checker asks the Go build seat to run mesh-judge, built at mesh-delivery's trunk or at the group's
mesh-delivery head when it changes the judge, over the catalogue as the change leaves it, and fails on a refusal.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: the indexer's merge test takes in three manifests more against the real bus; it writes their
verdicts, says each refusal, and mesh-sdk's bus reader composes the valid one and holds the refused, named; before
any verdict it takes each as accepted and names the field set aside. One test extended, no test added.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S5-S8: the indexer's fingerprint reads go through judge.ForInputs, so judge/ is the one place in
mesh-delivery that calls mesh-sdk's rules; the command's request judging moves into judge.Request, tested in the
judge's table; two predefined tests become one.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: the group's mesh-sdk head (lenient Decode, verdict contract, frombus holding a refused module).

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S6-S8: 192 judge-only declarations (the strict parser, every manifest problem function, the tables)
moved whole by an AST mover, methods becoming functions; 163 helpers composition keeps too are copied. 245 tests
move with them, reading the captured catalogue through a copy of internal/beside. judge.WithTemplatesFrom and
ReadTreeManifest judge what mesh-sdk's readers now only fill. mesh-delivery's own tests decode. Pinned to mesh-sdk 25a2cec.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: three tests are split between mesh-sdk (their composition half) and the judge (their judging half).

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
ADR 0573 §2: a module builds against the latest published version of
each mesh package it uses, and a package's trunk merge moves every
dependent (issue 1585, S13). The bridge reads the packages each go.sum
names, the indexer keeps them and takes each one's trunk merge into the
fingerprint, a candidate takes a group member's head instead, and the
builder's ask carries the versions so the build module writes them.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
ADR 0573 §4 makes refusing a member for its mesh-sdk pin a fault of the
check (issue 1585, S14). Every Go check ask now carries the latest
published version of each package, or the head of the group member that
publishes it, so the pin check, its forge reads and its tests go, and
the controller's tests read mesh-sdk at the version it is built with.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The checker builds every Go check against them (issue 1585, S14); a row
in the repoModules test proves they come from the modules that hold each
package and leave out a package no module holds.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: builder-1585b's package versions folded onto the judge once; one mesh-sdk head for the group.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: the indexer keeps an accepted manifest accepted when a stricter judge re-judges it, its problems as
warnings carried in its value; a merge's new manifests are judged in full. The watchman raises manifest-outgrown as
a warning until mended. The checker fails only on a manifest the change adds or changes and names the rest as
warnings. Every module pins mesh-sdk 19c2042.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Answer review round 1: fresh is only what a take-in newly wrote, a merge keeps the verdict, the check compares with the trunk (ADR 0578, 0579)
mesh/delivery-group group feat/judge-once checking: 6 of 6 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking edf7b3c0bf3a on b1f262d7d06e | novox/mesh-delivery#129 in group feat/judge-once
edf7b3c0bf
Issue 1585, R1: fresh holds the digests a take-in newly wrote (a new module, a changed manifest); a registered or
taken-in module is judged too; a start pass that fails is judged again at the next message heard, no timer.
R2: a module's verdict, problems and warnings are carried while its digest stands and are no part of the compare.
R3: the checker judges the trunk beside the change and fails on every problem the change case adds, an untouched
manifest's included. R4: the judge reads the indexer's kept predefined keys, or the catalogue member's when it
changes them. A log line names a package no held module publishes. Every module pins mesh-sdk 62cddf4.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Author
Member

Delivery novox/mesh-delivery@8e9cc5830119 — merged since 2026-11-01T07:54:38Z

Source — source.main moved to novox/mesh-delivery@58748c2be1. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group feat/judge-once: novox/mesh-catalog@432326264f, novox/mesh-controller@b564c315d0, novox/mesh-delivery@8e9cc58301, novox/mesh-host@07066fe7a0, novox/mesh-sdk@8af6e72669, novox/mesh-tools@c494018074

  • composed together: pass — the checker's verdict at the members' heads (a0269268ba29)

Transitions

  • 2026-11-01 03:50 (new) → proposed (announced): novox/mesh-delivery#129's head announced
  • 2026-11-01 03:50 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-11-01 07:54 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-delivery@8e9cc5830119` — **merged** since 2026-11-01T07:54:38Z **Source** — source.main moved to novox/mesh-delivery@58748c2be161. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `feat/judge-once`: novox/mesh-catalog@432326264f6c, novox/mesh-controller@b564c315d012, novox/mesh-delivery@8e9cc5830119, novox/mesh-host@07066fe7a0a8, novox/mesh-sdk@8af6e7266915, novox/mesh-tools@c4940180746a - composed together: pass — the checker's verdict at the members' heads (a0269268ba29) **Transitions** - 2026-11-01 03:50 (new) → proposed (announced): novox/mesh-delivery#129's head announced - 2026-11-01 03:50 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-11-01 07:54 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head 62cddf4efc62 is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: its head 62cddf4efc62 is no longer the pull request's head, or the pull request closed. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
jschoubben added 1 commit 2026-11-01 02:27:38 +00:00
Pin the group's mesh-sdk head after the gofmt fix
mesh/delivery-group group feat/judge-once checking: 6 of 6 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 564a04b45c42 on b1f262d7d06e | novox/mesh-delivery#129 in group feat/judge-once
564a04b45c
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
jschoubben added 1 commit 2026-11-01 03:20:09 +00:00
Expect the mesh packages a merged message carries in the forge bridge's whole test (ADR 0573 §2)
mesh/delivery-group group feat/judge-once rejected: composed together: the checker's verdict at the members' heads (253f35815198): unit: mesh-delivery-indexer/…
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: unit: mesh-delivery-indexer/judge.TestTheResolvedPathRulesAreTheNodeEnginesOwn: mesh-host is not beside this check in MESH_CHECK_BE…
5059fef3e6
Issue 1585: the bridge names the mesh packages each module's go.sum names (builder-1585b's fold); its integration test
still wanted none. All nine modules' integration suites pass locally (the lead allowed a whole local run this round).

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
jschoubben added 2 commits 2026-11-01 03:50:11 +00:00
The judge's tests moved from mesh-sdk, where mesh-host was beside them; the checker places only mesh-sdk and the
catalogue beside mesh-delivery (besideRules), so the node-engine's path rules failed as not beside. A sibling the run
holds beside is read there; one it does not is read from testdata/beside and the log says which; only a sibling
with neither fails.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Fall back to a captured copy only for mesh-host, which the checker places beside no mesh-delivery check (issue 1585)
mesh/delivery merged: source.main moved to novox/mesh-delivery@58748c2be161
mesh/delivery-group group feat/judge-once merged: every member is merged
mesh/check checking 8e9cc5830119 on b1f262d7d06e | novox/mesh-delivery#129 in group feat/judge-once
8e9cc58301
Review of fb96216: a missing mesh-sdk or catalogue in a merge check is the checker's fault and fails, never judged
against a stale copy. The captured placement guard is refreshed to mesh-host's main 233bb23.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-tools merged commit 58748c2be1 into main 2026-11-01 07:54:35 +00:00
mesh-tools deleted branch feat/judge-once 2026-11-01 07:54:36 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#129