WBS: the first fixtures are in, and what byte-for-byte means

This commit is contained in:
2026-09-26 23:41:15 +02:00
parent 5c193b3f54
commit 2f9bb73685
+15 -5
View File
@@ -221,17 +221,27 @@ quietly carried traffic would be step 5 arriving early and unrehearsed.
that decides what "agreeing" means for everything after it. It is the largest step and the one that
pays for itself furthest away.
- [ ] 3.1 **the suite first, on the bus the mesh has** — fixtures for the envelope and its required
headers, the contributions file, a served tool call and a grant, capturing what the three
implementations do *today*. Written first because a suite born on the new bus certifies
whatever the new bus happens to do
- [x] 3.1/3.3 **the fixtures** — one directory in the sdk, read by each implementation's own
runner rather than copied into either, because a fixture copied twice is two fixtures. The
Go emitter and the runtime's NATS client both pass the first: every required header set,
each value in the pinned shape, the subject derived the same way, and the payload the body
alone.
**The suite also had to settle what "byte-for-byte" can mean**, which ADR 0074 stated and
nothing had yet had to implement. The envelope is exact — subject, required headers, names
and formats — because that is what two implementations get wrong invisibly. The body is
not: Go sorts a map's keys and JavaScript keeps insertion order, so identical bytes would
commit every implementation to a canonical JSON encoder, to buy a property the mesh never
uses. Read strictly it would have sent somebody writing one.
Still to capture: a served tool call, a grant and its answer, and the contributions file —
the other three ADR 0074 names.
- [x] 3.2 design 19 rewritten from exchanges, queues and routing keys to the subjects and streams of
design 25 §2–§3, per capability, with ADR 0074's model untouched: floor plus capabilities, an
implementation legitimate when it claims less, identity from the sealed credential, dedup on
`x-event-id`. Claims checked against a running server are marked *verified* in the text, so
a reader can tell what was measured from what was reasoned. One limitation lifts with the
transport: a module may now call another's tool, which issue 049 recorded it could not.
- [ ] 3.3 the fixtures restated on NATS, and the capability each implementation claims
- [ ] 3.4 the controller's link on NATS
- [ ] 3.5 the host's link on NATS — mirroring, still importing nothing
- [x] 3.6 the tool runtime's client on NATS, behind the unchanged sdk contract — round-tripped