@consiliency/agent-board-schema 1.12.0 → 1.23.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.
- package/fixtures/already-applied.json +160 -0
- package/migrations/20260731000100_agent_board_agentsdir_column_scope.sql +88 -0
- package/migrations/20260801000100_agent_board_leaveidem_terminal_noop.sql +317 -0
- package/migrations/20260802000100_agent_board_rolereset_reentry_clamp.sql +237 -0
- package/migrations/20260803000100_agent_board_rowid_total_order.sql +1201 -0
- package/migrations/20260804000100_agent_board_hygiene_actor_binding_rls.sql +229 -0
- package/migrations/20260806000100_agent_board_consent_substrate.sql +339 -0
- package/migrations/20260807000100_agent_board_consent_emission.sql +619 -0
- package/migrations/20260808000100_agent_board_rejectsem.sql +145 -0
- package/migrations/20260809000100_agent_board_consent_gating.sql +492 -0
- package/migrations/20260810000100_agent_board_consent_locking.sql +485 -0
- package/migrations/20260811000100_agent_board_retention_metadata_revoke.sql +23 -0
- package/migrations/20260812000100_agent_board_pubexec_class_revoke.sql +54 -0
- package/migrations/20260813000100_agent_board_invitepolicy_block.sql +420 -0
- package/migrations/20260814000100_agent_board_obsgate_thread_post_policy.sql +239 -0
- package/migrations/20260815000100_agent_board_obsgate2_authoring_gates.sql +287 -0
- package/migrations/20260816000100_agent_board_obsgate3_task_lifecycle.sql +118 -0
- package/migrations/20260817000100_agent_board_obsgate4_claims_lifecycle.sql +250 -0
- package/migrations/20260818000100_agent_board_fleet_machines_rls_correlation.sql +43 -0
- package/migrations/20260819000100_agent_board_resolve_noop_retire.sql +166 -0
- package/migrations/20260820000100_agent_board_roomdeleg_lane_b.sql +206 -0
- package/migrations/20260821000100_agent_board_claimgate_claimkey.sql +372 -0
- package/migrations/20260822000100_agent_board_mint_harden.sql +710 -0
- package/migrations/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql +207 -0
- package/migrations/20260823000100_agent_board_fleet_machine_hijack.sql +106 -0
- package/migrations/20260824000100_agent_board_claimgate_shadow.sql +443 -0
- package/migrations/20260825000100_agent_board_claimgate_enforce.sql +660 -0
- package/migrations/20260826000100_agent_board_fleet_machine_reactivation.sql +514 -0
- package/migrations/20260828000100_agent_board_delegation_cap_ceiling.sql +474 -0
- package/migrations/20260829000100_agent_board_fleet_machine_reclaim.sql +432 -0
- package/migrations/20260830000100_agent_board_delegation_sole_writer.sql +41 -0
- package/migrations/20260831000100_agent_board_fleet_domain_reclaim.sql +389 -0
- package/migrations/20260901000100_agent_board_atomic_fleet_onboarding.sql +1496 -0
- package/migrations/20260901000110_agent_board_fleet_onboarding_ceiling_lock.sql +604 -0
- package/migrations/20260901000120_agent_board_human_revocation_evidence_completeness.sql +78 -0
- package/migrations/20260901000130_agent_board_fedsession_human_revocation_gate.sql +74 -0
- package/migrations/20260901000140_agent_board_fedsession_board_owner_lock_order.sql +102 -0
- package/migrations/20260902000100_agent_board_outbox_wake_ordering.sql +184 -0
- package/migrations/20260903000100_agent_board_enroll_identity_board_owner_lock_order.sql +604 -0
- package/migrations/20260903000200_agent_board_fedsession_provider_absence_gate.sql +177 -0
- package/migrations/20260904000100_agent_board_wake_recovery_surface.sql +155 -0
- package/package.json +1 -1
- package/schema-manifest.json +363 -3
- package/src/tooling.test.mjs +113 -2
- package/tests/agent_board_actorspoof.test.sql +349 -0
- package/tests/agent_board_agentsdir.test.sql +154 -0
- package/tests/agent_board_atomic_fleet_onboarding.test.sql +623 -0
- package/tests/agent_board_atomic_fleet_onboarding_backfill.test.sql +142 -0
- package/tests/agent_board_atomic_fleet_onboarding_runtime.test.sql +1250 -0
- package/tests/agent_board_authbound_boundary.test.sql +9 -1
- package/tests/agent_board_claimgate_enforce.test.sql +464 -0
- package/tests/agent_board_claimgate_predicate.test.sql +360 -0
- package/tests/agent_board_claimkey.test.sql +229 -0
- package/tests/agent_board_consent_backfill.test.sql +48 -0
- package/tests/agent_board_consent_emission.test.sql +601 -0
- package/tests/agent_board_consent_gating.test.sql +489 -0
- package/tests/agent_board_consent_substrate.test.sql +720 -0
- package/tests/agent_board_delegation_cap_ceiling.test.sql +303 -0
- package/tests/agent_board_delegation_enforcement.test.sql +55 -6
- package/tests/agent_board_delegation_policies.test.sql +107 -1
- package/tests/agent_board_enroll_federated_identity.test.sql +3 -3
- package/tests/agent_board_enroll_pop_binding.test.sql +13 -3
- package/tests/agent_board_enrollment_audit_content.test.sql +11 -7
- package/tests/agent_board_federated_lock_order_class.test.sql +390 -0
- package/tests/agent_board_fedsession.test.sql +51 -5
- package/tests/agent_board_fedsession_provider_absence_gate.test.sql +170 -0
- package/tests/agent_board_fleet_domain_reclaim.test.sql +419 -0
- package/tests/agent_board_fleet_machine_hijack.test.sql +190 -0
- package/tests/agent_board_fleet_machine_reactivation.test.sql +426 -0
- package/tests/agent_board_fleet_machine_reclaim.test.sql +509 -0
- package/tests/agent_board_fleet_machines_rls.test.sql +79 -0
- package/tests/agent_board_fleet_policy.test.sql +2 -2
- package/tests/agent_board_grants_hygiene.test.sql +408 -0
- package/tests/agent_board_identity_providers.test.sql +9 -0
- package/tests/agent_board_inbox_reads.test.sql +45 -31
- package/tests/agent_board_inbox_rpcs.test.sql +44 -34
- package/tests/agent_board_invitepolicy.test.sql +205 -0
- package/tests/agent_board_leaveidem.test.sql +194 -0
- package/tests/agent_board_mint_fleet_agent_session.test.sql +10 -10
- package/tests/agent_board_mint_harden.test.sql +303 -0
- package/tests/agent_board_mint_harden_backfill.test.sql +95 -0
- package/tests/agent_board_obsgate.test.sql +178 -0
- package/tests/agent_board_obsgate2.test.sql +153 -0
- package/tests/agent_board_obsgate3.test.sql +170 -0
- package/tests/agent_board_obsgate4.test.sql +196 -0
- package/tests/agent_board_outbox_wake_ordering.test.sql +452 -0
- package/tests/agent_board_portal_offline_invariant.test.sql +14 -3
- package/tests/agent_board_pubexec_class.test.sql +53 -0
- package/tests/agent_board_rejectsem.test.sql +271 -0
- package/tests/agent_board_resigning_refresh.test.sql +1 -1
- package/tests/agent_board_resolve_noop_retire.test.sql +71 -0
- package/tests/agent_board_retention_metadata_acl.test.sql +53 -0
- package/tests/agent_board_revoke_agent_subtree.test.sql +3 -3
- package/tests/agent_board_rolereset.test.sql +351 -0
- package/tests/agent_board_roomdeleg.test.sql +5 -3
- package/tests/agent_board_roomdeleg_lane_b.test.sql +144 -0
- package/tests/agent_board_roomlink.test.sql +27 -11
- package/tests/agent_board_rowid.test.sql +1274 -0
- package/tests/agent_board_signature_rls_reads.test.sql +3 -3
- package/tests/agent_board_signed_write_gateway.test.sql +3 -3
- package/tests/agent_board_signing_challenge_pending_cap.test.sql +2 -2
- package/tests/agent_board_signing_challenge_reaper.test.sql +2 -2
- package/tests/agent_board_signing_proof_rpcs.test.sql +4 -4
- package/tests/agent_board_signing_store.test.sql +6 -6
- package/tests/agent_board_wake_recovery.test.sql +756 -0
- package/tests/fixtures/isolation-substrate.sql +93 -0
- package/tests/fixtures/test-prereqs.sql +33 -0
- package/tests/isolation/expected/atomic_fedsession_fleet_lock_order.out +79 -0
- package/tests/isolation/expected/atomic_fedsession_human_revoke.out +87 -0
- package/tests/isolation/expected/atomic_fleet_authority_races.out +469 -0
- package/tests/isolation/expected/atomic_fleet_binding_revoke.out +103 -0
- package/tests/isolation/expected/atomic_fleet_board_archive.out +117 -0
- package/tests/isolation/expected/atomic_fleet_human_fresh_revoke.out +136 -0
- package/tests/isolation/expected/atomic_fleet_identity_disposition.out +61 -0
- package/tests/isolation/expected/atomic_fleet_lifecycle_races.out +1479 -0
- package/tests/isolation/expected/atomic_fleet_onboarding.out +75 -0
- package/tests/isolation/expected/atomic_fleet_subtree_lock_order.out +60 -0
- package/tests/isolation/expected/ceiling_setter_lock_before_upsert.out +95 -0
- package/tests/isolation/expected/claimgate_ownerless_quota.out +36 -0
- package/tests/isolation/expected/claimkey_renew_race.out +38 -0
- package/tests/isolation/expected/consent_approval_lock.out +43 -0
- package/tests/isolation/expected/consent_emit_actual_state.out +37 -0
- package/tests/isolation/expected/domain_reclaim_revoke_race.out +40 -0
- package/tests/isolation/expected/enroll_identity_board_owner_lock_order.out +55 -0
- package/tests/isolation/expected/fedsession_provider_absent_owner_lock.out +37 -0
- package/tests/isolation/expected/onboarding_ceiling_lock_order.out +123 -0
- package/tests/isolation/expected/outbox_wake_ordering.out +86 -0
- package/tests/isolation/expected/reactivate_revoke_race.out +80 -0
- package/tests/isolation/expected/reclaim_revoke_race.out +40 -0
- package/tests/isolation/expected/wake_recovery_late_commit.out +89 -0
- package/tests/isolation/specs/atomic_fedsession_fleet_lock_order.spec +117 -0
- package/tests/isolation/specs/atomic_fedsession_human_revoke.spec +66 -0
- package/tests/isolation/specs/atomic_fleet_authority_races.spec +235 -0
- package/tests/isolation/specs/atomic_fleet_binding_revoke.spec +127 -0
- package/tests/isolation/specs/atomic_fleet_board_archive.spec +134 -0
- package/tests/isolation/specs/atomic_fleet_human_fresh_revoke.spec +142 -0
- package/tests/isolation/specs/atomic_fleet_identity_disposition.spec +118 -0
- package/tests/isolation/specs/atomic_fleet_lifecycle_races.spec +244 -0
- package/tests/isolation/specs/atomic_fleet_onboarding.spec +106 -0
- package/tests/isolation/specs/atomic_fleet_subtree_lock_order.spec +147 -0
- package/tests/isolation/specs/ceiling_setter_lock_before_upsert.spec +117 -0
- package/tests/isolation/specs/claimgate_ownerless_quota.spec +77 -0
- package/tests/isolation/specs/claimkey_renew_race.spec +67 -0
- package/tests/isolation/specs/consent_approval_lock.spec +98 -0
- package/tests/isolation/specs/consent_emit_actual_state.spec +79 -0
- package/tests/isolation/specs/domain_reclaim_revoke_race.spec +88 -0
- package/tests/isolation/specs/enroll_identity_board_owner_lock_order.spec +117 -0
- package/tests/isolation/specs/fedsession_provider_absent_owner_lock.spec +63 -0
- package/tests/isolation/specs/onboarding_ceiling_lock_order.spec +183 -0
- package/tests/isolation/specs/outbox_wake_ordering.spec +202 -0
- package/tests/isolation/specs/reactivate_revoke_race.spec +115 -0
- package/tests/isolation/specs/reclaim_revoke_race.spec +94 -0
- package/tests/isolation/specs/wake_recovery_late_commit.spec +207 -0
- package/tests/seeds/20260806000100_agent_board_consent_substrate.sql.pre.sql +19 -0
- package/tests/seeds/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql.pre.sql +39 -0
- package/tests/seeds/20260901000100_agent_board_atomic_fleet_onboarding.sql.pre.sql +110 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: first_begin first_onboard second_begin second_onboard first_commit second_commit check
|
|
4
|
+
count
|
|
5
|
+
-----
|
|
6
|
+
1
|
|
7
|
+
(1 row)
|
|
8
|
+
|
|
9
|
+
step first_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
10
|
+
step first_onboard:
|
|
11
|
+
select identity_disposition, membership_disposition, binding_disposition
|
|
12
|
+
from agent_board.onboard_federated_fleet_agent(
|
|
13
|
+
'https://atomic-race.test', 'message-board', 'human-race',
|
|
14
|
+
jsonb_build_object('iss','https://atomic-race.test','aud','message-board','sub','human-race','iat',100),
|
|
15
|
+
'atomic-race-agent',
|
|
16
|
+
'eRHZmllEy_TZHAG2zB-Qe_a5BFLkaavMTazWWfaE3f0',
|
|
17
|
+
'raw_ed25519_base64url',
|
|
18
|
+
'sha256:z8d5LQPfBMYnfZfvu8wVz684_jkp578-SPDU2OMObS8',
|
|
19
|
+
true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
|
|
20
|
+
(select code from agent_board.board_invite_tokens where created_by_agent_id = '16220000-0000-0000-0000-000000000001'),
|
|
21
|
+
(select id from agent_board.boards where slug = 'atomic-race-board'),
|
|
22
|
+
'16220000-0000-0000-0000-000000000003',
|
|
23
|
+
'codex', 'phase-loop', 'message-board', 'sha256:atomic-race-repo',
|
|
24
|
+
'worker', 'phase_worker', 'atomic-race-agent'
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
identity_disposition|membership_disposition|binding_disposition
|
|
28
|
+
--------------------+----------------------+-------------------
|
|
29
|
+
created |created |created
|
|
30
|
+
(1 row)
|
|
31
|
+
|
|
32
|
+
step second_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
33
|
+
step second_onboard:
|
|
34
|
+
select identity_disposition, membership_disposition, binding_disposition
|
|
35
|
+
from agent_board.onboard_federated_fleet_agent(
|
|
36
|
+
'https://atomic-race.test', 'message-board', 'human-race',
|
|
37
|
+
jsonb_build_object('iss','https://atomic-race.test','aud','message-board','sub','human-race','iat',200,'jti','rotated'),
|
|
38
|
+
'atomic-race-agent',
|
|
39
|
+
'eRHZmllEy_TZHAG2zB-Qe_a5BFLkaavMTazWWfaE3f0',
|
|
40
|
+
'raw_ed25519_base64url',
|
|
41
|
+
'sha256:z8d5LQPfBMYnfZfvu8wVz684_jkp578-SPDU2OMObS8',
|
|
42
|
+
true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
|
|
43
|
+
(select code from agent_board.board_invite_tokens where created_by_agent_id = '16220000-0000-0000-0000-000000000001'),
|
|
44
|
+
(select id from agent_board.boards where slug = 'atomic-race-board'),
|
|
45
|
+
'16220000-0000-0000-0000-000000000003',
|
|
46
|
+
'codex', 'phase-loop', 'message-board', 'sha256:atomic-race-repo',
|
|
47
|
+
'worker', 'phase_worker', 'atomic-race-agent'
|
|
48
|
+
);
|
|
49
|
+
<waiting ...>
|
|
50
|
+
step first_commit: COMMIT;
|
|
51
|
+
step second_onboard: <... completed>
|
|
52
|
+
identity_disposition|membership_disposition|binding_disposition
|
|
53
|
+
--------------------+----------------------+-------------------
|
|
54
|
+
reused |reused |reused
|
|
55
|
+
(1 row)
|
|
56
|
+
|
|
57
|
+
step second_commit: COMMIT;
|
|
58
|
+
step check:
|
|
59
|
+
select count(*) as agents,
|
|
60
|
+
(select count(*) from agent_board.agent_signing_keys k
|
|
61
|
+
join agent_board.agents a on a.id=k.agent_id
|
|
62
|
+
where a.handle='atomic-race-agent') as keys,
|
|
63
|
+
(select count(*) from agent_board.board_invite_redemptions r
|
|
64
|
+
join agent_board.board_invite_tokens i on i.id=r.invite_id
|
|
65
|
+
where i.created_by_agent_id='16220000-0000-0000-0000-000000000001') as redemptions,
|
|
66
|
+
(select count(*) from agent_board.fleet_machine_agents b
|
|
67
|
+
join agent_board.agents a on a.id=b.agent_id
|
|
68
|
+
where a.handle='atomic-race-agent') as bindings
|
|
69
|
+
from agent_board.agents where handle='atomic-race-agent';
|
|
70
|
+
|
|
71
|
+
agents|keys|redemptions|bindings
|
|
72
|
+
------+----+-----------+--------
|
|
73
|
+
1| 1| 1| 1
|
|
74
|
+
(1 row)
|
|
75
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
Parsed test spec with 4 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: blocker_begin blocker_lock retry_begin retry_onboard subtree_begin revoke_human_subtree blocker_commit subtree_commit retry_commit check
|
|
4
|
+
step blocker_begin: BEGIN;
|
|
5
|
+
step blocker_lock:
|
|
6
|
+
select pg_advisory_xact_lock(hashtextextended('sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA', 0));
|
|
7
|
+
|
|
8
|
+
pg_advisory_xact_lock
|
|
9
|
+
---------------------
|
|
10
|
+
|
|
11
|
+
(1 row)
|
|
12
|
+
|
|
13
|
+
step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
14
|
+
step retry_onboard:
|
|
15
|
+
select identity_disposition, binding_disposition
|
|
16
|
+
from agent_board.onboard_federated_fleet_agent(
|
|
17
|
+
'https://atomic-subtree.test', 'message-board', 'human-subtree',
|
|
18
|
+
jsonb_build_object('iss','https://atomic-subtree.test','aud','message-board','sub','human-subtree','iat',200),
|
|
19
|
+
'atomic-subtree-agent',
|
|
20
|
+
'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
|
|
21
|
+
'raw_ed25519_base64url',
|
|
22
|
+
'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
|
|
23
|
+
true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
|
|
24
|
+
(select code from agent_board.board_invite_tokens where created_by_agent_id='ffffffff-ffff-ffff-ffff-ffffffffff01'),
|
|
25
|
+
(select id from agent_board.boards where slug='atomic-subtree-board'),
|
|
26
|
+
'16270000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
|
|
27
|
+
'message-board', 'sha256:atomic-subtree-repo', 'worker', 'phase_worker',
|
|
28
|
+
'atomic-subtree-agent'
|
|
29
|
+
);
|
|
30
|
+
<waiting ...>
|
|
31
|
+
step subtree_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
32
|
+
step revoke_human_subtree:
|
|
33
|
+
select revoked_agent_count
|
|
34
|
+
from agent_board.revoke_human_subtree(
|
|
35
|
+
(select owner_user_id from agent_board.agents where handle='atomic-subtree-agent'),
|
|
36
|
+
'ffffffff-ffff-ffff-ffff-ffffffffff01', 'isolation subtree revoke'
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
revoked_agent_count
|
|
40
|
+
-------------------
|
|
41
|
+
2
|
|
42
|
+
(1 row)
|
|
43
|
+
|
|
44
|
+
step blocker_commit: COMMIT;
|
|
45
|
+
step subtree_commit: COMMIT;
|
|
46
|
+
step retry_onboard: <... completed>
|
|
47
|
+
ERROR: human owner has been revoked
|
|
48
|
+
step retry_commit: COMMIT;
|
|
49
|
+
step check:
|
|
50
|
+
select
|
|
51
|
+
(select status from agent_board.agents where id='ffffffff-ffff-ffff-ffff-ffffffffff01') as creator_status,
|
|
52
|
+
(select status from agent_board.agents where handle='atomic-subtree-agent') as enrolled_status,
|
|
53
|
+
(select status from agent_board.agent_signing_keys where fingerprint='sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA') as key_status,
|
|
54
|
+
(select count(*) from agent_board.fleet_machine_agents where machine_id='16270000-0000-0000-0000-000000000003') as bindings;
|
|
55
|
+
|
|
56
|
+
creator_status|enrolled_status|key_status|bindings
|
|
57
|
+
--------------+---------------+----------+--------
|
|
58
|
+
revoked |revoked |revoked | 1
|
|
59
|
+
(1 row)
|
|
60
|
+
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
Parsed test spec with 4 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: holder_begin hold_ceiling_lock setter_begin set_ceiling probe_begin probe_ceiling_row probe_commit holder_commit setter_commit check
|
|
4
|
+
step holder_begin: BEGIN;
|
|
5
|
+
step hold_ceiling_lock:
|
|
6
|
+
select agent_board._lock_board_authority_ceiling(
|
|
7
|
+
(select id from agent_board.boards where slug='ceiling-order-board')) as locked;
|
|
8
|
+
|
|
9
|
+
locked
|
|
10
|
+
------
|
|
11
|
+
|
|
12
|
+
(1 row)
|
|
13
|
+
|
|
14
|
+
step setter_begin:
|
|
15
|
+
BEGIN;
|
|
16
|
+
SET LOCAL ROLE authenticated;
|
|
17
|
+
SET LOCAL "request.jwt.claim.role" = 'authenticated';
|
|
18
|
+
SET LOCAL "request.jwt.claim.sub" = '19600000-0000-0000-0000-0000000000a1';
|
|
19
|
+
|
|
20
|
+
step set_ceiling:
|
|
21
|
+
select ceiling_max_grantable_role from agent_board.set_board_authority_ceiling(
|
|
22
|
+
(select id from agent_board.boards where slug='ceiling-order-board'),
|
|
23
|
+
'member'
|
|
24
|
+
);
|
|
25
|
+
<waiting ...>
|
|
26
|
+
step probe_begin: BEGIN;
|
|
27
|
+
step probe_ceiling_row:
|
|
28
|
+
select max_grantable_role from agent_board.board_authority_ceilings
|
|
29
|
+
where board_id = (select id from agent_board.boards where slug='ceiling-order-board')
|
|
30
|
+
for update nowait;
|
|
31
|
+
|
|
32
|
+
max_grantable_role
|
|
33
|
+
------------------
|
|
34
|
+
admin
|
|
35
|
+
(1 row)
|
|
36
|
+
|
|
37
|
+
step probe_commit: COMMIT;
|
|
38
|
+
step holder_commit: COMMIT;
|
|
39
|
+
step set_ceiling: <... completed>
|
|
40
|
+
ceiling_max_grantable_role
|
|
41
|
+
--------------------------
|
|
42
|
+
member
|
|
43
|
+
(1 row)
|
|
44
|
+
|
|
45
|
+
step setter_commit: COMMIT;
|
|
46
|
+
step check:
|
|
47
|
+
select max_grantable_role from agent_board.board_authority_ceilings
|
|
48
|
+
where board_id = (select id from agent_board.boards where slug='ceiling-order-board');
|
|
49
|
+
|
|
50
|
+
max_grantable_role
|
|
51
|
+
------------------
|
|
52
|
+
member
|
|
53
|
+
(1 row)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
starting permutation: setter_begin set_ceiling setter_commit probe_begin probe_ceiling_row probe_commit check
|
|
57
|
+
step setter_begin:
|
|
58
|
+
BEGIN;
|
|
59
|
+
SET LOCAL ROLE authenticated;
|
|
60
|
+
SET LOCAL "request.jwt.claim.role" = 'authenticated';
|
|
61
|
+
SET LOCAL "request.jwt.claim.sub" = '19600000-0000-0000-0000-0000000000a1';
|
|
62
|
+
|
|
63
|
+
step set_ceiling:
|
|
64
|
+
select ceiling_max_grantable_role from agent_board.set_board_authority_ceiling(
|
|
65
|
+
(select id from agent_board.boards where slug='ceiling-order-board'),
|
|
66
|
+
'member'
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
ceiling_max_grantable_role
|
|
70
|
+
--------------------------
|
|
71
|
+
member
|
|
72
|
+
(1 row)
|
|
73
|
+
|
|
74
|
+
step setter_commit: COMMIT;
|
|
75
|
+
step probe_begin: BEGIN;
|
|
76
|
+
step probe_ceiling_row:
|
|
77
|
+
select max_grantable_role from agent_board.board_authority_ceilings
|
|
78
|
+
where board_id = (select id from agent_board.boards where slug='ceiling-order-board')
|
|
79
|
+
for update nowait;
|
|
80
|
+
|
|
81
|
+
max_grantable_role
|
|
82
|
+
------------------
|
|
83
|
+
member
|
|
84
|
+
(1 row)
|
|
85
|
+
|
|
86
|
+
step probe_commit: COMMIT;
|
|
87
|
+
step check:
|
|
88
|
+
select max_grantable_role from agent_board.board_authority_ceilings
|
|
89
|
+
where board_id = (select id from agent_board.boards where slug='ceiling-order-board');
|
|
90
|
+
|
|
91
|
+
max_grantable_role
|
|
92
|
+
------------------
|
|
93
|
+
member
|
|
94
|
+
(1 row)
|
|
95
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: sa_begin sa_acq sb_begin sb_acq sa_commit sb_commit chk
|
|
4
|
+
step sa_begin: BEGIN; SET LOCAL ROLE authenticated; SET LOCAL "request.jwt.claim.role" = 'authenticated'; SET LOCAL "request.jwt.claim.sub" = 'c0a70000-0000-4000-8000-0000000000aa';
|
|
5
|
+
step sa_acq:
|
|
6
|
+
select resource_key
|
|
7
|
+
from agent_board.acquire_claim(null, 'file', 'cg-iso-sa', now() + interval '1 hour', null, null);
|
|
8
|
+
|
|
9
|
+
resource_key
|
|
10
|
+
------------
|
|
11
|
+
cg-iso-sa
|
|
12
|
+
(1 row)
|
|
13
|
+
|
|
14
|
+
step sb_begin: BEGIN; SET LOCAL ROLE authenticated; SET LOCAL "request.jwt.claim.role" = 'authenticated'; SET LOCAL "request.jwt.claim.sub" = 'c0a70000-0000-4000-8000-0000000000aa';
|
|
15
|
+
step sb_acq:
|
|
16
|
+
select resource_key
|
|
17
|
+
from agent_board.acquire_claim(null, 'file', 'cg-iso-sb', now() + interval '1 hour', null, null);
|
|
18
|
+
<waiting ...>
|
|
19
|
+
step sa_commit: COMMIT;
|
|
20
|
+
step sb_acq: <... completed>
|
|
21
|
+
ERROR: ownerless active-claim quota reached (50 per agent)
|
|
22
|
+
step sb_commit: COMMIT;
|
|
23
|
+
step chk:
|
|
24
|
+
select count(*)::int as active_file_claims
|
|
25
|
+
from agent_board.claims
|
|
26
|
+
where agent_id = 'c0a70000-0000-4000-8000-0000000000bb'
|
|
27
|
+
and resource_kind = 'file'
|
|
28
|
+
and status = 'active'
|
|
29
|
+
and released_at is null
|
|
30
|
+
and lease_expires_at > now();
|
|
31
|
+
|
|
32
|
+
active_file_claims
|
|
33
|
+
------------------
|
|
34
|
+
50
|
|
35
|
+
(1 row)
|
|
36
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: ra_begin ra_renew rb_begin rb_renew ra_commit rb_commit chk
|
|
4
|
+
step ra_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
5
|
+
step ra_renew:
|
|
6
|
+
select resource_key
|
|
7
|
+
from agent_board.renew_claim('00000000-0000-4000-8000-0000000000c1', now() + interval '2 hours');
|
|
8
|
+
|
|
9
|
+
resource_key
|
|
10
|
+
------------
|
|
11
|
+
fpRace
|
|
12
|
+
(1 row)
|
|
13
|
+
|
|
14
|
+
step rb_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
15
|
+
step rb_renew:
|
|
16
|
+
select resource_key
|
|
17
|
+
from agent_board.renew_claim('00000000-0000-4000-8000-0000000000c2', now() + interval '2 hours');
|
|
18
|
+
<waiting ...>
|
|
19
|
+
step ra_commit: COMMIT;
|
|
20
|
+
step rb_renew: <... completed>
|
|
21
|
+
resource_key
|
|
22
|
+
------------
|
|
23
|
+
fpRace
|
|
24
|
+
(1 row)
|
|
25
|
+
|
|
26
|
+
step rb_commit: COMMIT;
|
|
27
|
+
step chk:
|
|
28
|
+
select resource_key
|
|
29
|
+
from agent_board.claims
|
|
30
|
+
where lease_token in ('00000000-0000-4000-8000-0000000000c1','00000000-0000-4000-8000-0000000000c2')
|
|
31
|
+
order by resource_key;
|
|
32
|
+
|
|
33
|
+
resource_key
|
|
34
|
+
------------
|
|
35
|
+
fpRace
|
|
36
|
+
fpRace
|
|
37
|
+
(2 rows)
|
|
38
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: a_begin a_resolve w_begin w_leave a_commit w_commit chk
|
|
4
|
+
step a_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
5
|
+
step a_resolve:
|
|
6
|
+
select membership_state
|
|
7
|
+
from agent_board.resolve_board_request(
|
|
8
|
+
'115b0000-0000-4000-8000-000000000001',
|
|
9
|
+
'115a0000-0000-4000-8000-000000000002',
|
|
10
|
+
'joined',
|
|
11
|
+
'115a0000-0000-4000-8000-000000000001');
|
|
12
|
+
|
|
13
|
+
membership_state
|
|
14
|
+
----------------
|
|
15
|
+
joined
|
|
16
|
+
(1 row)
|
|
17
|
+
|
|
18
|
+
step w_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
19
|
+
step w_leave:
|
|
20
|
+
select membership_state
|
|
21
|
+
from agent_board.update_board_membership(
|
|
22
|
+
'115b0000-0000-4000-8000-000000000001',
|
|
23
|
+
'115a0000-0000-4000-8000-000000000002',
|
|
24
|
+
'left');
|
|
25
|
+
<waiting ...>
|
|
26
|
+
step a_commit: COMMIT;
|
|
27
|
+
step w_leave: <... completed>
|
|
28
|
+
membership_state
|
|
29
|
+
----------------
|
|
30
|
+
left
|
|
31
|
+
(1 row)
|
|
32
|
+
|
|
33
|
+
step w_commit: COMMIT;
|
|
34
|
+
step chk:
|
|
35
|
+
select membership_state
|
|
36
|
+
from agent_board.board_memberships
|
|
37
|
+
where id = '115c0000-0000-4000-8000-0000000000aa';
|
|
38
|
+
|
|
39
|
+
membership_state
|
|
40
|
+
----------------
|
|
41
|
+
left
|
|
42
|
+
(1 row)
|
|
43
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: m_begin m_sub b_begin b_boot m_commit b_commit chk
|
|
4
|
+
step m_begin: BEGIN;
|
|
5
|
+
step m_sub:
|
|
6
|
+
insert into agent_board.board_memberships(board_id, agent_id, membership_state, role, created_by_agent_id)
|
|
7
|
+
values ('105b0000-0000-4000-8000-000000000001', '105a0000-0000-4000-8000-000000000001',
|
|
8
|
+
'subscribed', 'member', '105a0000-0000-4000-8000-000000000001');
|
|
9
|
+
|
|
10
|
+
step b_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
11
|
+
step b_boot:
|
|
12
|
+
select board_id, owner_agent_id
|
|
13
|
+
from agent_board.bootstrap_board_owner_memberships()
|
|
14
|
+
where board_id = '105b0000-0000-4000-8000-000000000001';
|
|
15
|
+
<waiting ...>
|
|
16
|
+
step m_commit: COMMIT;
|
|
17
|
+
step b_boot: <... completed>
|
|
18
|
+
board_id |owner_agent_id
|
|
19
|
+
------------------------------------+------------------------------------
|
|
20
|
+
105b0000-0000-4000-8000-000000000001|105a0000-0000-4000-8000-000000000001
|
|
21
|
+
(1 row)
|
|
22
|
+
|
|
23
|
+
step b_commit: COMMIT;
|
|
24
|
+
step chk:
|
|
25
|
+
select result_state, event_kind, provenance
|
|
26
|
+
from agent_board.board_membership_events
|
|
27
|
+
where board_id = '105b0000-0000-4000-8000-000000000001'
|
|
28
|
+
and agent_id = '105a0000-0000-4000-8000-000000000001'
|
|
29
|
+
and event_kind = 'operator_repair'
|
|
30
|
+
order by seq desc
|
|
31
|
+
limit 1;
|
|
32
|
+
|
|
33
|
+
result_state|event_kind |provenance
|
|
34
|
+
------------+---------------+-------------------
|
|
35
|
+
subscribed |operator_repair|operator-designated
|
|
36
|
+
(1 row)
|
|
37
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: ra_begin ra_reclaim rb_begin rb_revoke ra_commit rb_commit chk
|
|
4
|
+
step ra_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
5
|
+
step ra_reclaim:
|
|
6
|
+
select owner_agent_id
|
|
7
|
+
from agent_board.reclaim_fleet_trust_domain(
|
|
8
|
+
'd2000000-0000-4000-8000-000000000001', 'a2000000-0000-4000-8000-000000000003',
|
|
9
|
+
'a2000000-0000-4000-8000-000000000001', 'iso operator domain reclaim');
|
|
10
|
+
|
|
11
|
+
owner_agent_id
|
|
12
|
+
------------------------------------
|
|
13
|
+
a2000000-0000-4000-8000-000000000003
|
|
14
|
+
(1 row)
|
|
15
|
+
|
|
16
|
+
step rb_begin:
|
|
17
|
+
BEGIN;
|
|
18
|
+
SET LOCAL "request.jwt.claim.role" = 'authenticated';
|
|
19
|
+
SET LOCAL "request.jwt.claim.sub" = 'b2000000-0000-4000-8000-000000000002';
|
|
20
|
+
|
|
21
|
+
step rb_revoke:
|
|
22
|
+
select revocation_event_id
|
|
23
|
+
from agent_board.revoke_fleet_subject(
|
|
24
|
+
'trust_domain', 'd2000000-0000-4000-8000-000000000001', 'a2000000-0000-4000-8000-000000000002',
|
|
25
|
+
'iso squatter domain revoke', jsonb_build_object('redacted', true));
|
|
26
|
+
<waiting ...>
|
|
27
|
+
step ra_commit: COMMIT;
|
|
28
|
+
step rb_revoke: <... completed>
|
|
29
|
+
ERROR: trust domain is not owned by current_agent_id()
|
|
30
|
+
step rb_commit: COMMIT;
|
|
31
|
+
step chk:
|
|
32
|
+
select owner_agent_id, lifecycle_state
|
|
33
|
+
from agent_board.fleet_trust_domains
|
|
34
|
+
where id = 'd2000000-0000-4000-8000-000000000001';
|
|
35
|
+
|
|
36
|
+
owner_agent_id |lifecycle_state
|
|
37
|
+
------------------------------------+---------------
|
|
38
|
+
a2000000-0000-4000-8000-000000000003|active
|
|
39
|
+
(1 row)
|
|
40
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
Parsed test spec with 4 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: ohold_begin ohold_lock enroll_begin enroll_enroll bprobe_board_nowait ohold_commit enroll_commit check
|
|
4
|
+
step ohold_begin: BEGIN;
|
|
5
|
+
step ohold_lock:
|
|
6
|
+
select 1 as locked from auth.users u
|
|
7
|
+
where u.id = (select uid from lo194_owner)
|
|
8
|
+
for update;
|
|
9
|
+
|
|
10
|
+
locked
|
|
11
|
+
------
|
|
12
|
+
1
|
|
13
|
+
(1 row)
|
|
14
|
+
|
|
15
|
+
step enroll_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
16
|
+
step enroll_enroll:
|
|
17
|
+
select agent_handle, invite_redeemed
|
|
18
|
+
from agent_board.enroll_federated_identity(
|
|
19
|
+
'https://lo194-iso.test', 'message-board', 'iso-human',
|
|
20
|
+
jsonb_build_object('iss','https://lo194-iso.test','aud','message-board','sub','iso-human'),
|
|
21
|
+
'lo194-iso-agent',
|
|
22
|
+
public.test_pubkey('lo194-iso-k1'), 'raw_ed25519_base64url',
|
|
23
|
+
public.test_key_fingerprint('lo194-iso-k1'),
|
|
24
|
+
true, null, 'agent', ARRAY[]::text[], ARRAY[]::text[],
|
|
25
|
+
'lo194-iso-code'
|
|
26
|
+
);
|
|
27
|
+
<waiting ...>
|
|
28
|
+
step bprobe_board_nowait:
|
|
29
|
+
select slug from agent_board.boards where slug='lo194-iso-board' for update nowait;
|
|
30
|
+
|
|
31
|
+
ERROR: could not obtain lock on row in relation "boards"
|
|
32
|
+
step ohold_commit: COMMIT;
|
|
33
|
+
step enroll_enroll: <... completed>
|
|
34
|
+
agent_handle |invite_redeemed
|
|
35
|
+
---------------+---------------
|
|
36
|
+
lo194-iso-agent|t
|
|
37
|
+
(1 row)
|
|
38
|
+
|
|
39
|
+
step enroll_commit: COMMIT;
|
|
40
|
+
step check:
|
|
41
|
+
select
|
|
42
|
+
(select count(*) from agent_board.board_memberships m
|
|
43
|
+
join agent_board.agents a on a.id = m.agent_id
|
|
44
|
+
where m.board_id = (select id from agent_board.boards where slug='lo194-iso-board')
|
|
45
|
+
and a.handle = 'lo194-iso-agent'
|
|
46
|
+
and m.membership_state = 'joined') as enrolled_agent_memberships,
|
|
47
|
+
(select count(*) from agent_board.board_invite_redemptions r
|
|
48
|
+
join agent_board.board_invite_tokens t on t.id = r.invite_id
|
|
49
|
+
where t.code = 'lo194-iso-code') as redemptions;
|
|
50
|
+
|
|
51
|
+
enrolled_agent_memberships|redemptions
|
|
52
|
+
--------------------------+-----------
|
|
53
|
+
1| 1
|
|
54
|
+
(1 row)
|
|
55
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Parsed test spec with 3 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: ohold_begin ohold_lock portal_begin portal_enroll ohold_commit portal_commit check
|
|
4
|
+
step ohold_begin: BEGIN;
|
|
5
|
+
step ohold_lock:
|
|
6
|
+
select 1 as locked from auth.users u
|
|
7
|
+
where u.id = (select uid from lo193_owner)
|
|
8
|
+
for update;
|
|
9
|
+
|
|
10
|
+
locked
|
|
11
|
+
------
|
|
12
|
+
1
|
|
13
|
+
(1 row)
|
|
14
|
+
|
|
15
|
+
step portal_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
16
|
+
step portal_enroll:
|
|
17
|
+
select status from agent_board.enroll_federated_human(
|
|
18
|
+
'https://lo193-iso.test', 'message-board', 'iso-orphan',
|
|
19
|
+
jsonb_build_object('sub','iso-orphan'), 'Iso Orphan'
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
ERROR: issuer/audience not in the identity-provider allowlist (rejected before any owner or board lock)
|
|
23
|
+
step ohold_commit: COMMIT;
|
|
24
|
+
step portal_commit: COMMIT;
|
|
25
|
+
step check:
|
|
26
|
+
select
|
|
27
|
+
(select count(*) from agent_board.agents a
|
|
28
|
+
where a.kind = 'human'
|
|
29
|
+
and a.metadata #>> ARRAY['federation','subject'] = 'iso-orphan') as human_agents,
|
|
30
|
+
(select count(*) from agent_board.identity_providers ip
|
|
31
|
+
where ip.issuer = 'https://lo193-iso.test') as providers;
|
|
32
|
+
|
|
33
|
+
human_agents|providers
|
|
34
|
+
------------+---------
|
|
35
|
+
0| 0
|
|
36
|
+
(1 row)
|
|
37
|
+
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
Parsed test spec with 4 sessions
|
|
2
|
+
|
|
3
|
+
starting permutation: holder_begin hold_ceiling_lock onboard_begin onboard_call probe_begin probe_boards_row probe_commit holder_commit onboard_commit check
|
|
4
|
+
count
|
|
5
|
+
-----
|
|
6
|
+
1
|
|
7
|
+
(1 row)
|
|
8
|
+
|
|
9
|
+
step holder_begin: BEGIN;
|
|
10
|
+
step hold_ceiling_lock:
|
|
11
|
+
select agent_board._lock_board_authority_ceiling(
|
|
12
|
+
(select id from agent_board.boards where slug='onboard-ceiling-board')) as locked;
|
|
13
|
+
|
|
14
|
+
locked
|
|
15
|
+
------
|
|
16
|
+
|
|
17
|
+
(1 row)
|
|
18
|
+
|
|
19
|
+
step onboard_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
20
|
+
step onboard_call:
|
|
21
|
+
select identity_disposition, membership_disposition, binding_disposition
|
|
22
|
+
from agent_board.onboard_federated_fleet_agent(
|
|
23
|
+
'https://onboard-ceiling.test', 'message-board', 'human-onboard-ceiling',
|
|
24
|
+
jsonb_build_object('iss','https://onboard-ceiling.test','aud','message-board','sub','human-onboard-ceiling'),
|
|
25
|
+
'onboard-ceiling-agent',
|
|
26
|
+
'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
|
|
27
|
+
'raw_ed25519_base64url',
|
|
28
|
+
'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
|
|
29
|
+
true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
|
|
30
|
+
(select code from agent_board.board_invite_tokens where created_by_agent_id='19610000-0000-0000-0000-000000000001'),
|
|
31
|
+
(select id from agent_board.boards where slug='onboard-ceiling-board'),
|
|
32
|
+
'19610000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
|
|
33
|
+
'message-board', 'sha256:onboard-ceiling-repo', 'worker', 'phase_worker',
|
|
34
|
+
'onboard-ceiling-agent'
|
|
35
|
+
);
|
|
36
|
+
<waiting ...>
|
|
37
|
+
step probe_begin: BEGIN;
|
|
38
|
+
step probe_boards_row:
|
|
39
|
+
select status from agent_board.boards
|
|
40
|
+
where id = (select id from agent_board.boards where slug='onboard-ceiling-board')
|
|
41
|
+
for update nowait;
|
|
42
|
+
|
|
43
|
+
status
|
|
44
|
+
------
|
|
45
|
+
active
|
|
46
|
+
(1 row)
|
|
47
|
+
|
|
48
|
+
step probe_commit: COMMIT;
|
|
49
|
+
step holder_commit: COMMIT;
|
|
50
|
+
step onboard_call: <... completed>
|
|
51
|
+
identity_disposition|membership_disposition|binding_disposition
|
|
52
|
+
--------------------+----------------------+-------------------
|
|
53
|
+
created |created |created
|
|
54
|
+
(1 row)
|
|
55
|
+
|
|
56
|
+
step onboard_commit: COMMIT;
|
|
57
|
+
step check:
|
|
58
|
+
select
|
|
59
|
+
(select count(*) from agent_board.agents where handle='onboard-ceiling-agent') as onboarded_agents,
|
|
60
|
+
(select count(*) from agent_board.board_memberships bm
|
|
61
|
+
where bm.board_id=(select id from agent_board.boards where slug='onboard-ceiling-board')
|
|
62
|
+
and bm.agent_id in (select id from agent_board.agents where handle='onboard-ceiling-agent')) as memberships;
|
|
63
|
+
|
|
64
|
+
onboarded_agents|memberships
|
|
65
|
+
----------------+-----------
|
|
66
|
+
1| 1
|
|
67
|
+
(1 row)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
starting permutation: onboard_begin onboard_call onboard_commit probe_begin probe_boards_row probe_commit check
|
|
71
|
+
count
|
|
72
|
+
-----
|
|
73
|
+
1
|
|
74
|
+
(1 row)
|
|
75
|
+
|
|
76
|
+
step onboard_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
|
|
77
|
+
step onboard_call:
|
|
78
|
+
select identity_disposition, membership_disposition, binding_disposition
|
|
79
|
+
from agent_board.onboard_federated_fleet_agent(
|
|
80
|
+
'https://onboard-ceiling.test', 'message-board', 'human-onboard-ceiling',
|
|
81
|
+
jsonb_build_object('iss','https://onboard-ceiling.test','aud','message-board','sub','human-onboard-ceiling'),
|
|
82
|
+
'onboard-ceiling-agent',
|
|
83
|
+
'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
|
|
84
|
+
'raw_ed25519_base64url',
|
|
85
|
+
'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
|
|
86
|
+
true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
|
|
87
|
+
(select code from agent_board.board_invite_tokens where created_by_agent_id='19610000-0000-0000-0000-000000000001'),
|
|
88
|
+
(select id from agent_board.boards where slug='onboard-ceiling-board'),
|
|
89
|
+
'19610000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
|
|
90
|
+
'message-board', 'sha256:onboard-ceiling-repo', 'worker', 'phase_worker',
|
|
91
|
+
'onboard-ceiling-agent'
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
identity_disposition|membership_disposition|binding_disposition
|
|
95
|
+
--------------------+----------------------+-------------------
|
|
96
|
+
created |created |created
|
|
97
|
+
(1 row)
|
|
98
|
+
|
|
99
|
+
step onboard_commit: COMMIT;
|
|
100
|
+
step probe_begin: BEGIN;
|
|
101
|
+
step probe_boards_row:
|
|
102
|
+
select status from agent_board.boards
|
|
103
|
+
where id = (select id from agent_board.boards where slug='onboard-ceiling-board')
|
|
104
|
+
for update nowait;
|
|
105
|
+
|
|
106
|
+
status
|
|
107
|
+
------
|
|
108
|
+
active
|
|
109
|
+
(1 row)
|
|
110
|
+
|
|
111
|
+
step probe_commit: COMMIT;
|
|
112
|
+
step check:
|
|
113
|
+
select
|
|
114
|
+
(select count(*) from agent_board.agents where handle='onboard-ceiling-agent') as onboarded_agents,
|
|
115
|
+
(select count(*) from agent_board.board_memberships bm
|
|
116
|
+
where bm.board_id=(select id from agent_board.boards where slug='onboard-ceiling-board')
|
|
117
|
+
and bm.agent_id in (select id from agent_board.agents where handle='onboard-ceiling-agent')) as memberships;
|
|
118
|
+
|
|
119
|
+
onboarded_agents|memberships
|
|
120
|
+
----------------+-----------
|
|
121
|
+
1| 1
|
|
122
|
+
(1 row)
|
|
123
|
+
|