Commit Graph
1945 Commits
Author SHA1 Message Date
jschoubben cdd1169bd4 RN3 (asking half): the runner places a pipeline's steps from the policy and asks each build seat for its step
A step the module's policy does not name is no step (A-91); a bypassed step is asked of no one; an artifact no
build seat names ends its step could not run naming it; an approval due at the start is asked there. The hearer is
named by the runner's own module, the asker the router's decided names.

Builds: design 47 G §22, §24, §26, §44, §54, §103, §323, §476, A-91

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:30:41 +01:00
jschoubben 088f55f94c BL5 (watched-branch half): a build carries the branch and source revision of its catalog revision, and only the first watched branch reserves
An entry the builder takes from the catalog half carries its origin: the watched branch, the source revision of the catalog revision it
came from and whether the branch is the first of the module's registration. A build of another branch reserves no version and is
built and delivered by its fingerprint; a reservation of the first branch keeps the branch and the source revision for the
publication.

Builds: design 47 G §371, A-57
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:28:11 +01:00
jschoubben 12e3f2dc48 BL17d: builder_build answers a module's build keys whole; builder_builds_since takes module; builder_stuck's fingerprint pinned whole
builder_build reads the builds and asked states, and the tools bundle follows the catalog half itself (registrations for the
watched branches, revision per branch) for `newest`; the manifest names the tool and the two seat verbs.

Builds: design 47 G §589, A-87
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:28:08 +01:00
jschoubben 5524cfa8d8 BL6: the builder follows the catalog half per watched branch through the shared branch follower
The builder adopts meshcatalogclient's branch follower on its views reader (A-5, A-15): the modules, their manifests (kept from the
entry that holds them, by its digest), their packages and each package's name in its ecosystem are read from the catalog half's
entries, never the indexer's modules, manifests, candidates and packages views; an entry of a branch other than the module's first
builds its fingerprint and supersedes only its own branch's older one; the start's sweep runs once every followed half's first view
is in; the builder's tools bundle reads package names through the same follower. A run's candidate is no input of the builder
(A-84): its read of the indexer's candidates view goes, and the entry point for a run's build ask is not built (no line gives the
ask's form). The seats' events the builder's own handler takes are named per seat so the follower's events have one taker.

Builds: design 47 G §348, §479, §614, A-5, A-15, A-84
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:27:01 +01:00
jschoubben 457b08ce15 Assigner: hears the builder's build log and writes a kept build's parts and keeping node into the want
The want names parts (by <module>:<artifact>) and kept-on from the build's end, only for a node whose engine states want-parts.

Builds: design 47 G §526, §379, §525, §671
2026-11-11 23:26:52 +01:00
jschoubben 56a6c64586 A-89: the runner asks its approval and reads the warrant from the router's record through the seat holder
Builds: design 47 G §37, §700, A-74, A-89 (routerRecordOf copied from the indexer's b0d2841f, to move into mesh-sdk)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:26:22 +01:00
jschoubben 7ee394b7d9 A-D10, A-D12, A-D13: the runner takes a step's end only as asked, keeps its results, and asks the approval step last, ended by its warrant
The hearer (internal/pipeline/steps.go) takes a build seat's step-ended only from the subject of the node that ran it, for an ask
the runner made of that seat, at the pipeline's commit and fingerprint; a taken end is written by compare-and-set, logged, its
output kept in step-outputs and its passing results in kept. A pipeline ends once every step ended, passed only when every
required step passed or was carried. The approval step is asked as operator-channel's accepted kind ask once every other required
step passed, and ended by the warrant read from the router's record (A-89), the decided event only waking the runner. The program
hears step-ended; the approval's Asker and decided handler wait for the answer on where a process finds the seat holder (A-74).

Builds: design 47 G §24, §26, §27, §37, §700 (A-89, A-74); recovers 18e10200 and 89687404 in today's form

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:25:28 +01:00
jschoubben 50cca4309f BL17c: the operator is asked once a key's event builds are spent; Build once more builds it as a person's build, Leave it nothing
The builder's asker on the seat operator-channel (level approve, about the key, state asked), the teller's three bus
adapters (publish, the router's record through the seat's holder on the seat list, decided heard through the hub's
events handler); the manifest uses the seat and consumes decided.

Builds: design 47 G §568, A-74
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:25:00 +01:00
jschoubben e27160571a indexer: go.mod requires the nodeengine seat directly, which its code imports
Builds: design 47 G A-86 (handover item 3: go mod tidy of the nodeengine require; tidy cannot run offline, the one line is made by hand)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:24:51 +01:00
jschoubben 31792235e6 indexer: the build-edges state for builds of another watched branch, pruned on registration-changed, outdated kind 1 against the branch's newest build
BuildEdges.fp is the entry's fingerprint in the branch's revision whose source the build names; the branch's newest build
is kept as heard in heard as branch-build.<module>.<branch>.

Builds: design 47 G §374, §375, A-83, A-80, A-85
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:24:41 +01:00
jschoubben a245c2f1e9 Contract: the seat mesh-wants' want names the node that keeps a kept build in kept-on
Builds: design 47 G §526, §379, §271
2026-11-11 23:23:30 +01:00
jschoubben 13550328a6 indexer: a catalog revision per watched branch, branch.<branch>.<n> beside trunk.<n>, and revision answering per branch
The first watched branch's revisions stay trunk.<n>; catalog-revision names its branch, escaped. Nothing yet takes a
non-first branch's source revision in (KeepBranchEntries has no caller).

Builds: design 47 G §291, §614, A-85
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:22:34 +01:00
jschoubben 2c8dff86b5 RN3 (take-in half): the runner starts one pipeline per entry of a take-in.taken, a second start writing nothing
Builds: design 47 G §44, §54, §103, §476 (recovers the start of d8dfc557 in the form the design has today)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:20:32 +01:00
jschoubben 64def921ea indexer: an input is also keyed by its run ask's id and deleted at the build seat's step-ended of that ask
KeepInput takes the ask's id. It has no caller yet: the indexer publishes no run ask for its validation in this tree.

Builds: design 47 G §354, A-78 d
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:19:29 +01:00
jschoubben 2339eb60b8 BL17b: a key failed on a transport fault is built again on the events that say its cause passed, counted in event-builds
Builds: design 47 G §568

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:19:08 +01:00
jschoubben bdc9a61524 indexer: the first fill's edge entries, marked filled, from the placement and the stream running read whole
VersionEdge gains filled (mesh-catalog seat contract, regenerated).

Builds: design 47 G §377, A-78 c, A-62, §556
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:17:28 +01:00
jschoubben 381b55ef53 BL17a: a key failed on a transport fault says it as 'transport fault: <class>, <seat> <node>, <cause>'; drops a committed binary
Builds: design 47 G §568, A-76

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:16:40 +01:00
jschoubben c6af94fe58 indexer: outdated for kinds 3, 5 and 6; the acts of wait-ended kept as heard
Builds: design 47 G A-78 a, b, A-80, §374, §375
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:13:38 +01:00
jschoubben 5b6175714b BL12 / G-16 §588: the builder publishes reserved versions again, on an event by stream sequence and by builder_publish_again
The reservation keeps the fingerprint of the catalog entry it was made from (versions.Source, A-76). The state sections
publish-queue (max-mib 4) and acted (max-mib 1); a consumer acting once per message of the node-engine seat's running and
manifest-reads-changed (why returned) by its stream sequence, the running of every subject read at the start with
lastPerSubject; one queue per holder sent one at a time as the registry seat's publish with the digest and no parts, the
seat and the package name read from the entry (A-73, A-76); builder_publish_queue and the new builder_publish_again, a
hand act. The old form goes: build.NewPublishAgain / ModePublishAgain, versions.Acts.PublishAgain and the
Again* decision, and the integration step that refused it.

Builds: design 47 G §588, §369, §695, A-73, A-76 (G-16, G-18, G-20)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:12:32 +01:00
jschoubben 260a16181c BL7: reserved by name from the catalog half's view, builder_versions calls it
The builder's tools bundle serves reserved given a package's name: it follows the catalog half's packages view itself, finds the
module from the name, answers the reserved version, or for a version no reservation holds asks the seat mesh-catalog's versions
and answers released with the release's digests; a name no entry carries, two entries carry, or a version neither reserved nor
released is answered error. builder_versions by name calls reserved through its invokes. The builder's process serves no call.

Builds: design 47 G §572, §582 (A-70)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:12:27 +01:00
jschoubben bec5e063bc indexer: what it heard (steps-since, call-since, toolchain, delivered, pending) lives in the state heard, each key part escaped
The own-build state keeps its one key.

Builds: design 47 G A-80, §73, §375
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:10:36 +01:00
jschoubben efcc8125af BL9: a group run's build names each package member's build by its digest
A candidate's module is fetched against each package member of its group by the digest of the member's build (fetch `builds`),
the member out of the fetched packages; a member not built holds it with wait-held naming the member, its bound a key of the
builder's bounds state with its own time to live (A-77), a failed member or one missing past the bound fails the step naming it.

Builds: design 47 G §373, §465 (A-77)
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:09:33 +01:00
jschoubben d9066aa1c6 indexer: the release's edge entries, outdated for kinds 1, 2 and 4, toolchain-agreed and version-delivered kept as heard, the verb input and its state
Kind 3, kinds 5 and 6, the first fill's edge entries (§377) and the deletion of an input at its ask's step-ended are not built.

Builds: design 47 G §374, §375, §354, A-68

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:07:45 +01:00
jschoubben 1a234ccea9 §484: the status view reads the oldest waiting ask in both forms of the accept subject
Builds: design 47 G §484, §600

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:06:11 +01:00
jschoubben ee30209040 §706 (grants part's unit case): the assigner is granted the conditions it reads and nothing of the watchman's findings
A module that invokes the seat mesh-conditions' verb conditions and consumes condition-raised, condition-changed and
condition-cleared is composed exactly those subjects, and no read of another module's findings.

Builds: design 47 G §706
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:05:15 +01:00
jschoubben 2992b08a11 §469 (GR, A-8 line of G): a bucket composed from an old state section takes its maximum size from its max-mib
The grants part's composer gains Bucket.MaxMiB and Bucket.MaxBytes() (as mesh-sdk's buscompose has them): the bucket's stream is
created with that cap and an assertion raises a held one to it; an entry naming none keeps the mesh's cap, so no bucket of today
changes.

Builds: design 47 G §469, §695
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:05:15 +01:00
jschoubben 626a824e65 indexer, mesh-catalog contract: an unwatch of a branch a placement names is refused as placed
The indexer asks the seat mesh-module-assigner's verb placement (input {module}, answer {placements: [{branch, nodes}]}, A-62)
before an unwatch is proposed and refuses one whose branch a placement names, with the reason placed (new in the seat
mesh-catalog's contract) naming the placement; its manifest invokes the verb.

Builds: design 47 G §704 (unwatch), A-62
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:04:51 +01:00
jschoubben 844a2443a5 Assigner: says wanted in the same write as each want, kept last per node and module
Each want the assigner writes (the rules' wants, a backup answer's, a put's) and each removing want is said `wanted` on
the subject of its node and module, each escaped as a name, with the revision and source of the kept assignment graph
revision; a removal carries the fingerprint last wanted. A put that wrote nothing says nothing; with no revision kept the
journal says wanted was not said.

Builds: design 47 G A-61 (§693, §683, §556), A-67

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:04:51 +01:00
jschoubben e9d2997760 indexer: the first fill of the versions from builder_versions, then versions-filled
Filled once, as released, with each module's highest published version; an unanswered builder_versions holds it and, after
five minutes, is call-unanswered. The edge entries of the first fill (§377) wait for answers.

Builds: design 47 G §372

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:04:14 +01:00
jschoubben 5d33692d7f Assigner: the pass keeps an assignment graph revision per catalog revision taken in, first
The pass computes the assignment graph revision (assigngraph.Compute) from the catalog halves it follows, the placements,
the first branch of each registration and each node's capability reading, keeps it in the objects assignment-revisions
through a bus adapter modelled on the indexer's, says assignment-revision, and holds the kept revision and its catalog
source for the wants.

Builds: design 47 G A-67, §292, G-5 "the wants follow the trunk's assignment graph"

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:04:14 +01:00
jschoubben 676d4bace4 indexer: the router's record of an ask is read through the seat operator-channel's state asks, under the indexer's own name
routerRecordUnread is replaced by routerRecordOf: operatorchannelclient's Record is a get of the key (<module>.<id>) on the
process's own bus connection (process.Conn.Ask), in the bucket formed from the seat's holder on the seat list (the seat
mesh-module-assigner's verb assignments with seats) and the contract's StateAsks, no module's name in the program. The manifest
uses operator-channel and invokes that verb.

Builds: design 47 G §700, A-74
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:04:04 +01:00
jschoubben 60b1479e8a A-71 (builder): toolchain-wait-minutes reaches the builder as a file the manifest declares, read at its start, never its environment
The manifest gains the file resource toolchain-wait (content ${config:toolchain-wait-minutes}) and names its path in
MESH_BUILDER_TOOLCHAIN_WAIT_FILE; main.go's toolchainWaitOf reads it.

Builds: design 47 G §672, A-71 (G-20)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:03:11 +01:00
jschoubben a2ac794e7a GR-chunks (A-60, §681): the chunk subjects of a chunks verb go to the principal that answers it, the reverse to an account naming it; the keeper's standing restore of restricted streams
The seat list's verbs saying `chunks: true` (ChunkVerbsOf, as KeptEventsOf) give the principal that answers the verb (a module's
own account for a seat it holds, the tool runner's for a carried module's) the publish of the chunk subjects and the
subscription to the acks, and an account naming the verb by name in `invokes` the reverse; a `*` entry none. The bus module's
keeper holds a standing grant of the restore subjects of the restricted streams, and only those.

Builds: design 47 G §681, A-45, A-60
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:03:05 +01:00
jschoubben e85432c9f6 indexer: hear package-published, release a version once every artifact is published, say version-released; the verb versions
The state versions (64 MiB), a late older version recorded and not said, the newest 100 kept per module and never the
highest of a MAJOR.MINOR; the artifacts published so far are kept as pending.<module>.<version> in the own-build state.

Builds: design 47 G §349, §369, A-69

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:02:12 +01:00
jschoubben 5bbd78ad66 JUDGE: the runner's manifest test reads step-log as an old logs section, the indexer's foundation test lists the node-engine's module
Builds: design 47 G §470, §627

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:00:47 +01:00
jschoubben 9f65ca98d3 GR9/GR10 (A-5, A-52, §684, §444, §614): the grants part follows the catalog half through the branch follower on a views reader, and composes a want's account from its entry
The part adopts meshcatalogclient's branch follower on a views.ProcessReader holding its held finding writer (so its
view-waits is the reader's); the manifest of the build a want or a have names is the catalog graph's entry of that
fingerprint, not a builder's build (the `builds` read is gone); until every first view of the catalog half is in, the pass
keeps the list in force and only adds, says so in its log and in grants_first_views.

Builds: design 47 G §684, §444, §614, §191, A-5, A-52
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:00:41 +01:00
jschoubben d2441d5fcc indexer: a wanted that says the want removed empties that member from named
A member a running put in a set leaves it also when the want of that node and module is removed (the node left or the module was
unplaced), whatever that node last said running; a running or a wanted older than the removal does not bring it back, so a
restart that reads the two streams in either order reaches the same sets.

Builds: design 47 G §675, §693
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:00:14 +01:00
jschoubben 86bae053b6 indexer: kept while named, the state named of the wants and running builds that name a fingerprint
The indexer consumes the seat mesh-wants' wanted (on wanted.<node>.<module>, kept last per subject: the seat's definition gains
the two tokens and the keep) and the node-engine seat's running, each read whole at its start and followed; it keeps in the
old state section named (max-mib 4) one key per fingerprint with its set of <node>.<module>, written by compare-and-set. An
entry object is removed only when no kept revision lists it and its set is empty, and not before both streams were read and the
sets reconciled; its entry-index key goes with it. indexer_entries reads the set, indexer_named_drop removes one member by
hand (class act, said in the hand-act log first).

Builds: design 47 G §675, §695, A-61
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:59:59 +01:00
jschoubben 5906cecf19 BL16 (integration bed): the test bed's build seat workers take both forms of an accept subject, and the stale ask is put as the builder's
Builds: design 47 G §600, §481
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:59:28 +01:00
jschoubben c2a3f3553f Assigner: serves the seat mesh-module-assigner's verb placement
Builds: design 47 G A-62 (§704, §402)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:59:03 +01:00
jschoubben 940889c2a2 indexer: the seed's steps fetch carries the entry's packages; the time a seat is unanswered is kept in the own-build state
Builds: design 47 G §704, A-66

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:58:21 +01:00
jschoubben 9493d0d289 Contract: the seat mesh-wants' wanted is said per node and module, kept last per subject
Builds: design 47 G A-61 (§693, §683, §556, §73)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:57:31 +01:00
jschoubben c0e2621bba indexer: the seed asks steps of each artifact's build seat from the newest trunk entry
The seat list's build seat per artifact (language or kind), a kept call
<seat>.steps with {module, artifact, fingerprint, fetch}, and the finding
call-unanswered (scope call, id <seat>.steps) after five minutes, cleared on an answer.

Builds: design 47 G §704

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:56:06 +01:00
jschoubben 6cec46cc77 Assigner: the outside wait's settings are read from the program's environment, and the bed has a keeper
Builds: design 47 G §706, §633

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:53:42 +01:00
jschoubben 0f62358fb0 indexer: the findings registration-history-filling past 80 % and seed-waits kept until the warrant
Builds: design 47 G §704 (registration-history, seed findings), §8

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:49:57 +01:00
jschoubben e089fd9c3c indexer, mesh-catalog contract: manifest-accepted carries problems, the validator's strings
Builds: design 47 G §692, §668

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:48:51 +01:00
jschoubben 00ec7af34e Assigner: serves the seat mesh-wants' verb input and reads the kept inputs
Builds: design 47 G §354, §338

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:48:43 +01:00
jschoubben aa34cd20dd indexer: entry-index and proposals declare their max-mib caps (8 and 4)
named is not declared: the section is not built yet.

Builds: design 47 G §695, §469

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:48:04 +01:00
jschoubben 661b735060 D-29 (builder half, waits): the builder's old state waits declares max-mib 4
publish-queue 4 and acted 1 come with BL12, which makes the sections.

Builds: design 47 G §695, §672
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:47:54 +01:00
jschoubben 6530702037 JUDGE (§469, §695): an old state section entry takes max-mib, bounded as the objects section's
The judge reads the field through mesh-sdk's catalogue (feat/47-G-maxmib6, 1dc848d7): rows in the G words test accept 128 and refuse 0 and 9000 (they fail without that sdk), and the unknown-field message test names max-mib in the state form. The whole judge package needs this sdk and the bus5 sdk (ab3e7a7) together: with either alone one test of the other's change fails.

Builds: design 47 G §469, §695

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:47:51 +01:00