Keep a join token nowhere but in its caller's answer

The calls the controller serves are kept on the bus with their answers,
and calls answers anyone who may call its seat. A token is the one-time
right to become a machine of the mesh, so the token verb's answer is kept
as withheld (novox/hq ADR 0169).
This commit is contained in:
jochen
2026-10-08 02:06:19 +02:00
parent b05ac4f4b2
commit 913095d291
2 changed files with 41 additions and 0 deletions
+17
View File
@@ -302,9 +302,26 @@ func (l *CallLog) finish(c *Call, answer []byte, failed, answeredAlready bool) {
} else {
c.State = CallAnswered
}
if shownOnce[c.Seat+"."+c.Verb] {
// **A secret shown once is never kept on the bus** (novox/hq ADR 0169): a join token is the
// one-time right to become a machine of the mesh, and `calls` answers anyone who may call the
// seat. Its caller was sent it; kept in this process's memory only when its caller has not
// had it yet — told the call was still running — and then until a restart, never beyond.
withheld, _ := json.Marshal(map[string]any{"not kept": "a secret shown once, to its caller"})
onTheBus := *c
onTheBus.Answer = withheld
if !answeredAlready {
c.Answer = withheld
}
l.keep(onTheBus)
return
}
l.keep(*c)
}
// shownOnce are the verbs whose answer is a secret shown once to its caller, as `<seat>.<verb>`.
var shownOnce = map[string]bool{"mesh-controller.token": true}
// Recent is the kept calls, newest first, as copies: this process's from memory, and, when they are
// kept durably, every other the bus holds — a call a controller before this one served included.
// Memory wins for a call in both, being the newer word on it. A bus that cannot be read is said in
+24
View File
@@ -199,3 +199,27 @@ func TestAHandoverRefusalIsMarkedRetryable(t *testing.T) {
t.Fatal("an ordinary refusal was marked to be asked again")
}
}
// **A join token is shown to its caller and kept nowhere** (novox/hq ADR 0169): `calls` answers anyone
// who may call the seat, and a token is the one-time right to become a machine of the mesh.
func TestAJoinTokenIsShownToItsCallerAndNotKept(t *testing.T) {
l, a := NewCallLog(), newAnswers(t)
writes := make(chan Call, 4)
l.writes = writes
l.serveCall("mesh-controller", "token", json.RawMessage(`{"new":"laptop"}`), "_INBOX.x.1",
func(context.Context, json.RawMessage) (any, error) { return "token for laptop: s3cret-join", nil },
a.respond, nil)
if got, _ := a.only()["result"].(string); !strings.Contains(got, "s3cret-join") {
t.Fatalf("its caller was not shown the token: %v", got)
}
recent, _ := l.Recent()
if len(recent) != 1 || strings.Contains(string(recent[0].Answer), "s3cret-join") {
t.Fatalf("the token was kept in memory: %+v", recent)
}
close(writes)
for c := range writes {
if strings.Contains(string(c.Answer), "s3cret-join") {
t.Fatalf("the token was sent to be kept on the bus: %s", c.Answer)
}
}
}