A raise class gated route_to human
A message.send 0 "string"
A message.send 1 "string"
A message.send 2 "string"
A action.allowed uses recorded 0
A authorize after 3 sends {"class":"gated","decision":"88c5eca8-1a18-48f7-a1af-e06ca87009f3"}
B role.revoke verb {"revoked":true}
B action.allowed uses recorded 0
B authorize role.revoke after the verb {"class":"gated","decision":"30853e6f-53e2-4bc6-83c7-a6542bd9dcbf"}
B authorize again decision-consumed
C raise class cross-role route_to cto
C current class is gated; authorize with arbiter approval:
C authorize 0 {"class":"gated","decision":"07c035bb-5f82-4781-beee-744d03b9ca41"}
C authorize 1 {"class":"gated","decision":"07c035bb-5f82-4781-beee-744d03b9ca41"}
C authorize 2 {"class":"gated","decision":"07c035bb-5f82-4781-beee-744d03b9ca41"}
D authorize 0 {"class":"cross-role","decision":"5c43af42-f444-44d8-aace-8f1d3729dcc9"}
D authorize 1 {"class":"cross-role","decision":"5c43af42-f444-44d8-aace-8f1d3729dcc9"}
D authorize 2 {"class":"cross-role","decision":"5c43af42-f444-44d8-aace-8f1d3729dcc9"}
E second Store writer-locked
✔ A gated message.send approval: reuse through the verb, then authorize (98.251242ms)
✔ B role.revoke verb, then authorize with the same decision (82.323116ms)
✔ C cross-role approval after policy makes the action gated (97.870786ms)
✔ D cross-role approval reuse under unchanged policy (80.465719ms)
✔ E a second Store on the same data root refuses, so writers serialize in one process (36.405801ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 449.019454
