Commit Graph
878 Commits
Author SHA1 Message Date
jschoubben 6c99075ab9 ENG-10 sdk: a routed image says the seat it came through and that seat's holder (design 51)
declaration.Container gains ImageSeat and ImageHolder, catalogue.Rendering SeatHolder, for the node-engine to retry a
failed pull on the holder's settled (A7's request R1).

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 11:52:09 +01:00
jschoubben 7d05a39c0c SD-M1: one reader of a seat's definition for every part (ADR 0608 §1, design 26)
The indexer keeps the definitions and the build modules generate from them; both read them through go/seatdef, which
refuses a missing or unknown field by name, a later format and a definition over 256 KiB.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 11:51:04 +01:00
jschoubben ba4220ad7d Say that the vault's reading of a plan follows a node's rule and is never it (issue 1966)
Comments only: AssignmentHands and Rendering.Assigned said a node composing itself hands by the vault's word, which
kept a node with no plan from ever making one.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
2026-11-04 11:33:44 +01:00
mesh-tools 5a38a12216 Merge pull request 'L3 final: what a manifest reads and needs, the reader-capability baseline, the node record's manifest-reads (ADR 0614, issue 774)' (#166) from feat/l3-final into main 2026-11-04 00:23:38 +00:00
jschoubben 85ba0a9a70 A node record states the reader capabilities its engine reads, a module value the ones its manifest needs, and a want of rule 9 or 10 reads (ADR 0614 §2, §4, issue 774)
mesh/delivery-group group feat/l3-final merged: every member is merged
mesh/delivery merged: source.main moved to novox/mesh-sdk@5a38a1221659
mesh/check pass 85ba0a9a70d8 on 52e564845e44 | unit 3760 run, 4992 kept, 56 skipped | integration 3841 run, 5103 kept, 59 skipped | over bound: unit, …
NodeRecord.ManifestReads (`manifest-reads`) and Module.Needs (`needs`) are additive at Version 1, read leniently by
every running part. checkRule takes 1 to 10 so a later release may number the verb wait and the capability hold;
nothing writes 9 or 10 in this one. kept_until_delivered.go stays: this release still builds beside mesh-host 798d73e,
and its head comment names the next mesh-sdk release as the one that removes it.

Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
2026-11-03 23:18:22 +01:00
jschoubben 73c8f15151 The contract says what a reader of manifests reads, what one manifest's own words, forms and seat names need, and the baseline an engine stating none is read as (ADR 0614 §4, issue 774)
A reader capability is a manifest word by its path of keys, a form (the config form, each reference form) or a seat
name of the contract's table. ManifestReads walks the decoder's fields; ManifestNeeds walks a manifest's raw JSON as
the lenient decoder does, naming only what the contract knows. The baseline is ManifestReads generated once from
mesh-sdk f02f142, the contract every running node-engine is built with: it lacks only tool-runner, core-credentials
and the bus-state words, as rows check.

Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
2026-11-03 23:16:58 +01:00
mesh-tools 52e564845e Merge pull request 'L3: the seat mesh-catalog's contract and a merged message with no trees; no graph code in mesh-sdk (ADR 0603, ADR 0604, issue 1367)' (#165) from feat/l3b-bus into main 2026-11-03 20:12:42 +00:00
jschoubben b7abe203a9 Keep, deprecated, the exported names the group removed while running parts use them: the checker builds the running node-engine's composer beside this mesh-sdk (ADR 0548 §6); the second group removes them once their users are delivered
mesh/delivery merged: source.main moved to novox/mesh-sdk@52e564845e44
mesh/delivery-group group feat/l3b-bus merged: every member is merged
mesh/check pass b7abe203a929 on 2341e8e98377 | unit 1186 run, 5555 kept, 27 skipped | integration 1205 run, 5717 kept, 35 skipped | over bound: unit (…
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
2026-11-03 18:42:08 +01:00
jschoubben cf5812101b The seat mesh-catalog's verbs' answers are its contract: CatalogModules, CatalogOne, CatalogProvides and CatalogDependents, with the field names of the catalog module's tools they replace; the module graph is no part of mesh-sdk (the operator, 2026-11-03: only contracts)
mesh/delivery-group group feat/l3b-bus checking: 4 of 4 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking cf5812101b0b on 2341e8e98377 | novox/mesh-sdk#165 in group feat/l3b-bus
2026-11-03 16:51:54 +01:00
jschoubben fdedf290d5 provisioner_retire_approve and provisioner_retire_reject name no removed controller verb either: they ask nobody, and the operator's answer on the operator channel is named in why and by (ADR 0570 §5, ADR 0604 §8) 2026-11-03 16:51:14 +01:00
jschoubben 6e2f08f96a provisioner_delete's description names no removed controller verb: it asks nobody, so the operator is asked on the operator channel first and named in why and by (ADR 0604 §8) 2026-11-03 16:51:14 +01:00
jschoubben 9ab75bab49 The seat mesh-catalog's contract: four verbs read from its holder's states, modules, module, provides and dependents, each optional while the module that claimed it before still stands (ADR 0604 §1, §6) 2026-11-03 16:51:14 +01:00
jschoubben 413dd13fe3 Accept a merged message with no trees, so a merge that leaves a repository with no module.json still reaches the indexer (issue 1126) 2026-11-03 16:41:06 +01:00
jschoubben 1b9475e15f FPSrc is 0 when a recompute with no merge moved the fingerprint: no release carries that build (ADR 0601 §1; review round 2) 2026-11-03 16:41:06 +01:00
jschoubben 493e69e883 A module value carries the source revision at which its fingerprint last changed, a have says what the node keeps as it runs for a manifest that does not yet say it, and a want names a release only beside the yes it gave (ADR 0601 §1, §4; review round 1) 2026-11-03 16:41:06 +01:00
jschoubben 636c2c1b0c A want names the release whose Approve answered its build's record ask, and a have waiting for a yes says whether the move changes the build alone (ADR 0601 §1) 2026-11-03 16:41:06 +01:00
jschoubben 439b77e07d A node the sandbox did not judge is a field of the contract: composer.Machine.NotJudged and the answer's verdict not-judged, so the checker decides by them and never by words (ADR 0593 §9; the prepare's seams finding on "not judged") 2026-11-03 16:41:06 +01:00
jschoubben 6655bdff50 The check that the catalogue package names no module reads the names from the catalogue's module directories alone, no list beside them (ADR 0601 §4) 2026-11-03 16:41:06 +01:00
jschoubben 189f28e4e1 mesh-sdk's catalogue package names no module: the tool runner says it is one (tool-runner), the foundation is what is computed, the kept streams are the judge's, and the ended controller's dependence check goes with it (issue 774, the operator 2026-11-03) 2026-11-03 16:41:06 +01:00
jschoubben f6e214533b mesh-sdk names no module: the core's credentials are what a manifest says (core-credentials), and the bus's upgrade policy is the one its manifest declares (issue 774, the operator 2026-11-03) 2026-11-03 16:41:06 +01:00
jschoubben b6cc9572f2 A manifest may say its own secrets are the core's credentials (core-credentials), so a reader asks the module rather than a list here (issue 774, the operator 2026-11-03) 2026-11-03 16:41:06 +01:00
jschoubben 4087280895 A manifest whose judge does not know a field has the verdict waits, held like a refusal by every reader (ADR 0578); in a modules value it is written as a refusal naming the fields, so a reader pinned before holds it too 2026-11-03 16:41:06 +01:00
mesh-tools 2341e8e983 Merge pull request 'Bus state by template: the typed requires entry, the binding and the calls package (issue 1966, B1)' (#164) from feat/bus-state into main 2026-11-03 15:24:27 +00:00
jschoubben f8bd12e4b7 Encode each part of an index key, so no two keys meet and every part is a bus token (issue 1966 S4)
mesh/delivery merged: source.main moved to novox/mesh-sdk@2341e8e98377
mesh/delivery-group group feat/bus-state merged: every member is merged
mesh/check pass f8bd12e4b7b1 on 7c015b652d36 | unit 6460 run, 262 kept, 27 skipped | integration 6639 run, 264 kept, 35 skipped | over bound: unit, in…
A raw value holding "." collided with a longer path, and a space is refused
by the bus: every byte outside [A-Za-z0-9_-] of a field value or an instance
path part is written =XX (review round 1 of issue 1966 B1).
2026-11-03 15:28:43 +01:00
jschoubben 15fc2c4ce4 An index's key and entry are one contract of the calls package (issue 1966 S4)
IndexKey and IndexEntry {instance, sequence}: the owner's watcher and the
tool runner's reindex write the same, so a reindex leaves the index as the
watcher keeps it (the lead's ruling on issue 1966 B1; ADR 0597 §4).
2026-11-03 15:12:38 +01:00
jschoubben 092260870b A ledger's binding carries its types (issue 1966 S3)
The grants part copies them from the manifest-accepted entry, so the tool
runner checks an operation against its type without reading another
part's state (ADR 0596; the lead's ruling on issue 1966 B1).
2026-11-03 15:12:19 +01:00
jschoubben cc64794d4c Name a ledger's history and snapshot subjects in one place (issue 1966 S3)
The grants part grants on them, the tool runner appends and snapshots on
them and the bus module creates the history over them, so the three read
one contract (the lead's ruling on issue 1966 B1; ADR 0597 §8, §9).
2026-11-03 15:11:59 +01:00
jschoubben 25c08d09ec Name the _meta key the tool runner hands a bundle the id of the tool call in flight under (issue 1966 S4)
MetaCall, mesh/call: the id ApplyRequest.Call names, so the runner stamps
the caller it proved as the operation's author (ADR 0597 §7; the lead's
ruling on issue 1966 B1).
2026-11-03 13:26:46 +01:00
jschoubben d3e10f68c5 A bus-state entry stays off Requires, which names provisions (issue 1966 S1)
A local name such as records is no provision: on Requires it would send
the placement looking for a provider nothing offers (the lead's ruling on
issue 1966 B1). BusState alone holds the typed entries.
2026-11-03 13:26:27 +01:00
jschoubben 6ec6cad968 A bus account kind ledger, named ledger.<node>.<module> and held in the tool runner's ledgers (issue 1966 S6)
ADR 0597 §9 and the lead's Q1 path: one ledger credential per module
assignment, minted by the vault like every kind; the grants part's copy
of buscompose gains the same kind alike (D5b).
2026-11-03 13:24:42 +01:00
jschoubben 2122ba52c0 The indexer's manifest-accepted event carries the manifest's bus-state entries whole (issue 1966 S5)
ADR 0595 §4, design 25 § 12.2: the bus module hears the accepted verdict
as an event with the entries, never reading the indexer's state; AcceptedOf
builds the body and EventID names it once per digest and judge.
2026-11-03 13:24:04 +01:00
jschoubben 510d983cc6 A calls package of its own for objects, streams, work queues and ledgers (issue 1966 S4)
ADR 0595 §9, ADR 0597 §10, design 25 § 12.5: the request and answer types
and method names of the bundle-pipe calls the tool runner serves, apply
naming the tool call it serves (ADR 0597 §7) and answering taken, its
sequence and state behind. It imports nothing of mesh-sdk, so a change
rebuilds only its importers; the package list names it.
2026-11-03 13:23:23 +01:00
jschoubben e9c319c5a0 A membership carries its module's bus-state bindings, by local name (issue 1966 S3)
ADR 0595 §1, §7: the binding travels on the bus module's created and the
grants part writes it into the membership; omitted when empty, so a
membership without bindings encodes byte for byte as before. The two
address tests are one table.
2026-11-03 13:21:24 +01:00
jschoubben 0bec849c40 Name the storage types, templates, options and ledger effects, and give a ledger its types (issue 1966 S2)
The words of design 25 § 12.1 and ADR 0597 §1-2 as constants, and a
ledger's types (schema, operations each with its effect, indexes) on the
bus-state entry, so the judge, the bus module and the tool runner read one
contract. No bound and no rule: those are the judge's (ADR 0578 §7).
2026-11-03 13:20:35 +01:00
jschoubben 779ad9ac10 A requires entry naming a storage type asks for bus state, read leniently beside the plain names (issue 1966 S1)
ADR 0595 §1: the typed long form {name, storage, template, options,
configuration} decodes into Manifest.BusState, its name also on Requires;
a key it does not know is set aside and named, never refused (ADR 0578 §3).
The requirements tests are one table.
2026-11-03 13:19:40 +01:00
mesh-tools 7c015b652d Merge pull request 'sdk1: mesh-sdk keeps only what every module shares (ADR 0593)' (#161) from feat/sdk1 into main 2026-11-02 20:41:38 +00:00
jschoubben f02f142af1 Tests put back the package state they set, so a loaded check machine trips no leaked bound
mesh/delivery merged: source.main moved to novox/mesh-sdk@7c015b652d36
mesh/delivery-group group feat/sdk1 merged: every member is merged
mesh/check failed: the composition: the composer at mesh-sdk f02f142af128b336c32a7f0059c5e1606bf9b1dc did not run: failed the composer git.novox.be/no…
The check of release sdk1 failed on TestStatePutWritesAKeyWhole: TestACallIsAskedAgainOnlyWhenItReachedNoOne
left busretry's Bound at 50 ms, and on a loaded machine the state test's first pause overran it. Second failure
of the kind "tests leave package-level state set".

Quick fix: restore busretry's waits in the one test and lengthen the state test's bound.
Thorough fix (chosen, the kind met twice): busretry.Waits sets the waits and returns their restore, used as
t.Cleanup(busretry.Waits(...)) by every test that sets them, each with a bound of seconds where it waits to
succeed; and servesAlone gives every test that serves its own runtime channel and Served, put back after it,
instead of tests clearing the channel an earlier one left. A scan of every test assignment to a package-level
variable found no other unrestored one.

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 20:10:58 +01:00
jschoubben 1c7356c247 catalogue: the composition's rules and refusals leave for the node-engine, so mesh-sdk renders no declaration and refuses no composition (ADR 0593 §7)
mesh/delivery-group group feat/sdk1 rejected: composed together: the checker's verdict at the members' heads (428d048dd50a): unit: git.novox.be/novox/mesh-sdk/…
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: unit: git.novox.be/novox/mesh-sdk/go/process.TestStatePutWritesAKeyWhole: a Put through a short blackout: 0, mesh-mail's state send…
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 19:19:25 +01:00
jschoubben f4bbcd7e5e delivery: a composition carries no signature, since the node applies only what it composes itself (ADR 0593 §6)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 19:02:33 +01:00
jschoubben 1c684743f7 Hold mesh-sdk to the packages it keeps, and refuse a fingerprint or composition computed in it (ADR 0593 §1)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:58:28 +01:00
jschoubben 43d499b0b3 Remove what nothing calls once the controller's repository is emptied: facts, the src1 computation, the recreation judge, and the build step's dead helpers (ADR 0593 §11)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:58:28 +01:00
jschoubben 155669e69c catalogue keeps only what a reader or the node-engine's composition uses; the judge's rules are the indexer's own (ADR 0578 §7, ADR 0593 §1)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:54:06 +01:00
jschoubben 3e5228af46 buildstep keeps only the build step's contract; the runner, the build share, the conformance kit and mesh-pack are the Go build module's package (ADR 0593 §1)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:51:24 +01:00
jschoubben b4ade2c502 delivery: the fingerprint's computation, the named tree, the package versions and the step runner leave mesh-sdk for the indexer and the builder, which alone compute them (ADR 0593 §1, §2)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:51:24 +01:00
jschoubben 018243a86c buscompose keeps only the bus's names and shapes; the composer of the user list is the grants part's own (ADR 0593 §1)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:48:13 +01:00
jschoubben 318b0dee69 Remove the composition from mesh-sdk: compose, its bus and runtime readers, takein, validate, the composer's run and command, overlay's generator and delivery's move judge now live in the node-engine, and the placement judge in the assigner (ADR 0593 §1, §6, §7)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:45:00 +01:00
jschoubben 52bd3d087c delivery, catalogue: compose-candidate takes input as a switch and answers unready for a node that cannot compose yet, so the checker decides by the verdict, never by words (ADR 0593 §7, §9)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:34:56 +01:00
jschoubben 029ba98527 pernode: the per-node state's rules over any connection, so the runtime and a process read compositions with one copy of them (ADR 0593 §6)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:29:40 +01:00
jschoubben bb59fd8fa3 delivery: a composition's digest leaves its plan out, as a have, a want and the apply name it by its resources (ADR 0593 §6)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:25:13 +01:00
jschoubben ba82dd64b1 delivery and catalogue import neither overlay nor buildcpu, so a change to the network generator or the build share code rebuilds only their own importers (ADR 0593 §1)
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
2026-11-02 18:25:11 +01:00