Class defaults: an act, a warrant and an accepted kind take the operator, sessions and invokers

seatdef.DefaultCallers follows §610: a read keeps invokers, persons and sessions; act, warrant and
accept take operator, sessions and invokers. The class table's rows say so.

Builds: design 47 G §610; lead answer A-179

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
This commit is contained in:
2026-11-12 05:47:15 +01:00
parent aabece5ce3
commit 2612bc470d
2 changed files with 10 additions and 11 deletions
+5 -7
View File
@@ -101,15 +101,13 @@ func CallerEntryProblem(e string) string {
"holder:<seat>@same-node", e)
}
// DefaultCallers are the callers a verb that names none takes by its class (design 47 G §391): a read takes invokers,
// persons and sessions; an act the operator and sessions; a warrant the operator. A verb that names no class is a
// read.
// DefaultCallers are the callers a verb that names none takes by its class (design 47 G §610, amending §391): a read takes
// invokers, persons and sessions; an act, a warrant and an accepted kind (`accept`) the operator, sessions and invokers. A
// verb that names no class is a read.
func DefaultCallers(class string) []string {
switch class {
case ClassAct:
return []string{CallerOperator, CallerSessions}
case ClassWarrant:
return []string{CallerOperator}
case ClassAct, ClassWarrant, "accept":
return []string{CallerOperator, CallerSessions, CallerInvokers}
}
return []string{CallerInvokers, CallerPersons, CallerSessions}
}
+5 -4
View File
@@ -290,7 +290,7 @@ func TestAKeptEventsStreamIsNamedFromTheSeatAndTheEvent(t *testing.T) {
}
}
// Design 47 G §391: a verb that names no callers takes its class's default, a verb that names them keeps them.
// Design 47 G §391, §610: a verb that names no callers takes its class's default, a verb that names them keeps them.
func subAVerbWithoutCallersTakesItsClassDefault(t *testing.T) {
for _, c := range []struct {
verb Verb
@@ -298,10 +298,11 @@ func subAVerbWithoutCallersTakesItsClassDefault(t *testing.T) {
}{
{Verb{}, "invokers persons sessions"},
{Verb{Class: ClassRead}, "invokers persons sessions"},
{Verb{Class: ClassAct}, "operator sessions"},
{Verb{Class: ClassWarrant}, "operator"},
{Verb{Class: ClassAct}, "operator sessions invokers"},
{Verb{Class: ClassWarrant}, "operator sessions invokers"},
{Verb{Class: ClassAct, Callers: &Callers{List: []string{"seat:mesh-broker"}}}, "seat:mesh-broker"},
{Verb{Class: ClassWarrant, Callers: &Callers{Text: "a person"}}, "operator"},
{Verb{Class: ClassWarrant, Callers: &Callers{Text: "a person"}}, "operator sessions invokers"},
{Verb{Class: "accept"}, "operator sessions invokers"},
} {
if got := strings.Join(c.verb.EffectiveCallers(), " "); got != c.want {
t.Errorf("%+v is open to %q, want %q", c.verb, got, c.want)