As STREAM.INFO is, for every heard SEAT_ stream whatever its keep, so a part hearing an event kept by age
reads it whole from its first message at each start (mesh-sdk process.FromFirst); no manifest word.
Builds: design 47 G A-233, A-189
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
The builder's `build.ended` stream declares last-per-subject; the grants part composes it one message per subject and its readers read
whole; the assigner reads it whole at its start then follows it (consumes `build.ended.**`), so what was built and a failed build's error
survive its restart. world.built, buildNeeds, manifestOf and the put verbs read the ends; the manifest reads no builder bucket;
assigner_put's fingerprint-prefix form goes.
Builds: design 47 G A-181, A-162, §556, §703
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
A reader turns a stream's events into the bus's subjects with mesh-sdk's
buscompose.WirePattern; the grants part's copy goes. The catalog graph
entry already carries the validated manifest whole, its needs-approval,
emits and streams with their grant among it (design 47 G §443).
Builds: design 46 7-approval-mark §5
Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
Cause of the five forge bridge integration failures: HearSeatEvents (G §641) asks STREAM.INFO of the kept stream, which the grants part never composed.
Builds: design 47 G §641, A-19, §556
ADR 0592 §5, §6, §9, §25 (the grants part's share by ADR 0593 §10): an object bucket and a stream that
keeps its history are created create-only with their caps and no age limit, refusing new data when full;
the owner alone writes its bucket and a module its grant names reads it; the part raises
mesh-grants.history-full once any passes 75 percent. Each engine also reads the indexer's manifest
verdicts by one key for compose-candidate.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
ADR 0593 §1: buscompose's engine moves from mesh-sdk into mesh-grants/internal/buscompose, its golden
user lists unchanged; the controller's raise and assert code is left behind, and the merged switch
test runs inside the part's whole integration test.
Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL