The checker keeps a composition request in pieces and packs it in the compose ask (issue 1966, recovery; group with mesh-catalog) #189

Merged
mesh-tools merged 3 commits from fix/1966-checker-compositions-objects into main 2026-11-09 16:31:25 +00:00
Member

Issue 1966 note 130. One delivery group with mesh-catalog's branch of the same name.

Every check that composes ace or novox fails today in the checker: "the value for /ace in mesh-delivery-checker_compositions is 300127 bytes, over the 262144 bytes the bucket takes" (novox 386277), and novox's compose ask is 1,228,218 bytes raw against max_payload 1,048,576 (mesh-host #219's check, 12:13:53 UTC).

  • internal/check/requests.go: a request is kept as gzip pieces of at most 128 KiB under pieces/<digest>/<i>, and a version-2 pointer under <check>/<node> written after its pieces; reading follows the pointer and verifies the digest; another version is refused by name; listing skips piece keys.

  • internal/check/engines.go and sdk/buildstep/ask.go: the compose ask carries the request packed as gzip+base64:<...> (novox ~386 KB); RequestBytes reads both forms.

  • contracts/parts/build-step.json: the compose request names both forms; node-build-go, node-build-node, node-build-image regenerated (seatgen -check passes).

  • ADR 0619: the checker is a foundation part, so pieces in its state, not a new-form object store.

  • Quick fix, chosen as the recovery: pieces and a packed ask.

  • Thorough fix, in milestone G of design 47 (prepare finding F18): the request named by digest and served on a build-seat verb, as RunInput does; the request read tool answered in pages.

Delivery: rebuilds mesh-delivery-assigner, -builder, -checker, -indexer, -view, -watchman and mesh-grants (they import sdk/buildstep or the build-seat contracts); rebased on #188 so mesh-grants keeps its requires-bound state. An old holder of node-build-go refuses a packed ask loudly until it runs mesh-catalog's build of this group.

This group's own check will fail on ace and novox with the same words: the running checker keeps each request before it asks (ADR 0656 §5 not built). Its merge needs the operator's Approve of that red check.

Tests: rows in existing tests, each failing against the old code (engines_test.go "went whole"; main_test.go 819 KB request through a store refusing values over 262144; version-1 refusal; listing without pieces). vet, vet -tags integration and tests pass in mesh-delivery-checker, sdk, mesh-grants and the three build seats' contracts, with mesh-sdk at 01774321.

A recovery fix (recovery-fixes-merge-and-tell): small, undone by one revert. The delivery seat serves no recovery merge, so it takes the operator's Approve.

Reviewed-by: mesh-code-reviewer for lead-47@shanks at 37258e6bec

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Issue 1966 note 130. One delivery group with mesh-catalog's branch of the same name. Every check that composes ace or novox fails today in the checker: "the value for <check>/ace in mesh-delivery-checker_compositions is 300127 bytes, over the 262144 bytes the bucket takes" (novox 386277), and novox's compose ask is 1,228,218 bytes raw against max_payload 1,048,576 (mesh-host #219's check, 12:13:53 UTC). - `internal/check/requests.go`: a request is kept as gzip pieces of at most 128 KiB under `pieces/<digest>/<i>`, and a version-2 pointer under `<check>/<node>` written after its pieces; reading follows the pointer and verifies the digest; another version is refused by name; listing skips piece keys. - `internal/check/engines.go` and `sdk/buildstep/ask.go`: the compose ask carries the request packed as `gzip+base64:<...>` (novox ~386 KB); `RequestBytes` reads both forms. - `contracts/parts/build-step.json`: the compose `request` names both forms; node-build-go, node-build-node, node-build-image regenerated (`seatgen -check` passes). - ADR 0619: the checker is a foundation part, so pieces in its `state`, not a new-form object store. - Quick fix, chosen as the recovery: pieces and a packed ask. - Thorough fix, in milestone G of design 47 (prepare finding F18): the request named by digest and served on a build-seat verb, as RunInput does; the request read tool answered in pages. Delivery: rebuilds mesh-delivery-assigner, -builder, -checker, -indexer, -view, -watchman and mesh-grants (they import sdk/buildstep or the build-seat contracts); rebased on #188 so mesh-grants keeps its requires-bound state. An old holder of node-build-go refuses a packed ask loudly until it runs mesh-catalog's build of this group. This group's own check will fail on ace and novox with the same words: the running checker keeps each request before it asks (ADR 0656 §5 not built). Its merge needs the operator's Approve of that red check. Tests: rows in existing tests, each failing against the old code (engines_test.go "went whole"; main_test.go 819 KB request through a store refusing values over 262144; version-1 refusal; listing without pieces). vet, vet -tags integration and tests pass in mesh-delivery-checker, sdk, mesh-grants and the three build seats' contracts, with mesh-sdk at 01774321. A recovery fix (recovery-fixes-merge-and-tell): small, undone by one revert. The delivery seat serves no recovery merge, so it takes the operator's Approve. Reviewed-by: mesh-code-reviewer for lead-47@shanks at 37258e6bec47a20789b51e2d59e8f0a56f3dbf97 https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Author
Member

Delivery novox/mesh-delivery@bf7540cd9ec2 — merged since 2026-11-09T16:31:27Z

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

Group fix/1966-checker-compositions-objects: novox/mesh-catalog@4e2a1a5a1f, novox/mesh-delivery@bf7540cd9e

  • composed together: fail — the checker's verdict at the members' heads (ebc9c24a98e4): mesh-delivery-checker

Transitions

  • 2026-11-09 15:42 (new) → proposed (announced): novox/mesh-delivery#189's head announced
  • 2026-11-09 15:42 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-09 16:31 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@bf7540cd9ec2` — **merged** since 2026-11-09T16:31:27Z **Source** — source.main moved to novox/mesh-delivery@fc21f2d1bd56. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/1966-checker-compositions-objects`: novox/mesh-catalog@4e2a1a5a1f58, novox/mesh-delivery@bf7540cd9ec2 - composed together: fail — the checker's verdict at the members' heads (ebc9c24a98e4): mesh-delivery-checker **Transitions** - 2026-11-09 15:42 (new) → proposed (announced): novox/mesh-delivery#189's head announced - 2026-11-09 15:42 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-09 16:31 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: not merged. The merge of this pull request into main at 37258e6bec was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.

mesh-delivery: **not merged.** The merge of this pull request into main at 37258e6bec47a20789b51e2d59e8f0a56f3dbf97 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
jschoubben added 3 commits 2026-11-09 15:42:16 +00:00
mesh-host #219's check failed: the request kept for g14 was 300127 bytes compressed, over the 262144 the state takes.
The key of the check and node now holds a pointer (digest, size, pieces) and each piece of the gzip bytes is a value of
its own under pieces/<digest>/<i>, at most 128 KiB; checker_composition_requests follows the pointer and checks the digest.

Quick fix: a larger cap or a better compression: still a limit, met again as the mesh grows. Thorough fix (chosen, and
bounded only by the bucket): pieces. Not an object store: the checker is a foundation part, whose data stays in the old
sections (ADR 0619 §2), and the tool runner serves no old-section object read to its tools. No manifest change.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
A large node's request is 1.2 MB, over the bus's 1 MiB message limit, so the compose ask failed once keeping no longer did.
The checker packs the request (a JSON string "gzip+base64:..." in the part's `any` request, no contract change) and
buildstep.ComposeJob.RequestBytes reads either form. A kept request of another version is refused naming it, and listing
no longer reads pieces. An older mesh-build-go refuses a packed ask loudly (it holds no request object): the check fails
naming it, so the catalog change is delivered with this one as a group.

Quick fix (chosen as the recovery): pack the request, ~290 KB for the largest node. Thorough fix (milestone G): the request
named by digest and served on a seat verb, as RunInput is.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
The build step part's request names both forms; the three build seats' contracts regenerated (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@fc21f2d1bd56
mesh/delivery-group group fix/1966-checker-compositions-objects merged: every member is merged
mesh/check checking bf7540cd9ec2 on fc21f2d1bd56 | novox/mesh-delivery#189 in group fix/1966-checker-compositions-objects
bf7540cd9e
The compose job's `request` description now says it is the request object or the JSON string "gzip+base64:" followed by the
base64 of the gzip-compressed object, as ADR 0634 §1 puts a seat's messages in its contract. The field stays `any`;
seatgen regenerated node-build-go, node-build-node and node-build-image (Go and TypeScript), and its -check is clean.
ask.go's comment says the checker packs every request it sends.

Delivery: an old holder of node-build-go refuses the packed ask loudly (it holds no request object) until it runs the new
mesh-build-go; the checker is built by mesh-build-go after it (module graph edge), and every check composing ace or novox
fails today anyway.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
jschoubben force-pushed fix/1966-checker-compositions-objects from 37258e6bec to bf7540cd9e 2026-11-09 15:42:16 +00:00 Compare
mesh-tools merged commit fc21f2d1bd into main 2026-11-09 16:31:25 +00:00
mesh-tools deleted branch fix/1966-checker-compositions-objects 2026-11-09 16:31:26 +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#189