Commit Graph
1523 Commits
Author SHA1 Message Date
mesh-tools 8d9683d844 Merge pull request 'The assigner's and the grants part's seat-list again answers the operator's sessions (issue 1966; group fix/1966-seat-list-unread)' (#197) from fix/1966-seat-list-unread into main 2026-11-10 00:44:38 +00:00
jschoubben b1343147e8 S7: the assigner's and the grants part's seat-list again answers a proved operator's session
mesh/delivery merged: source.main moved to novox/mesh-delivery@8d9683d844ec
mesh/delivery-group group fix/1966-seat-list-unread merged: every member is merged
mesh/check checking b1343147e80f on 8d9683d844ec | novox/mesh-delivery#197 in group fix/1966-seat-list-unread
Their seat_list_again answered person.<name> and the healers, but every call
through the mesh MCP server is proved as its machine's tool runner (issue
627), so no operator's session could ask it; node-tools now stands for that
session, the kind met a second time in the node-engine (issue 1966). The
assigner's silent stand-in keeps the bus's retry bound short, since the
seat list's reader now asks again while its ask reached no one.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-10 00:59:07 +01:00
mesh-tools 8b03cc036e Merge pull request 'A build step's run that meets a transport fault is again; the asker waits through it and drops what it withdraws (issue 1748; group fix/1748-transport-retry)' (#196) from fix/1748-transport-retry into main 2026-11-09 22:58:32 +00:00
jschoubben 7e0634205a R2: a row holds the build seats' work queues above three deliveries and at most ten (ADR 0664 §2, ADR 0436 §6, issue 1748 review 2)
mesh/check checking 7e0634205aa4 on 8b03cc036ec7 | novox/mesh-delivery#196 in group fix/1748-transport-retry
mesh/delivery merged: source.main moved to novox/mesh-delivery@8b03cc036ec7
mesh/delivery-group group fix/1748-transport-retry merged: every member is merged
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:55:13 +01:00
jschoubben a8c8f8fb5a F8, dropped: the Drop layout is the generated contracts' (not the domain SDK's) and the key form sits beside Pause's helpers; a step ended by drop is the state dropped (ADR 0664 §4, issue 1748 review 1)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:40:29 +01:00
jschoubben 9e00300860 F4: the builder's own retake holds a key that failed on a transport fault; a hand act or a builder that starts takes it (ADR 0664 §3, issue 1748 review 1)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:38:48 +01:00
jschoubben 68fedded8c F1, F7: the asker drops an ask only on a withdrawal cause (superseded, taken out, asked again by hand), not on the check bound; the checker's drop on Forget is asserted; a step's own run count and a failed drop are said (ADR 0664 §4, issue 1748 review 1)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:37:51 +01:00
jschoubben 82f0f6a134 F6a: network is unreachable and no route to host are transport words (issue 1748 review 1)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:33:15 +01:00
jschoubben fe6552ba7c D4b: the asker calls the build seat's drop on whichever holder answers, no node named, and for an ask no node took (ADR 0664 §4, §5, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:18:15 +01:00
jschoubben c072a271e5 D4b: a row that a candidate taken out ends its check with a named cause, so the asker drops its asks (ADR 0664 §5, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:17:05 +01:00
jschoubben 8195da08e8 D2c: PassingCause knows git's could-not-resolve-host and a client's timeout (ADR 0664 §1, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:10:16 +01:00
mesh-tools 10066c5ec0 Merge pull request 'An answered ask is kept until its yes is in the want, and an ask taken away is asked again under a new asking (issue 1966)' (#195) from fix/1966-record-ask-lost into main 2026-11-09 22:08:39 +00:00
mesh-tools 1e21adfde2 Merge pull request 'The delivery view names a lagging node's builds by fingerprint and what moved, and says a failed build as failed (issue 1966)' (#194) from fix/1966-view-names-builds into main 2026-11-09 22:08:22 +00:00
jschoubben e22f75ac7a D2b: DropKey and DroppedPrefix name the key of an ask's drop (ADR 0664 §5, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 23:05:37 +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 bfc73581ec D4: builder_seat_queue counts a step given again as waiting; a failure on a transport fault is built again as a new revision (ADR 0664, issue 1748)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:59:50 +01:00
jschoubben 397d2d120a D4 (part): the builder says each run that ended on a transport fault, in its log and on its key's step (ADR 0664 §3, issue 1748)
builder_seat_queue listing asks waiting to be given again, and the claim row for a FailedUntilChanged key, are left for D4's rest.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:58:12 +01:00
jschoubben eed1738d8f D3: readers of whether an ask ended use Ended; the asker waits through a step given again and says a transport fault on N runs (ADR 0664 §3, issue 1748)
Shared lines for the join with milestone G: mesh-delivery-checker internal/check/read.go (one line), mesh-delivery-builder buildrun/asks.go.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:57:10 +01:00
jschoubben 85cf4712fc Put the lagging-build rows into the existing reach test, and word a build that is not the newest as the build the node waits for (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@1e21adfde221
mesh/check checking 85cf4712fc59 on 10066c5ec0c0
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:56:28 +01:00
jschoubben 8596b9abf5 Subtask C: the two new tests of issue 1966 run inside existing test functions, to stay within the test budget
mesh/delivery merged: source.main moved to novox/mesh-delivery@10066c5ec0c0
mesh/check checking 8596b9abf52c on 10066c5ec0c0
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:55:58 +01:00
jschoubben bfbdaf34ea D2: the domain SDK names the state again, Ended, Passing, PassingCause, HolderSilent, AgainAfter and Drop (ADR 0664 §1, §2, issue 1748)
Shared line for the join with milestone G: sdk/buildstep/ask.go (AgainAfter beside AskRuns).

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:55:34 +01:00
jschoubben 440d02afb3 D1: the build step part gains the state again, run, again-at, passing and the verb drop; the three build seats regenerated (ADR 0664 §1, §4, issue 1748)
Shared lines for the join with milestone G: contracts/parts/build-step.json, the three seats' fixtures and generated contract files.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:54:42 +01:00
jschoubben 5ab0d8ca88 Subtask B: the teller says an assigner ask written again under the id the router kept is not asked, with a row per kind that a new asking is asked again (issue 1966)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:48:02 +01:00
jschoubben 2469531c2f Subtask A: a record ask is kept while its node waits on it or its yes is unwritten, and an ask written again is asked again under a new id (issue 1966)
The assigner took record.novox.nats away as stale in the same second the operator's yes
was written (the yes counts only while the ask is there), and rewrote it under the id the
router already kept, so the teller never asked it again. The stale test compared a module's
ask with the whole node's composition; it now reads the module's own have, and restore and
record asks are numbered by their writing's time as hold asks are.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:47:32 +01:00
jschoubben 47026d5ebb The view says a lagging node's build by fingerprint, what moved, and a failed newest build (issue 1966)
The hold named the same commit twice when only a mesh package moved. It now names both builds
by fingerprint with their commits, the input that moved when the commit is the same, and says a
newest build that failed as failed with its first words.

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 22:41:22 +01:00
mesh-tools 29e491e715 Merge pull request 'The manifest validator refuses a catch-up tool the module does not declare' (#193) from fix/manifest-form-reader into main 2026-11-09 21:27:40 +00:00
jschoubben e7415c1812 The judge refuses a catch-up tool the module does not declare (design 47)
mesh/check checking e7415c1812be on 29e491e715ba | novox/mesh-delivery#193 in group fix/manifest-form-reader
mesh/delivery merged: source.main moved to novox/mesh-delivery@29e491e715ba
mesh/delivery-group group fix/manifest-form-reader merged: every member is merged
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 21:20:48 +01:00
jschoubben 460f3caf38 Judge tests quote the reader's refusal naming form and catch-up
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 21:16:33 +01:00
jschoubben 38031571c1 The judge accepts a kept data's form and catch-up tool as the reader now reads them (design 47)
Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 21:11:49 +01:00
mesh-tools 05e21fd8a3 Merge pull request 'A put without a hold ends once the node runs its fingerprint healthy' (#192) from fix/1966-put-ends into main 2026-11-09 19:37:53 +00:00
jschoubben b71358e2cc A put without a hold ends once the node runs its fingerprint healthy, and assigner_puts says a put older than the newest build
mesh/check being carried to b71358e2cc14 on 05e21fd8a382 | from fc21f2d1bd56
mesh/delivery merged: source.main moved to novox/mesh-delivery@05e21fd8a382
A put with hold false waited for the node's composition digest to equal its own and never ended when the node composes its own,
pinning the module's want (issue 1966, F21).

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
2026-11-09 19:54:16 +01:00
mesh-tools fc21f2d1bd Merge pull request 'The checker keeps a composition request in pieces and packs it in the compose ask (issue 1966, recovery; group with mesh-catalog)' (#189) from fix/1966-checker-compositions-objects into main 2026-11-09 16:31:25 +00:00
jschoubben bf7540cd9e The build step part's request names both forms; the three build seats' contracts regenerated (issue 1966)
mesh/check checking bf7540cd9ec2 on fc21f2d1bd56 | novox/mesh-delivery#189 in group fix/1966-checker-compositions-objects
mesh/delivery merged: source.main moved to novox/mesh-delivery@fc21f2d1bd56
mesh/delivery-group group fix/1966-checker-compositions-objects merged: every member is merged
The compose job's `request` description now says it is the request object or the JSON string "gzip+base64:" followed by the
base64 of the gzip-compressed object, as ADR 0634 §1 puts a seat's messages in its contract. The field stays `any`;
seatgen regenerated node-build-go, node-build-node and node-build-image (Go and TypeScript), and its -check is clean.
ask.go's comment says the checker packs every request it sends.

Delivery: an old holder of node-build-go refuses the packed ask loudly (it holds no request object) until it runs the new
mesh-build-go; the checker is built by mesh-build-go after it (module graph edge), and every check composing ace or novox
fails today anyway.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
2026-11-09 16:41:56 +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
mesh-tools a072d60cae Merge pull request 'The indexer writes no fingerprint from a packages state it did not read, and computes fingerprints again by hand (issue 1966, recovery)' (#191) from fix/1966-indexer-packages-read into main 2026-11-09 14:48:20 +00:00
jschoubben efdfe1f755 A bucket the bus cannot reach is its error, not nothing published; only a bucket not found is not yet (issue 1966, review round 3)
mesh/check checking efdfe1f75518 on a072d60cae1d
mesh/delivery merged: source.main moved to novox/mesh-delivery@a072d60cae1d
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 15:43:52 +01:00
jschoubben 9073190646 A packages state not on the bus yet is nothing published, not a failed read (issue 1966, check of #191)
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 15:40:44 +01:00
jschoubben 3a63813b3d Fingerprints computed again by hand run a merge's recompute; the tests join existing ones (issue 1966, review round 1)
mesh/check failed (6): integration: mesh-delivery-indexer/cmd/mesh-delivery-indexer.TestIndexerWritesModule…; and 5 more | 3a63813b3d75 on fb69c8dee691
mesh/delivery closed: a newer head of the same pull request
Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 15:24:30 +01:00
jschoubben 03164e853e The indexer writes no fingerprint from a packages state it did not read, keeps no import form beside a version line, and computes fingerprints again by hand (issue 1966)
An indexer that started while the bus's storage was down read no published package,
took every import for unpublished and wrote the version line over ~130 modules'
fingerprints, which a later pass kept through the build's shortcut. A failed or empty
read of the packages state, where held modules were computed from published ones,
now fails the pass and says why; a version line clears the import form it was
computed beside; indexer_fingerprints_again computes the import form again by hand,
acting first and recording the hand act after, with a bound.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 15:15:26 +01:00
jschoubben 2819b05838 The assigner's integration test answers the verbs' asks of the indexer's first views from the indexer's buckets (issue 1966)
The verbs ask mesh-delivery-indexer.modules and .manifests through the tool runner
since the asks moved off the indexer's state, but the test's stand-in answered every
ask {ok:true}, which is no answer: propose failed on main with 'unexpected end of
JSON input'.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 15:10:32 +01:00
mesh-tools fb69c8dee6 Merge pull request 'Grant a module's bus state asked in requires to the accounts that run its code (issue 1966, recovery)' (#188) from fix/1966-requires-state into main 2026-11-09 12:56:35 +00:00
jschoubben a78c5700fd Grant a module's bus state asked in requires to the accounts that run its code
mesh/check checking a78c5700fdf4 on fb69c8dee691 | novox/mesh-delivery#188 in group fix/1966-requires-state
mesh/delivery merged: source.main moved to novox/mesh-delivery@fb69c8dee691
mesh/delivery-group group fix/1966-requires-state merged: every member is merged
The grants part wrote a binding into a membership on the bus module's
created, but granted its subjects to no account but the ledger's, so
distribution's program and the tool runner carrying it were refused their
own key-value, object store and stream entries (issue 1966, ADR 0595 §1,
design 25 § 12.2). The kept bindings now reach Declared in the same pass that
writes them into the membership, and one function, boundOf, grants each to
the module's own account and the tool runner, as its old section is granted;
a process's bus.state names a key-value entry as an old state. The composed
membership carries the bindings, so grants_membership's two sides agree.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 13:34:26 +01:00
mesh-tools 042b8d1fc1 Merge pull request 'The forge bridge reads the forge's wrapped answer, and the indexer ends a merge its taken merge covers (issue 1966, recovery)' (#187) from fix/1966-forge-answer into main 2026-11-09 10:34:54 +00:00
jschoubben af3b678a92 A lost take-in hold passes the take-in event's check, so it is said (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@042b8d1fc160
mesh/check failed (2): integration: mesh-delivery-assigner/cmd/mesh-delivery-assigner.TestAProposalIsAnswer…; and 1 more | af3b678a92f0 on 042b8d1fc160
holdLost builds a pending take-in naming neither WaitsFor nor Unknown, which TakeIn's check refused, so the hold stayed
in the journal and the watchman never saw it.

Quick fix: set Unknown on holdLost's event. Thorough fix (chosen): the check accepts a pending revision that names Lost,
the field made for it; one naming nothing is still refused. Tests: a row accepting Lost, the refusal row kept, and the
lost-hold scenario encodes its said event.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 11:32:29 +01:00
jschoubben 04fd0a4254 Indexer ends a pending merge its repository's taken merge covers, without reading its message (issue 1966)
Quick fix: none smaller than this (the bridge fix alone leaves a covered merge needing the bridge).
Thorough fix (chosen): loadNewest asks takenAlready (already used for group members) before loading the newest merge of
a repository; at or behind taken it is marked Covered, said once in the log, and never read. A merge whose ancestry
cannot be asked is read as before. Test: a row pair behind/ahead of taken with a bridge that cannot answer.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 11:29:31 +01:00
jschoubben 767928eb94 Forge bridge reads gitea_api's {"result": body} wrapper in one place (issue 1966)
Both ForgeMade and Tags took the tool's wrapper for the pull request / the tag list, so every forge-made merge read
"#0 is not merged" and bridge_tags failed, leaving builds unnumbered.

Quick fix: unwrap "result" in forgeAPI (the one Go reader of gitea_api).
Thorough fix (chosen, the kind was met twice and hid behind a drifted fake): bridge.API answers what the tool answers,
forgeBody is the one reader of that shape and refuses an answer without a result, naming it; ForgeMade refuses number
0 as "no pull request"; the unit fakes answer the tool's real wrapped shape, with rows for the bare body.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 11:29:31 +01:00
mesh-tools 58520d3435 Merge pull request 'The builder's build log gets a cap that holds its 30 days, and the grants part raises a held stream's cap, never lowers it (issue 1966, recovery)' (#186) from fix/1966-build-log-age into main 2026-11-09 09:14:15 +00:00
jschoubben 1591831886 A held stream's size cap is raised to its manifest's when larger, never lowered (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-delivery@58520d343537
mesh/check checking 159183188622 on 58520d343537
The operator, 2026-11-09 09:07: raise only. The grants part's assert raises it, says it in its asserted event and the
journal with the old and new cap, and grants_assert asks it by hand.

Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
2026-11-09 10:10:53 +01:00