Commit Graph
1205 Commits
Author SHA1 Message Date
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 f4ab7a2bc8 Name the file that gathers the module graph's edges (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:28:27 +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 06cb0cdd92 Merge the line, failure-words and package-cause tests into tables: the repository's unit count goes from 805 to 791 (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 23:08:49 +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 043e3fb979 Read seat definitions once: the indexer's reading becomes a module the checker requires (issue 1921)
The checking program's seat list parsed the definition format a second time beside the
indexer's judge. The indexer's reading moves whole into its own sibling module seatfiles
(a domain path, as takein), with ResolveRaw keeping every field as written for a request's
seats; the judge and the take-in read through it, and the checker's rules only find the
definitions and say why one is left out (the lead's ruling on D3, ADR 0634 §1).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:39:31 +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 1b9a2bc302 The running checker's asking records facts and returns no verdict (issue 1921)
Every asking function only records what it met; the one verdict is the rules' of the facts, so nothing in the
running checker judges beside the checking program.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:33:01 +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 cd201a79f1 Every failure the asking meets is a fact of the check, and the verdict is the rules' of the facts (issue 1921)
The running checker records each failure where it is met and the node of each step it reads; the verdict is
rules.Judge of those facts, so the checking program, given the same facts, gives the same verdict. Its own
second outcome and its node set are gone.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:20:42 +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
jschoubben 03bb56481a Move the level rules and the failure words into the checker's rules package (issue 1921)
The checking program judges a check from its facts (milestone 47/B0,
ADR 0644, ADR 0656): the rules package holds Facts v1, the level rule,
the failure words and the verdict's outcome, and the running checker
records each level answer as a fact and calls the rules. A row of the
every-failure tests judges the gathered facts and finds the running
checker's verdict.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 22:12:47 +01:00
jschoubben c3d47e4733 A composition at a node-engine head without its seat list fails (issue 1966)
When the checker's seat list is not read, or a head's definitions are not
taken, the composer at a node-engine member's head was handed no list,
judged no machine, and the composition passed with warnings. It now
fails, naming why (ADR 0635 §3), and no composer is asked. The check's
readers of the members' heads are its manifest validator and that
composer (ADR 0636 §4 insight 1). The composer's Request.Seats contract
says both the judge and the composer read the list, and a composer
handed none judges no machine (ADR 0636 §1).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 12:10:36 +01:00
jschoubben a92dc95f94 The check hands the composer at a node-engine head the seat list it judges against (issue 1966)
The group try of 2026-11-06 10:07 composed with a composer that had no
seat list, so its composition failed on all four machines for paths and
holders the seats define. The checker's one list per check (the
reader's, the members' heads' laid over it, ADR 0636 §4) now goes to the
judge and the sandbox composer alike; a list the reader has not read
goes to neither, and the composer then judges no machine (ADR 0636 §1).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 12:03:05 +01:00
jschoubben c7cfd7fa05 Merge mesh-delivery's trunk (the checker release #161) into the registry group
The group's beside.go and pins_test.go already carry #161's fixes in their
group form (siblings from each sibling's go.mod); try_test.go keeps #161's
case that echoes the end through Put, in the group's event types.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 11:05:20 +01:00
jschoubben 67127ce60d The checker takes a head's seat definitions as the indexer does, from one reading in the domain SDK, so an outside definer is never laid over the seat list (ADR 0636 §5, ADR 0634 §1-2; issue 1966)
The checker read any touched contracts module's definitions, skipped the
check that a definition names its own directory's seat, and copied the
indexer's tree reading. sdk/seatdefs now holds the reading and the rule of
which contracts module may define a seat; the indexer's keeping, its
revision seats and the checker's head seats all use it. Two heads defining
one seat fail the judging unless one hands it over to its domain's module.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:37:00 +01:00
jschoubben d58b717243 A try's end is said on a context its own stop does not cancel (issue 1921)
mesh/delivery merged: source.main moved to novox/mesh-delivery@2d201f781ced
mesh/check being carried to d58b71724312 on 2d201f781ced | from 205a3b37501f
The end a run writes comes back on the key's watch, where Put stops the run's context and leaves the saying to the run, so the end was never said and the indexer kept the try's candidate. The group try's unit test now echoes the end on the watch while the run says it.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:33:49 +01:00
jschoubben 29c525f48d A sibling's own siblings come from its go.mod's zero-version requirements, so no beside rule can lack one (issue 1921)
The third failure of the kind (tries 1, 3, 4): a sibling a test builds, the node-engine's composer, needs every repository it requires at the zero version beside it. besideFor now reads each sibling's root go.mod through the forge and places those repositories as any sibling is placed; the catalogue's rule names only what its tests read themselves.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:32:56 +01:00
jschoubben 66cf82e7b6 A catalogue change has every repository the node-engine's composer requires beside it (issue 1921, issue 1966)
mesh-build-go's composer test builds the node-engine's composer from what lies beside, with nothing fetched; with mesh-sdk
and the node-engine alone, its zero-version requirements on mesh-contracts (and mesh-delivery, mesh-networking) were looked
up on the network and the group's fourth try failed. The quick fix, chosen: the catalogue's beside rule names them. The
thorough fix, left: besideFor derives a built sibling's siblings from its go.mod's zero-version requirements.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:31:43 +01:00
jschoubben 289ba69da6 The builder's log keeps a failed build's error and step at its end, so builder_builds_since never hides why a build failed (issue 1921)
LogEnded copied the outcome, manifest, bases, artifacts and imports of the build's key but not its error or step, and the log entry had no field for them: a failed build read back as only "failed".

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:21:42 +01:00
jschoubben 52b7945c9e A try's end is said on a context its own stop does not cancel; the checker's test bed holds the streams its manifest declares (issue 1921)
The end a run writes comes back on the key's watch, where Put stops the run's context and leaves the saying to the run, so the end was never said and the indexer kept the try's candidate. And the bed's stream checks lacked try.**, so every whole try's say waited out ten retries (10 s each), which on a loaded check ran the test past its 20 s bound ("the held try's ask was never taken"). The bed now makes the streams from module.json, and the test reads both events on the stream.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:19:39 +01:00
jschoubben eb3aec2f92 A sibling's own siblings come from its go.mod's zero-version requirements, so no beside rule can lack one (issue 1921)
The third failure of the kind (tries 1, 3, 4): a sibling a test builds, the node-engine's composer, needs every repository it requires at the zero version beside it. besideFor now reads each sibling's root go.mod through the forge and places those repositories as any sibling is placed; the catalogue's rule names only what its tests read themselves.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:11:55 +01:00
jschoubben 9126cdff1f The check judges manifests with the members' heads' seat definitions over the list's, the trunk's manifest validator of a new indexer too (ADR 0636 §4, ADR 0633 §6; issue 1966)
The group try refused the registry group's indexer: the trunk's validator, given no definitions, judged it by its built-in list, which lacks mesh-catalog's seat-definitions and node-engine's manifest-reads. The checker now reads each touched contracts module's definitions at its member's head (the forge's commit trees and files, parts resolved) and lays them over the seat list's in the request.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:09:53 +01:00
jschoubben 2c38ee6145 A catalogue change has every repository the node-engine's composer requires beside it (issue 1921, issue 1966)
mesh-build-go's composer test builds the node-engine's composer from what lies beside, with nothing fetched; with mesh-sdk
and the node-engine alone, its zero-version requirements on mesh-contracts (and mesh-delivery, mesh-networking) were looked
up on the network and the group's fourth try failed. The quick fix, chosen: the catalogue's beside rule names them. The
thorough fix, left: besideFor derives a built sibling's siblings from its go.mod's zero-version requirements.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 10:00:04 +01:00
jschoubben 25d58a4595 A group's composer is built against the group's tagged versions once heard, as the check's other Go builds are (issue 1921, issue 1966)
ADR 0607 §3, §5 and design 51 *Tagged versions*: the composition is handed the check's heard tags
(CompositionReader.Compose's tagged), so the node-engine member's composer no longer takes the other members'
heads where a tag stands. The trunk's manifest validator stays without tags (ADR 0633 clause 6).

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 02:41:58 +01:00
jschoubben 6bd77f3d31 Merge the release fix/1921-zero-version-builds into the registry group: every producer of a build at a group's heads takes its versions from sdk/grouppackages (issue 1921, issue 1966)
grouppackages is the Delivery SDK's (ADR 0634) and imports sdk/buildstep and sdk/trunk, not the deleted mesh-sdk/go/delivery.
The checker's packagesFor lays the group's tagged versions (design 51) over grouppackages.Heads, so a heard tag still stands
before a member's head; the composer and the trunk's manifest validator are built with no tags. Fetches carry the versions
in buildstep.Fetch.Packages, so withPackages is gone; the group's fetch names no beside ref, so the test of the node-engine
member beside reads its commit alone.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 02:32:02 +01:00
jschoubben b1094a9265 The trunk's manifest validator is built without a group's heads; the package function's tests fold into existing ones (issue 1921)
mesh/delivery merged: source.main moved to novox/mesh-delivery@205a3b37501f
mesh/delivery-group group fix/1921-zero-version-builds merged: every member is merged
mesh/check checking b1094a926592 on 205a3b37501f | novox/mesh-delivery#160 in group fix/1921-zero-version-builds
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 01:51:23 +01:00
jschoubben 4907470e90 A group that holds the node-engine is judged with it beside at the member's head, not the running commit (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 01:44:57 +01:00
jschoubben 55fb32ba25 Every build at a group's heads names every member at its head, also one that publishes no package yet (issue 1921)
One shared function (sdk/grouppackages) for the check asks, the judge, the composer and a candidate's builds, so a producer cannot leave a member out.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 01:43:40 +01:00
jschoubben 2818edff60 Take tidy's go.mod whole: mesh requirements at the zero version only, unused ones dropped
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 00:52:18 +01:00
jschoubben ca61a8432c Complete go.mod and go.sum for the externals each module builds with
A check's tests run without network, so each module must carry every external module it builds with.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 00:51:22 +01:00
jschoubben a5a3f7e57a Merge main (#159: packagesOf names every other member at its head) into the registry milestone (issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-06 00:13:00 +01:00
jschoubben 49f5596781 Grants: the node-engine's records keep its consumes, so each node account hears the backup holder's word and settled
Dropped since the hear was removed (ADR 0625 §4); the golden user list and the grants case now hold the node user's subscriptions. The indexer's open-tries comment says it refuses an answer without the key.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:50:05 +01:00
jschoubben 261f8d54f7 Fold the unpublished-member test into the group member's pins test (test budget, issue 1921)
mesh/delivery merged: source.main moved to novox/mesh-delivery@cd01f1c196d8
mesh/delivery-group group fix/1921-zero-pins-own-packages merged: every member is merged
mesh/check being carried to 261f8d54f7ff on cd01f1c196d8 | from c0e5bc2834fe, mesh-catalog df8168f4843f
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:44:55 +01:00
jschoubben 643ec7cd91 A check names a group member that publishes no package yet at its head by its root module path (issue 1921)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:35:23 +01:00
jschoubben 723213c3f7 Merge origin/main into the registry branch: trunk's own build at start, empty open-tries answer, grants filters and heard consumers beside the Placement retirement
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:35:01 +01:00
jschoubben 70d1252e18 The end of the copy is marked in a state of its own, copies, read by assigner_read_copies; nothing is written to the retired state (ADR 0641 section 4, issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:15:17 +01:00
jschoubben c006f0b2bc The copy of the retired state ends with a marker: a crash mid-copy is completed at the next start, and nothing is copied after the marker (ADR 0641 section 4, issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:09:52 +01:00
jschoubben c34d6a13cd The assigner only copies the retired state, never deletes from it, and writes nothing over a filled assignments (ADR 0641 section 4, issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 23:08:40 +01:00
jschoubben 02b81b51c3 gofmt
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 22:22:57 +01:00
jschoubben 198dcdbe85 The checker leaves a try's candidate to its try: judged by both, the engines were asked twice (issue 1921)
The candidate of a try's group (try-<digits>) is judged by the Tryer; the candidates
watch also took it as a pull request's check. It failed at 432df759 already.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 22:22:57 +01:00
jschoubben d1acd6b231 The retired state is declared and left unannounced for the copy alone; the integration test copies it into the state made after the start (issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 22:17:40 +01:00
jschoubben 6f048a239c The grants part keeps the consumers a module has on another module's stream: created, and only ever gaining filters (issue 1921)
mesh/delivery merged: source.main moved to novox/mesh-delivery@c0e5bc2834fe
mesh/check being carried to 6f048a239ca3 on c0e5bc2834fe | from fab533dfd0cd
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 22:15:47 +01:00