Release sdk1 of issue 1126 (the controller's removal), delivery group feat/sdk1: mesh-sdk, mesh-catalog, mesh-delivery, mesh-host (the node-engine), mesh-tools, mesh-networking and the controller's repository. Decision: ADR 0593 (mesh-sdk keeps only what every module shares; the node-engine alone composes; the indexer alone computes a fingerprint, over the content of the mesh packages a module imports), with ADR 0591 (a failed check names every failure) and the mesh-sdk part of ADR 0592 (object buckets, history streams). Every member pins mesh-sdk f02f142.
After the first check (20:05, failed on mesh-sdk process.TestStatePutWritesAKeyWhole): tests leaked mesh-sdk's package-wide retry bounds and serving state; fixed as a kind in mesh-sdk, and every member re-pinned. After the second (20:33, failed on mesh-build-go TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus): the running checker places no node-engine beside a catalogue check; the test now skips aloud only when no node-engine is beside, and the release's checker places it. Every suite of mesh-catalog, mesh-delivery and the node-engine was then run locally exactly as the running checker places siblings, every failure listed: one more of the kind (the node-engine's route-proxy proof), fixed the same way; only mesh-mail-reader's store tests could not run locally (they need the checker's postgres).
Tests: gofmt, go vet with and without the integration tag, and the unit and integration suites of every Go module in every member pass locally with GOWORK=off against the pins. Delivered ahead of it: mesh-catalog #597; this branch carries the same commit, cherry-picked.
Bent rules, said (rules-are-weighed): the node-engine's unit tests rise from 1232 to 1764 because about 530 moved in with the composition rules from mesh-sdk, whose count falls from 1425 to 607, so the mesh-wide count falls. Modules that import a sibling package of their own repository rebuild once more after the release (a one-time breach of ADR 0593 §4). The TypeScript package's move (subtask SDK9) stays out on purpose: the running indexer would lose fingerprints.
Release sdk1 of issue 1126 (the controller's removal), delivery group feat/sdk1: mesh-sdk, mesh-catalog, mesh-delivery, mesh-host (the node-engine), mesh-tools, mesh-networking and the controller's repository. Decision: ADR 0593 (mesh-sdk keeps only what every module shares; the node-engine alone composes; the indexer alone computes a fingerprint, over the content of the mesh packages a module imports), with ADR 0591 (a failed check names every failure) and the mesh-sdk part of ADR 0592 (object buckets, history streams). Every member pins mesh-sdk f02f142.
After the first check (20:05, failed on mesh-sdk process.TestStatePutWritesAKeyWhole): tests leaked mesh-sdk's package-wide retry bounds and serving state; fixed as a kind in mesh-sdk, and every member re-pinned. After the second (20:33, failed on mesh-build-go TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus): the running checker places no node-engine beside a catalogue check; the test now skips aloud only when no node-engine is beside, and the release's checker places it. Every suite of mesh-catalog, mesh-delivery and the node-engine was then run locally exactly as the running checker places siblings, every failure listed: one more of the kind (the node-engine's route-proxy proof), fixed the same way; only mesh-mail-reader's store tests could not run locally (they need the checker's postgres).
Tests: gofmt, go vet with and without the integration tag, and the unit and integration suites of every Go module in every member pass locally with GOWORK=off against the pins. Delivered ahead of it: mesh-catalog #597; this branch carries the same commit, cherry-picked.
Bent rules, said (rules-are-weighed): the node-engine's unit tests rise from 1232 to 1764 because about 530 moved in with the composition rules from mesh-sdk, whose count falls from 1425 to 607, so the mesh-wide count falls. Modules that import a sibling package of their own repository rebuild once more after the release (a one-time breach of ADR 0593 §4). The TypeScript package's move (subtask SDK9) stays out on purpose: the running indexer would lose fingerprints.
Reviewed-by: review-1126@shanks at d221c633799ad0b62ab7fb9e43fdbe61635e2664
https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The node-engine alone composes (ADR 0593 §6, §8), so the provisioner stops
composing with frombus and fromruntime and reads each module's plan from
composed-<node> (read as mesh-host.composed): at its want, or the build its
have runs, and at the indexer's newest build, so a key ahead of its want
still carries its plan entry. A refused or not yet published composition
holds the module with its last plan kept. The golden test proves the plans
and provisions are today's, captured from the composing holder before the
change. It no longer reads the builds or the resolved values.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The runner, the toolchain guard, the fetch, the parsers, buildcpu, the conformance kit and mesh-pack move from mesh-sdk's
buildstep into modules/mesh-build-go/buildstep (own go.mod). mesh-build-go, mesh-build-node and mesh-build-image require it
by a same-repository replace; what the delivery parts read (the failure contract, the fetch request, the stale sweep, the
module tree shape, NewID, CapacitySetting) stays imported from mesh-sdk as sdkstep.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
A build ask whose job built an artifact asks the new step build_go_imports once: `go list -deps` of each Go bundle's program,
no tests, the forge's packages outside the module's own directory (a sibling package of the same repository counts), sorted
and each once. The answer carries them as BuildAnswer.Imports. The step is also a tool, to read them by hand.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
ModuleTrees answers each module directory's git tree, its manifest and lock digests, and the git objects of the paths its
artifacts name; it no longer computes delivery.NamedTree or reads the mesh packages out of go.sum.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The digest counted a module outside the tree by its version and checksum, so every mesh-sdk merge invalidated each kept
verdict of each repository. A package of the mesh's forge is now hashed by the files the tests reach, as a replacement to a
directory already was; any other outside module still counts by version and checksum. Every kept verdict is invalidated
once, by the form change.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The new argument files, a list of directories (the root as the empty name), adds files, {directory: {path relative to it:
blob id}}, every blob under each directory from the call's one recursive listing. A directory the commit lacks fails naming
it, a cut listing still fails whole, and a badly spelled directory is refused before the forge is asked.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
deps skips a forge requirement the go.mod already replaces to a directory (a package of the module's own repository), which
it used to look for in a clone beside the check and fail. The new check removedpackages refuses an import of a package
mesh-sdk gave up and a use of the build runner through mesh-sdk's buildstep; it is red on mesh-provisioner until the
provisioner stops composing (the release's provisioner subtask). controllerdeps also refuses a go.mod requiring the
controller's repository.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The module already builds whatever repository, directory and package the ask names; the tests now say so for the node-engine's
repository (a Go module at its root, the command mesh-compose) instead of mesh-sdk's composer, which leaves mesh-sdk, and the
real-bus test builds a stand-in command in its fetched tree. The README tells the runner's new home and what a build says at
its end.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The test copies the node-engine's repository from beside the check (MESH_CHECK_BESIDE, mesh-host, with mesh-sdk's Go module
beside it as one workspace when a group places it), has the module build github.com/novox/mesh-host/cmd/mesh-compose there,
and runs it; it fails loudly when the repository is not beside.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh-build-image's two tests that composed with catalogue.Resolve (gone with the composition) now hold the module's own
facts: its registry file is the placement and no file binds the store; it requires rootless-image-build, which buildah
provides and docker does not. What only proved composition is listed in .work/sdk1/proofs-for-node-engine.md. sdkjudge's
composition list drops the six refusals that left mesh-sdk.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh/delivery-group group feat/sdk1 rejected: composed together: the checker's verdict at the members' heads (5c08034be629): integration: meshbuildgo/cmd/mesh-…
mesh/check failed: integration: meshbuildgo/cmd/mesh-build-go… | 640455999e66 on ee75d4327ce5 | judged by the candidate's mesh-build-go at 785ebb388d5a
ensureModfile copied go.mod word for word into pins/<dir>/, where `go mod verify` runs, so a replace to ./x or ../x pointed
nowhere (route-proxy's failure of 2026-11-02 13:53, met a second time with the release's sibling packages). Every relative
replace target is now made absolute under the tree the go.mod came from. mesh-build-node installs a module's own npm
packages in a scratch copy of package.json, so a file:, link: or portal: dependency on a relative path would fail the same
way; it is refused naming the package and its path, as a module without a lock is.
Quick fix: rewrite the one replace route-proxy had, in ensureModfile (minutes). Thorough fix: the kind, a go.mod or
package.json copied away from its tree, for every replace form (single, block, with a version, ./ and ../) in the one place
all copies go through (ensureModfile, which versions.go and the pins share), and the same kind in the other build module
that copies a manifest. Chosen: thorough, since it was met twice and hides a failure until the delivery (quick-or-thorough,
fix-a-bug-met-twice). Test: TestARelativeReplaceStillResolvesInTheTemporaryModfile runs real go mod verify in the pins directory.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Deliverynovox/mesh-catalog@d221c633799a — merged since 2026-11-02T20:41:59Z
Source — source.main moved to novox/mesh-catalog@f469eb387a. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: fail — the checker's verdict at the members' heads (10899da235da): the composition
Transitions
2026-11-02 19:41 (new) → proposed (announced): novox/mesh-catalog#598's head announced
2026-11-02 19:41 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-02 20:41 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-catalog@d221c633799a` — **merged** since 2026-11-02T20:41:59Z
**Source** — source.main moved to novox/mesh-catalog@f469eb387a30. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `feat/sdk1`: novox/mesh-catalog@d221c633799a, novox/mesh-controller@597036717394, novox/mesh-delivery@2b5a7fe831c1, novox/mesh-host@ae4b86e33300, novox/mesh-networking@f18ec031c463, novox/mesh-sdk@f02f142af128, novox/mesh-tools@24c0ec0d324a
- composed together: fail — the checker's verdict at the members' heads (10899da235da): the composition
**Transitions**
- 2026-11-02 19:41 (new) → proposed (announced): novox/mesh-catalog#598's head announced
- 2026-11-02 19:41 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-02 20:41 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: 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/delivery-group group feat/sdk1 rejected: composed together: the checker's verdict at the members' heads (6b0f5a2e9397): integration: meshbuildgo/cmd/mesh-…
mesh/check failed: integration: meshbuildgo/cmd/mesh-build-go… | 68e7a2ddbfb9 on ee75d4327ce5 | judged by the candidate's mesh-build-go at 773f299aed81
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-delivery: the operator's Approve of this pull request's merge into main is ended: its head 3b3b096be8cd 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 3b3b096be8cd 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.
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.
Release sdk1 of issue 1126 (the controller's removal), delivery group feat/sdk1: mesh-sdk, mesh-catalog, mesh-delivery, mesh-host (the node-engine), mesh-tools, mesh-networking and the controller's repository. Decision: ADR 0593 (mesh-sdk keeps only what every module shares; the node-engine alone composes; the indexer alone computes a fingerprint, over the content of the mesh packages a module imports), with ADR 0591 (a failed check names every failure) and the mesh-sdk part of ADR 0592 (object buckets, history streams). Every member pins mesh-sdk f02f142.
After the first check (20:05, failed on mesh-sdk process.TestStatePutWritesAKeyWhole): tests leaked mesh-sdk's package-wide retry bounds and serving state; fixed as a kind in mesh-sdk, and every member re-pinned. After the second (20:33, failed on mesh-build-go TestAComposeAskIsBuiltOnceAndAnsweredOnTheBus): the running checker places no node-engine beside a catalogue check; the test now skips aloud only when no node-engine is beside, and the release's checker places it. Every suite of mesh-catalog, mesh-delivery and the node-engine was then run locally exactly as the running checker places siblings, every failure listed: one more of the kind (the node-engine's route-proxy proof), fixed the same way; only mesh-mail-reader's store tests could not run locally (they need the checker's postgres).
Tests: gofmt, go vet with and without the integration tag, and the unit and integration suites of every Go module in every member pass locally with GOWORK=off against the pins. Delivered ahead of it: mesh-catalog #597; this branch carries the same commit, cherry-picked.
Bent rules, said (rules-are-weighed): the node-engine's unit tests rise from 1232 to 1764 because about 530 moved in with the composition rules from mesh-sdk, whose count falls from 1425 to 607, so the mesh-wide count falls. Modules that import a sibling package of their own repository rebuild once more after the release (a one-time breach of ADR 0593 §4). The TypeScript package's move (subtask SDK9) stays out on purpose: the running indexer would lose fingerprints.
Reviewed-by: review-1126@shanks at
d221c63379https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
The new argument files, a list of directories (the root as the empty name), adds files, {directory: {path relative to it: blob id}}, every blob under each directory from the call's one recursive listing. A directory the commit lacks fails naming it, a cut listing still fails whole, and a badly spelled directory is refused before the forge is asked. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovLDelivery
novox/mesh-catalog@d221c633799a— merged since 2026-11-02T20:41:59ZSource — source.main moved to novox/mesh-catalog@f469eb387a. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
feat/sdk1: novox/mesh-catalog@d221c63379, novox/mesh-controller@5970367173, novox/mesh-delivery@2b5a7fe831, novox/mesh-host@ae4b86e333, novox/mesh-networking@f18ec031c4, novox/mesh-sdk@f02f142af1, novox/mesh-tools@24c0ec0d32Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.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-delivery: the operator's Approve of this pull request's merge into main is ended: its head 3b3b096be8cd 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.