mesh-sdk keeps the manifest contract and a lenient decoder; the judge leaves it (ADR 0578, 0579, 0573 §2) #152

Merged
mesh-tools merged 13 commits from feat/judge-once into main 2026-11-01 07:53:58 +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: lenient Decode; ManifestVerdict contract (state mesh-delivery-indexer_verdicts, manifest-refused, manifest-outgrown, warnings); frombus holds and names a refused module and never ends a whole read; the composer takes verdicts in its input; build asks carry package versions; the judge (about 5,200 lines) deleted; TestMeshSDKHoldsNoManifestJudge.

Reviewed-by: reviewer-1585@shanks at 8af6e72669
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.

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: lenient Decode; ManifestVerdict contract (state mesh-delivery-indexer_verdicts, manifest-refused, manifest-outgrown, warnings); frombus holds and names a refused module and never ends a whole read; the composer takes verdicts in its input; build asks carry package versions; the judge (about 5,200 lines) deleted; TestMeshSDKHoldsNoManifestJudge. Reviewed-by: reviewer-1585@shanks at 8af6e72669151bf9b4f7524d38c28e29215514c6 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.
mesh-tools added 12 commits 2026-11-01 02:19:50 +00:00
Issue 1585, S1: catalogue.Decode sets an unknown field aside and names it (SetAside); only a manifest not read past
the field is still left out.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S3: state mesh-delivery-indexer_verdicts keyed by manifest digest, event manifest-refused, a modules
value carrying its verdict, and TakeManifestVerdict reading a missing verdict as accepted. Contract only, no rules.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S2: one refused manifest silenced disk-load for 45 hours. frombus decodes leniently, takes the
indexer's verdict, stands a refused module in as its stub and names it in Input.Refused; DataItemsHeld names it.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S11 (mesh-sdk half): Case.Verdicts carries the indexer's verdicts; a refused module is held as its
stub and named; an unknown field is set aside and named, never refused.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S12 (mesh-sdk half): buildstep's named paths and delivery.ProvidedManifest read with catalogue.Decode.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: mesh-sdk and mesh-delivery are both over 500 unit tests; ADR 0578's tests replace, never add.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S6-S8: ReadTreeManifestWritten and WithTemplatesFrom decode (the judge in mesh-delivery judges what they
answer); Manifest.Predefined, SetPredefined and FormsWritten expose what the moved judge reads; buscompose names its
removals without the catalogue's allow-list; tests outside the catalogue decode, two tree-judging tests moved.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585, S19: the strict parser, every manifest problem function and the judge's tables (192 declarations,
about 5,200 lines) and their 244 tests leave; composition keeps its own refusals and the helpers it uses. The
catalogue's tests decode the manifests they build. ParseManifest, ParseManifestWith, ParseManifestForInputs,
CatalogueProblems and the rest are gone; mesh-delivery-indexer/judge holds them.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
ADR 0573 §2 has every module build against the latest published version of
each mesh package it uses, chosen by the planner and written by the build,
never pinned by hand (issue 1585, S4). The ask, the fetch request and the
merge preview now carry the packages and their versions, and the new-form
fingerprint takes each version, so a package's trunk merge changes every
dependent's fingerprint. A module using no package keeps its fingerprint.

Folded onto feat/judge-once by builder-1585a: Module keeps both Packages and the verdict fields.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Issue 1585: ManifestVerdict and the modules value carry Warnings; the finding manifest-outgrown names it.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Refuse a manifest judge in mesh-sdk's own check, and never end the data items' read on one module (ADR 0578 §3, §4)
mesh/delivery-group group feat/judge-once rejected: composed together: the checker's verdict at the members' heads (8a8ede2fb2c8): unit: go.gofmt
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: unit: go.gofmt: not as gofmt writes them (run gofmt -w): go/catalogue/streams.go | 62cddf4efc62 on ff5e00f1f894 | unit 0 run, 78 ke…
62cddf4efc
Review round 1 (issue 1585): L1, DataItemsHeld holds a module by the culprit rule PlansHeld uses, a held module's
data left out, so an item its composition refuses holds that module alone; L2, mesh-sdk's own tests scan its go/
tree as mesh-catalog's checks/sdkjudge does, with the same list of composition's refusals. Two tests merged into one.

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

Delivery novox/mesh-sdk@8af6e7266915 — merged since 2026-11-01T07:54:02Z

Source — source.main moved to novox/mesh-sdk@da41823855. 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 02:22 (new) → proposed (announced): novox/mesh-sdk#152's head announced
  • 2026-11-01 02:22 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-sdk@8af6e7266915` — **merged** since 2026-11-01T07:54:02Z **Source** — source.main moved to novox/mesh-sdk@da41823855a9. 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 02:22 (new) → proposed (announced): novox/mesh-sdk#152's head announced - 2026-11-01 02:22 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`.
jschoubben added 1 commit 2026-11-01 02:22:08 +00:00
Format streams.go as gofmt writes it, which the group's check refused
mesh/delivery merged: source.main moved to novox/mesh-sdk@da41823855a9
mesh/delivery-group group feat/judge-once merged: every member is merged
mesh/check pass 8af6e7266915 on ff5e00f1f894 | unit 8665 run, 1440 kept, 62 skipped | integration 10038 run, 975 kept, 70 skipped | over bound: unit, …
8af6e72669
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: its head 62cddf4efc 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.
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.
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 da41823855 into main 2026-11-01 07:53:58 +00:00
mesh-tools deleted branch feat/judge-once 2026-11-01 07:53:59 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#152