FB3, FB4, FB5: the bridge performs what the gate owes through the seat git and says each outcome, reads groups from the seat, and its owed tools

Taken over from the join (6ada2089, f1417ab0, 6e162a60, 3a4e62b0, 73fb42d7, ee15a280, a5476f62, 94a4e62a, 33907a81, e519cc87, e8f268c1) and fitted to the final
contracts: the seat's events are pull-updated, pull-merged, pull-closed, forge-delete; OwedEnded keeps only the fields §164 names; merge-pull
takes no ask. A merge act is performed only as a switched act (§169); from G the gate owes none (§167).

Builds: design 47 G §43, §45, §157, §161, §162, §163, §164, §167, §168, §169, §171, §250

Claude-Session: https://claude.ai/code/session_01JG73KEq4zoDfM9WtYpcQgZ
This commit is contained in:
2026-11-11 11:54:56 +01:00
parent 3a4768ab43
commit 0b597eb417
26 changed files with 1940 additions and 1492 deletions
@@ -13,9 +13,16 @@ import (
// All is every fixture's body named name of of (such as "file answers", "verb:file.answer"), in the file's order; a
// name with none fails the test.
func All(t testing.TB, name, of string) []json.RawMessage {
t.Helper()
return Seat(t, "git", "verbs", name, of)
}
// Seat is every fixture's body named name of of in a seat's fixtures file (such as "mesh-delivery", "events"), so the
// bridge's fakes of the seats it hears say what those seats say.
func Seat(t testing.TB, seat, file, name, of string) []json.RawMessage {
t.Helper()
_, here, _, _ := runtime.Caller(0)
raw, err := os.ReadFile(filepath.Join(filepath.Dir(here), "../../../../contracts/seats/git/fixtures/verbs.json"))
raw, err := os.ReadFile(filepath.Join(filepath.Dir(here), "../../../../contracts/seats", seat, "fixtures", file+".json"))
if err != nil {
t.Fatal(err)
}