Commit Graph
3561 Commits
Author SHA1 Message Date
jschoubben 80ade3cacb mesh-recovery: every bound a setting, the expiry on a bound key's expiry
point-keep-days, dump-wait-minutes and snapshot-restore-wait-minutes may
be fractions, and expire-every-hours (24 unless set) times the removal of
old points by a key of the state bounds whose own time to live the bus
ends, heard as its change: no timer in the process.

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

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:18:22 +01:00
jschoubben 1ed0dca7df mesh-recovery: an act cut off by the process's stop ends stopped
A move or a restart stops the process: from its stop signal every call
is answered an error naming the stop, the running act ends through its
own failure path (an aside put back whole, whatever its context), and
every accepted act not ended ends failed with stopped and its event, so
its caller asks again.

Builds: design 47 G §562, A-141

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:15:38 +01:00
jschoubben 810254193c mesh-recovery: the hand verb restore takes a keeper's snapshot by request
An unprotected snapshot is received through snapshot-get into
incoming/<request>, refused before the first chunk past the cap, checked
against its digest before any aside, and restored by the module; a
protected one is verified, the running data set aside and restored in
place by the keeper, waited on by snapshot-restored within
snapshot-restore-wait-minutes, cancelled at the bound. The bus module
sends its chunks with mesh-sdk's form.

Builds: design 47 G §681, §682, A-137, A-138, A-139, A-140

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 02:12:32 +01:00
jschoubben a81f5ed0e3 mesh-recovery A-133: the manifest follows the validator
Its tool check stands on its own runtime beside the process's unit check, its
template states are its own by requires alone (not listed again in the
process's bus, which keeps its account), and digests takes the state
template's fixed cap (A-135).

Builds: design 47 G §657, §567, §554, A-133, A-135

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:57:34 +01:00
jschoubben 3a6a127c38 mesh-recovery: its settings' files from templates under files/, the tools binary ignored
The catalogue keeps no file text inline for a new module: each setting's file is a template
under files/, packed by the module's archive artifact. A local build of the tools bundle
leaves a binary the module's ignore file now names.

Builds: design 47 G §633, A-112, A-130

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:45:44 +01:00
jschoubben d854f936f9 mesh-recovery: points-filling, recovery-waits and aside-unrestored through mesh-sdk's finding writer
The module measures its points directory against the fill mark of its cap at its start and
after each act, writes recovery-waits for an act that waits on the dump past its bound and
clears it once the act starts its work or ends, and writes aside-unrestored for each aside
only it holds the data of, cleared once the aside is restored or discarded. The bounds are
the settings points-filling-mark and dump-wait-minutes, read at the start.

Builds: design 47 G §561, §557, §564, §633, A-112, A-130

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:40:49 +01:00
jschoubben 9e41f6380a mesh-recovery: the process, on its own account, answering the seat's verbs on the live bus
The process reads its broker account, answers the seat mesh-recovery's verbs itself with the
caller the bus proved, takes and restores streams through mesh-sdk's bussnap, keeps the digests
in its state, names a kept data's bus objects from its catalog entry as mesh-sdk names them,
learns the fingerprint a module runs at from the node-engine seat's running and the bus
module's dumps from the backup holders' item events, each read whole at its start, and asks
the backup holder on its node to bring the points directory back. A restore whose
restore-started the bus did not acknowledge reads and sets aside nothing.

Builds: design 47 G §554, §516, §551, §556, §563, §567, §655, A-107, A-112, A-121, A-123, A-126, A-132

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:37:55 +01:00
jschoubben bd2997cf36 A-129: kept-points says the unrestored asides; recovery_kept_points answers them as the health check
The module's declared health check names recovery_kept_points: it answers what kept-points
answers with the health answer beside it, unhealthy while an aside only it holds the data of
is listed.

Builds: design 47 G A-129, §554, §657

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:30:00 +01:00
jschoubben 6d45f3ef58 A-125: the bus module imports mesh-sdk's bussnap and busarchive, its copies deleted
The take and restore of one stream is shared code in mesh-sdk; the bus module's keeper, its
nightly dump and its tools import it from there and keep no copy.

Builds: design 47 G §655, A-125

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:26:38 +01:00
jschoubben 968a0aac7a mesh-recovery: the tools bundle, recovery_ tools calling the seat's verbs with the proved asker
Builds: design 47 G §554, §656, §657, §682
recovery_kept_points reads kept-points; every hand tool (take, restore, retry, aside, discard_aside, restore_aside, cancel, expire_points) is one verb of the seat called with the asker the tool runner proved; the bundle holds no grant of its own.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:19:32 +01:00
jschoubben 572a2b3a4b mesh-recovery: the seat's verbs, answered by the process with the proved caller
Builds: design 47 G §516, §554, §656, §682, §691, A-107, A-115
Each acting verb answers one of accepted, busy or error; arguments are read afresh per call and refused when unknown (local-name, from, aside-only, discard-aside) or without why; restore takes exactly one of snapshot and request (request is refused until built); the hand-act log names the proved account and the asker.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:18:43 +01:00
jschoubben 2dd02da76e mesh-recovery: aside sets the live data aside from the placement's entry, names as a list
Builds: design 47 G §516, §554, §566, A-123, A-124
aside takes the bus names from the catalog entry of the fingerprint the node-engine's placement runs, takes the aside whole and checked, removes the live objects, says set-aside; restore-aside puts it back.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:17:41 +01:00
jschoubben 0ebabf7174 mesh-recovery: restore, set aside, put an aside back, cancel, retry, kept-points, the repair at a start
Builds: design 47 G §516, §554, §560, §562, §563, §564, §566, §567, §682, §691, A-117
restore says restore-started, waits for the dump, finds the point (or has the backup holder bring it back), checks its digests against the bus, sets the live data aside whole and checked, removes it, restores the point and its consumers, and puts the aside back when a step after the removal fails; cancel ends a waiting act failed/cancelled with the hand act's words; at a start it clears temporary points, puts an aside back and ends a cut-off act failed/stopped.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:16:29 +01:00
jschoubben 7d755c8f08 mesh-recovery: take a restore point, list the points, expire them, one act at a time
Builds: design 47 G §516, §551, §554, §560, §564, §567, §517
Accept writes the hand-act log first, answers accepted/busy/error at once and writes the act before it answers; take writes each stream under a temporary name, its digests on the bus before ended; the cap is refused before anything is written; expiry never removes the newest point.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:13:58 +01:00
jschoubben b43c57f43b mesh-recovery: the module, its manifest and its claim of the seat mesh-recovery
Builds: design 47 G §554, §656, §657, §633, §564, §557, A-107, A-115
The seat claimed once for the mesh with every verb of its definition; a process answering them (serves beside bus), a tools bundle, the data item points, the state digests (§567), the findings of §561, the four settings.

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 01:13:13 +01:00
jschoubben 7b16e195ee Join 8: mesh-config and mesh-provisioner keep no builder package (recover-readers), version 0.1 (judge5)
Builds: design 47 G join of rounds 4-8
2026-11-12 00:28:21 +01:00
jschoubben 4b749286bd Merge branch 'feat/47-G-recover-readers' into feat/47-G-join8
# Conflicts:
#	modules/mesh-config/module.json
#	modules/mesh-provisioner/module.json
#	modules/mesh-self-check/module.json
2026-11-12 00:14:26 +01:00
jschoubben ebaa4c9946 Merge branch 'feat/47-G-recover-small' into feat/47-G-join8 2026-11-12 00:14:17 +01:00
jschoubben 231975bce6 Merge branch 'feat/47-G-buildfix6' into feat/47-G-join8 2026-11-12 00:14:17 +01:00
jschoubben 35fb415f7b Merge branch 'feat/47-G-issues6' into feat/47-G-join8 2026-11-12 00:14:17 +01:00
jschoubben 14d1a919cc Merge branch 'feat/47-G-judge5' into feat/47-G-join8 2026-11-12 00:14:17 +01:00
jschoubben 20e92dacd5 Merge branch 'feat/47-G-cond6' into feat/47-G-join8 2026-11-12 00:14:16 +01:00
jschoubben 605c583ab4 bus5 B6 (A-109): snapshot-get's chunks go on a core publish to any caller; no grant check
grantedBy is dropped: any caller of snapshot-get gets the chunks, a protected snapshot never.
The chunks are a transfer on the core bus, published with a core publish and kept on no stream.

Builds: design 47 G A-109 (G-20-lead-answers), §681

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:57:09 +01:00
jschoubben 44cb7ad449 bus5 B5 (A-107): the keeper's process answers mesh-broker's snapshot verbs itself through AnswerSeat
snapshot-get, snapshot-restore, snapshot-restore-cancel and snapshot-remove are answered by
the keeper's process with the proved caller; it publishes snapshot-get's chunks and hears
their acks on its own subscription, and acts at once with no hand-over through requests
(the record of a running restore is written before it runs). The tools bundle keeps its
tools, nats_snapshots among them. The protected refusal and the whole test's case (send,
restore in place, removal) stay.

Builds: design 47 G A-107 (G-20-lead-answers), §681

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:56:06 +01:00
jschoubben e0428bd874 W16.2: mesh-config's whole test says the catalog-revision event on the branch's part, as the bus says it
Builds: design 47 G §532, §614; lead answer A-101

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:34:51 +01:00
jschoubben da5bbe0a17 W16.2: mesh-config reads which modules exist, their manifests and a build's manifest from the catalog half through meshcatalogclient's branch follower (milestone 47/G)
Builds: design 47 G §196, §594, §614; lead answers A-5, A-15

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:34:28 +01:00
jschoubben 7278e509f4 W16.5: claude-code reads which modules exist and their manifests from the catalog half through meshcatalogclient's branch follower (milestone 47/G)
Builds: design 47 G §196, §594, §614; lead answers A-5, A-15

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:25:52 +01:00
jschoubben 0098960b5a W16.3: mesh-provisioner reads modules and manifests from the catalog half through meshcatalogclient's branch follower (milestone 47/G)
Builds: design 47 G §196, §594, §614; lead answers A-5, A-15

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:24:35 +01:00
jschoubben c41a84ee95 A-C5: mesh-build-node builds against the latest published SDK, the toolchain pins none
Recovered from cfee5f2d (feat/47-G-buildmods).
Builds: design 47 G §571 (the build writes a mesh package's lock entry from the latest published version), A-56

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:23:44 +01:00
jschoubben ff07c3a668 K-A2: mesh-config asks every proposal; the router holds the oldest back
Recovered from 71370afc (feat/47-G-asks).
Builds: design 47 G §40; design 46 §6 Limits, batching, history

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:23:44 +01:00
jschoubben 7df879b367 K-A1: claude-code asks every question and proposal; the router holds the oldest back, the slot keys go
Recovered from 90d70b83 (feat/47-G-asks).
Builds: design 47 G §40; design 46 §6 Limits, batching, history (no ask hidden or refused for its asker's count)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:23:44 +01:00
jschoubben 095e23ecda W16.4: mesh-self-check reads which modules exist and their manifests from the catalog half through meshcatalogclient's branch follower (milestone 47/G)
Builds: design 47 G §196, §594, §614; lead answers A-5, A-15

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:21:31 +01:00
jschoubben 8f3c810fc3 §600: mesh-build-go's ask workers filter both forms of the accept subject
Builds: design 47 G §600, §483

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:05:30 +01:00
jschoubben c854373840 ISSUES: mesh-issues reads git.pull, git.contains and the runner's list and show, not mesh-delivery.checks and the forge's tools
Pull request facts come from seat git's pull, ancestry from contains, the review time from the runner's review step,
and get shows one pipeline row per module (no run where the runner's list answers none).

Builds: design 47 G §654, A-75

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:05:28 +01:00
jschoubben 49bace0073 A-72: no @novox/mesh-* package counts as beyond the SDK in mesh-build-node
Builds: design 47 G G-20 A-72

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:02:50 +01:00
jschoubben e4c5108306 JUDGE: the module tests that read a manifest follow the manifests' new forms (version 0.1, findings in requires, the foundation's old sections)
sudo and localization expect version 0.1; distribution and gitea read the old objects and state sections; mesh-build-go, mesh-knowledge, mesh-provisioner and mesh-self-check expect the findings asked in requires and the keeper's ask consumed. Each assertion failed against the changed manifest before it was changed.

Builds: design 47 G §368, §529, §584, A-30

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 23:00:47 +01:00
jschoubben a9dfe77b1d bus5 B4 (A-64): snapshots-filling has scope module and id nats.snapshots
Builds: design 47 G §681, A-64
2026-11-11 22:56:49 +01:00
jschoubben caa350f350 bus5 B4 (§529): nats go.mod requires the meshconditions contract it imports (requiredmodules check)
Builds: design 47 G §529, A-30
2026-11-11 22:55:28 +01:00
jschoubben 673b9d075a HEAL2 (the healers' findings in requires): the manifest test holds the state and the stream asked by their templates
The healers' manifest already asks findings (template state) and finding-events (template events, the three finding events,
7 days, 16 MiB) and declares no old stream or findings state, and their writer reaches the state by its local name (built in
76be864b and the join); this adds the test that holds it.

Builds: design 47 G §529, §577, A-30

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:54:43 +01:00
jschoubben 47aaee122c bus5 B3 (§681, A-44, A-45, A-59): the bus module serves snapshot-get, snapshot-restore, snapshot-restore-cancel and snapshot-remove through its tools bundle, sends the chunks, hands the work to the keeper through requests; nats_snapshots; the whole test covers send, restore in place and removal
Builds: design 47 G §681, ADR 0675, lead answers A-44, A-45, A-59
2026-11-11 22:54:35 +01:00
jschoubben 22b50c88a9 HEAL1 (attempt-changed): the healers say each attempt they write, and every attempt kept at their start
The seat mesh-healers' attempt-changed carries the attempt whole with until (a week from its write), on the subject keyed by
the condition and the attempt, each escaped as a key's name is. The event is the seat definition's; the manifest's emits stays
empty as for healer-acted.

Builds: design 47 G §541, §665

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:54:18 +01:00
jschoubben 265d3b83b2 COND8 (haves and attempts as events): the keeper hears what a node runs and the healers' attempts, and reads neither state
The node-engine's composed, running, wait-held and wait-ended make the have the hold compares with the wants; the healers'
attempt-changed makes an attempt, dropped at its until on the keeper's own clock (a bound with its own time to live) or when
removed. The manifest's reads are gone and its consumes gain the five events.

Builds: design 47 G §541, §665, §556, §499, §434

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:53:09 +01:00
jschoubben 72ccb75c1b COND10 (stated kinds, both subject forms): the keeper clears only conditions of the kinds a statement covers
A findings-stated carrying kinds sets the keeper's view of that observer, node and set of kinds, and clears only the
conditions of those kinds it does not name; no kinds covers every kind. The finding events are taken from either form of the
part's finding stream, the observer and node read from the subject.

Builds: design 47 G §580, §529 (A-30), §383, §384

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:50:17 +01:00
jschoubben 790b5aac7d bus5 B4 (§681, A-29, A-40, §529): the bus module writes snapshots-filling through mesh-sdk's held writer over its state findings; nats-findings declared in the foundation form
Builds: design 47 G §681, §529, A-17, A-29, A-30, A-40
2026-11-11 22:49:07 +01:00
jschoubben b15c511528 COND7 (the condition's owner): a condition carries the finding's owner and waiting-on; a failed head is the operator's two hours after its since
The keeper copies owner and waiting-on from the finding at raising (and into a condition kept from before G at its next
change), hands a pipeline-failed to operator-channel after the setting owner-handover-seconds (default two hours, timed
from the finding's since as a bound with its own time to live), says each change as the change owner, and the tool
conditions_owner sets an owner now, written in the hand-act log.

Builds: design 47 G §540, §685, §678, §557, A-58 (seed-waits: the indexer sets the finding's waiting-on; no kind rule here)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:48:54 +01:00
jschoubben d4e29a07b2 LOCKS (A-56): the locks check counts the mesh's own @novox/mesh-* packages as it counts the SDK
A module naming only the mesh's packages beyond typescript and the types needs no lock (gitea names the contracts' git and mesh-catalog packages); a row in the first test fails without the change, as does the catalogue's own run.

Builds: design 47 G A-56, ADR 0469 §5

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:46:08 +01:00
jschoubben d627400cf1 bus5 B2 (§681): the keeper restores a snapshot in place (verify, names live, 60-minute bound, cancel, partial stream removed, snapshot-restored); requests keeps records 91 days (A-53)
Builds: design 47 G §681, ADR 0675, lead answers A-45, A-53
2026-11-11 22:45:56 +01:00
jschoubben 41567adee0 JUDGE (§584, A-54): distribution, a foundation part, keeps its bus state in its old sections
incoming goes to the old objects section; transfers, idle (key-ttl), holds, windows, mirrors and findings to the old state section; the stream events becomes the old stream distribution-events (A-54, EVENTS being the mesh's own stream).

Builds: design 47 G §584, A-54, ADR 0619 §2

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:45:40 +01:00
jschoubben f5ce980808 GATE (A-42, §592): the gate's approval-carried-open has scope delivery
FindingScope is delivery, the scope the mesh already uses for the delivery's findings; the test names the literal (it failed with gate).

Builds: design 47 G §592, A-42

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:45:09 +01:00
jschoubben 0bd978f4ee JUDGE (ADR 0348 §5, §557): the keeper's two settings are marked runtime, and mesh-conditions requires the catalog client it imports
ask-bound-seconds and view-waits-seconds are read by the keeper's own code at its start (settings.go ReadSettings, stdio.Config), so the manifest marks them runtime: true; go.mod requires meshcatalogclient at the zero version, which cmd/mesh-conditions/branches.go imports (the requiredmodules check).

Builds: design 47 G §557

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-11 22:44:29 +01:00