Commit Graph
180 Commits
Author SHA1 Message Date
jschoubben 7c461a96ae Join 11: merge main (mesh-delivery #206): the checker's compositions cap and drop tool, the assigner's heard reads-changed
G's grants already carry a state's max-mib onto its bucket (Bucket.MaxBytes, §469); main's second copy of that cap in
BucketStreamConfig and Composed is dropped for G's, and main's tests (the declared cap row, the held bucket raised)
are kept. The checker keeps G's version 0.1 (§368) with main's compositions max-mib 256.

Builds: design 47 G §469, §368; A-277 (since mesh-delivery #206 the grants part carries max-mib)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:30:57 +01:00
jschoubben b83c546831 checker: compositions keeps ttl-seconds 259200 with max-mib 256; the texts say only what holds (issue 1975 note 6)
mesh/delivery merged: source.main moved to novox/mesh-delivery@983c46e2576c
mesh/delivery-group group fix/engine-reads-and-compositions merged: every member is merged
mesh/check checking b83c546831b0 on 983c46e2576c | novox/mesh-delivery#206 in group fix/engine-reads-and-compositions
Builds: issue 1975 note 6 (the lead's review round 1; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:00:33 +01:00
jschoubben a3306361ee checker: the state compositions is bounded at 256 MiB and a day, and a tool drops a check's kept requests
Builds: the lead's handover of 2026-11-12 (principle 7, principle 4; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:48:08 +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 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 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 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 bd20ba5b8f Checker: the build modules are the holders of the build seats on the seat list, never a name
The checker's fixed names of the build modules (buildmodules.go in its program, rules and check) go: the
Examiner finds each build module by the language its seat's acting rule builds (buildrun.BuildSeats over
the seat list's definitions and the holders the indexer's modules name by their manifests' claims), the facts
carry the language where a level counts by it, and the program's manifest reads the steps and toolchains of
the seats and hears their toolchain-reported. The tools read the steps of each holder and follow the seat
list as the view does. Timers stay (A-118).

Builds: design 47 G A-82, A-118, §204
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:31:24 +01:00
jschoubben 84bcdb687a BL18: build modules found through their build seats' holders on the seat list
The builder finds a build module as the indexer's seed does: the build seat whose acting rule
`build` has an `on` matching the artifact's language or kind:image, and that seat's holder, read
from the seat list's definitions and the claims of the catalog half's manifests. Task.Module, every
lane key, the unpublished modules, the toolchain sources, the ends watched, the sayer and
builder_stuck (through `<seat>.steps`) derive from it; the floor's sources are the holders of the
seats git and mesh-catalog. buildrun.GoBuildModule, NodeBuildModule, LanguageOf,
buildstep.BuildModuleOf use, build.ImageBuildModule and StuckBuildModules are gone from the builder
(the checker keeps its own names in two small files until its part reads them from the list).

Builds: design 47 G §7, §428, §704, §204, A-82
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 00:04:34 +01:00
jschoubben c8fb62c3ad Merge branch 'feat/47-G-findings4' into feat/47-G-dev4-join 2026-11-11 22:25:53 +01:00
jschoubben 08fcdac0f8 G findings4: each writer is given the seat's findings-asked subject from the generated contract
Builds: design 47 G §383, §390, A-13, A-17
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 21:59:17 +01:00
jschoubben 0fdf56f4bb G findings4: the readers' findings go through the part's writer as views.WireWriter; the pipeline runner adopts each branch's catalog view through its reader
Builds: design 47 G §689, §687, A-22, A-26
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 21:58:50 +01:00
jschoubben c87fc4e6cf G findings4 checker: the checker's check-could-not-run and its views reader's findings go through mesh-sdk's finding writer, which observes the raised ones
Builds: design 47 G §689, §686 (A-3), §639, §384, A-13
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 21:50:39 +01:00
jschoubben 33c6fc4f7f CT15 (take-in bodies, none-yet): the seat mesh-catalog's bodies give take-in.taken and take-in.pending; revision answers none-yet in a field
The seat's bodies hold TakeInTaken (branch, source, entries with repository and pull) and TakeInPending (branch); revision's
answer gains none-yet and its revision is optional; meshcatalogclient reads the field, never the error's words. The holders'
and readers' uses of the answer follow (a pointer revision).

Builds: design 47 G §476, §493, §530, §454, §648

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 21:32:40 +01:00
jschoubben f366225135 The checker reads the forge through the seat git's verb file, never a module's tool (milestone 47/G W6.14)
The forge read named the forge module's tools (gitea_get_file, and four more never
called), which ADR 0656 §1 and the operator's (d) forbid: whichever module holds the
seat git answers. An absent file is the seat's absent, an error its error, and a call
that reaches nobody stays not heard, so the check says it could not run.
The compare captures no test reads any more go with the commit trees read nothing called.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Builds: design 47 G §252, §312, §317
2026-11-11 14:50:02 +01:00
jschoubben fe025a3b73 A check that could not run is asked again on the node-engine seat's running of its part (milestone 47/G W6.9b, issue 1373)
The checker consumes node-engine.running (kept last per subject) through its durable
consumer and hands each running.<node>.<module> to PartRunning; a body naming no part
asks nothing and is said. Naming the not-heard part by its module (the seat git's holder,
a build seat's holder) waits on the catalog half's claims (W3.6): until then the part is
unnamed and the first running asks the check again.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Builds: design 47 G §253, §315
2026-11-11 14:49:20 +01:00
jschoubben 0b7cec27e8 A check that could not run says so, releases its claim and waits for its part to run (milestone 47/G W6.9, issue 1373)
A check that failed for a part of the mesh not heard was judged again at
every change of the nodes. It now says could not run, naming the part,
and is kept in the checker's own state could-not-run; only the running of
that part asks it again, once per heads and part at one fingerprint
(PartRunning). Not asked again within an hour it is the finding
check-could-not-run, which clears when the heads are checked again,
replaced, or their pull request closes. checker_status reads the state.
The node-engine seat's running event is wired once its definition lands.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ

Builds: design 47 G §253, §315
2026-11-11 14:49:02 +01:00
jschoubben ad6c793a2f CK10 (tags): the checker asks no group build through tagged versions
The checker built from G's heads makes no tag-wanted and waits on no published
of a tagged version: tagwanted.go and tags.go go (the verdict sayer stays, in
verdictsay.go), with st.tagged, groupVersions, Case.Tagged, TagAsks, the
PublishedHeard wiring, the group path's tagged Node package and Go packages,
the manifest's two published consumes and the tag-wanted event of asks.

Builds: design 47 G §528, §373, §321

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 14:04:15 +01:00
jschoubben c3068b15e1 CK1: the checker reads no merge turn of the gate and claims a new check at once
Builds: design 47 G §278, §197 (test 52)

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 12:10:49 +01:00
jschoubben 21195a06be CK2: the checker takes the trunk heads from the catalog half's revision and catalog-revision, not the gate's source (repairs the checker against the new contracts)
Builds: design 47 G §197, §195, §200

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 12:08:09 +01:00
jschoubben c09d0f9c6d D5: checker_ask_again takes a failed verdict whose failing steps all ended on a transport fault (ADR 0664, operator answer 5, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:03:28 +01:00
jschoubben cc1c0c5d94 D4b: the asker drops an ask it stops waiting for on the node that last ran it: given again past its bound, or a named cause (ADR 0664 §5, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:01:54 +01:00
jschoubben 173c49fc87 The compose ask carries its request gzip-packed; requests of another version are refused by name (issue 1966)
A large node's request is 1.2 MB, over the bus's 1 MiB message limit, so the compose ask failed once keeping no longer did.
The checker packs the request (a JSON string "gzip+base64:..." in the part's `any` request, no contract change) and
buildstep.ComposeJob.RequestBytes reads either form. A kept request of another version is refused naming it, and listing
no longer reads pieces. An older mesh-build-go refuses a packed ask loudly (it holds no request object): the check fails
naming it, so the catalog change is delivered with this one as a group.

Quick fix (chosen as the recovery): pack the request, ~290 KB for the largest node. Thorough fix (milestone G): the request
named by digest and served on a seat verb, as RunInput is.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
2026-11-09 16:41:56 +01:00
jschoubben 3f1d9cecba Checker keeps a composition request in pieces, each under the state's value limit (issue 1966)
mesh-host #219's check failed: the request kept for g14 was 300127 bytes compressed, over the 262144 the state takes.
The key of the check and node now holds a pointer (digest, size, pieces) and each piece of the gzip bytes is a value of
its own under pieces/<digest>/<i>, at most 128 KiB; checker_composition_requests follows the pointer and checks the digest.

Quick fix: a larger cap or a better compression: still a limit, met again as the mesh grows. Thorough fix (chosen, and
bounded only by the bucket): pieces. Not an object store: the checker is a foundation part, whose data stays in the old
sections (ADR 0619 §2), and the tool runner serves no old-section object read to its tools. No manifest change.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
2026-11-09 16:41:56 +01:00
jschoubben 0a82e33518 The checker's tools and the assigner's put ask the indexer's tools instead of reading its state (issue 1966, recovery)
mesh/delivery merged: source.main moved to novox/mesh-delivery@8f57df2d7757
mesh/check failed (3): mesh-build-go: the go.mod of novox/mesh-sdk at 396511b7a276, beside the change, cann…; and 2 more | 0a82e3351804 on 9c6bf236b6b1
The second instance of the kind: checker_status and checker_pull read the indexer's
candidates and modules from its bus state, which the checker's manifest does not
declare under reads, so the runtime refuses them ("keeps and reads no state
mesh-delivery-indexer.candidates"). They now ask indexer_read_candidates and
indexer_read_modules, the indexer's read tools the manifest already invokes: the
keys with no argument, one key's value with key (ADR 0596). The assigner's put
read its newest fingerprint from the same refused state and now asks the
indexer's first view of modules, as the seat verbs do. A sweep of every module
finds no other read of another module's state that its manifest does not declare;
the checker's tools carry a test that refuses one.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
2026-11-08 11:58:42 +01:00
jschoubben 2e9f23f348 Round 1: known by the module path alone, never a package inside it
mesh/delivery merged: source.main moved to novox/mesh-delivery@68581bed7e36
mesh/check failed: mesh-build-go: the change's manifests cannot be judged: the seat list is not read (the seat list is … | 2e9f23f34828 on 68581bed7e36
The review of 0f5c186b: counting each record's packages made 94 sub-package
paths, commands among them, known names, which design 32 forbids; the seven
names refused live are each their record's module (issue 1966).

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
2026-11-08 01:24:54 +01:00
jschoubben 0f5c186b9c The judge knows the Go packages the trunk holds a record of (issue 1966, recovery)
The indexer's judge refused manifests whose `packages` name a Go package that no
manifest declares as a package artifact: such a package has no series key, and
knownPackages took series keys only, though each module the trunk published has
a per-module record in the packages state naming its Go module and packages.
knownPackages (and the checker's PackageNames) now also count each record's
module and packages[].package; an unreadable state still judges no name.

Quick vs thorough: this is the quick fix, the smallest change that lets the
trunk's own records name what the manifests name. The thorough fix is that a
build module builds Go package artifacts, so every Go package gets a series
(the registry milestone); then the records stop being a source of names. Done
now because the 15 refused manifests hold the bootstrap of the registry delivery.
2026-11-08 01:14:52 +01:00
jschoubben 4735fc0b5f Merge main (#164, a check composes only after the change's own builds end) into the registry milestone
mesh/delivery merged: source.main moved to novox/mesh-delivery@8ad2bf6951d5
mesh/delivery-group group feat/registry-milestone merged: every member is merged
mesh/check checking 4735fc0b5fdb on 8ad2bf6951d5 | novox/mesh-delivery#151 in group feat/registry-milestone
Conflicts in the checker's judge.go, builds.go, composition_test.go and try_candidates.go:
the group's contract types and kept composition path stay, #164's behaviour is taken whole.
WaitsOnPreview reads the contracts' meshcatalogclient.NoneNoPreview instead of a copied
constant; awaitBuilds names its failures failedBuilds, beside the builds package.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 14:36:42 +01:00
jschoubben 3f9acf0223 A check composes only after the candidate's builds it waits on have ended (issue 1921)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: novox: not composed on novox: mesh-delivery-checker: frombus: mesh-delivery-checker is wanted at src… | 3f9acf022325 on b719dc0ecf27
The indexer writes a pull request's candidate first from its pull message alone, every module's
fingerprint "no merge preview is computed", and the fingerprints only with the preview, on the same
heads. A check that began on that first write kept its case: it waited on no build, said nothing,
and the engines, reading the previewed candidate, refused the module as not yet built (mesh-catalog
#624, mesh-delivery #163). Such a check now takes the previewed candidate before it judges the
manifests, waits on the builds and composes, as a whole try already does.

A build not ended within the build-wait-bound is named and the change is not composed, never an
engine's refusal of a fingerprint it has no done build of read as the change's.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 12:48:11 +01:00
jschoubben b965a96ab3 The checker's states test counts its eleventh state, compositions (issue 1921, milestone 47/G, the group check of c5d32074c945)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 08:09:32 +01:00
jschoubben 918d21b7da The checker keeps each composition request it sends a node, and a tool reads it (issue 1921, milestone 47/G, the lead's ruling after the group check of 8a80e8e86858)
mesh/delivery-group group feat/registry-milestone checking: 7 of 7 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 918d21b7dac5 on 6bc232eb78b9 | novox/mesh-delivery#151 in group feat/registry-milestone
The request sent to the composer is kept gzip-compressed in the state compositions (ttl 3 days) under the check's key and the node, and the tool checker_composition_requests reads one by check and node or lists a check's. A request that cannot be kept fails the node's composition, naming why.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 07:18:36 +01:00
jschoubben 5990468051 The checking program's seat answer is the judging view of a seat, with digests or without (issue 1921, milestone 47/G, the lead's ruling after the group check of 616c42434ac2)
mesh/delivery-group group feat/registry-milestone checking: 7 of 7 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check failed (4): unit: git.novox.be/novox/mesh-catalog/checks/gitignored.TestNoProgramABuildLeavesIsC…; and 3 more | 599046805156 on bab05c66b3cb
A group that changes mesh-vault's, node-launcher's or operator-channel's
definition would otherwise meet the step state's credential guard again; the
laid list goes only to the manifest validator and the composer, which read no
verb's or message's schema. The test digests the definitions whole, as the
reader holds them.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 04:39:57 +01:00
jschoubben ce70589c84 A checker that hands no seat digests gets the heads' definitions without their verbs' and messages' schemas (issue 1921, milestone 47/G, the group check of 616c42434ac2)
The build seat's step state keeps the checking program's answer and refuses a
value with a field named like a credential; schema property names such as
mesh-vault's verb input 'credentials' tripped it. Neither the manifest
validator nor the composer reads those schemas: the verdicts of the head's and
the trunk's validator are byte-identical over the group, and the answer is
99,784 bytes (was 171,088).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 04:36:37 +01:00
jschoubben 932e7ccf02 A checker that hands no seat digests gets the heads' definitions with only each seat's own description (issue 1921, milestone 47/G, review round 2)
mesh/delivery-group group feat/registry-milestone checking: 7 of 7 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check failed (3): ace: the check of novox/mesh-catalog#612 failed: the unit level: the candidate's mes…; and 2 more | 932e7ccf0255 on bab05c66b3cb
G's own check is made by the running B0 checker, which hands no digests, so the
program answers every head definition: 342 KB, over the 256 KiB a run's answer may
be. Without digests the descriptions of verbs, events and their schemas are left
out (171 KB for the group's heads); neither the manifest validator nor the composer
reads one, and the validator's verdicts over the group are the same either way.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 03:41:55 +01:00
jschoubben 112ca63f38 The checking program answers only the head seat definitions the reader does not hold as they are (issue 1921, milestone 47/G, review round 1 finding 3)
The whole heads' list is 342 KB for this group, over the 256 KiB a run's answer
may be. The checker hands the program its reader's seat-to-digest list (5.6 KB)
and lays the answer, the new or changed definitions, over its own list.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 03:17:56 +01:00
jschoubben df56af0765 Every check composes with the composer built at the node-engine member's head, else at its trunk, and a change's manifests carry the check's own judge's verdicts (issue 1921, milestone 47/G D12, D13)
The parked composition-at-running path is folded as the lead's ruling Q3: one
path, so no check composes with the running engines' own code (ADR 0656 §5).
The sandbox request no longer drops a change's manifest verdict: it carries the
check's judge's, or none, which the composer reads as accepted (ADR 0578 §3).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 03:00:35 +01:00
jschoubben 2159375873 Merge the trunk: B0's facts and checking program carry the registry's steps (issue 1921, milestone 47/G D3-D11)
B0's shape wins: the running checker asks and records facts, the checking program
decides. The registry's types win: the rules and the program read the generated
checker contract and the domain SDK, and no mesh-sdk delivery import is left.
The registry's series, renames and unparsed seat definitions become facts with
their refusals as rules; the tagged versions ride on the case. The program reads
the heads' seat definitions through sdk/seatdefs and the running checker lays them
over its reader's list by seat, reading no file of the heads: the reader's list
is larger than a run input's bound.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 02:57:21 +01:00
jschoubben 35b800aaef Format the checker's integration test as gofmt writes it, which the group check refused (issue 1921, B0)
mesh/delivery merged: source.main moved to novox/mesh-delivery@bab05c66b3cb
mesh/delivery-group group feat/b0-checking-program merged: every member is merged
mesh/check checking 35b800aaef68 on bab05c66b3cb
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-07 00:22:38 +01:00
jschoubben 9c9ed7a1d8 The checker serves a checking program's input on its seat's verb input, and the build module asks it (issue 1921, B0 review round 1)
mesh/delivery ready: it is merged on the Approve
mesh/delivery-group group feat/b0-checking-program checking: 3 of 3 member(s) ready
mesh/check checking 9c9ed7a1d8f1 on 2d201f781ced | novox/mesh-delivery#162 in group feat/b0-checking-program
The operator's answer: mesh-build-go reading the checker's state inputs broke ADR 0596 §2. The run ask's input now names
the verb seat:mesh-delivery-checker.input; the checker's tools serve it from the state inputs (Reader.Input, checked
against its digest), and the state is the checker's own again, read by no other module.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:39:39 +01:00
jschoubben 9290cdda4d The checking program judges the module graph's cycles from the edges the running checker gathers (issue 1921, B0 review round 1)
ADR 0656 §5 has every check judged by parts built from the change's heads, and no record keeps the cycle rule in the
running checker. The facts carry each ordering edge's two modules and kind, never manifests: the whole catalogue's
graph is 50 edges, 3195 bytes.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:28:20 +01:00
jschoubben b1d0c6881a The facts carry a level as the rules read it, and a seat list the program cannot make ends the check without a verdict asked (issue 1921, B0 review round 1)
A level's digest, unmet packages, kept packages' names and test packages are read by no rule: a mesh-catalog check
step's two levels were 78682 bytes as facts and are 4506. A build node with no job run held a check four begin bounds;
it now holds it two.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:24:18 +01:00
jschoubben fc921c13d0 checker_verdicts and checker_pull say which checking program judged a verdict, its build and the heads it read (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:07:06 +01:00
jschoubben 4dfb6af6ef The begin bound of a run ask is the checker's setting; a dropped run ask and a program that does not build fail the whole check naming the program (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:06:21 +01:00
jschoubben 625007cbc1 The checker's whole-module tests answer the checking program's run asks (issue 1921)
The fake build module of the integration tests answers a run ask with the checking program's
work over the input kept in the state inputs, as mesh-build-go does; the whole-module test
reads that the verdict names the program built at the group's mesh-delivery head, and the
keeps test reads inputs as readable.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:00:26 +01:00
jschoubben 63bbabacbf Every check is judged by the checking program built from its heads (issue 1921)
The running checker asks the checking program twice on the build seat's job run: first the
heads' seat list, which the manifest validator's requests (change and trunk) and the
node-engine composer's carry; then the verdict of the facts it gathered. The program is built
at the group's mesh-delivery head, else at mesh-delivery's trunk, and its input is kept in the
checker's new state inputs as the exact bytes of its digest, read with checker_inputs. A run
ask no build node begins within 5 minutes is put once more, then fails the check naming the
job; a program that does not build or answer fails the check naming it, and the verdict
records who judged it (JudgedBy). A second step-seen hook on a context is added to the
first, so a try still sees its steps.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:58:15 +01:00
jschoubben 35da943fb5 The checking program answers the seat list of the heads laid for it (issue 1921)
Asked -seats, it reads every seat definition the heads carry, resolves the parts it includes and answers the list
with what it left out and why, so the running checker hands the manifest validator and the composer a list it does not
read itself (ADR 0636 §4, ADR 0644 §1).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:35:40 +01:00
jschoubben e96f8fd1b6 The manifests, compiled-programs and composition rules judge facts in the checker's rules (issue 1921)
The running checker records the manifest validator's cases, each fetch's programs and the engines' answers as facts,
and the rules package judges them, with the notes it gives a reader, so the checking program judges every rule the
running checker judged. The module graph's cycle stays with the asking: its facts are whole manifests, over a run's
input bound; G's program reads them from the heads.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:31:22 +01:00
jschoubben 61aa338887 Add the checking program: it answers the verdict of a check's facts (issue 1921)
mesh-checking-program -verdict reads the facts from the file the build
seat's run step names, judges them with the rules package and answers
one versioned line; facts of a version it does not read are refused,
naming it, because the running checker of B0 runs G's programs
(milestone 47/B0, ADR 0644, ADR 0656).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:13:37 +01:00