Commit Graph
1960 Commits
Author SHA1 Message Date
jschoubben 8597083493 AS6: the assigner says version-delivered and holds a dependent for its dependency's delivery
At its start it reads whole, from the first message, version-released, its own version-delivered and
the watchman's machine-away and machine-back (process.FromFirst), then hears them; it reads the
watchman's presence state no more, a machine being present unless said away. A module's newest
released version is said version-delivered once every present machine placing it on its release
branch runs healthy the want naming it, the machines away named, none when every one is away. A
dependent whose want changes fingerprint waits, by an edge of kind 2, 4 or 6, for its dependency's
newest released version on its branch not yet said delivered: wait-held step delivery, bound 60
minutes from the release, kept in the state delivery-waits, ended ran on the delivery or released
once assigner_release writes it.

Builds: design 47 G §376, §389, §498, §374, A-189, A-233, A-246

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:26:49 +01:00
jschoubben d5676ee4b3 AS12: the assigner keeps a run's candidate assignment graph, dropped on the run's group-ended
A run's candidate catalog-revision (meshcatalogclient's candidates hook) is read whole through the
catalog seat's revision verb; the assignment graph is computed from it in place of its branch's half
and kept apart from trunk's under candidate.<group>.<heads>, the group run-<id>. revision, entry and
difference serve it (a candidate against trunk). The runner's group-ended of the run drops it and
writes no want; the gate's heads-replaced drops nothing; its entries stay while it is kept.

Builds: design 47 G §189, §190, §186, §187, §359, A-201, A-235, A-160

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:14:45 +01:00
jschoubben 019a7ab9f7 A-233 (grants): a hearer of a seat's kept event is granted the ordered consumer of its whole read
As STREAM.INFO is, for every heard SEAT_ stream whatever its keep, so a part hearing an event kept by age
reads it whole from its first message at each start (mesh-sdk process.FromFirst); no manifest word.

Builds: design 47 G A-233, A-189

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:21:30 +01:00
jschoubben 121d6f24a9 Merge commit '5dec3dff' into feat/47-G-fix11-b2f 2026-11-12 06:16:03 +01:00
jschoubben d9dcb3ef36 Teller answers: the assigner follows the teller's views.answers, never its bucket
The assigner's read of mesh-delivery-teller_answers goes: its process reader
follows the teller's answers by their first view (teller_read_answers) and the
views family views.answers, and the pass watches that picture as it watched the
bucket, without gating the first pass on it.

Builds: design 47 G A-175, A-178

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:10:47 +01:00
jschoubben 298f26bb4c Merge commit '68c87cc3' into feat/47-G-fix11-b2c 2026-11-12 06:07:49 +01:00
jschoubben d9a9da921a RN12: the runner runs on request, its pipelines placed from the run's candidate revision
run writes each member's pipeline at once under the run's random id and its named branch and says
run-started; the candidate run-<id>'s catalog-revision, handed to the runner by meshcatalogclient's
candidates hook, is read whole through the revision verb and places each member's steps and a pipeline
of each entry the members change, saying pipeline-started once each.

Builds: design 47 G §64, §373, §420, A-160, A-180, A-185, A-193, A-199

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:07:38 +01:00
jschoubben 2e9bd2bd7b Merge branch 'feat/47-G-fix11-b3b' into feat/47-G-fix11-b2c
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go
#	modules/mesh-delivery-assigner/manifest_test.go
2026-11-12 06:06:43 +01:00
jschoubben 00cc0f8ff2 IX4: the indexer names the trunk main once
trunkLike takes TrunkBranch where it named the string again, so the first watched branch changes in one place.

Builds: design 47 G §7, A-93

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:04:27 +01:00
jschoubben d3e555e2f4 A-204: the assigner keeps the put waits it said in its state put-waits
A put that ends while the assigner is stopped now gets its wait-ended at the
next start: the said waits are read from the bus, not seeded from the puts
that wait now.

Builds: design 47 G §498, A-204, A-211

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:03:58 +01:00
jschoubben bbd872f519 AS21: the assigner follows the watched branches the gate's source and the registrations name, reads no gate bucket and names no branch
The assigner follows the catalog half through meshcatalogclient's branch follower (the registrations' branches, before the first
registrations those of the gate's verb `source` and its event `source-moved`, §507, §532): its trunk is the first watched branch,
never a fixed "main" (§7). It reads neither the gate's `source` nor `merges` (§431); the Approve of a release is no yes to a move
(the release lookup goes). The follower tells a part of each branch it adopts (Branches.Adopted).

Builds: design 47 G §507, §532, §431, §7

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:03:49 +01:00
jschoubben 56c45eb7d6 RN8: a newer commit or publish supersedes the older running pipeline, its asks dropped where they stand
A step keeps the node whose holder said ask-taken; a superseded step's drop is asked of that node's holder, an
untaken ask's of any holder, as kept calls; steps on mesh-builds and mesh-wants are only ended superseded. A
pipeline a publish started says that publish (published), so a newer publish of the package supersedes it.

Builds: design 47 G §31, §119, §350, A-182, A-202

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 06:01:44 +01:00
jschoubben f86ccc378c AS14 (a): an assignment entry held for want of a provider names the candidates
A requirement neither bound nor pinned points to the provider on the
consumer's node, else the only provider; otherwise the entry carries the
new field held (seat mesh-wants' AssignmentEntry, generated by seatgen),
naming each placed provider as a candidate, and nothing is guessed. The
named seat's holder and the contribution edge wait for their design line.

Builds: design 47 G §357; lead answer A-167

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:54:38 +01:00
jschoubben 9cd38f59ff A-181: the assigner reads the builder's build ends from their stream, kept last per subject, and reads no builder bucket
The builder's `build.ended` stream declares last-per-subject; the grants part composes it one message per subject and its readers read
whole; the assigner reads it whole at its start then follows it (consumes `build.ended.**`), so what was built and a failed build's error
survive its restart. world.built, buildNeeds, manifestOf and the put verbs read the ends; the manifest reads no builder bucket;
assigner_put's fingerprint-prefix form goes.

Builds: design 47 G A-181, A-162, §556, §703

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:53:02 +01:00
jschoubben 0f4a33ce48 TL5: the teller carries the assigner's asks only, follows the view's answers and says its own on views.answers
The merge-ask path goes whole with the Approve per merge: the reads of
mesh-delivery-gate.asks and mesh-delivery-view.answers, OnAsk, OnAskGone, the
gate branches of Answer and the room list, and the merge words. The teller
follows the view's answers through view_read_answers and views.answers, says
its state answers as views.answers from its state teller-marks, and serves the
read tool teller_read_answers. The room list stays for the assigner's asks
(the lead's answer). viewstate gains the names the view's own commit gives it
(the same hunk, so the two merge cleanly).

Builds: design 47 G §653, §431, §512; lead answers A-172, A-175, A-178

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:52:42 +01:00
jschoubben 00c888546a §498: the assigner says a put without hold as a wait, and assigner_puts answers since and bound
A put without hold whose want is written is said as wait-held on the seat
mesh-wants (step put, node, module, fingerprint, since, bound 30 minutes)
and wait-ended when it runs, is released or is put again, so the watchman
times it; a held put is no wait.

Builds: design 47 G §498; main file *A put without hold that stands*

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:51:26 +01:00
jschoubben 8f43d0ecdf AS23: build.ended says a failed end too; a hold under rule 1 says how the build stands
The builder's build.ended is said for a failed build as well (outcome, error whole);
the assigner's rule-1 hold reads "the build of M at F failed: <error>" from it and
"is being built" while none is heard. The assigner's reads of the builder's builds
bucket stay (see the report: a restarted assigner holds no ends heard).

Builds: design 47 G §575, §568, A-162 (survey AS23)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:43:15 +01:00
jschoubben 4b47e88369 RN25: runner_health reads the consumer facts mesh-sdk's ledger writes
The runner's own writer of its consumer's oldest unacknowledged delivery is
replaced by mesh-sdk's consumer ledger: each message the hub hands a handler is
noted delivered, and applied when the handler acknowledges or ends it; one it
asks again stays unacknowledged. The key form is the same, a key per consumer
by its name in the state consumers. A runner that heard no event yet is healthy.

Builds: design 47 G §76, §468, §495; lead answers A-166, A-176

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:42:33 +01:00
jschoubben cbfea2f961 AS22: the assigner reads a build's health from the node-engine's running alone
Rules 3, 4 and 5 (canary, healthy elsewhere, a hold's lift) and the outside-cause
judge read `running.healthy` (a running with none reads healthy, nothing heard
reads not healthy); no fallback to the have. Phase and failed-health reads of the
have stay where `running` says nothing of them.

Builds: design 47 G §520, §556 (survey AS22)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:42:25 +01:00
jschoubben 0178fc86a8 AS13: the assigner keeps the pins of its assignment graph revisions
A delivery record's pinned and freed reach the assigner on its durable
consumer, kept per revision in its old state pins by compare-and-set
before the event is acknowledged; a revision neither pinned nor current
is removed only while the consumer is caught up and after a pins-stated
said since the state was made, never on a timer and never by reading
the gate's state. assigner_pins reads it, assigner_unpin frees a lost
freed by hand, recorded in the hand-act log first.

Builds: design 47 G §153, §178, §179, §216, §579; A-169
Left of AS13: §181's filling, full and room.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:41:40 +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 9199bb20f4 RN14: the runner serves start and ask-again
start starts by hand the pipeline of a watched branch's head from the runner's
catalog half, refusing a head already started; ask-again asks a declined
approval once more under an ask of its own, its id following from when it was
asked again so the ask rebuilt for its warrant is the same. Each is recorded in
the hand-act log first; the process answers both beside review, rerun, accept
and cancel.

Builds: design 47 G §30, §39, §306, §36, §394

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:41:03 +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 8f09aa223b RN25: the runner's health check is its tool runner_health
The process writes, in its state consumers, when its durable consumer's oldest
unacknowledged message was delivered, at each delivery and acknowledgement; the
bundle's runner_health reads it and the pipelines state, and names a consumer
five minutes or more behind. The process resource's health is that tool.

Builds: design 47 G §76, §468, §495; lead answers A-164, A-166

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:37:55 +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 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 fc4ce1cd79 RN25: the runner's stores declare their caps, its sent store, tools named runner_
The pipelines state is capped at 256 MiB and kept at 128 MiB in the old state
section, the sent store sent-objects is declared at 256 MiB, and the first-view
tools carry the runner's tool prefix.

Builds: design 47 G §469, §85, §477, §533, §539

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:34:01 +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 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