Commit Graph
28 Commits
Author SHA1 Message Date
jschoubben 2271b805bb D5 (sdk, indexer): the answer store is the steps state's own steps-objects; a state template takes objects-max-mib
Builds: design 47 G A-313, A-314

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 22:30:36 +01:00
jschoubben d2ba93abcd D4 (sdk, checker): a compose request's manifest names its fingerprint beside its digest
composer.Manifest gains Fingerprint (wire {"digest","fingerprint"}) and Fill's get takes the Manifest. The checker fills it from a
pull's fingerprint, else from the trunk revision's entry of the module (repoModules keeps each entry's fingerprint).

Builds: design 47 G A-310

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 22:22:07 +01:00
jschoubben 43f6b57ab2 Main's subject takes the checker's check and recheck again, as A-184 says until it goes
The asker rename (d29e1426) let main's subject, which names no asker, take only a build and a run, so a holder refused the
checker's check asks ("the kind check is not taken on main's subject"), and seven of the checker's eight integration tests
failed. Until main's subject goes it also takes the checker's check and recheck; a step there is still refused.

Builds: design 47 G A-184, §543

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 20:30:13 +01:00
jschoubben d29e1426d0 Asker rename R2: every asker of a build seat asks under its seat's own name, and its step is keyed so
A-163: the asker in `accept.<queue>.<asker>` is the asking seat's name (mesh-pipeline-runner,
mesh-catalog, mesh-wants, mesh-builds), never a nickname: the builder asks as mesh-builds (was
"builder"), the indexer's validation as mesh-catalog (was "indexer"), the assigner's runs as
mesh-wants (was "assigner"), the runner's steps on `accept.check.mesh-pipeline-runner` and
`accept.delivery.mesh-pipeline-runner` (were `accept.check.step` and `accept.delivery.step`, where
the holder read `step` as the asker). An asker naming none (the checker) asks on main's subject
(A-184). A build seat's queues are delivery, check and recheck alone (A-170, A-184): buildstep's
AskKinds holds no step, a holder takes a step from check or delivery, and the grants part makes a
worker per queue, never per kind. A holder keys a named ask's step `<asker>.<node>.<id>` and main's
`<node>.<id>` (§481, §483); readers watch their own name's keys. The composition step's step-progress
names the one caller mesh-wants' definition lists for step, read from the seat list (A-294).

Builds: design 47 G §481, §483, §543, §600, A-163, A-170, A-184, A-248, A-294

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 18:37:29 +01:00
jschoubben 4851475773 Asker rename R1: a build seat's streamed kind is sent on its queue's subject, the kind in the body
The generator wrote `accept.<stream>.<kind>` for a kind that rides a stream (step on check and delivery,
run on check), so the runner's step landed under the named worker `accept.check.*` with `step` read as
its asker. A-170 has the kind in the body only: the generated accept subject of a streamed kind is the
queue's, `accept.<stream>`; its generated names stay `<stream>.<kind>`. The three build seats'
contracts and fixtures are regenerated.

Builds: design 47 G §600, A-170, A-184

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 18:23:48 +01:00
jschoubben 386095bd53 A-290 B1: a step answer over the steps state's bound is kept as the object its key names
A step's key keeps its answer only within what the steps state holds per value (kvlimit.ModuleStateValueBytes less
the headers' room). Over it, finish keeps the answer with the holder's KeepOutput as the object output.<ask> in its
outputs store and the key names it in output-object: a check's whole answer, its result emptied; a run's output, the
key keeping the run answer without it. An answer that cannot be kept ends the key failed, saying why. The Puller says
step-ended from the end finish wrote, so the key and the event say one outcome: a run whose program exited other than
0 ends its key failed as well, its answer kept; step-ended names the object finish kept instead of putting it twice.
Step.Whole reads a key's object back through the seat's verb output on the step's node. The part build-step's Step
gains output-object, the verb output says it answers a step's answer; fixtures and the generated contracts follow.

Builds: design 47 G A-290, A-254, §467

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 16:44:07 +01:00
jschoubben e313248b5f U2b: the reserved version reaches each artifact's build, and a versioned ask names each artifact's registry seat
The ask carried the reserved version (§573), but the build modules' shared run gave each
artifact's build only the artifact's own version, which no asker sets, so no build got
MESH_VERSION and a Go package was packed as a candidate and never published. The run now
gives every build the ask's version, and the builder names the registry seat each artifact
of a versioned build is published through, so a Go package is published under its
reserved version on go-package-registry.

Builds: design 47 G §370, §573, §458; design 51 *Publishing*

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 16:13:13 +01:00
jschoubben 6e16742446 A-284, A-285: a group's check gives every TypeScript fetch the packages the group changes
The fetch's single `package` and its tagged form go; `group-packages` lists each
TypeScript package a member's merge changes, at the member's head with its
directory there. The checker asks every member's other fetches first, so every
merge's changed paths are known before any TypeScript fetch, and gives each the
whole list; the registry's version stays only for a package no member changes.

Builds: design 47 G A-284, A-285

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 15:30:22 +01:00
jschoubben 5fbc366f1b A-286: a member whose fetch merged is previewed and judged whatever its later steps ended with
A check step that errors after its fetch merged ends failed with its answer (the fetch and the levels so far)
beside its error (steprun askrun.go), and the checker previews the merge from it (judge.go), so a failed level
no longer hides the manifest validator and the composition (try 2: catalog, contracts and delivery were
unpreviewed by a seatgen bootstrap failure, not a conflict). Only a head that does not merge or a fetch that
did not answer stays unpreviewed, and the check says which.

Builds: design 47 G A-286 (hq 41dd30fe)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 15:19:14 +01:00
jschoubben daa7737392 Item 5 (join 11): an asker's build-seat queue is served by the seat's holders, so the indexer draws its kind-6 edge
An asker names the queue it asks as seat:<seat>.accept.<queue> (A-231); no module's serves lists that form, so
graph.Servers matched nothing and the indexer drew no served-verb edge from a build seat's holders to the asker.
Servers now reads the form through mesh-sdk's catalogue.QueueInvoke and answers every module serving a verb of the
seat; the kind-6 edge asks the module graph's Servers, the one rule, instead of a match of its own.

Builds: design 47 G §544, §605, A-231

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:08:40 +01:00
jschoubben 2242ae3c46 Area 4 (join 11): buildstep reads no bus, not even through buscalls
The builder's published package reached the bus library through buildstep,
whose KeptBuildsOf took mesh-sdk's buscalls.ObjectInfo, and buscalls now
imports nats.go for its seat chunks. buildstep's layouts, keys and codecs
are read by modules that never touch the bus (its own guard), so the kept
build of one object is judged from the object's own fields (KeptBuildOf,
SortKept) and the build module lists its store itself. The guard now also
refuses a bus library reached through an import, the kind that let this in.

Builds: design 47 G (join 11 area 4: builds TestThePackageReachesNoBus, buildstep's bus-free guard)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:21:29 +01:00
jschoubben 9433140931 Merge branch 'feat/47-G-fix11-b2k' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go
#	modules/mesh-delivery-assigner/manifest_test.go
#	modules/mesh-delivery-assigner/module.json
2026-11-12 10:36:38 +01:00
jschoubben 4c2d8f034c Merge branch 'feat/47-G-fix11-b2l' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/buildended.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/graphkept.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/tools.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go
#	modules/mesh-delivery-assigner/internal/assign/wants_test.go
#	modules/mesh-delivery-assigner/manifest_test.go
#	modules/mesh-delivery-assigner/module.json
2026-11-12 10:36:04 +01:00
jschoubben 2551d13cf3 Merge branch 'feat/47-G-fix11-b7' into feat/47-G-join11
# Conflicts:
#	.gitignore
2026-11-12 10:28:26 +01:00
jschoubben 12c213eb4c Merge commit 'b4eb78c2' into feat/47-G-fix11-b2k 2026-11-12 09:47:17 +01:00
jschoubben 5094abded9 C1c-3: the delivery SDK gives askers one reader of a run's answer from a step-ended
StepEnded.ReadOutput takes the inline `output`, else asks the seat's verb output on the node that ran the ask for the object
`output-object` names (the runtime hands the chunks as the member `file`, A-249); a step-ended with both is refused.

Builds: design 47 G A-254, A-240, A-247

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:40:36 +01:00
jschoubben 7125a9f92f C1c-2a: the step runner says a run's answer in step-ended, inline or as an object, and serves it
The puller's end of a run carries the run's program's last line of standard output as `output` up to StepEndedInlineMost, else keeps
it with KeepOutput and names the object in `output-object`; a program that exits other than 0 ends failed. OutputTool serves the
seat's verb `output` from the kept object, as the whole file the tool runner sends in chunks; OutputsStore names the store.

Builds: design 47 G A-254, A-257, §602

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:37:51 +01:00
jschoubben 6cbaa84c52 Merge branch 'feat/47-G-fix11-c1b' into feat/47-G-fix11-c1c 2026-11-12 09:31:16 +01:00
jschoubben 2879e78481 B5g3-1: a run's input is any size, RunInputBound goes
Builds: design 47 G §712, §354, A-237

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:18:18 +01:00
jschoubben 9e02d6234b A-238: a run ask whose program reads only its input names no head
The indexer's validation runs its manifest validator over its input alone
(design 47 G §712: heads none); the holder lays an empty MESH_RUN_HEADS.

Builds: design 47 G §712, A-238

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:16:19 +01:00
jschoubben b7e251a463 B5g3-1: a run's input is any size, RunInputBound goes
Builds: design 47 G §712, §354, A-237

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:27:42 +01:00
jschoubben e586c0a05c A-238: a run ask whose program reads only its input names no head
The indexer's validation runs its manifest validator over its input alone
(design 47 G §712: heads none); the holder lays an empty MESH_RUN_HEADS.

Builds: design 47 G §712, A-238

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:23:13 +01:00
jschoubben 642a0ad2f9 AS14 (b, c): a requirement points first to the named seat's holder, and a contributed one carries a contribution edge
The seat whose definition delivers a requirement, among those the entry's
catalog graph revision names, is resolved first: its holder from the
placements' holds, as seat-holders keeps them; a delivering seat no
placement holds holds the entry, naming the seat. A hold now names the
requirement, the seat and each candidate {node, module}; an optional
requirement nothing provides is left absent. The catalog entry gains
contributes, filled by the indexer, and requires names every requirement
as Wants lists them, optional ones included (the module graph and the
assigner's halves leave the optional ones out by the entry's manifest).
A contributed requirement gives a contribution edge to the same provider.

Builds: design 47 G §708, §709, §357; lead answers A-167, A-229

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:19:53 +01:00
jschoubben 7033d5e80d BG2, BG3: the puller refuses a kind its asker may not ask and pulls the named worker
An ask's asker is the last token of its accept subject; the holder checks the kind against the callers the build seat's
definition lists (Puller.Callers, CallersFromDefinitions), refuses an ask of another kind answering error naming the kind
and the asker and ending it failed, takes only a build and a run on main's subject, and gives back an ask the seat list
does not judge yet. A second worker per queue (AskNamedWorker, filtered to accept.<queue>.*) is pulled after main's; the
holder says `named worker not bound` while its membership lists none.

Builds: design 47 G §543, §544, §481, A-163, A-170

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:44:38 +01:00
jschoubben 00b52e3c1f BG4, BN4, BI4: the puller says ask-taken, step-progress and the end of any ask
A holder says ask-taken when an ask starts, step-progress every minute while it runs (phase fetch, build or run) and
step-ended for an ask outside a pipeline, each on the seat's subject of its node (SayOn); the asker is the last token of
the subject the ask came on (Pulled.Subject).

Builds: design 47 G §496, §602, §603, §481

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:33:26 +01:00
jschoubben e6ae282b88 Finding 6: every module requires the mesh modules it builds with
The SDK, the assigner, the builder's buildrun, the indexer, the
pipeline, the watchman, mesh-enrolment and mesh-grants (and through the
SDK the checker's checkermsg and mesh-tools' node-tools) imported
packages of modules their go.mod did not require at the zero version;
the placement's go.work over the whole repository hid it, and a build
of the module alone with -mod=readonly refused it. Each now requires
them (beside a relative replace where the module keeps its siblings so),
and the indexer's and watchman's duplicated lines go.

Builds: design 47 G §427 (the group's check builds every importer); delivery review round 1, finding 6

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:21:14 +01:00
jschoubben 3e61b70517 SD5, BG11, BLD10: the build modules' shared code moves into the delivery SDK
All of mesh-build-go's buildstep Go module leaves mesh-catalog for
modules/mesh-delivery-sdk: the step run, fetch and release and the
regenerate-and-compare step as the package steprun, the CPU share as
steprun/buildcpu, the conformance kit as steprun/conformance, the seat
generator as seatgen with cmd/seatgen, and cmd/mesh-pack. The three
build modules and the builder's and checker's tests import the SDK and
keep no copy; the SDK requires nothing of mesh-catalog. Code the build
modules share is the delivery domain's SDK, not one module's package.
It carries the build-module round's two new files of that package
(dropdetected.go 247c422f, storedbuilds.go 904b8aed).

Builds: design 47 G §464, §680, §327, §420, §495

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:18:34 +01:00
jschoubben 71a35a6376 MV1: move contracts and sdk under modules/, importers follow
The delivery repository's contracts and SDK live under modules/ as
mesh-delivery-contracts and mesh-delivery-sdk, their Go module paths
renamed to match the folders (the TypeScript names already did), and
every importer in mesh-delivery, mesh-catalog, mesh-host, mesh-tools
and mesh-sdk follows in the same group: a design as it should be, one
path per module, checked by the group's check building every importer.

Builds: design 47 G §427, §88

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:09:56 +01:00