Commit Graph
144 Commits
Author SHA1 Message Date
jschoubben c65628de23 K1b (format): a verb may say by-caller
Builds: design 47 G §554, §621, §656

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 20:25:41 +01:00
jschoubben f4d0d58619 K14 (owner forms): a finding's owner and waiting-on are one of three forms
owner and waiting-on carry the pattern of the three forms (session who@node, a seat's name, forge:<account>) in the layout
and the state value, and the fixtures read two forms. mesh-sdk's writer is what refuses another. Generated code waits for K21.

Builds: design 47 G §678, §540, §451

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 20:24:46 +01:00
jschoubben a090a447d3 K16 (notify every channel): notify may ask a message sent on every channel
operator-channel's notify takes every-channel, which the router sends on every channel's send, as a break-glass
act is announced; the teller tells widens, recovery-merged and forge-made through it. A fixture reads the input.
Generated code waits for K21.

Builds: design 47 G §514

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:56:39 +01:00
jschoubben b3526b762c K13 (stated kinds): a findings statement names the kinds it states
FindingsStated gains kinds, the finding kinds the stating bundle owns; a statement deletes only keys of those kinds
and one with none covers every kind, as before. A body of bodies yields its type alone, so no fixture reads it here:
mesh-sdk's writer is what reads and tests it. Generated code waits for K21.

Builds: design 47 G §580

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:55:58 +01:00
jschoubben 24d58f0786 K10 (backup items): node-backup says when each item starts and ends
The seat gains item-started and item-ended on <event>.<node>.<module>.<item>, kept last per subject for 7 days,
each with at, and item-ended with outcome (done, failed or put-off), the restore's act it gave way to and an
error, so the recovery module and the backup holder each read the other's start and never overlap. The seat is
of the seat-list grain: nothing is generated and its fixtures are not read, so mesh-sdk's definition reader and
its bootstrapped copy of this file are what read it.

Builds: design 47 G §554, §555, §563, §523

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:54:17 +01:00
jschoubben 5e8dce621b K3 (running healthy): running says the health of the build that runs
The node-engine seat's Running gains healthy, a nullable boolean so that a false survives the wire and a running
said by a node-engine of before G, with none, is told apart and reads as healthy; stopped is said only when the
have no longer holds the module. Two fixtures read healthy true and false; the one without it still decodes.
Generated code waits for K21.

Builds: design 47 G §520

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:51:53 +01:00
jschoubben 3ccc3cc3cb K2 (node-engine verbs): the seat is claimed as one module, and its first views are seat verbs
The definition drops held-by-the-engine, so one module's claim of the seat is read as any other. It gains
first-views (read; any person and the healers) and first-view-again (act; the operator and the healers), not
optional, their inputs and answers those of the view's two tools mesh-sdk's runtime serves; a fixture reads
first-view-again's input. Generated code waits for K21.

Builds: design 47 G §508, §422, §204, §400

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:50:06 +01:00
jschoubben 37a906ed4e K1 (format): an accepted kind names its stream, and a verb naming no class is a read
The format's accepted kind gains stream (check or delivery), so the build seats' step on both streams and run on
check validate against it; the class description says a verb that names no class takes read, on main or added in
G, and that nothing refuses it.

Builds: design 47 G §455, §456

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 15:47:44 +01:00
jschoubben 2f680c661e Take out C7: node-backup's aside, discard-aside, ended and restored, and the kept, form and fingerprint arguments
G section 555: the seat node-backup gains nothing for kept data on the bus; its now and restore keep the class act (§405).

Builds: design 47 G §555, §405

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 14:40:11 +01:00
jschoubben a7ab33028f Merge origin/main (#5): mesh-broker's Binding is the wire form; restore-kept and snapshot-kept taken out, the binding names its objects
The conflicts in mesh-broker's seat.json and fixtures took origin/main's Binding (list, show and orphans answer each
binding) and the objects field of C8; C8's snapshot-kept, restore-kept, KeptPoint and Aside are not carried over as G
section 555 moves them to the seat mesh-recovery, which mesh-broker does not gain. The generated Go and TypeScript of
mesh-broker are written again by seatgen.

Builds: design 47 G §399, §513, §555

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 14:40:11 +01:00
jschoubben 9068aac406 C14 (regenerate): mesh-conditions' finding body types, no hand-kept tsconfig.json, the watchdogs client's artifact
Regenerated by seatgen at mesh-catalog b5aebbbe (bodies types, design 47 G section 452, 454); the eight hand-kept
tsconfig.json files are deleted (the generator writes none, section 341); health-and-repair/module.json names the
artifact go-meshwatchdogsclient its client check asks for.

Builds: design 47 G §439, §452, §454, §341
2026-11-11 11:33:06 +01:00
mesh-tools 5fd0bf86f1 Merge pull request 'Registry recovery: mesh-broker's list, show and orphans answer each binding (issue 1966)' (#5) from fix/1966-bindings-first-view into main 2026-11-11 10:32:31 +00:00
jschoubben 0167b24b95 mesh-broker's fixtures take a keeper ledger plan's binding with a type and an index, so types survive the round trip
mesh/delivery-group group fix/1966-bindings-first-view merged: every member is merged
mesh/delivery merged: source.main moved to novox/mesh-contracts@5fd0bf86f120
mesh/check checking 0167b24b9564 on 5fd0bf86f120 | novox/mesh-contracts#5 in group fix/1966-bindings-first-view
Builds: design 25 bindings-first-view §2

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:54:37 +01:00
jschoubben 5f7610f521 C5 (answer): the node-engine's verbs name their class
hand-over and access-act are warrants, compose an act, the other six without callers reads.

Builds: design 47 G §391, §393, §447

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:45:58 +01:00
jschoubben e529c372d0 C14: the generated Go and TypeScript of every seat follow the definitions
Written by seatgen at c62650e4 (GEN3) with mesh-sdk b19fc7fa (reader release): the seat mesh-grants new,
every TypeScript contract as index.js with index.d.ts, events with subject and stream. mesh-watchdogs gains
its family, which a definition with events needs. Written with the reader as it is: the field needs-approval
(node-login-shell) and the section bodies (mesh-conditions) are unknown to it, so they were laid aside for
the run; nothing generated carries either.

Builds: design 47 G §339, §341, §261, §389

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:45:30 +01:00
jschoubben 44492ce555 C3 (repair): mesh-vault retire names seat:mesh-config again
The checkout of C9 had laid back the earlier text.

Builds: design 47 G §336, §392

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:44:40 +01:00
jschoubben 77e583be44 C3, C5, C11 (answers): mesh-broker's write verbs name module:nats, node-engine's seat-list verbs the callers its code names, mesh-conditions declares findings-views
create and apply are of class act; recreate and drop of class warrant; all four called by module:nats.
seat-list and seat-list-again name persons, sessions and healers as SeatListCallers does.

Builds: design 47 G §336, §388, §391, §392, §393

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:44:34 +01:00
jschoubben 26ef347d27 C13: every contracts manifest says version 0.1 and no artifact says series
Builds: design 47 G §368, §411

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:43:17 +01:00
jschoubben 70b91f7a79 C12: mesh-watchdogs says machine-away and machine-back
Subject parts name the machine, not the publisher; kept 90 days and 16 MiB.

Builds: design 47 G §389, §436

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:43:02 +01:00
jschoubben 41690f7c3f C11: mesh-conditions says findings-asked, resyncs one observer, and defines the finding bodies
The event findings-asked (ask, at, by, module; 7 days, 16 MiB), resync with an optional module and callers
operator, healers and sessions, and the section bodies: the finding with its layout whole, finding-written,
finding-cleared and findings-stated. The state findings is its owner's alone. Whether findings-views is a
state of this definition waits on a question.

Builds: design 47 G §383, §384, §390, §434, §437, §439

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:42:51 +01:00
jschoubben e84b1e3712 C10: operator-channel lists a held-back ask with since when and serves ask-again
asks gains the state held-back and the field held-since (no behind); the seat gains the verb ask-again,
of class act, the operator's and the healers'.

Builds: design 47 G §40, §83, §394, §403; design 46 §6

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:42:06 +01:00
jschoubben 5cd44f0ebe C9: the seat mesh-grants is defined whole: rule grant, the events wait-held, wait-ended, filling and room, and the read grants-for
Rewritten from the earlier branch to the final lines: the earlier verbs waits and release go (the part's
tools stay its own), grants-for is added, wait events carry clock-from, filling and room carry a store's fill
as mesh-wants' do. The generated Go and TypeScript wait on the generator.

Builds: design 47 Where it goes (grants part), G §264, §266, §331, §401, §441

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:41:42 +01:00
jschoubben bcb37afb48 C8: mesh-broker takes and restores a module's kept data (snapshot-kept, restore-kept) and a binding names its objects
Both verbs are of class act, not optional, and called by holder:node-backup@same-node alone; restore-kept
takes aside-only and discard-aside; the Binding gains objects. The verbs' sibling mesh-broker callers text
(create, apply, recreate, drop) is left as it is: a question is open.

Builds: design 47 G §58, §59, §337, §399, §400, §405, §406

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:40:49 +01:00
jschoubben d86a46e5d8 C7: node-backup backs up and restores a module's kept data on the bus: aside, discard-aside, ended and restored
now, restore and aside are of class act; discard-aside is the operator's alone; ended and restored carry the
node, module and kept data in their subject and the module, kept data, form, fingerprint and outcome.

Builds: design 47 G §296, §297, §302, §405

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:40:23 +01:00
jschoubben a904102a07 C6: a placed module and a place change name the watched branch and the build's fingerprint
Builds: design 47 G §14, §78, §114, §402

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:39:46 +01:00
jschoubben 91818305e7 C5: the node-engine seat says composed, running (kept last per subject, no age limit, or stopped) and capabilities-changed, acts in compose, and serves process-builds
Rewritten from the earlier branch to the final lines: keep as an object, stopped on running, process-builds a
read for persons, sessions and healers and not optional, the compose rule with the step's default bound.
The eleven verbs' callers (§393) wait on a question; the generated Go and TypeScript wait on the generator.

Builds: design 47 G §177, §199, §203, §260, §261, §266, §396, §404, §440

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:39:23 +01:00
jschoubben f33c1d4b78 C3: the callers of mesh-broker's four reads, mesh-config's renames, mesh-vault's retire and node-engine's seat-list verbs are lists
mesh-broker list, show, check, orphans and mesh-config renames name invokers; mesh-vault retire names
seat:mesh-config; node-engine seat-list names persons and healers, seat-list-again the operator and the
healers. mesh-broker create, apply, recreate and drop keep their text: the design names no form for them.

Builds: design 47 G §336, §392, §204

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:38:50 +01:00
jschoubben 8d8a28934c AM-C2: the login shell's verb execute is marked needs-approval
Builds: design 46 milestone 7 §21, §2

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:37:48 +01:00
jschoubben a711302323 C1, C2 (format): the schema names a verb's class and callers list, an accepted kind's callers, a kept event, acts and bodies
A verb gains class (read, act, warrant), callers as a list of the forms of §336/§392 and needs-approval; an
accepted kind gains callers; an event gains subject and keep as an object (max-age-days, max-mib,
last-per-subject), a dot only without keep; the seat gains acts (steps incl. pipeline, on every|language|
kind:image, bound) and bodies.

Builds: design 47 G §68, §203, §336, §338, §391, §392, §396, §397, §439; design 46 milestone 7 §2

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:37:48 +01:00
jschoubben ada45be38b AM-C1: the operator-channel client puts a key prefix before every key of its own state
Client.KeyPrefix is put before the keys the client writes and reads in its own State; empty for every
asker today, so today's keys stay; Where still reads the router's record under <module>.<id>.

Builds: design 46 milestone 7 §10, §22 (design 47 G, approval mark)

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:35:35 +01:00
jschoubben ed12ffb387 mesh-broker's Binding is the wire form and Held carries it, so list, show and orphans answer the binding
The seat's Binding takes the fields the events carry and the membership holds
(local, storage, template, stream, subject, bucket, object-store, history,
state, indexes, snapshot, types): one form in the events, in list, show and
orphans. Held gains binding, present on an entry the bus holds. Definition,
fixture and generated Go and TypeScript contract.

Builds: design 25 bindings-first-view §2, §7 (hq d0760629, PR 543)

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-11 10:14:55 +01:00
mesh-tools f5d76e84ca Merge pull request 'The node-engine seat's client asks a node once more when an event came while an ask ran, never dropping it (issue 1966 note 170; group with mesh-delivery)' (#4) from fix/1966-engine-reads-asked-again into main 2026-11-10 10:45:49 +00:00
jschoubben c9ffed7042 S1-S3: the node-engine seat's client asks a node once more when an ask came while one ran, and shows when the event was heard (issue 1966 note 170)
mesh/delivery merged: source.main moved to novox/mesh-contracts@f5d76e84ca71
mesh/delivery-group group fix/1966-engine-reads-asked-again merged: every member is merged
mesh/check checking c9ffed70421a on f5d76e84ca71 | novox/mesh-contracts#4 in group fix/1966-engine-reads-asked-again
An event of manifest-reads-changed heard while an ask of the same node ran was dropped
without a line, so a restated engine could stay read at its first statement (ace,
2026-11-10 07:36). Every reader goes through Keeper.AskNode, so the assigner, the
builder and the indexer are fixed at once (ADR 0668 §4: the caller hears it and calls
again; ADR 0634 §1: the seat's client).

- AskNode: an ask while one runs is asked once more after it, one follow-up however
  many came, said in one line (1966/AC170-1, AC170-3). The asks of one node so run one
  after another, and take keeps the last answer, as before (no rule on the engine's
  clock: review round 1).
- Statement.EventAt (event-at): when the node's event was last heard, read by the
  parts' engine-reads tools; forgotten with the node's key.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 11:42:05 +01:00
mesh-tools 7fbfd77a76 Merge pull request 'Engine reads keep the last answer and say an unanswered node; operator-channel asks and watchdogs presence declared (ADR 0668; issue 1966; group fix/1966-call-made-once)' (#3) from fix/1966-call-made-once into main 2026-11-10 07:20:28 +00:00
jschoubben bb16f99e2d C7: the node-engine seat's client keeps the wait of every caller's kept manifest-reads calls, ReadsCalls beside Keeper.Unanswered, its bound's end asking once whether the machine is heard (issue 1966, ADR 0668 §3, ADR 0634 §1, ADR 0596 §2; review round 3, findings 1 and 2)
mesh/delivery merged: source.main moved to novox/mesh-contracts@7fbfd77a76cb
mesh/delivery-group group fix/1966-call-made-once merged: every member is merged
mesh/check checking bb16f99e2d5e on 7fbfd77a76cb | novox/mesh-contracts#3 in group fix/1966-call-made-once
The assigner, the builder and the indexer share it instead of two copies; it names no other seat's client (the client check), so each caller writes its finding in mesh-conditions' layout through Raise, stamped with ReadsCalls' clock.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 04:54:06 +01:00
jschoubben 11a36eb88c C6: the watchdogs seat declares presence's answer: with machine, that machine's online and since; without, the keys of the state presence (issue 1966, ADR 0596 §2, ADR 0668 §3; review round 3, finding 1)
The builder and the indexer ask whether a node's machine is heard through this verb instead of reading the watchman's state; regenerated with seatgen, whose -check names nothing new.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 04:52:53 +01:00
jschoubben 0ae7cb7a76 C5: the operator-channel seat declares its verb asks' input (key, state, since, bound) and answer (asks with key and state, cut, matched), as the router serves it (issue 1966, ADR 0668 §4; review round 1, finding 5)
The assigner's read at its consumer's bind calls the verb with them; regenerated with seatgen, whose -check passes.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 04:20:04 +01:00
jschoubben c6689bfdb3 C4: a statement keeps since when its engine is unanswered, and the keeper names each node unanswered past a bound while heard (issue 1966, ADR 0668 §3; review round 1, finding 4)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 04:15:01 +01:00
jschoubben c584f4570b C3: the engine-reads keeper keeps the fallback or the last statement at the first fault while the kept call asks on (issue 1966, ADR 0668 §3; review round 1, finding 1)
A part whose node answers nothing waited out busretry.Bound (30 s) before it acted on the node's record: Once asks the verb once, and its fault is taken at once.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 04:11:07 +01:00
jschoubben e1303f1542 C2: the finding kind call-unanswered of the seat mesh-conditions (issue 1966, ADR 0668 §3)
A kept call still unanswered past five minutes is said in the caller's findings, keyed call.<id>.call-unanswered.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 02:54:44 +01:00
jschoubben 5c29bea0b3 C1: the engine-reads keeper calls every node again at its part's consumer bind (issue 1966, ADR 0668)
A manifest-reads-changed said before the part's consumer existed was never heard (note 155), and the
statement taken while an engine restarted stood. AtBind is registered on the hub's OnBound.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 02:54:44 +01:00
mesh-tools 66e0c611bf Merge pull request 'Record a merge through the merge gate (issue 1966, bootstrap)' (#2) from fix/1966-gate-record into main 2026-11-07 20:19:51 +00:00
jschoubben 1aa5dee992 Record a merge through the merge gate so the new indexer reads this repository's seat definitions on its merge (issue 1966, the operator's bootstrap)
mesh/delivery merged: source.main moved to novox/mesh-contracts@66e0c611bf83
mesh/delivery-group group fix/1966-gate-record merged: every member is merged
mesh/check pass 1aa5dee99226 on 66e0c611bf83 | carried from 08580d25d2dc, mesh-networking 5af7189cad82 | unit 14 run, 270 kept | integration 0 run, 27…
2026-11-07 21:13:54 +01:00
mesh-tools 08580d25d2 Merge pull request 'Registry milestone: mesh-contracts (issue 1966)' (#1) from feat/registry-milestone into main 2026-11-07 14:19:16 +00:00
jschoubben b77560786a Complete go.mod and go.sum for the externals each module builds with
mesh/delivery merged: source.main moved to novox/mesh-contracts@08580d25d2dc
mesh/delivery-group group feat/registry-milestone merged: every member is merged
mesh/check checking b77560786a6a on 08580d25d2dc | novox/mesh-contracts#1 in group feat/registry-milestone
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 76de6889fc The assigner's seat says assignments throughout: the type, the events and the defs; the legacy key form placement.<node> leaves the client (issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 21:57:16 +01:00
jschoubben fdcec5d384 The Placement domain goes: the module assigner and the four node seats move to the Core place, the assigner's state and verb placement become assignments, mesh-wants goes to mesh-delivery (issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 21:39:56 +01:00
jschoubben 07ec4b1f31 Regenerate the contracts' TypeScript: the key parsers name their parameter apart from the parts (issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 21:24:07 +01:00
jschoubben f0ed2d9b12 No client names the holder of the seat mesh-provisioner: each reader keeps its own constant, held to its manifest (ADR 0625 section 4, issue 1966)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-05 19:36:21 +01:00
jschoubben bc7763a9c0 Merge branch 'b9j/registry' into feat/registry-milestone 2026-11-05 19:26:06 +01:00