Commit Graph
3009 Commits
Author SHA1 Message Date
jschoubben e9cdf08841 Join 11: distribution's holder test is C3d's, which its holder code is
The merge of main's holder test (caller list from the config watch) over C3d's
(no caller list, REG2) left cases the merged holder does not answer; the
holder's code is C3d's, so its test is too, with the moved delivery paths.

Builds: design 47 G REG2 (C3d)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:55:34 +01:00
jschoubben 0be81ae036 Join 11: the merged heads compile where no area's fix is owed
The join's importers name the delivery repository's moved contracts and sdk
(MV1), node-tools' tests use mesh-sdk's gate, the duplicate node-engine claim
rule of the reader release gives way to G's, and the assigner names its first
watched branch, never a constant. The seat holders' AnswerSeat callers are
area 6's.

Builds: design 47 G join 11 (merge of fix round 11)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:41:44 +01:00
jschoubben 2dc2c7e431 Merge branch 'feat/47-G-fix11-c3d' into feat/47-G-join11
# Conflicts:
#	modules/distribution/go.mod
#	modules/distribution/internal/holder/holder_test.go
2026-11-12 10:26:55 +01:00
jschoubben 9e005317dd Merge branch 'feat/47-G-fix11-c3c' into feat/47-G-join11
# Conflicts:
#	modules/nats/cmd/nats-tools/keep.go
#	modules/nats/go.mod
2026-11-12 10:26:43 +01:00
jschoubben 4226204e57 Merge branch 'feat/47-G-fix11-b7' into feat/47-G-join11 2026-11-12 10:25:58 +01:00
jschoubben 546b674d14 Merge branch 'feat/47-G-fix11-c1c' into feat/47-G-join11 2026-11-12 10:25:58 +01:00
jschoubben 4caea7e624 Merge remote-tracking branch 'origin/main' into feat/47-G-join11
# Conflicts:
#	modules/distribution/internal/holder/holder_test.go
2026-11-12 10:25:58 +01:00
mesh-tools 6181d9afb3 Merge pull request 'The licence manager runs as its own account, so its own logs are issued to it and its carry-over can finish (issue 1409)' (#659) from fix/1409-own-runtime into main 2026-11-12 08:41:49 +00:00
jschoubben 333e3c21a5 C1c-2b: the three build modules keep a run's answer in an outputs store and serve the verb output
Each module's puller keeps an answer over what step-ended carries inline in the object store `outputs` its manifest requires
(template objects, 256 MiB) and its tools serve `<seat>.output` from it; the manifest claims the verb.

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

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:39:54 +01:00
jschoubben 8291502cbb C2: a key pair the manager cannot read is made anew in its place (issue 1409)
mesh/delivery merged: source.main moved to novox/mesh-catalog@6181d9afb3e5
mesh/check checking 8291502cbbaf on 6181d9afb3e5
Moved to its own account, the manager finds manager-key.json still owned by the tool runner's account, which the
node-engine does not hand over; it skipped making a pair because the file existed, and every verb answered the read
error. Now a pair it cannot read is replaced by a new one, renamed over it, and said in its journal; every use passes
the public key per ask, so nothing depends on the old pair.

Builds: design 39 bus-and-switch C2

Claude-Session: https://claude.ai/code/session_01NcbgfHb9d4T9nq5Q6WqdiJ
2026-11-12 09:38:03 +01:00
jschoubben 8d2497b65e C1: the licence manager runs as its own account, its service and its tools in its own runtime (issue 1409)
Run inside the machine's tool runner, the manager was issued none of its own logs and states, so the carry-over
failed live ("keeps no log called usage ... it was issued: none"). It now declares runs-as claude-licence-manager,
makes that account, owns what it places on its machine and its secrets, reaches the bus with its own broker secret,
and invokes a node's claude_code_grant, which the tool runner's account could ask and its own could not.

The whole tests play the manager's own runtime: they issue only the states, logs, asks and events its manifest
names, and fail on a manifest without runs-as; a unit test holds every ask in the code to the manifest's invokes.

Builds: design 39 bus-and-switch C1

Claude-Session: https://claude.ai/code/session_01NcbgfHb9d4T9nq5Q6WqdiJ
2026-11-12 09:25:57 +01:00
jschoubben 5b77eb18f8 B5g3-4: mesh-build-go takes a run's input of any size from the chunked verb input
Builds: design 47 G §712, §354, A-237, A-249

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:24:45 +01:00
jschoubben aa10f070f2 B7-2: record-opened carries a forge-made record's repository, pull request, commit and branch
OpenForgeMade is the fill; no path of the gate opens a forge-made record (design 47 G §151 ends the mark from G's delivery),
so the teller says none until one does.

Builds: design 47 G §170, §522, A-161, A-172
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:46:45 +01:00
jschoubben 9ee1cbe3f5 B7-1: recovery-merged names the branch the merge moved and the module of the record's catalog half
Builds: design 47 G §81, §522, A-161, A-172
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:46:13 +01:00
jschoubben b52dd7ca44 B7-3: the pinned event's catalog entries name their branch, the record keeps it
A catalog revision is pinned by its watched branch and its number (revisions are numbered per branch): PinnedRevision gains
branch, Pin and Free take it, the key names it so two branches' revision 9 are two pins, and pinsOf says {branch, revision}.
Also the C2 merge's sourcetools imports follow the contracts' new path.

Builds: design 47 G §579, A-171
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:45:53 +01:00
jschoubben bf60d6a8bb NATS3 (rest): the bus module plans from the catalog half of every watched branch, not from manifest-accepted
The keeper follows meshcatalogclient's branch follower and the seat list on its views reader, and plans again at each
move of a branch's view, the registrations or the seat list. Each local name is planned from the first of the module's
watched branches in its registration's order; another branch asking it with other settings is said drifted, naming
the branch. A module of the new form whose resolved seat definition has a verb or an event gets its sent store; one
including only parts, and a foundation part, none. A module in no watched branch's newest revision loses its plans
key, its entries orphans. The sum of the caps counts the old sections the entries declare. The manifest consumes the
catalog half's and the seat list's events and invokes their verbs; manifest-accepted and indexer_bus_state go.

Builds: design 47 G §344, §433, §532, §533, §537, §538, §547, §591

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:45:49 +01:00
jschoubben 584fc94baa BG2, BG3: the three build modules check the asker against the seat list and pull the named worker
The runtime source is *steprun.SeatAsks (named worker not bound is said through the module's journal); the callers follow
the seat list (steprun.SeatListCallers).

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

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:44:46 +01:00
jschoubben 11f49905a1 Merge branch 'feat/47-G-fix11-c2' into feat/47-G-fix11-b7 2026-11-12 05:43:07 +01:00
jschoubben 51df346a23 BG12, BLD16: the Go build module's finding names the module as the runtime does
compose.go no longer fixes its own name "mesh-build-go": the finding's module is MESH_MODULE.

Builds: design 47 G §7, §368, §583

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:34:39 +01:00
jschoubben c1008aeedf BG4, BN4, BI4: the three build modules' pullers say the seat's events
Builds: design 47 G §496, §602, §603

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:33:26 +01:00
jschoubben 8d73b5ba1b C3d REG2: distribution keeps no caller list; the build modules are the catalog half's claimants of node-build-* seats
The config `callers`, the tool registry_callers and its invokes, the caller-list code and the holder's per-verb
Allowed checks go. The windows' driver counts as build modules the modules claiming a `node-build-*` seat in the
catalog half, followed by the seat mesh-catalog's branch follower on the program's views reader (one shared events
hub); it wakes again when a build module's entry moves. The retention check of remove finds the artifact sweep's
holder through the seat mesh-module-assigner's holders (seatlist.HolderOf), not a name.

Builds: design 47 G §610, §7, §428, A-156, A-82
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:30:54 +01:00
jschoubben 48a9402ca0 Merge feat/47-G-fix11-c1: the build modules say steprun, the catalog's buildstep stays gone
Builds: design 47 G §464, §680

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:29:50 +01:00
jschoubben ee56d56922 BKP4-BKP6 live path: restic's item events over the bus with the night's own broker account; the wait for a restore ends when the bound's expiry cancels it
An integration test starts the night as the node does: its credential is read from where the manifest places it (the process
night's MESH_BROKER_FILE, the module's own-secrets broker), it says each item started and ended on the seat node-backup, gives
way to a restore that runs (items put off as keys of the state put-off, started again on the restored) and, past put-off-bound,
the bus's expiry writes backup-waits into the findings. It found that WaitRestored held a fetch of a minute after its context
ended, so an expiry ended the wait up to a minute late: it now consumes the restored events and ends on the context.

Builds: design 47 G §563, §561, §554, A-150, A-155

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:22:20 +01:00
jschoubben af0d58fc6f gofmt: the alignments the step runner's rename moved
Builds: design 47 G §464 (the rename buildstep. to steprun. in five files of the build modules)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:22:00 +01:00
jschoubben fea509d3f5 BKP6: the put-off wait for a restore is a bound key of restic's state put-off; its expiry raises backup-waits and ends the wait
The record backed-up reads is the key `<module>.<item>` of the module's own state put-off (key-ttl), bounded by the setting
put-off-bound (minutes, default 60); the bus removing it is heard as the expiry, which writes the finding backup-waits through
the held writer over the module's findings and ends the wait, so the night never holds its lock without a bound. The file
put-off.json and its writes are gone. The manifest requires put-off, findings and finding-events and hears findings-asked.

Builds: design 47 G §561, §563, §557, §302, A-155, A-77

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:18:38 +01:00
jschoubben ff6a8928d6 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 9fe3f41ac0 AM-K2: the forge module's gitea_branch_protection_loosen alone removes a trunk's protection or lets a force-push onto it
The tool is marked in the manifest's needs-approval, so each call runs on the operator's Approve; the manifest
uses operator-channel; set_full keeps refusing a force-push onto a trunk and names the new tool; both clients
gain deleteBranchProtection.

Builds: design 46 approval mark §21 (milestone G)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:17:44 +01:00
jschoubben 48ad5ce947 BG8, BN8, BI2: each artifact carries the version the ask names
A Go program is linked with -X main.meshVersion beside main.builtFor, a Node program's package.json version is set, an
image is labelled org.opencontainers.image.version; a build with no version stamps none.

Builds: design 47 G §458, §573

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:15:43 +01:00
jschoubben f339ea5936 BG5, BN5, BG6, BN6 (toolchain part): toolchain-reported on the seat's subject, with the toolchain program's digest
The guard's toolchains value carries the sha256 of the go or node program found on the path (read again when the version
changes); toolchain-reported is said on the build seat's subject of the node at start and on each change of version,
recipe or digest; a build's ToolchainUsed names the digest. The legacy toolchain.reported emit and its stream go: nobody
consumes them.

Builds: design 47 G §492, §472, §466 (lead answer A-152)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:14:21 +01:00
jschoubben 64669575c8 mesh-recovery: the four bound settings take a fractional minimum of 0.01, so a whole test sets seconds
A minimum of 1 refused the fractions A-138 allows; 0 stays refused, as the reader refuses it.

Builds: design 47 G §557, §551, A-138

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:12:20 +01:00
jschoubben e4ef67adcd 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 e723d498e7 NATS1, NATS6: the bus module's whole test makes the plans state and restores a state's objects store with it
Builds: design 47 G §58, §538

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:08:17 +01:00
jschoubben a5e8bcca8a BKP4 (recovery side): gofmt the recovery module after the rename
Builds: design 47 G §556
2026-11-12 05:07:58 +01:00
jschoubben 4f7c0ba534 BKP8: backed-up lists an item put off for a restore with the restore's act and since when
Builds: design 47 G §302, §563, §664
2026-11-12 05:07:04 +01:00
jschoubben 00be4c5063 GIT17: the forge module deletes seen keys past 30 days on each step-ended and at its start; git_seen_expire runs it now
Builds: design 47 G §581, §585, §487 (TypeScript tests not run here: no installed dependencies)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:06:03 +01:00
jschoubben d708998a53 BKP4, BKP5: the backup holder says each item's start and end and gives way to a restore of the recovery module
Builds: design 47 G §554, §556, §563, A-150
2026-11-12 05:05:54 +01:00
jschoubben 2d5358b8b9 AM-K1: the zsh module uses operator-channel for its marked execute
Builds: design 46 7-approval-mark §21 (milestone G approval mark)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:05:08 +01:00
jschoubben 741239a506 EE-K1: the Stop hook advises mesh_wait on a wait's event and a reread after every answer, or a watcher, with no condition on a grant
Builds: design 47 E §20

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:04:58 +01:00
jschoubben c235abcb11 mesh-recovery: the four bound settings take a minimum above 0, as the reader refuses 0
Builds: design 47 G §557, §561, §681 (catalog review finding)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:04:06 +01:00
jschoubben dcaa229c2b mesh-issues: mesh-recovery is an owner of issues
Builds: design 47 G recovery module (catalog review finding: the owners test of every code module)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:03:35 +01:00
jschoubben 0e3580895d mesh-conditions: ListBound is asked again on the bus module's created or a node-engine's running, not on a timer
Builds: design 47 G §515, §663

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:03:13 +01:00
jschoubben 8d6b7fbbc9 A-112: the bus module's snapshots-cap and snapshot-keep-days are config values in a settings file the keeper reads at its start
Builds: design 47 G §633, §681, lead answer A-112

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:02:13 +01:00
jschoubben f8160922c9 RTR4: the router keeps a refused ask as a closed record, the oldest removed past refused-kept
Builds: design 47 G §570
2026-11-12 05:01:57 +01:00
jschoubben 904b8aedd4 BG7, BN7: a fetch naming builds reads each package member from the artifact store
Each member's build is read at /v2/<module>/<artifact>/blobs/<digest> through the required provision artifact-store
(bound to a file), checked against its digest and laid as the package it names: a Go module zip replaced in the temporary
modfile, an npm tarball in node_modules. A mismatch or a store that does not answer fails the step naming the member.

Builds: design 47 G §465, §373, §466 (lead answer A-151)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:00:48 +01:00
jschoubben 6277067465 NATS6: the bus module keeps its plans and plans again only when a module's entries differ; nats_plans reads them
Builds: design 47 G §538

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 05:00:34 +01:00
jschoubben 177115d6cd RDR6: mesh-config and records hear the seat git's pull-merged and pull-closed and ask seat git's pull
Builds: design 47 G §654
2026-11-12 05:00:18 +01:00
jschoubben 78b12be752 NATS5: the bus module reads the bus's storage limits, refuses a plan whose caps pass the account's and shows the sum in list
Builds: design 47 G §547, §495, §661

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 04:59:19 +01:00
jschoubben f17001d920 KB3: the overview hears git.pull-merged and the runner's group-ended, not the gate's group and merged
Builds: design 47 G §431
2026-11-12 04:59:17 +01:00
jschoubben 24778d24b6 NATS8: the bus module's ask lasts its level's bound and a refused ask ends its request with the router's words
Builds: design 47 G §570

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 04:56:56 +01:00
jschoubben 247c422fbf BG9, BN9, BI3: the build seats' steps with drop writes the hand-act log first
A drop of a kept detected-steps key records the act with the caller the bus proved, then deletes the key; a log that
refuses deletes nothing and is answered error; a drop without why is refused; fetch is asked unless drop.

Builds: design 47 G §463, §480

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