Commit Graph
2135 Commits
Author SHA1 Message Date
jschoubben 347db8d4fd Join 11: the builder sets all of the catalog half's wiring before its views reader starts
The floor wake (half.floor), the builder (half.b), ready and branches.Changed were set after reader.Start, so a
catalog view heard on the reader's goroutine read them while main wrote them: the race detector named
catalog.go:117 against main.go:501 in TestBuilderMakesADoneKeyWithTheDigests. They are now set before the start;
the builder cmd integration package then ran 21 times under -race with no race.

Builds: design 47 G §614, A-119

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:26:58 +01:00
jschoubben 339964920b A-282 corrected (join 11): a moved step's bound is written again by a revision-checked update, never a delete
c5a6871f created the key once and never wrote it again, so a step that kept moving was bounded from its first
movement (issue 1930). Arm now creates the key when absent; one ending no earlier is armed already; one ending
earlier is written again by an update against the revision read, carrying the bound's time to live; a waiter
whose update loses reads the key again and takes the newer bound as armed. The test moves a step twice past its
first bound, with two waiters each time, and reads one write per movement, its time to live, and no delete.

Builds: design 47 G A-282, A-115, §544

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:16:22 +01:00
jschoubben c663b27848 A-282 (join 11): an ask's step bound key is created once, and a second waiter takes it as armed
stepBounds.Arm deleted the key and created it again, so two builder instances waiting on one ask raced: one's
create met the other's and failed "wrong last sequence", and the ask's build failed (the builder bed's two
instances together). Arm now creates the key only if absent; one already there is armed, and nothing deletes
it to make it again.

Builds: design 47 G A-282, A-115, §544

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:13:50 +01:00
jschoubben daa7737392 Item 5 (join 11): an asker's build-seat queue is served by the seat's holders, so the indexer draws its kind-6 edge
An asker names the queue it asks as seat:<seat>.accept.<queue> (A-231); no module's serves lists that form, so
graph.Servers matched nothing and the indexer drew no served-verb edge from a build seat's holders to the asker.
Servers now reads the form through mesh-sdk's catalogue.QueueInvoke and answers every module serving a verb of the
seat; the kind-6 edge asks the module graph's Servers, the one rule, instead of a match of its own.

Builds: design 47 G §544, §605, A-231

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:08:40 +01:00
jschoubben 99c21957de Item 4 (join 11): the composition-inputs test guards what each machine was asked
gather asks the machines side by side, and the test's stand-in call wrote one map from each of them: a concurrent map
write, the panic once seen at compositioninputs_test.go:61 (the race detector shows it every run). The record is
guarded; the whole assigner's unit suite runs clean under the race detector.

Builds: design 47 G §354, A-243, A-252

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:04:58 +01:00
jschoubben 778bcd0eee Item 2 (join 11): the builder's operator-ask tests check the ask's expiry on the asks' own clock
The asks were made at a fixed time while the channel client checked their expiry against the real clock, so from
2026-11-12 every ask "expires before it is asked". The client now takes the same fixed clock.

Builds: design 47 G §568

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:02:03 +01:00
jschoubben 24d0bae793 Item 2 (join 11): the builder's bed declares no build-seat worker beside the SDK's, and answers the seat mesh-builds
The SDK's DeclareAskWorkers now declares each queue's two workers, main's and the named asks' (accept.<queue>.<asker>),
and the puller takes from both; the bed declared main's worker again filtering both forms, which overlaps the named
worker and the work queue refused ("filtered consumer not unique", 15 tests). The kind is a bed declaring by hand
what the SDK declares: the builder's bed was the only one whose own consumer overlaps the SDK's, and now declares
none. Behind it, the builder's seat server admits no caller of mesh-builds.reserved until the seat list holds
mesh-builds' definition (A-278); the bed's seat-definitions answers it from the contracts module's own file.

Builds: design 47 G §544, §600, A-115, A-278

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 13:02:03 +01:00
jschoubben 8e50fab811 Item 1 (join 11): an entry the catalog holder says it holds none of is not-found, so a held want is passed again
A process's call gives the holder's own answer as its error (busretry.Answered); the entries kept by
fingerprint took that for a call that reached no holder and kept the entry asked, so §298's order edge
on the unread entry held the want for good and no pass ran again (the assigner's
TestWantsAreWrittenAndNoDifferenceIs, rule 7 "waits in place for the catalog entry").

Builds: design 47 G §614, §298, A-259, A-260

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 12:56:02 +01:00
jschoubben bec5278a89 Area 7 part 1 (join 11): the assigner's bed takes every seat's events on EVENTS and answers the seat list
The bed's kept streams (running, machine-away, machine-back, version-delivered) took subjects of their own, so a test that
widened EVENTS met "subjects overlap". They now source EVENTS' messages of their subject, as the grants part makes them
(KeptEvent.StreamConfig), and EVENTS takes mesh.seat.*.event.>. The bed answers the seat mesh-catalog's seat-definitions
from mesh-sdk's seatlisttest copy and its verb entry from the catalog half, so the seat server admits a caller once the
list is read (A-278). The composition step test calls input on its subject naming the caller (A-179) and waits for the
seat list read and the sourced running messages. TestTheCompositionStepComposesEachMachineThroughTheBuildSeat passes;
TestWantsAreWrittenAndNoDifferenceIs still fails (rule 7: web on ace held on an unread catalog entry).

Builds: design 47 G §354, §610, A-179, A-278

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 12:38:36 +01:00
jschoubben cdc6e1f521 Item 5, area 8 (join 11): the grants part lets a caller of a marked verb hear its own calls' ends
A holder says a held call's end on its seat's gated-ended, kept last per subject for a day in SEAT_<seat>_gated-ended,
which the grants part makes from the definition seatdef.Resolve gives (A-264). The caller is granted hearing
gated-ended.<caller>.> under its own escaped account name, and an ordered consumer on that stream filtered to it, from its
invokes of the marked verb by name; a module or process that answers a marked verb is granted saying the event to any
caller. No process of mesh-delivery holds a marked verb, so no holder here takes NewGateChannel.

Builds: design 47 G §677, §700, A-264, A-273

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 12:24:48 +01:00
jschoubben 4194e93a67 Area 2 (join 11): every seat verb and build-seat queue a delivery module calls is in its invokes
The grants part grants a seat verb only to a module that names it in invokes (GR8), so a call missing from a
manifest is refused live. Listed every module's seat-verb calls in code (constant clients, seatlist.HolderOf,
operatorask, buildrun's drops and puts) against its invokes: the teller asks who holds operator-channel
(operatorask.Bucket) and the checker drops asks of the image build seat. Every asker of a build seat names the
queues it asks as seat:<seat>.accept.<queue> (A-231): the runner check and delivery, the assigner check, the
builder delivery, the checker check and recheck; the indexer had its entry. The validator judges that form
through mesh-sdk's catalogue.QueueInvoke against the kinds the seat accepts.

mesh-grants: a consumed seat view whose seat has no holder on record grants nothing instead of refusing the whole
module (TestGrants); TestCallersAndWhyRefused and TestSentStoresRead take §610's class defaults.

Builds: design 47 G §544, §601, §610, §616, A-231, A-179

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 12:17:50 +01:00
jschoubben 4f076c6cc3 Area 4 (join 11): the indexer's TestManifestDeclarations reads its readers' invokes in both forms
The readers' invokes are read with mesh-sdk's catalogue.InvokedVerbs, so a long-form {verb, fields} entry (the
assigner's) is read rather than refused by the test's own decode.

Builds: design 47 G A-275, §558

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:56:44 +01:00
jschoubben a59e40c02f A-280: the grants part lists a module's finding-events stream in its membership
For a module that requires finding-events and is bound, the membership lists the stream its binding names, the subject
mesh.bus.<module>.finding-events.{event}.<node> and the finding events, so the tool runner carrying a stdio module (the
enrolment) says an emitted finding event there; the test holds the enrolment's membership.

Builds: design 47 G A-280, A-274, §529

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:56:08 +01:00
jschoubben af96eeba86 A-274: the watchman, forge bridge, teller and view pass their finding-events binding to the finding writer
Each asks the seat mesh-broker's show for its finding-events entry (process.Binding, started without waiting), passes it
as the writer's Bindings and hears the seat's recreated and dropped; the watchman's one handler of the seats' events
hands those two to the binding, since a message has one taker. The teller, view and watchman manifests gain the invoke
seat:mesh-broker.show and consume mesh-broker.recreated and dropped. The forge bridge's and the watchman's whole tests
answer show and read the finding-written under the binding's subject.

Builds: design 47 G A-274, §529, §577, A-13

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:56:08 +01:00
jschoubben 8f7fd39e21 A-277: the manifest validator reads a state's max-mib and judges an approvals state as §677 declares it
The template state takes max-mib (1 to 8192, as the old state section reads it). A state named approvals is refused
without key-ttl true, with ttl-seconds other than 172800 (approval.KeptFor, 48 hours), or with max-mib above 64; with
none declared its bucket takes the default 64 MiB.

Builds: design 47 G A-277, A-270, §677

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:42:16 +01:00
jschoubben db3f07d277 A-278: the assigner, builder, indexer and pipeline runner pass seatlist.Definition to AnswerSeat
Their four copies of the seat-definition function go; each passes its seat list part's reader to mesh-sdk's one.

Builds: design 47 G A-278, A-186

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:39:57 +01:00
jschoubben 7c461a96ae Join 11: merge main (mesh-delivery #206): the checker's compositions cap and drop tool, the assigner's heard reads-changed
G's grants already carry a state's max-mib onto its bucket (Bucket.MaxBytes, §469); main's second copy of that cap in
BucketStreamConfig and Composed is dropped for G's, and main's tests (the declared cap row, the held bucket raised)
are kept. The checker keeps G's version 0.1 (§368) with main's compositions max-mib 256.

Builds: design 47 G §469, §368; A-277 (since mesh-delivery #206 the grants part carries max-mib)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:30:57 +01:00
jschoubben ef142bb8c0 Area 3 (join 11): the runner clears pipeline-waits when its awaited version runs healthy
The finding pipeline-waits was raised at the wait's bound and nothing cleared
it. It now names the awaited runner fingerprint in one evidence entry,
`awaited <fp>`, written when it is raised (A-276), and the runner's hearing of
the node-engine seat's running clears exactly the findings whose entry names
the fingerprint said healthy (A-218), through its held writer, which holds what
its state findings held at its start: a finding raised before a restart is
cleared too, and one awaiting another fingerprint stands. The summary is never
read for it. A clear that fails has the running heard again.

Builds: design 47 G lead answers A-218, A-276 (join 11 area 3)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:24:16 +01:00
mesh-tools 983c46e257 Merge pull request 'Grants carry a state's declared cap; the checker's compositions get room and a drop tool; the assigner trusts no stale reads (issue 1975)' (#206) from fix/engine-reads-and-compositions into main 2026-11-12 10:23:30 +00:00
jschoubben 2242ae3c46 Area 4 (join 11): buildstep reads no bus, not even through buscalls
The builder's published package reached the bus library through buildstep,
whose KeptBuildsOf took mesh-sdk's buscalls.ObjectInfo, and buscalls now
imports nats.go for its seat chunks. buildstep's layouts, keys and codecs
are read by modules that never touch the bus (its own guard), so the kept
build of one object is judged from the object's own fields (KeptBuildOf,
SortKept) and the build module lists its store itself. The guard now also
refuses a bus library reached through an import, the kind that let this in.

Builds: design 47 G (join 11 area 4: builds TestThePackageReachesNoBus, buildstep's bus-free guard)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:21:29 +01:00
jschoubben bc78e01b6f Area 2 (join 11): the order-wait fixture's machine is online again
The five §298 order-wait tests of b2l (A-245, A-258, A-259, A-260) held no
wait and said none after the merge with b2f: b2l's fixture put ace's presence
as online (presenceValue(true)), and the merge rewrote it as b2f's
heardPresence("ace", true, ...), whose flag says away. With every node away
no module had a canary, so no want moved and no order edge was held (an order
wait starts only on an online node, §268). The fixture now hears ace back;
the order waits are built as those answers have them, unchanged.

Builds: design 47 G lead answers A-245, A-258, A-259, A-260 (join 11 area 2)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:17:22 +01:00
jschoubben 9ff6d98820 Area 6 (join 11): every AnswerSeat caller follows a seat list and its grant
AnswerSeat checks a call's caller against the seat's definition its caller
reads from the seat list it follows (A-186), refusing every caller while the
list is unread. The assigner (mesh-wants input), the builder (mesh-builds
reserved) and the indexer (mesh-catalog input) hand it the definition their
seat list holds once heard; the pipeline runner, which followed none, follows
one over its calls connection and hub, read again once its events are live,
and its manifest invokes seat-definitions and consumes the list's two events.
The runner's and the indexer's integration beds answer the seat list, and the
indexer's input test calls with a caller the bus proved (A-179).

Builds: design 47 G lead answers A-179, A-186 (join 11 area 6)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:15:02 +01:00
jschoubben b83c546831 checker: compositions keeps ttl-seconds 259200 with max-mib 256; the texts say only what holds (issue 1975 note 6)
mesh/delivery merged: source.main moved to novox/mesh-delivery@983c46e2576c
mesh/delivery-group group fix/engine-reads-and-compositions merged: every member is merged
mesh/check checking b83c546831b0 on 983c46e2576c | novox/mesh-delivery#206 in group fix/engine-reads-and-compositions
Builds: issue 1975 note 6 (the lead's review round 1; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:00:33 +01:00
jschoubben f28c49a976 grants: a state's declared max-mib reaches its bucket, and a held bucket is raised to it (issue 1975 note 6)
Builds: issue 1975 note 6 (the lead's review round 1; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:00:33 +01:00
jschoubben e12f4b608f assigner: the test drives the reads-changed handler (issue 1975 note 6)
Builds: issue 1975 note 6 (the lead's review round 1; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 11:00:33 +01:00
jschoubben a3306361ee checker: the state compositions is bounded at 256 MiB and a day, and a tool drops a check's kept requests
Builds: the lead's handover of 2026-11-12 (principle 7, principle 4; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:48:08 +01:00
jschoubben 3ec05dda1f assigner: a reads statement older than a reads-changed heard does not stand (issue 1975)
The assigner keeps each reads-changed event it hears beside its statement (enginereads.Keeper.HeardChanged),
reads a node as the event says while its statement is behind it, and asks again until the statement is as new.

Builds: issue 1975 note 4 (the lead's handover; no design line)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:48:08 +01:00
jschoubben 43de6790af Join 11: the reader release's node-engine claim case names a version G reads
The case main's validator release added names `version` "1", which G's
reader refuses (MAJOR.MINOR, design 47 G §368); it names 1.0.

Builds: design 47 G §368, §508

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:45:09 +01:00
jschoubben a1fbd5dfa7 Join 11: the merged heads compile where no area's fix is owed
The join's importers name the delivery repository's moved contracts and sdk
(MV1), node-tools' tests use mesh-sdk's gate, the duplicate node-engine claim
rule of the reader release gives way to G's, and the assigner names its first
watched branch, never a constant. The seat holders' AnswerSeat callers are
area 6's.

Builds: design 47 G join 11 (merge of fix round 11)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:41:44 +01:00
jschoubben 6457cf1eba Join 11: the indexer reads a validation's answer with StepEnded.ReadOutput (B5g6 piece 2b)
The validation run's answer is read from the step's end through steprun's
ReadOutput, whole or from the build seat's output object, and the indexer
invokes seat:node-build-go.output for it (A-254); the patch B5g6 left for
the join, applied on the merged heads.

Builds: design 47 G §712, §713; lead answers A-254, A-268

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:37:39 +01:00
jschoubben 31662c2af9 Merge branch 'feat/47-G-fix11-b5g7' into feat/47-G-join11 2026-11-12 10:37:21 +01:00
jschoubben 66fc450ae8 Merge branch 'feat/47-G-fix11-b5g6' into feat/47-G-join11 2026-11-12 10:37:21 +01:00
jschoubben 08d38f651b Merge branch 'feat/47-G-fix11-b5j' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/internal/assigngraph/graph_test.go
2026-11-12 10:37:21 +01:00
jschoubben 4e67d7e99f Merge branch 'feat/47-G-fix11-b5i' into feat/47-G-join11 2026-11-12 10:37:09 +01:00
jschoubben 967b636b74 Merge branch 'feat/47-G-fix11-b4e' into feat/47-G-join11
# Conflicts:
#	modules/mesh-grants/internal/buscompose/users.go
2026-11-12 10:37:09 +01:00
jschoubben 644aa8b46c Merge branch 'feat/47-G-fix11-b4b' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/graphkept.go
2026-11-12 10:36:56 +01:00
jschoubben 9fae9009c5 Merge branch 'feat/47-G-fix11-b3d' into feat/47-G-join11 2026-11-12 10:36:38 +01:00
jschoubben 9433140931 Merge branch 'feat/47-G-fix11-b2k' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go
#	modules/mesh-delivery-assigner/manifest_test.go
#	modules/mesh-delivery-assigner/module.json
2026-11-12 10:36:38 +01:00
jschoubben 4c2d8f034c Merge branch 'feat/47-G-fix11-b2l' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/buildended.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/graphkept.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/tools.go
#	modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go
#	modules/mesh-delivery-assigner/internal/assign/wants_test.go
#	modules/mesh-delivery-assigner/manifest_test.go
#	modules/mesh-delivery-assigner/module.json
2026-11-12 10:36:04 +01:00
jschoubben c28d12330e Merge branch 'feat/47-G-fix11-b2f' into feat/47-G-join11 2026-11-12 10:32:18 +01:00
jschoubben d89a6bacc6 Merge branch 'feat/47-G-fix11-b1g' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-contracts/seats/mesh-pipeline-runner/seat.json
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/main.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/steps.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/verbs.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/verbs_test.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/views.go
#	modules/mesh-delivery-pipeline/internal/pipeline/start.go
#	modules/mesh-delivery-pipeline/manifest_test.go
#	modules/mesh-delivery-pipeline/module.json
2026-11-12 10:32:18 +01:00
jschoubben 5db642e161 Merge branch 'feat/47-G-fix11-b1f' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline-tools/main.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline-tools/main_test.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/findingwriter.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/main.go
#	modules/mesh-delivery-pipeline/cmd/mesh-delivery-pipeline/views.go
#	modules/mesh-delivery-pipeline/go.mod
#	modules/mesh-delivery-pipeline/internal/pipeline/read_test.go
#	modules/mesh-delivery-pipeline/internal/pipeline/start.go
#	modules/mesh-delivery-pipeline/manifest_test.go
#	modules/mesh-delivery-pipeline/module.json
2026-11-12 10:30:22 +01:00
jschoubben 4aaa805f2a Merge branch 'feat/47-G-fix11-b1e' into feat/47-G-join11 2026-11-12 10:28:34 +01:00
jschoubben 2bb1b273fe Merge branch 'feat/47-G-fix11-b6b' into feat/47-G-join11 2026-11-12 10:28:34 +01:00
jschoubben 2551d13cf3 Merge branch 'feat/47-G-fix11-b7' into feat/47-G-join11
# Conflicts:
#	.gitignore
2026-11-12 10:28:26 +01:00
jschoubben 1e00430eef Merge remote-tracking branch 'origin/main' into feat/47-G-join11
# Conflicts:
#	modules/mesh-delivery-indexer/judge/rules.go
#	modules/mesh-delivery-indexer/judge/rules_test.go
2026-11-12 10:28:05 +01:00
jschoubben cfa02ea26e Join 11: refuse a committed program anywhere in the repository
A compiled program reached a commit a second time (the view's 18 MB program at
its module's root, which the command-folder pattern did not cover): the sdk's
nobinaries test refuses every tracked executable, as the catalogue's
checks/nobinaries does, and .gitignore covers a module's root.

Builds: design 47 G join (the kind's guard, fix-a-bug-met-twice)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:22:17 +01:00
jschoubben 88285ad5e2 B5g7-2: the indexer takes a pushed message alike with a merged one
Its head stands where a merged message's merge stands: forgeKind, pending refs, the newest load and the revision's head.

Builds: design 47 G §509, §714, A-269

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 10:18:01 +01:00
jschoubben 5355f4826a B5g7-1: the validation's job names no Go module; a Go bundle carries no package
Reverts the Go-bundle package of 53caa3ba; the run's program is the directory ./cmd/mesh-judge under the go.mod the build reads.

Builds: design 47 G §712, §676, §491, A-268

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:58:09 +01:00
jschoubben b58b3a9f6a AS5-5: the whole composition step against a stand-in node-engine and Go build seat
The assigner started whole takes the runner's composition step of a module on three machines, one away: it asks the two others'
engines for their inputs, puts one run ask per machine under its name, the stand-in build seat reads each request by mesh-wants'
input in chunks and says its step-ended with the composer's verdict, and the step's end fails naming the machine that does not
compose, warns of the one away, and keeps no input. The assigner says in its journal when it serves the step and when a machine
goes away or comes back.

Builds: design 47 G §354, §22, §63, §64, §389, A-240, A-252, A-254

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-12 09:57:26 +01:00