Commit Graph
1959 Commits
Author SHA1 Message Date
jschoubben 2bb1b273fe Merge branch 'feat/47-G-fix11-b6b' into feat/47-G-join11 2026-11-12 10:28:34 +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 1e00430eef Merge remote-tracking branch 'origin/main' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-indexer/judge/rules.go
#	modules/mesh-delivery-indexer/judge/rules_test.go
2026-11-12 10:28:05 +01:00
jschoubben cfa02ea26e Join 11: refuse a committed program anywhere in the repository
A compiled program reached a commit a second time (the view's 18 MB program at
its module's root, which the command-folder pattern did not cover): the sdk's
nobinaries test refuses every tracked executable, as the catalogue's
checks/nobinaries does, and .gitignore covers a module's root.

Builds: design 47 G join (the kind's guard, fix-a-bug-met-twice)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:22:17 +01:00
mesh-tools bf36f84445 Merge pull request 'The second reader release: the validator judges G's new forms (design 47 G §621, §697, §508)' (#205) from fix/47-G-reader-release-2 into main 2026-11-12 08:41:41 +00:00
jschoubben edc8bbd9ab §7, §428 (watchman): a bus user is said by its module's name, the tool runner's no differently
signals.go BusUserWords: the node-tools special word is gone (the node-engine's node.<node> user stays, a bus account form, not a
module name). The watchman's ControlNodeModule (signals.go:591, nats) and builderModule (names.go:17) went with A-197 and WM13.

Builds: design 47 G §7, §428

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:59:49 +01:00
jschoubben 3eca094c5c A-197: the watchman reads no node-engine state: have and health go, running ends a want's pulse
Removed with the reads of node-engine.have and mesh-host.health: the findings module-unhealthy (module <module>.<node>, token
unhealthy, urgent after four hours), kept-as-it-runs (module <module>.<node>, token kept), apply-failing from a have that failed
(machine <node>; the provisioner clients' half stays), machine-network, network-rewritten, network-unreachable, machine-units,
relogin-needed, directory-used-as-found, node-account-fallback, and the urgency of a silent control node. A want's pulse now ends on
the node-engine's running event (consumes node-engine.running).

Builds: design 47 G A-197, A-192, §541

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:58:55 +01:00
jschoubben 161d6e6451 WM16: a record is covered only by what is late for the entries of its own revision
record-opened is joined to the take-in.taken of its milestone, <branch>.<source revision>, whose entries name the modules; the
record-open finding is left unwritten only while one of those modules is held by an acting-part-late wait (or a store says full),
no longer while any wait is late. A record whose revision is not known taken is covered by a standing take-in-waits.

Builds: design 47 G §502, A-200

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:56:33 +01:00
jschoubben 1abc5ae6d9 WM9, WM15: the manifest findings are the indexer's verdicts heard as events
manifest-refused raises manifest-refused; manifest-accepted, which carries problems, raises manifest-outgrown or clears it
and any refusal; the start seeds both from indexer_verdicts. The indexer's modules view (ModuleVerdict, views.modules,
indexer_read_modules) is no longer followed, and manifest-waits is no longer written (§500).

Builds: design 47 G §500, §196, §668

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:55:02 +01:00
jschoubben faec6b5333 WM13 (watchman half): the builder's builds are no longer read; a package wait is heard as wait-held
The watchman's read of mesh-delivery-builder.builds (Build in mirror.go, the bucket, its manifest reads) goes; it hears the
builder's wait-held and wait-ended on the builder's stream, naming a package as their part, and times them as an acting
part's wait. A toolchain wait (no part) is left to the builder's own finding. The node-engine's have and mesh-host.health
reads stay: no event carries a have's phase, kept data, node record or a node's health report (asked of the lead).

Builds: design 47 G A-192, §484, §496, §602, §548

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:53:23 +01:00
jschoubben 524fbb02ef WM13 (builder half): a key queued behind a package says wait-held and wait-ended in the one wait form
The builder says wait-held for a key queued behind a package, the package as its part and on (package:<ref>), on its
stream waits, and wait-ended published once the key is claimed; a toolchain wait never ends by that, and a package wait
never by a toolchain's end. Files: internal/build/waits.go (Package, On, WaitPublished), internal/build/run.go (Hold at
the queued result, End at the claim), cmd/mesh-delivery-builder/waits.go (Part in the body, the End rule).

Builds: design 47 G A-192, §499

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:52:10 +01:00
jschoubben 62de8d0bb8 WM4, WM5: the watchman hears the node-engine's wait-held and wait-ended
A hold of the composition standing past 30 minutes is delivery-waits (node, module, reason), a wait for a kept build
past 60 minutes is kept-build-waits; each clears on wait-ended. The node-engine's version is not yet named in them
(it needs the catalog entry of the fingerprint running.<node>.<node-engine's module> names).

Builds: design 47 G §499, §541, §271, §376

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:49:48 +01:00
jschoubben 464206d2de WM1 (step half): a head behind a pending revision of its branch raises no pipeline-stands
The watchman keeps the watched branch each open take-in wait names (take-in.pending's branch) and times a head only
while its branch has none; once the revision is taken in the head is timed again from its own move. The head on a
branch whose branch-unprotected stands (§497's second sentence) is not built: nothing the watchman hears says it
(the forge bridge writes that finding, no event).

Builds: design 47 G §12, §75, §497

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:48:30 +01:00
jschoubben d6c1e27259 Merge branch 'feat/47-G-fix11-b5b' into feat/47-G-fix11-b7 2026-11-12 05:43:07 +01:00
jschoubben 459c03933c TL1: the teller's integration bed grants and creates the state widens-said
Builds: design 47 G §335
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:41:38 +01:00
jschoubben 893f425c56 WM14: a put without hold that stands is the finding put-stands
A wait held with step put (no part) raises put-stands once its bound has run from its clock, and wait-ended ends it; a pipeline's
wait raises nothing for it. The seed from assigner_puts waits on that tool answering since and bound (assigner's, not built here).

Builds: design 47 G §498
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:39:03 +01:00
jschoubben 05b0385805 WM8: watchman_views answers the condition keeper's view-waits by part, node and view
Builds: design 47 G §83, §501, §609
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:38:23 +01:00
jschoubben cce99f2802 IX17: the pinned event's catalog entries name their branch
Pins.catalog is a list of {branch, revision} in the mesh-delivery seat's definition (revisions are numbered per watched branch),
the Go and TypeScript contracts regenerated, the fixtures follow.

Builds: design 47 G §579, A-169, A-171
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:38:16 +01:00
jschoubben 7ba95ac07f TL2, TL3: the teller tells a recovery and a merge made at the forge on every channel
recovery-merged gains module and branch, and a forge-made record-opened gains repository, pull, commit and branch (seat
definition, generated Go and TypeScript, fixtures); the teller hears both events and tells them through operator-channel's notify
with every-channel, in the operator's words of §522.

Builds: design 47 G §81, §82, §170, §514, §522 (lead answer A-161)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:36:47 +01:00
jschoubben 820f7c2351 IX31: the indexer follows the seat mesh-module-assigner's assignments through its holder, no assigner module named
The holder is asked through mesh-sdk's seatlist.HolderOf, its first view and views family followed as the builder's and the
checker's are; the module consumes the seat's views.assignments and invokes the seat's verb assignments alone.

Builds: design 47 G §7, §428, §556, A-119, A-126, A-131
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:35:57 +01:00
jschoubben a489c738b3 TL1: the teller tells a pipeline's widening on every channel, once per commit
The teller hears pipeline-ended, tells each end that carries widens through the seat operator-channel's notify with every-channel,
one line per entry, and keeps the last commit said per module and watched branch in its state widens-said (read by
teller_widens_said); registration-changed drops the branches no longer watched.

Builds: design 47 G §71, §335, §514, §522
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:34:43 +01:00
jschoubben 9a28de8ab0 CK9: the checker follows the seat list through mesh-sdk's seatlist.Part, its own seatlist.go goes
Builds: design 47 G §204, §264, §320

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:30:45 +01:00
jschoubben b4155cc5a2 gofmt: the six files the delivery review named, and three import blocks
The assigner's asks.go, tools.go, seat_tools_test.go and assign/wants.go,
the builder's builds.go and the indexer's candidate_values.go, and the
import blocks of three tests the step runner's move reordered.

Builds: delivery review round 1, the gofmt finding

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:21:48 +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
jschoubben 7f53665beb Builder: a by-hand build answers an ask as asked once it is put, not once noted
mesh/delivery merged: source.main moved to novox/mesh-delivery@bf36f8444562
mesh/delivery-group group fix/47-G-reader-release-2 merged: every member is merged
mesh/check checking 7f53665bebb5 on bf36f8444562 | novox/mesh-delivery#205 in group fix/47-G-reader-release-2
builder_build_again's answer (BuildAgainResult.Asks: "the ask ids put") was settled when the ask's id was
noted in the key, before its put: the answer could come back naming an ask not yet on its stream (the check's
flake in TestAnAskTheKeyNamesAndNobodyPutIsPutAtStart, "after 0 asks", about 4 runs in 100 under load), and a
put the stream refused after the note was answered as asked, the key's failure unsaid. The watch is now told
after the put; a refused put ends the look and the answer says the key's failure.

Builds: lead answer A-148 (hq G-20, 3ce1dcf: the fix rides the release), issue 1126 note 72 (builder_build_again answers the asks put), ADR 0668 §1 (the note and the put are one act)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 04:00:03 +01:00
jschoubben b57281f5a4 RD-3: the validator accepts a foundation part's own findings stream
mesh/delivery closed: a newer head of the same pull request
mesh/delivery-group group fix/47-G-reader-release-2 rejected: composed together: the checker's verdict at the members' heads (12ff6ae3438d): integration: mesh-…
mesh/check failed: integration: mesh-delivery-builder/internal/build.TestAnAskTheKeyNamesAndNobodyPutIsPutAtStart: buil… | b57281f5a406 on 2f1b60f2a231
A foundation part keeps its old sections for good, its findings stream
among them; the trunk refused the new indexer manifest's
mesh-delivery-indexer-findings as outside the predefined forms.

Builds: design 47 G §529, A-30, A-146 (hq 618ad2b7)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 03:12:46 +01:00
jschoubben cf2db47e57 RD-2: the validator accepts one module claiming the seat node-engine
G's node-engine claims its seat as one module; the trunk refused every
claim of a seat the engine holds. One claim is accepted, a second refused
naming both.

Builds: design 47 G §508, §494, §621

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 03:11:42 +01:00
jschoubben 4d1e4e6e6e RD-1: the validator reads a seat-named view in consumes
seat:<seat>.views.<state> is accepted where the seat's definition offers the
state as a view, and refused naming it where it does not or the seat is
unknown; the trunk called the seat: prefix no usable name.

Builds: design 47 G §621, §616, §699

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 03:10:46 +01:00
jschoubben f39572c878 RD-0: the judge's state rule names max-mib among a state's words
mesh-sdk's reader release reads max-mib on an old state section and names
it in its refusal of an unknown word; the judge's row reads that refusal.

Builds: design 47 G §494, §469

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 03:10:46 +01:00
jschoubben 512bb3c75c Join 10: the assigner reads its outside-wait settings from the files its manifest declares
The validator refused the manifest: a process's env is not filled from config. As A-112 says, a process reads each
setting from a file with the content ${config:<key>}, read at its start (the builder's form); a missing or empty file is
the default, a content that is no positive whole number stops the start, naming the file.

Builds: design 47 G §633, §706, A-112

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:50:38 +01:00
jschoubben 9b3cc53db9 Join 10: the validator takes a seat's accepted kind on a stream in invokes at parse, as its seat rule does
The per-manifest invokes rule refused seat:<seat>.<stream>.<kind> (the pipeline's seat:node-build-go.check.step) before
the seat rule that accepts it was reached; the test now runs both rules on each row.

Builds: design 47 G A-102

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:49:04 +01:00
jschoubben 6563094d20 Merge branch 'feat/47-G-fix10-flake' into feat/47-G-join10 2026-11-12 02:39:12 +01:00
jschoubben 21540afaac Merge branch 'feat/47-G-fix10-validator' into feat/47-G-join10 2026-11-12 02:39:12 +01:00
jschoubben b5074699da Fix 10: the catalog client imports no other seat: the key codec and the source-branches follower move into mesh-delivery's sdk
Builds: design 47 G §614, §670 (ADR 0625 §4; lead answer A-144)
2026-11-12 02:26:55 +01:00
jschoubben fd3788c517 Fix 10: the indexer's source catch-up and trunk directories are answered in name order, not a map's
Kind: an order asserted or acted on that came from ranging a map.
Builds: design 47 G §15, §115, §362
2026-11-12 02:21:03 +01:00
jschoubben 5f3410cd24 Fix 10: the node-build-image acting-rule test lives beside the other hand-written tests; the pipeline's go.mod drops an unused require
Item 3: seatgen -check no longer names go/seats/nodebuildimage/acts_test.go (not written by the generator); the
test moves to the domain SDK's buildstep, which already reads the build seats' definitions. mesh-delivery-pipeline
no longer imports meshmoduleassigner.

Builds: design 47 G §324, §397

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:19:06 +01:00
jschoubben e6f91ed349 Watchman: time a build seat's ask from its step-progress, not from the holders' steps (fix 10, A-136)
Builds: design 47 G §483, §496, §602, A-136
2026-11-12 02:18:50 +01:00
jschoubben 91b1719af9 Fix 10: the validator accepts a consumed view of a seat and an invoke of a seat's accepted kind
Items 1 and 2 of the round: a consumes seat:<seat>.views.<state> is accepted where the seat offers the state as a view,
an invokes seat:<seat>.<kind> or seat:<seat>.<stream>.<kind> where the seat accepts it.

Builds: design 47 G §616, §699, A-102, A-131

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:17:45 +01:00
jschoubben ac153497f6 Join 9: the builder reads the build seats' steps in seat form, at the seat's holder (A-116, A-128)
module.json reads seat:node-build-<language>.steps as the checker and the watchman do; the
tools bundle reads <holder>.steps, the holder found by seatlist.HolderOf where it is read.

Builds: design 47 G A-116, A-126, A-128

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:06:19 +01:00
jschoubben bce3c96acb Join 9: the indexer, teller and pipeline name no seat list verb in their operatorask contract (A-126)
operatorask finds the holder through seatlist.HolderOf, so Contract.Lists and ListBody are gone.

Builds: design 47 G A-126

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:51:54 +01:00
jschoubben 4ed1f4c451 Merge branch 'feat/47-G-fix9-routeproxy' into feat/47-G-join9 2026-11-12 01:46:51 +01:00
jschoubben fed8acb376 Merge branch 'feat/47-G-fix9-catalog' into feat/47-G-join9 2026-11-12 01:46:51 +01:00
jschoubben f684304ca1 Merge branch 'feat/47-G-fix9-grants' into feat/47-G-join9 2026-11-12 01:46:51 +01:00
jschoubben 0655c45a27 Merge branch 'feat/47-G-fix9-serves' into feat/47-G-join9 2026-11-12 01:46:51 +01:00
jschoubben 529729f21b Merge branch 'feat/47-G-fix9-delivery' into feat/47-G-join9
The view's holderOf keeps the seatlist.HolderOf form of builder2 (A-126) over fix9-delivery's own assignments read.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:46:51 +01:00
jschoubben 7428711d94 fix9-10: TestTheGrantsPartWhole: one reader of the part's durable on the stream running, and an ack settled before a consumer is read
The loop opening the part's own membership's streams bound the part's durable on SEAT_node-engine_running beside hearRunning, so the event running went to either reader and the state running stayed empty at random (about 1 run in 15 under load). The loop now leaves that stream to hearRunning. The subtest that compares a consumer's ack floor before and after acked asynchronously and failed 1 run in 30; it now waits for the ack's reply. The failure of an until in the whole-part test also names what the part said of running.

Builds: design 47 G §556, A-19

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:40:25 +01:00
jschoubben 6d9a7b8aae Checker follows the assignments of the holder of the seat mesh-module-assigner found at run time; FollowAssignments, AssignerModule and AssignmentsBucket go
buildrun gains AssignerHolder, AssignmentsOf and SleepFor (moved from the builder's program, which uses them), so
the builder and the checker follow the holder's first-view tool, views family and state alike; the checker's
manifest consumes the seat's views assignments and reads its assignments state, its composition reads the
picture once followed. The assigner's callers list for the first view gains the checker.

Builds: design 47 G A-82, A-119, A-126, A-131
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:38:34 +01:00
jschoubben 9a3af4a44b buildstep: BuildModuleOf goes, a build module is the holder of its build seat on the seat list
No caller is left (the checker, the watchman and the view find the holders; the builder's reader looks a step up by its seat).

Builds: design 47 G A-82
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:38:34 +01:00