@consiliency/agent-board-schema 1.63.0 → 1.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +25 -0
  2. package/fixtures/already-applied.json +20 -0
  3. package/migrations/20261014000200_agent_board_last_owner.sql +239 -0
  4. package/migrations/20261015000100_agent_board_session_provenance.sql +367 -0
  5. package/migrations/20261015000200_agent_board_request_preserve_removed.sql +87 -0
  6. package/migrations/20261015000300_agent_board_rls_correlation.sql +132 -0
  7. package/migrations/20261015000400_agent_board_resolution_authority.sql +146 -0
  8. package/package.json +1 -1
  9. package/schema-manifest.json +48 -3
  10. package/src/deployment-drift-main.test.mjs +156 -0
  11. package/src/deployment-drift-script.test.mjs +14 -1
  12. package/src/policy-comment.test.mjs +17 -0
  13. package/src/tooling.test.mjs +10 -2
  14. package/tests/agent_board_atomic_fleet_onboarding.test.sql +3 -1
  15. package/tests/agent_board_atomic_fleet_onboarding_runtime.test.sql +7 -0
  16. package/tests/agent_board_consent_gating.test.sql +4 -4
  17. package/tests/agent_board_fk_lock_edges.test.sql +3 -2
  18. package/tests/agent_board_gatenull_membstate.test.sql +7 -4
  19. package/tests/agent_board_grant_target_role.test.sql +4 -4
  20. package/tests/agent_board_hosted_delegates.test.sql +5 -3
  21. package/tests/agent_board_invite_no_downgrade.test.sql +5 -3
  22. package/tests/agent_board_ledger_authority.test.sql +7 -0
  23. package/tests/agent_board_policy_correlation.test.sql +189 -0
  24. package/tests/agent_board_request_removed.test.sql +96 -0
  25. package/tests/agent_board_resolution_authority.test.sql +190 -0
  26. package/tests/agent_board_role_guard.test.sql +319 -0
  27. package/tests/agent_board_rolereset.test.sql +17 -27
  28. package/tests/agent_board_roomdeleg.test.sql +8 -0
  29. package/tests/agent_board_roomown.test.sql +3 -1
  30. package/tests/agent_board_rowid.test.sql +4 -1
  31. package/tests/agent_board_session_provenance.test.sql +106 -0
  32. package/tests/catalog/function_execute_privileges.json +11 -2
  33. package/tests/catalog/p_metadata_parameters.json +4 -0
  34. package/tests/isolation/expected/consent_approval_lock.out +1 -1
  35. package/tests/isolation/expected/last_owner_departure.out +562 -0
  36. package/tests/isolation/specs/atomic_fleet_authority_races.spec +8 -3
  37. package/tests/isolation/specs/atomic_fleet_binding_revoke.spec +0 -3
  38. package/tests/isolation/specs/atomic_fleet_board_archive.spec +0 -3
  39. package/tests/isolation/specs/atomic_fleet_human_fresh_revoke.spec +0 -3
  40. package/tests/isolation/specs/atomic_fleet_identity_disposition.spec +0 -3
  41. package/tests/isolation/specs/atomic_fleet_lifecycle_races.spec +0 -3
  42. package/tests/isolation/specs/atomic_fleet_subtree_lock_order.spec +0 -3
  43. package/tests/isolation/specs/ceiling_setter_lock_before_upsert.spec +0 -3
  44. package/tests/isolation/specs/claimpolicy_acquire_revert_race.spec +0 -2
  45. package/tests/isolation/specs/claimpolicy_board_scope.spec +0 -2
  46. package/tests/isolation/specs/claimpolicy_claimrow_lock_order.spec +0 -2
  47. package/tests/isolation/specs/claimpolicy_isolation_refusal.spec +0 -2
  48. package/tests/isolation/specs/claimpolicy_renew_revert_race.spec +0 -2
  49. package/tests/isolation/specs/claimpolicy_writer_keyshare.spec +0 -2
  50. package/tests/isolation/specs/consent_approval_lock.spec +13 -8
  51. package/tests/isolation/specs/consent_emit_actual_state.spec +0 -1
  52. package/tests/isolation/specs/grant_target_role_race.spec +0 -1
  53. package/tests/isolation/specs/hosted_delegate_add_tombstone_race.spec +0 -1
  54. package/tests/isolation/specs/hosted_delegate_tombstone_revoke_race.spec +0 -1
  55. package/tests/isolation/specs/hosted_delegate_withdraw_evict_race.spec +0 -1
  56. package/tests/isolation/specs/last_owner_departure.spec +137 -0
  57. package/tests/isolation/specs/ledger_authority_revoke.spec +0 -3
  58. package/tests/isolation/specs/onboarding_ceiling_lock_order.spec +0 -3
  59. package/tests/isolation/specs/outbox_wake_ordering.spec +0 -1
  60. package/tests/isolation/specs/session_identity_links.spec +3 -1
  61. package/tests/isolation/specs/session_identity_tombstone_onboarding.spec +0 -1
  62. package/tests/isolation/specs/signed_grant_onboarding_deadlock.spec +0 -1
  63. package/tests/isolation/specs/signer_lifecycle_revoke.spec +0 -1
@@ -133,8 +133,6 @@ teardown
133
133
  delete from agent_board.threads where id = '40500000-0000-4000-8000-000000000090';
134
134
  delete from agent_board.board_membership_events where board_id in (
135
135
  select id from agent_board.boards where slug = 'cpr-inv-board');
136
- delete from agent_board.board_memberships where board_id in (
137
- select id from agent_board.boards where slug = 'cpr-inv-board');
138
136
  delete from agent_board.boards where slug = 'cpr-inv-board';
139
137
  delete from agent_board.fleet_revocation_events where subject_id = '40500000-0000-4000-8000-0000000000c0';
140
138
  delete from agent_board.fleet_machine_agents where machine_id = '40500000-0000-4000-8000-0000000000c0';
@@ -59,8 +59,6 @@ teardown
59
59
  delete from agent_board.threads where id = '40500000-0000-4000-8000-000000000050';
60
60
  delete from agent_board.board_membership_events where board_id in (
61
61
  select id from agent_board.boards where slug = 'cpr-iso-board');
62
- delete from agent_board.board_memberships where board_id in (
63
- select id from agent_board.boards where slug = 'cpr-iso-board');
64
62
  delete from agent_board.boards where slug = 'cpr-iso-board';
65
63
  delete from agent_board.agents where id = '40500000-0000-4000-8000-000000000004';
66
64
  delete from auth.users where id = '40500000-0000-4000-8000-0000000000d1';
@@ -99,8 +99,6 @@ teardown
99
99
  delete from agent_board.threads where id = '40500000-0000-4000-8000-000000000020';
100
100
  delete from agent_board.board_membership_events where board_id in (
101
101
  select id from agent_board.boards where slug = 'cpr-ren-board');
102
- delete from agent_board.board_memberships where board_id in (
103
- select id from agent_board.boards where slug = 'cpr-ren-board');
104
102
  delete from agent_board.boards where slug = 'cpr-ren-board';
105
103
  delete from agent_board.agents where id = '40500000-0000-4000-8000-000000000002';
106
104
  delete from auth.users where id = '40500000-0000-4000-8000-0000000000b1';
@@ -56,8 +56,6 @@ teardown
56
56
  delete from agent_board.threads where id = '40500000-0000-4000-8000-000000000060';
57
57
  delete from agent_board.board_membership_events where board_id in (
58
58
  select id from agent_board.boards where slug = 'cpr-ks-board');
59
- delete from agent_board.board_memberships where board_id in (
60
- select id from agent_board.boards where slug = 'cpr-ks-board');
61
59
  delete from agent_board.boards where slug = 'cpr-ks-board';
62
60
  delete from agent_board.agents where id = '40500000-0000-4000-8000-000000000005';
63
61
  delete from auth.users where id = '40500000-0000-4000-8000-0000000000e1';
@@ -24,9 +24,9 @@
24
24
  # it does to A, isolating the lock as the single variable. The withdrawer withdraws
25
25
  # the ACTIVE row A; it blocks on the SET-lock, then applies after commit.
26
26
  #
27
- # Both sessions run as service_role — the SET-lock sits AFTER the actor check and is
28
- # actor-independent, so this needs no auth.users identity substrate; the lock trace
29
- # is identical to the authenticated path.
27
+ # Consiliency/message-board#668: the approver has a resolved active owner identity,
28
+ # matching the resolver's flat authority gate. The withdrawer remains service_role;
29
+ # the whole-set lock must still serialize the same two physical rows.
30
30
  #
31
31
  # MUTATION SIGNAL (a TRACE diff): drop the `for update` block, OR narrow it with
32
32
  # `and bm.membership_state in ('requested','invited')` — either leaves A unlocked, so
@@ -35,15 +35,20 @@
35
35
 
36
36
  setup
37
37
  {
38
- insert into agent_board.agents(id, agent_type, handle, display_name, status) values
39
- ('115a0000-0000-4000-8000-000000000001', 'agent', 'iso115-owner', 'Iso115 Owner', 'active'),
40
- ('115a0000-0000-4000-8000-000000000002', 'agent', 'iso115-subject', 'Iso115 Subject', 'active');
38
+ insert into auth.users(id, instance_id, aud, role, email) values
39
+ ('115d0000-0000-4000-8000-000000000001', '00000000-0000-0000-0000-000000000000',
40
+ 'authenticated', 'authenticated', 'iso115-owner@example.test');
41
+ insert into agent_board.agents(id, agent_type, handle, display_name, status, auth_user_id, owner_user_id) values
42
+ ('115a0000-0000-4000-8000-000000000001', 'agent', 'iso115-owner', 'Iso115 Owner', 'active', '115d0000-0000-4000-8000-000000000001', '115d0000-0000-4000-8000-000000000001'),
43
+ ('115a0000-0000-4000-8000-000000000002', 'agent', 'iso115-subject', 'Iso115 Subject', 'active', null, null);
41
44
  insert into agent_board.boards(id, slug, name, created_by_agent_id, visibility, status)
42
45
  values ('115b0000-0000-4000-8000-000000000001', 'iso115-board', 'Iso115 Board',
43
46
  '115a0000-0000-4000-8000-000000000001', 'private', 'active');
44
47
  -- Legal (active, pending) duplicate for the subject: A is joined (active), P is a
45
48
  -- separate pending request. The active-unique index permits it (only A is active).
46
49
  insert into agent_board.board_memberships(id, board_id, agent_id, membership_state, role, created_by_agent_id) values
50
+ ('115c0000-0000-4000-8000-000000000001', '115b0000-0000-4000-8000-000000000001',
51
+ '115a0000-0000-4000-8000-000000000001', 'joined', 'owner', '115a0000-0000-4000-8000-000000000001'),
47
52
  ('115c0000-0000-4000-8000-0000000000aa', '115b0000-0000-4000-8000-000000000001',
48
53
  '115a0000-0000-4000-8000-000000000002', 'joined', 'member', '115a0000-0000-4000-8000-000000000002'),
49
54
  ('115c0000-0000-4000-8000-0000000000bb', '115b0000-0000-4000-8000-000000000001',
@@ -53,16 +58,16 @@ setup
53
58
  teardown
54
59
  {
55
60
  delete from agent_board.board_membership_events where board_id = '115b0000-0000-4000-8000-000000000001';
56
- delete from agent_board.board_memberships where board_id = '115b0000-0000-4000-8000-000000000001';
57
61
  delete from agent_board.boards where id = '115b0000-0000-4000-8000-000000000001';
58
62
  delete from agent_board.agents where id in ('115a0000-0000-4000-8000-000000000001','115a0000-0000-4000-8000-000000000002');
63
+ delete from auth.users where id = '115d0000-0000-4000-8000-000000000001';
59
64
  }
60
65
 
61
66
  # approver resolves the subject to 'joined'. With active row A present this is the
62
67
  # Option-1 path — it acquires the whole-set `for update` and returns A untouched
63
68
  # (retiring the dangling pending row P via the sink, but never writing A).
64
69
  session "approver"
65
- step "a_begin" { BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role'; }
70
+ step "a_begin" { BEGIN; SET LOCAL "request.jwt.claim.role" = 'authenticated'; SET LOCAL "request.jwt.claim.sub" = '115d0000-0000-4000-8000-000000000001'; }
66
71
  step "a_resolve" {
67
72
  select membership_state
68
73
  from agent_board.resolve_board_request(
@@ -37,7 +37,6 @@ setup
37
37
  teardown
38
38
  {
39
39
  delete from agent_board.board_membership_events where board_id = '105b0000-0000-4000-8000-000000000001';
40
- delete from agent_board.board_memberships where board_id = '105b0000-0000-4000-8000-000000000001';
41
40
  delete from agent_board.boards where id = '105b0000-0000-4000-8000-000000000001';
42
41
  delete from agent_board.agents where id = '105a0000-0000-4000-8000-000000000001';
43
42
  }
@@ -65,7 +65,6 @@ teardown
65
65
  delete from agent_board.messages where thread_id = '67440000-0000-4000-8000-000000000001';
66
66
  delete from agent_board.threads where id = '67440000-0000-4000-8000-000000000001';
67
67
  delete from agent_board.board_membership_events where board_id = '67430000-0000-4000-8000-000000000001';
68
- delete from agent_board.board_memberships where board_id = '67430000-0000-4000-8000-000000000001';
69
68
  delete from agent_board.boards where id = '67430000-0000-4000-8000-000000000001';
70
69
  delete from agent_board.agents where id::text like '67420000-0000-4000-8000-00000000000_';
71
70
  delete from auth.users where id::text like '67410000-0000-4000-8000-00000000000_';
@@ -48,7 +48,6 @@ setup
48
48
  teardown
49
49
  {
50
50
  delete from agent_board.board_membership_events where board_id = '16591300-0000-4000-8000-000000000001';
51
- delete from agent_board.board_memberships where board_id = '16591300-0000-4000-8000-000000000001';
52
51
  delete from agent_board.boards where id = '16591300-0000-4000-8000-000000000001';
53
52
  delete from agent_board.agent_credentials
54
53
  where agent_id in (select agent_id from agent_board.delegate_instances where instance_id like 'iso\_at\_%');
@@ -74,7 +74,6 @@ teardown
74
74
  delete from agent_board.fleet_revocation_events where revoked_by_agent_id = '16591000-0000-4000-8000-000000000001';
75
75
  delete from agent_board.fleet_human_revocations where issuer = 'https://iso-tr.test';
76
76
  delete from agent_board.board_membership_events where board_id = '16591200-0000-4000-8000-000000000001';
77
- delete from agent_board.board_memberships where board_id = '16591200-0000-4000-8000-000000000001';
78
77
  delete from agent_board.boards where id = '16591200-0000-4000-8000-000000000001';
79
78
  delete from agent_board.agent_credentials
80
79
  where agent_id in (select agent_id from agent_board.delegate_instances where instance_id like 'iso\_tr\_%');
@@ -60,7 +60,6 @@ setup
60
60
  teardown
61
61
  {
62
62
  delete from agent_board.board_membership_events where board_id = '16322000-0000-4000-8000-000000000001';
63
- delete from agent_board.board_memberships where board_id = '16322000-0000-4000-8000-000000000001';
64
63
  delete from agent_board.boards where id = '16322000-0000-4000-8000-000000000001';
65
64
  delete from agent_board.agent_credentials
66
65
  where agent_id in (select agent_id from agent_board.delegate_instances where instance_id like 'iso\_wd\_%');
@@ -0,0 +1,137 @@
1
+ # Consiliency/message-board#675: two active owners independently leave/demote.
2
+ # The second RPC waits on the FIRST lock (board authority advisory), then reads
3
+ # the committed owner's exit and refuses. No timing sleeps; each permutation
4
+ # finishes with exactly one owner. The same spec on schema 1.63.0 ends at zero.
5
+ setup
6
+ {
7
+ create function public.roleguard_isolation_refusal(p_statement text)
8
+ returns text language plpgsql as $probe$
9
+ begin
10
+ execute p_statement;
11
+ return 'UNEXPECTED_SUCCESS';
12
+ exception when others then
13
+ return sqlstate;
14
+ end;
15
+ $probe$;
16
+ insert into auth.users(id,instance_id,aud,role,email)
17
+ select ('67500000-0000-0000-0000-'||lpad(n::text,12,'0'))::uuid,
18
+ '00000000-0000-0000-0000-000000000000','authenticated','authenticated',
19
+ 'last-owner-'||n||'@test.invalid' from generate_series(1,2) n;
20
+ insert into agent_board.agents(id,agent_type,kind,handle,display_name,status,auth_user_id)
21
+ select ('67510000-0000-4000-8000-'||lpad(n::text,12,'0'))::uuid,
22
+ 'agent','agent','last-owner-'||n,'Last Owner '||n,'active',
23
+ ('67500000-0000-0000-0000-'||lpad(n::text,12,'0'))::uuid from generate_series(1,2) n;
24
+ insert into agent_board.boards(id,slug,name,created_by_agent_id)
25
+ values ('67520000-0000-4000-8000-000000000099','last-owner-race','Last Owner Race',
26
+ '67510000-0000-4000-8000-000000000001');
27
+ insert into agent_board.board_memberships(board_id,agent_id,role,membership_state,created_by_agent_id)
28
+ select '67520000-0000-4000-8000-000000000099',id,'owner','joined',
29
+ '67510000-0000-4000-8000-000000000001' from agent_board.agents where handle like 'last-owner-%';
30
+ }
31
+
32
+ teardown
33
+ {
34
+ drop function public.roleguard_isolation_refusal(text);
35
+ delete from agent_board.board_membership_events
36
+ where board_id='67520000-0000-4000-8000-000000000099';
37
+ delete from agent_board.boards where id='67520000-0000-4000-8000-000000000099';
38
+ delete from agent_board.agents where handle like 'last-owner-%';
39
+ delete from auth.users where email like 'last-owner-%@test.invalid';
40
+ }
41
+
42
+ session "a"
43
+ step "a_begin" {
44
+ begin;
45
+ set local role authenticated;
46
+ select set_config('request.jwt.claims', json_build_object('role','authenticated','sub','67500000-0000-0000-0000-000000000001')::text,true) is not null as authenticated;
47
+ }
48
+ step "a_leave" {
49
+ select membership_state from agent_board.leave_board(
50
+ '67520000-0000-4000-8000-000000000099','67510000-0000-4000-8000-000000000001');
51
+ }
52
+ step "a_demote" {
53
+ select role from agent_board.grant_board_role(
54
+ '67520000-0000-4000-8000-000000000099','67510000-0000-4000-8000-000000000001','member');
55
+ }
56
+ step "a_commit" { commit; }
57
+ step "a_repeatable" {
58
+ begin isolation level repeatable read;
59
+ set local role authenticated;
60
+ select set_config('request.jwt.claims', json_build_object('role','authenticated','sub','67500000-0000-0000-0000-000000000001')::text,true) is not null as authenticated;
61
+ }
62
+ step "a_snapshot" {
63
+ select count(*) as snapshot_owners from agent_board.board_memberships where board_id='67520000-0000-4000-8000-000000000099' and role='owner' and membership_state in ('joined','subscribed');
64
+ }
65
+ step "a_leave_code" {
66
+ select public.roleguard_isolation_refusal($probe$
67
+ select agent_board.leave_board(
68
+ '67520000-0000-4000-8000-000000000099','67510000-0000-4000-8000-000000000001')
69
+ $probe$) as error_code;
70
+ }
71
+ step "a_raw" {
72
+ reset role;
73
+ select agent_board._lock_board_authority_ceiling('67520000-0000-4000-8000-000000000099');
74
+ update agent_board.board_memberships set membership_state='left',left_at=now()
75
+ where board_id='67520000-0000-4000-8000-000000000099'
76
+ and agent_id='67510000-0000-4000-8000-000000000001';
77
+ }
78
+ step "a_session_begin" {
79
+ begin;
80
+ select pg_advisory_lock(hashtextextended(
81
+ 'agent_board.board_authority_ceilings:67520000-0000-4000-8000-000000000099',0));
82
+ }
83
+ step "a_session_leave" {
84
+ update agent_board.board_memberships set membership_state='left',left_at=now()
85
+ where board_id='67520000-0000-4000-8000-000000000099'
86
+ and agent_id='67510000-0000-4000-8000-000000000001';
87
+ }
88
+ step "a_session_unlock" {
89
+ select pg_advisory_unlock(hashtextextended(
90
+ 'agent_board.board_authority_ceilings:67520000-0000-4000-8000-000000000099',0));
91
+ }
92
+
93
+ session "b"
94
+ step "b_begin" {
95
+ begin;
96
+ set local role authenticated;
97
+ select set_config('request.jwt.claims', json_build_object('role','authenticated','sub','67500000-0000-0000-0000-000000000002')::text,true) is not null as authenticated;
98
+ }
99
+ step "b_leave" {
100
+ select membership_state from agent_board.leave_board(
101
+ '67520000-0000-4000-8000-000000000099','67510000-0000-4000-8000-000000000002');
102
+ }
103
+ step "b_demote" {
104
+ select role from agent_board.grant_board_role(
105
+ '67520000-0000-4000-8000-000000000099','67510000-0000-4000-8000-000000000002','member');
106
+ }
107
+ step "b_commit" { commit; }
108
+ step "b_raw" {
109
+ reset role;
110
+ delete from agent_board.board_memberships
111
+ where board_id='67520000-0000-4000-8000-000000000099'
112
+ and agent_id='67510000-0000-4000-8000-000000000002';
113
+ }
114
+ step "b_lock" {
115
+ reset role;
116
+ select agent_board._lock_board_authority_ceiling('67520000-0000-4000-8000-000000000099');
117
+ }
118
+
119
+ session "check"
120
+ step "owners" {
121
+ select count(*) as active_owners from agent_board.board_memberships
122
+ where board_id='67520000-0000-4000-8000-000000000099'
123
+ and role='owner' and membership_state in ('joined','subscribed');
124
+ }
125
+
126
+ permutation "a_begin" "a_leave" "b_begin" "b_leave" "a_commit" "b_commit" "owners"
127
+ permutation "b_begin" "b_leave" "a_begin" "a_leave" "b_commit" "a_commit" "owners"
128
+ permutation "a_begin" "a_demote" "b_begin" "b_demote" "a_commit" "b_commit" "owners"
129
+ permutation "b_begin" "b_demote" "a_begin" "a_demote" "b_commit" "a_commit" "owners"
130
+ permutation "a_begin" "a_leave" "b_begin" "b_demote" "a_commit" "b_commit" "owners"
131
+ permutation "b_begin" "b_demote" "a_begin" "a_leave" "b_commit" "a_commit" "owners"
132
+ permutation "a_begin" "a_raw" "b_begin" "b_raw" "a_commit" "b_commit" "owners"
133
+ permutation "b_begin" "b_lock" "b_raw" "a_begin" "a_raw" "b_commit" "a_commit" "owners"
134
+ permutation "a_repeatable" "a_leave_code" "a_commit" "owners"
135
+ permutation "a_session_begin" "a_session_leave" "a_session_unlock" "b_begin" "b_leave" "a_commit" "b_commit" "owners"
136
+
137
+ permutation "a_repeatable" "a_snapshot" "b_begin" "b_leave" "a_leave_code" "b_commit" "a_commit" "owners"
@@ -112,8 +112,6 @@ teardown
112
112
  where board_id = '27720000-0000-4000-8000-000000000001';
113
113
  delete from agent_board.board_membership_events
114
114
  where board_id in (select id from agent_board.boards where slug like 'k280-iso-%');
115
- delete from agent_board.board_memberships
116
- where board_id in (select id from agent_board.boards where slug like 'k280-iso-%');
117
115
  delete from agent_board.boards where slug like 'k280-iso-%';
118
116
  delete from agent_board.board_membership_events
119
117
  where board_id = '27720000-0000-4000-8000-000000000001';
@@ -127,7 +125,6 @@ teardown
127
125
  delete from agent_board.agent_signing_keys
128
126
  where agent_id in (select id from agent_board.agents where handle like 'k276iso-%');
129
127
  delete from agent_board.board_authority_ceilings where board_id='27720000-0000-4000-8000-000000000001';
130
- delete from agent_board.board_memberships where board_id='27720000-0000-4000-8000-000000000001';
131
128
  delete from agent_board.boards where id='27720000-0000-4000-8000-000000000001';
132
129
  delete from agent_board.agents where handle like 'k276iso-%';
133
130
  delete from auth.users where id in (
@@ -103,9 +103,6 @@ teardown
103
103
  delete from agent_board.board_authority_ceilings where board_id in (
104
104
  select id from agent_board.boards where slug='onboard-ceiling-board'
105
105
  );
106
- delete from agent_board.board_memberships where board_id in (
107
- select id from agent_board.boards where slug='onboard-ceiling-board'
108
- );
109
106
  delete from agent_board.enrollment_federation_audit where agent_id in (
110
107
  select id from agent_board.agents where handle='onboard-ceiling-agent'
111
108
  );
@@ -114,7 +114,6 @@ teardown
114
114
  delete from agent_board.callback_outbox_events where board_id in ('18701000-0000-4000-8000-00000000000a', '18701000-0000-4000-8000-00000000000b');
115
115
  delete from agent_board.callback_subscriptions where board_id in ('18701000-0000-4000-8000-00000000000a', '18701000-0000-4000-8000-00000000000b');
116
116
  delete from agent_board.callback_endpoints where endpoint_url like 'https://example.test/iso187/%';
117
- delete from agent_board.board_memberships where board_id in ('18701000-0000-4000-8000-00000000000a', '18701000-0000-4000-8000-00000000000b');
118
117
  delete from agent_board.messages where thread_id in ('18702000-0000-4000-8000-00000000000a', '18702000-0000-4000-8000-00000000000b');
119
118
  delete from agent_board.threads where id in ('18702000-0000-4000-8000-00000000000a', '18702000-0000-4000-8000-00000000000b');
120
119
  delete from agent_board.boards where id in ('18701000-0000-4000-8000-00000000000a', '18701000-0000-4000-8000-00000000000b');
@@ -6,6 +6,7 @@ setup
6
6
  insert into agent_board.agents(id, agent_type, handle, display_name, status, auth_user_id, parent_agent_id, root_agent_id)
7
7
  values
8
8
  ('72000000-0000-4000-8000-000000000001', 'agent', 'sid-links-root', 'SID links root', 'active', null, null, null),
9
+ ('72000000-0000-4000-8000-000000000003', 'agent', 'sid-links-coowner', 'SID links coowner', 'active', null, null, null),
9
10
  ('72000000-0000-4000-8000-000000000002', 'agent', 'sid-links-child', 'SID links child', 'active', '71000000-0000-4000-8000-000000000001',
10
11
  '72000000-0000-4000-8000-000000000001', '72000000-0000-4000-8000-000000000001');
11
12
  insert into agent_board.session_identities(agent_id, parent_agent_id, root_agent_id, depth, identity_kind, harness,
@@ -27,13 +28,13 @@ setup
27
28
  values ('74000000-0000-4000-8000-000000000002', 'sid-links-room', 'SID links room', '72000000-0000-4000-8000-000000000001');
28
29
  insert into agent_board.board_memberships(board_id, agent_id, membership_state, role) values
29
30
  ('74000000-0000-4000-8000-000000000002', '72000000-0000-4000-8000-000000000001', 'joined', 'owner'),
31
+ ('74000000-0000-4000-8000-000000000002', '72000000-0000-4000-8000-000000000003', 'joined', 'owner'),
30
32
  ('74000000-0000-4000-8000-000000000002', '72000000-0000-4000-8000-000000000002', 'joined', 'admin');
31
33
  }
32
34
 
33
35
  teardown
34
36
  {
35
37
  delete from agent_board.board_membership_events where board_id = '74000000-0000-4000-8000-000000000002';
36
- delete from agent_board.board_memberships where board_id = '74000000-0000-4000-8000-000000000002';
37
38
  delete from agent_board.boards where id = '74000000-0000-4000-8000-000000000002';
38
39
  delete from agent_board.delegation_grants where root_agent_id = '72000000-0000-4000-8000-000000000001';
39
40
  delete from agent_board.delegation_policies where root_agent_id = '72000000-0000-4000-8000-000000000001';
@@ -42,6 +43,7 @@ teardown
42
43
  delete from agent_board.session_identities where root_agent_id = '72000000-0000-4000-8000-000000000001';
43
44
  delete from agent_board.agents where id = '72000000-0000-4000-8000-000000000002';
44
45
  delete from agent_board.agents where id = '72000000-0000-4000-8000-000000000001';
46
+ delete from agent_board.agents where id = '72000000-0000-4000-8000-000000000003';
45
47
  delete from auth.users where id = '71000000-0000-4000-8000-000000000001';
46
48
  }
47
49
 
@@ -52,7 +52,6 @@ teardown
52
52
  where id='85000000-0000-4000-8000-000000000001'));
53
53
  delete from agent_board.fleet_revocation_events where revoked_by_agent_id='85000000-0000-4000-8000-000000000001';
54
54
  delete from agent_board.board_membership_events where board_id='85000000-0000-4000-8000-000000000002';
55
- delete from agent_board.board_memberships where board_id='85000000-0000-4000-8000-000000000002';
56
55
  delete from agent_board.boards where id='85000000-0000-4000-8000-000000000002';
57
56
  delete from agent_board.delegate_instances where instance_id='sid_ti_instance_00001';
58
57
  delete from agent_board.session_id_aliases where root_agent_id='85000000-0000-4000-8000-000000000001';
@@ -74,7 +74,6 @@ teardown
74
74
  delete from agent_board.signature_evidence
75
75
  where agent_id in (select id from agent_board.agents where handle like 'f4iso-%');
76
76
  delete from agent_board.board_authority_ceilings where board_id='f4950000-0000-4000-8000-000000000001';
77
- delete from agent_board.board_memberships where board_id='f4950000-0000-4000-8000-000000000001';
78
77
  delete from agent_board.boards where id='f4950000-0000-4000-8000-000000000001';
79
78
  delete from agent_board.agent_signing_keys
80
79
  where agent_id in (select id from agent_board.agents where handle like 'f4iso-%');
@@ -84,7 +84,6 @@ teardown
84
84
  where agent_id in (select id from agent_board.agents where handle like 'k269iso-%')
85
85
  or revoked_by_agent_id in (select id from agent_board.agents where handle like 'k269iso-%');
86
86
  delete from agent_board.board_authority_ceilings where board_id='26950000-0000-4000-8000-000000000001';
87
- delete from agent_board.board_memberships where board_id='26950000-0000-4000-8000-000000000001';
88
87
  delete from agent_board.boards where id='26950000-0000-4000-8000-000000000001';
89
88
  delete from agent_board.agent_signing_keys
90
89
  where agent_id in (select id from agent_board.agents where handle like 'k269iso-%');