@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.
Files changed (156) hide show
  1. package/fixtures/already-applied.json +160 -0
  2. package/migrations/20260731000100_agent_board_agentsdir_column_scope.sql +88 -0
  3. package/migrations/20260801000100_agent_board_leaveidem_terminal_noop.sql +317 -0
  4. package/migrations/20260802000100_agent_board_rolereset_reentry_clamp.sql +237 -0
  5. package/migrations/20260803000100_agent_board_rowid_total_order.sql +1201 -0
  6. package/migrations/20260804000100_agent_board_hygiene_actor_binding_rls.sql +229 -0
  7. package/migrations/20260806000100_agent_board_consent_substrate.sql +339 -0
  8. package/migrations/20260807000100_agent_board_consent_emission.sql +619 -0
  9. package/migrations/20260808000100_agent_board_rejectsem.sql +145 -0
  10. package/migrations/20260809000100_agent_board_consent_gating.sql +492 -0
  11. package/migrations/20260810000100_agent_board_consent_locking.sql +485 -0
  12. package/migrations/20260811000100_agent_board_retention_metadata_revoke.sql +23 -0
  13. package/migrations/20260812000100_agent_board_pubexec_class_revoke.sql +54 -0
  14. package/migrations/20260813000100_agent_board_invitepolicy_block.sql +420 -0
  15. package/migrations/20260814000100_agent_board_obsgate_thread_post_policy.sql +239 -0
  16. package/migrations/20260815000100_agent_board_obsgate2_authoring_gates.sql +287 -0
  17. package/migrations/20260816000100_agent_board_obsgate3_task_lifecycle.sql +118 -0
  18. package/migrations/20260817000100_agent_board_obsgate4_claims_lifecycle.sql +250 -0
  19. package/migrations/20260818000100_agent_board_fleet_machines_rls_correlation.sql +43 -0
  20. package/migrations/20260819000100_agent_board_resolve_noop_retire.sql +166 -0
  21. package/migrations/20260820000100_agent_board_roomdeleg_lane_b.sql +206 -0
  22. package/migrations/20260821000100_agent_board_claimgate_claimkey.sql +372 -0
  23. package/migrations/20260822000100_agent_board_mint_harden.sql +710 -0
  24. package/migrations/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql +207 -0
  25. package/migrations/20260823000100_agent_board_fleet_machine_hijack.sql +106 -0
  26. package/migrations/20260824000100_agent_board_claimgate_shadow.sql +443 -0
  27. package/migrations/20260825000100_agent_board_claimgate_enforce.sql +660 -0
  28. package/migrations/20260826000100_agent_board_fleet_machine_reactivation.sql +514 -0
  29. package/migrations/20260828000100_agent_board_delegation_cap_ceiling.sql +474 -0
  30. package/migrations/20260829000100_agent_board_fleet_machine_reclaim.sql +432 -0
  31. package/migrations/20260830000100_agent_board_delegation_sole_writer.sql +41 -0
  32. package/migrations/20260831000100_agent_board_fleet_domain_reclaim.sql +389 -0
  33. package/migrations/20260901000100_agent_board_atomic_fleet_onboarding.sql +1496 -0
  34. package/migrations/20260901000110_agent_board_fleet_onboarding_ceiling_lock.sql +604 -0
  35. package/migrations/20260901000120_agent_board_human_revocation_evidence_completeness.sql +78 -0
  36. package/migrations/20260901000130_agent_board_fedsession_human_revocation_gate.sql +74 -0
  37. package/migrations/20260901000140_agent_board_fedsession_board_owner_lock_order.sql +102 -0
  38. package/migrations/20260902000100_agent_board_outbox_wake_ordering.sql +184 -0
  39. package/migrations/20260903000100_agent_board_enroll_identity_board_owner_lock_order.sql +604 -0
  40. package/migrations/20260903000200_agent_board_fedsession_provider_absence_gate.sql +177 -0
  41. package/migrations/20260904000100_agent_board_wake_recovery_surface.sql +155 -0
  42. package/package.json +1 -1
  43. package/schema-manifest.json +363 -3
  44. package/src/tooling.test.mjs +113 -2
  45. package/tests/agent_board_actorspoof.test.sql +349 -0
  46. package/tests/agent_board_agentsdir.test.sql +154 -0
  47. package/tests/agent_board_atomic_fleet_onboarding.test.sql +623 -0
  48. package/tests/agent_board_atomic_fleet_onboarding_backfill.test.sql +142 -0
  49. package/tests/agent_board_atomic_fleet_onboarding_runtime.test.sql +1250 -0
  50. package/tests/agent_board_authbound_boundary.test.sql +9 -1
  51. package/tests/agent_board_claimgate_enforce.test.sql +464 -0
  52. package/tests/agent_board_claimgate_predicate.test.sql +360 -0
  53. package/tests/agent_board_claimkey.test.sql +229 -0
  54. package/tests/agent_board_consent_backfill.test.sql +48 -0
  55. package/tests/agent_board_consent_emission.test.sql +601 -0
  56. package/tests/agent_board_consent_gating.test.sql +489 -0
  57. package/tests/agent_board_consent_substrate.test.sql +720 -0
  58. package/tests/agent_board_delegation_cap_ceiling.test.sql +303 -0
  59. package/tests/agent_board_delegation_enforcement.test.sql +55 -6
  60. package/tests/agent_board_delegation_policies.test.sql +107 -1
  61. package/tests/agent_board_enroll_federated_identity.test.sql +3 -3
  62. package/tests/agent_board_enroll_pop_binding.test.sql +13 -3
  63. package/tests/agent_board_enrollment_audit_content.test.sql +11 -7
  64. package/tests/agent_board_federated_lock_order_class.test.sql +390 -0
  65. package/tests/agent_board_fedsession.test.sql +51 -5
  66. package/tests/agent_board_fedsession_provider_absence_gate.test.sql +170 -0
  67. package/tests/agent_board_fleet_domain_reclaim.test.sql +419 -0
  68. package/tests/agent_board_fleet_machine_hijack.test.sql +190 -0
  69. package/tests/agent_board_fleet_machine_reactivation.test.sql +426 -0
  70. package/tests/agent_board_fleet_machine_reclaim.test.sql +509 -0
  71. package/tests/agent_board_fleet_machines_rls.test.sql +79 -0
  72. package/tests/agent_board_fleet_policy.test.sql +2 -2
  73. package/tests/agent_board_grants_hygiene.test.sql +408 -0
  74. package/tests/agent_board_identity_providers.test.sql +9 -0
  75. package/tests/agent_board_inbox_reads.test.sql +45 -31
  76. package/tests/agent_board_inbox_rpcs.test.sql +44 -34
  77. package/tests/agent_board_invitepolicy.test.sql +205 -0
  78. package/tests/agent_board_leaveidem.test.sql +194 -0
  79. package/tests/agent_board_mint_fleet_agent_session.test.sql +10 -10
  80. package/tests/agent_board_mint_harden.test.sql +303 -0
  81. package/tests/agent_board_mint_harden_backfill.test.sql +95 -0
  82. package/tests/agent_board_obsgate.test.sql +178 -0
  83. package/tests/agent_board_obsgate2.test.sql +153 -0
  84. package/tests/agent_board_obsgate3.test.sql +170 -0
  85. package/tests/agent_board_obsgate4.test.sql +196 -0
  86. package/tests/agent_board_outbox_wake_ordering.test.sql +452 -0
  87. package/tests/agent_board_portal_offline_invariant.test.sql +14 -3
  88. package/tests/agent_board_pubexec_class.test.sql +53 -0
  89. package/tests/agent_board_rejectsem.test.sql +271 -0
  90. package/tests/agent_board_resigning_refresh.test.sql +1 -1
  91. package/tests/agent_board_resolve_noop_retire.test.sql +71 -0
  92. package/tests/agent_board_retention_metadata_acl.test.sql +53 -0
  93. package/tests/agent_board_revoke_agent_subtree.test.sql +3 -3
  94. package/tests/agent_board_rolereset.test.sql +351 -0
  95. package/tests/agent_board_roomdeleg.test.sql +5 -3
  96. package/tests/agent_board_roomdeleg_lane_b.test.sql +144 -0
  97. package/tests/agent_board_roomlink.test.sql +27 -11
  98. package/tests/agent_board_rowid.test.sql +1274 -0
  99. package/tests/agent_board_signature_rls_reads.test.sql +3 -3
  100. package/tests/agent_board_signed_write_gateway.test.sql +3 -3
  101. package/tests/agent_board_signing_challenge_pending_cap.test.sql +2 -2
  102. package/tests/agent_board_signing_challenge_reaper.test.sql +2 -2
  103. package/tests/agent_board_signing_proof_rpcs.test.sql +4 -4
  104. package/tests/agent_board_signing_store.test.sql +6 -6
  105. package/tests/agent_board_wake_recovery.test.sql +756 -0
  106. package/tests/fixtures/isolation-substrate.sql +93 -0
  107. package/tests/fixtures/test-prereqs.sql +33 -0
  108. package/tests/isolation/expected/atomic_fedsession_fleet_lock_order.out +79 -0
  109. package/tests/isolation/expected/atomic_fedsession_human_revoke.out +87 -0
  110. package/tests/isolation/expected/atomic_fleet_authority_races.out +469 -0
  111. package/tests/isolation/expected/atomic_fleet_binding_revoke.out +103 -0
  112. package/tests/isolation/expected/atomic_fleet_board_archive.out +117 -0
  113. package/tests/isolation/expected/atomic_fleet_human_fresh_revoke.out +136 -0
  114. package/tests/isolation/expected/atomic_fleet_identity_disposition.out +61 -0
  115. package/tests/isolation/expected/atomic_fleet_lifecycle_races.out +1479 -0
  116. package/tests/isolation/expected/atomic_fleet_onboarding.out +75 -0
  117. package/tests/isolation/expected/atomic_fleet_subtree_lock_order.out +60 -0
  118. package/tests/isolation/expected/ceiling_setter_lock_before_upsert.out +95 -0
  119. package/tests/isolation/expected/claimgate_ownerless_quota.out +36 -0
  120. package/tests/isolation/expected/claimkey_renew_race.out +38 -0
  121. package/tests/isolation/expected/consent_approval_lock.out +43 -0
  122. package/tests/isolation/expected/consent_emit_actual_state.out +37 -0
  123. package/tests/isolation/expected/domain_reclaim_revoke_race.out +40 -0
  124. package/tests/isolation/expected/enroll_identity_board_owner_lock_order.out +55 -0
  125. package/tests/isolation/expected/fedsession_provider_absent_owner_lock.out +37 -0
  126. package/tests/isolation/expected/onboarding_ceiling_lock_order.out +123 -0
  127. package/tests/isolation/expected/outbox_wake_ordering.out +86 -0
  128. package/tests/isolation/expected/reactivate_revoke_race.out +80 -0
  129. package/tests/isolation/expected/reclaim_revoke_race.out +40 -0
  130. package/tests/isolation/expected/wake_recovery_late_commit.out +89 -0
  131. package/tests/isolation/specs/atomic_fedsession_fleet_lock_order.spec +117 -0
  132. package/tests/isolation/specs/atomic_fedsession_human_revoke.spec +66 -0
  133. package/tests/isolation/specs/atomic_fleet_authority_races.spec +235 -0
  134. package/tests/isolation/specs/atomic_fleet_binding_revoke.spec +127 -0
  135. package/tests/isolation/specs/atomic_fleet_board_archive.spec +134 -0
  136. package/tests/isolation/specs/atomic_fleet_human_fresh_revoke.spec +142 -0
  137. package/tests/isolation/specs/atomic_fleet_identity_disposition.spec +118 -0
  138. package/tests/isolation/specs/atomic_fleet_lifecycle_races.spec +244 -0
  139. package/tests/isolation/specs/atomic_fleet_onboarding.spec +106 -0
  140. package/tests/isolation/specs/atomic_fleet_subtree_lock_order.spec +147 -0
  141. package/tests/isolation/specs/ceiling_setter_lock_before_upsert.spec +117 -0
  142. package/tests/isolation/specs/claimgate_ownerless_quota.spec +77 -0
  143. package/tests/isolation/specs/claimkey_renew_race.spec +67 -0
  144. package/tests/isolation/specs/consent_approval_lock.spec +98 -0
  145. package/tests/isolation/specs/consent_emit_actual_state.spec +79 -0
  146. package/tests/isolation/specs/domain_reclaim_revoke_race.spec +88 -0
  147. package/tests/isolation/specs/enroll_identity_board_owner_lock_order.spec +117 -0
  148. package/tests/isolation/specs/fedsession_provider_absent_owner_lock.spec +63 -0
  149. package/tests/isolation/specs/onboarding_ceiling_lock_order.spec +183 -0
  150. package/tests/isolation/specs/outbox_wake_ordering.spec +202 -0
  151. package/tests/isolation/specs/reactivate_revoke_race.spec +115 -0
  152. package/tests/isolation/specs/reclaim_revoke_race.spec +94 -0
  153. package/tests/isolation/specs/wake_recovery_late_commit.spec +207 -0
  154. package/tests/seeds/20260806000100_agent_board_consent_substrate.sql.pre.sql +19 -0
  155. package/tests/seeds/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql.pre.sql +39 -0
  156. package/tests/seeds/20260901000100_agent_board_atomic_fleet_onboarding.sql.pre.sql +110 -0
@@ -0,0 +1,1479 @@
1
+ Parsed test spec with 3 sessions
2
+
3
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_fleet_agent retry_commit lifecycle_commit check
4
+ count
5
+ -----
6
+ 1
7
+ (1 row)
8
+
9
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
10
+ step retry_onboard:
11
+ select identity_disposition, membership_disposition, binding_disposition
12
+ from agent_board.onboard_federated_fleet_agent(
13
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
14
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
15
+ 'atomic-lifecycle-agent',
16
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
17
+ 'raw_ed25519_base64url',
18
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
19
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
20
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
21
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
22
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
23
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
24
+ 'atomic-lifecycle-agent'
25
+ );
26
+
27
+ identity_disposition|membership_disposition|binding_disposition
28
+ --------------------+----------------------+-------------------
29
+ reused |reused |reused
30
+ (1 row)
31
+
32
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
33
+ step revoke_fleet_agent:
34
+ select subject_kind from agent_board.revoke_fleet_subject(
35
+ 'agent', (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
36
+ '16240000-0000-0000-0000-000000000001', 'isolation agent revoke', jsonb_build_object()
37
+ );
38
+ <waiting ...>
39
+ step retry_commit: COMMIT;
40
+ step revoke_fleet_agent: <... completed>
41
+ subject_kind
42
+ ------------
43
+ agent
44
+ (1 row)
45
+
46
+ step lifecycle_commit: COMMIT;
47
+ step check:
48
+ select a.status as agent_status,
49
+ k.status as key_status,
50
+ b.lifecycle_state as binding_state,
51
+ h.lifecycle_state as harness_state,
52
+ r.lifecycle_state as repo_state,
53
+ m.lifecycle_state as machine_state,
54
+ d.lifecycle_state as domain_state,
55
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
56
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
57
+ from agent_board.agents a
58
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
59
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
60
+ join agent_board.fleet_machines m on m.id=b.machine_id
61
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
62
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
63
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
64
+ where a.handle='atomic-lifecycle-agent';
65
+
66
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
67
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
68
+ active |active |revoked |active |active |active |active | 1| 1
69
+ (1 row)
70
+
71
+
72
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_fleet_key retry_commit lifecycle_commit check
73
+ count
74
+ -----
75
+ 1
76
+ (1 row)
77
+
78
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
79
+ step retry_onboard:
80
+ select identity_disposition, membership_disposition, binding_disposition
81
+ from agent_board.onboard_federated_fleet_agent(
82
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
83
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
84
+ 'atomic-lifecycle-agent',
85
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
86
+ 'raw_ed25519_base64url',
87
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
88
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
89
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
90
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
91
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
92
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
93
+ 'atomic-lifecycle-agent'
94
+ );
95
+
96
+ identity_disposition|membership_disposition|binding_disposition
97
+ --------------------+----------------------+-------------------
98
+ reused |reused |reused
99
+ (1 row)
100
+
101
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
102
+ step revoke_fleet_key:
103
+ select subject_kind from agent_board.revoke_fleet_subject(
104
+ 'signing_key', (select k.id from agent_board.agent_signing_keys k join agent_board.agents a on a.id=k.agent_id where a.handle='atomic-lifecycle-agent'),
105
+ '16240000-0000-0000-0000-000000000001', 'isolation key revoke', jsonb_build_object()
106
+ );
107
+ <waiting ...>
108
+ step retry_commit: COMMIT;
109
+ step revoke_fleet_key: <... completed>
110
+ subject_kind
111
+ ------------
112
+ signing_key
113
+ (1 row)
114
+
115
+ step lifecycle_commit: COMMIT;
116
+ step check:
117
+ select a.status as agent_status,
118
+ k.status as key_status,
119
+ b.lifecycle_state as binding_state,
120
+ h.lifecycle_state as harness_state,
121
+ r.lifecycle_state as repo_state,
122
+ m.lifecycle_state as machine_state,
123
+ d.lifecycle_state as domain_state,
124
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
125
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
126
+ from agent_board.agents a
127
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
128
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
129
+ join agent_board.fleet_machines m on m.id=b.machine_id
130
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
131
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
132
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
133
+ where a.handle='atomic-lifecycle-agent';
134
+
135
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
136
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
137
+ active |revoked |active |active |active |active |active | 1| 1
138
+ (1 row)
139
+
140
+
141
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_agent retry_commit lifecycle_commit check
142
+ count
143
+ -----
144
+ 1
145
+ (1 row)
146
+
147
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
148
+ step retry_onboard:
149
+ select identity_disposition, membership_disposition, binding_disposition
150
+ from agent_board.onboard_federated_fleet_agent(
151
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
152
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
153
+ 'atomic-lifecycle-agent',
154
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
155
+ 'raw_ed25519_base64url',
156
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
157
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
158
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
159
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
160
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
161
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
162
+ 'atomic-lifecycle-agent'
163
+ );
164
+
165
+ identity_disposition|membership_disposition|binding_disposition
166
+ --------------------+----------------------+-------------------
167
+ reused |reused |reused
168
+ (1 row)
169
+
170
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
171
+ step revoke_agent:
172
+ select status from agent_board.revoke_agent(
173
+ (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
174
+ 'isolation legacy agent revoke'
175
+ );
176
+ <waiting ...>
177
+ step retry_commit: COMMIT;
178
+ step revoke_agent: <... completed>
179
+ status
180
+ ---------
181
+ suspended
182
+ (1 row)
183
+
184
+ step lifecycle_commit: COMMIT;
185
+ step check:
186
+ select a.status as agent_status,
187
+ k.status as key_status,
188
+ b.lifecycle_state as binding_state,
189
+ h.lifecycle_state as harness_state,
190
+ r.lifecycle_state as repo_state,
191
+ m.lifecycle_state as machine_state,
192
+ d.lifecycle_state as domain_state,
193
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
194
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
195
+ from agent_board.agents a
196
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
197
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
198
+ join agent_board.fleet_machines m on m.id=b.machine_id
199
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
200
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
201
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
202
+ where a.handle='atomic-lifecycle-agent';
203
+
204
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
205
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
206
+ suspended |active |active |active |active |active |active | 1| 1
207
+ (1 row)
208
+
209
+
210
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_agent_subtree retry_commit lifecycle_commit check
211
+ count
212
+ -----
213
+ 1
214
+ (1 row)
215
+
216
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
217
+ step retry_onboard:
218
+ select identity_disposition, membership_disposition, binding_disposition
219
+ from agent_board.onboard_federated_fleet_agent(
220
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
221
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
222
+ 'atomic-lifecycle-agent',
223
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
224
+ 'raw_ed25519_base64url',
225
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
226
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
227
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
228
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
229
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
230
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
231
+ 'atomic-lifecycle-agent'
232
+ );
233
+
234
+ identity_disposition|membership_disposition|binding_disposition
235
+ --------------------+----------------------+-------------------
236
+ reused |reused |reused
237
+ (1 row)
238
+
239
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
240
+ step revoke_agent_subtree:
241
+ select revoked_agent_count from agent_board.revoke_agent_subtree(
242
+ (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
243
+ '16240000-0000-0000-0000-000000000001', 'isolation agent subtree revoke'
244
+ );
245
+ <waiting ...>
246
+ step retry_commit: COMMIT;
247
+ step revoke_agent_subtree: <... completed>
248
+ revoked_agent_count
249
+ -------------------
250
+ 1
251
+ (1 row)
252
+
253
+ step lifecycle_commit: COMMIT;
254
+ step check:
255
+ select a.status as agent_status,
256
+ k.status as key_status,
257
+ b.lifecycle_state as binding_state,
258
+ h.lifecycle_state as harness_state,
259
+ r.lifecycle_state as repo_state,
260
+ m.lifecycle_state as machine_state,
261
+ d.lifecycle_state as domain_state,
262
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
263
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
264
+ from agent_board.agents a
265
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
266
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
267
+ join agent_board.fleet_machines m on m.id=b.machine_id
268
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
269
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
270
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
271
+ where a.handle='atomic-lifecycle-agent';
272
+
273
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
274
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
275
+ revoked |revoked |active |active |active |active |active | 1| 1
276
+ (1 row)
277
+
278
+
279
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_human_subtree retry_commit lifecycle_commit check
280
+ count
281
+ -----
282
+ 1
283
+ (1 row)
284
+
285
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
286
+ step retry_onboard:
287
+ select identity_disposition, membership_disposition, binding_disposition
288
+ from agent_board.onboard_federated_fleet_agent(
289
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
290
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
291
+ 'atomic-lifecycle-agent',
292
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
293
+ 'raw_ed25519_base64url',
294
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
295
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
296
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
297
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
298
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
299
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
300
+ 'atomic-lifecycle-agent'
301
+ );
302
+
303
+ identity_disposition|membership_disposition|binding_disposition
304
+ --------------------+----------------------+-------------------
305
+ reused |reused |reused
306
+ (1 row)
307
+
308
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
309
+ step revoke_human_subtree:
310
+ select revoked_agent_count from agent_board.revoke_human_subtree(
311
+ (select owner_user_id from agent_board.agents where handle='atomic-lifecycle-agent'),
312
+ '16240000-0000-0000-0000-000000000001', 'isolation human subtree revoke'
313
+ );
314
+ <waiting ...>
315
+ step retry_commit: COMMIT;
316
+ step revoke_human_subtree: <... completed>
317
+ revoked_agent_count
318
+ -------------------
319
+ 1
320
+ (1 row)
321
+
322
+ step lifecycle_commit: COMMIT;
323
+ step check:
324
+ select a.status as agent_status,
325
+ k.status as key_status,
326
+ b.lifecycle_state as binding_state,
327
+ h.lifecycle_state as harness_state,
328
+ r.lifecycle_state as repo_state,
329
+ m.lifecycle_state as machine_state,
330
+ d.lifecycle_state as domain_state,
331
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
332
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
333
+ from agent_board.agents a
334
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
335
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
336
+ join agent_board.fleet_machines m on m.id=b.machine_id
337
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
338
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
339
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
340
+ where a.handle='atomic-lifecycle-agent';
341
+
342
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
343
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
344
+ revoked |revoked |active |active |active |active |active | 1| 1
345
+ (1 row)
346
+
347
+
348
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_harness retry_commit lifecycle_commit check
349
+ count
350
+ -----
351
+ 1
352
+ (1 row)
353
+
354
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
355
+ step retry_onboard:
356
+ select identity_disposition, membership_disposition, binding_disposition
357
+ from agent_board.onboard_federated_fleet_agent(
358
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
359
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
360
+ 'atomic-lifecycle-agent',
361
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
362
+ 'raw_ed25519_base64url',
363
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
364
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
365
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
366
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
367
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
368
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
369
+ 'atomic-lifecycle-agent'
370
+ );
371
+
372
+ identity_disposition|membership_disposition|binding_disposition
373
+ --------------------+----------------------+-------------------
374
+ reused |reused |reused
375
+ (1 row)
376
+
377
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
378
+ step revoke_harness:
379
+ select subject_kind from agent_board.revoke_fleet_subject(
380
+ 'harness', (select id from agent_board.fleet_harness_registrations where machine_id='16240000-0000-0000-0000-000000000003'),
381
+ '16240000-0000-0000-0000-000000000001', 'isolation harness revoke', jsonb_build_object()
382
+ );
383
+ <waiting ...>
384
+ step retry_commit: COMMIT;
385
+ step revoke_harness: <... completed>
386
+ subject_kind
387
+ ------------
388
+ harness
389
+ (1 row)
390
+
391
+ step lifecycle_commit: COMMIT;
392
+ step check:
393
+ select a.status as agent_status,
394
+ k.status as key_status,
395
+ b.lifecycle_state as binding_state,
396
+ h.lifecycle_state as harness_state,
397
+ r.lifecycle_state as repo_state,
398
+ m.lifecycle_state as machine_state,
399
+ d.lifecycle_state as domain_state,
400
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
401
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
402
+ from agent_board.agents a
403
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
404
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
405
+ join agent_board.fleet_machines m on m.id=b.machine_id
406
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
407
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
408
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
409
+ where a.handle='atomic-lifecycle-agent';
410
+
411
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
412
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
413
+ active |active |active |revoked |active |active |active | 1| 1
414
+ (1 row)
415
+
416
+
417
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_repo retry_commit lifecycle_commit check
418
+ count
419
+ -----
420
+ 1
421
+ (1 row)
422
+
423
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
424
+ step retry_onboard:
425
+ select identity_disposition, membership_disposition, binding_disposition
426
+ from agent_board.onboard_federated_fleet_agent(
427
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
428
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
429
+ 'atomic-lifecycle-agent',
430
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
431
+ 'raw_ed25519_base64url',
432
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
433
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
434
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
435
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
436
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
437
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
438
+ 'atomic-lifecycle-agent'
439
+ );
440
+
441
+ identity_disposition|membership_disposition|binding_disposition
442
+ --------------------+----------------------+-------------------
443
+ reused |reused |reused
444
+ (1 row)
445
+
446
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
447
+ step revoke_repo:
448
+ select subject_kind from agent_board.revoke_fleet_subject(
449
+ 'repo_scope', (select frs.id from agent_board.fleet_repo_scopes frs join agent_board.fleet_harness_registrations fhr on fhr.id=frs.harness_registration_id where fhr.machine_id='16240000-0000-0000-0000-000000000003'),
450
+ '16240000-0000-0000-0000-000000000001', 'isolation repo revoke', jsonb_build_object()
451
+ );
452
+ <waiting ...>
453
+ step retry_commit: COMMIT;
454
+ step revoke_repo: <... completed>
455
+ subject_kind
456
+ ------------
457
+ repo_scope
458
+ (1 row)
459
+
460
+ step lifecycle_commit: COMMIT;
461
+ step check:
462
+ select a.status as agent_status,
463
+ k.status as key_status,
464
+ b.lifecycle_state as binding_state,
465
+ h.lifecycle_state as harness_state,
466
+ r.lifecycle_state as repo_state,
467
+ m.lifecycle_state as machine_state,
468
+ d.lifecycle_state as domain_state,
469
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
470
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
471
+ from agent_board.agents a
472
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
473
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
474
+ join agent_board.fleet_machines m on m.id=b.machine_id
475
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
476
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
477
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
478
+ where a.handle='atomic-lifecycle-agent';
479
+
480
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
481
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
482
+ active |active |active |active |revoked |active |active | 1| 1
483
+ (1 row)
484
+
485
+
486
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_machine retry_commit lifecycle_commit check
487
+ count
488
+ -----
489
+ 1
490
+ (1 row)
491
+
492
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
493
+ step retry_onboard:
494
+ select identity_disposition, membership_disposition, binding_disposition
495
+ from agent_board.onboard_federated_fleet_agent(
496
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
497
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
498
+ 'atomic-lifecycle-agent',
499
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
500
+ 'raw_ed25519_base64url',
501
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
502
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
503
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
504
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
505
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
506
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
507
+ 'atomic-lifecycle-agent'
508
+ );
509
+
510
+ identity_disposition|membership_disposition|binding_disposition
511
+ --------------------+----------------------+-------------------
512
+ reused |reused |reused
513
+ (1 row)
514
+
515
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
516
+ step revoke_machine:
517
+ select subject_kind from agent_board.revoke_fleet_subject(
518
+ 'machine', '16240000-0000-0000-0000-000000000003',
519
+ '16240000-0000-0000-0000-000000000001', 'isolation machine revoke', jsonb_build_object()
520
+ );
521
+ <waiting ...>
522
+ step retry_commit: COMMIT;
523
+ step revoke_machine: <... completed>
524
+ subject_kind
525
+ ------------
526
+ machine
527
+ (1 row)
528
+
529
+ step lifecycle_commit: COMMIT;
530
+ step check:
531
+ select a.status as agent_status,
532
+ k.status as key_status,
533
+ b.lifecycle_state as binding_state,
534
+ h.lifecycle_state as harness_state,
535
+ r.lifecycle_state as repo_state,
536
+ m.lifecycle_state as machine_state,
537
+ d.lifecycle_state as domain_state,
538
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
539
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
540
+ from agent_board.agents a
541
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
542
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
543
+ join agent_board.fleet_machines m on m.id=b.machine_id
544
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
545
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
546
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
547
+ where a.handle='atomic-lifecycle-agent';
548
+
549
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
550
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
551
+ active |active |active |active |active |revoked |active | 1| 1
552
+ (1 row)
553
+
554
+
555
+ starting permutation: retry_begin retry_onboard lifecycle_begin reclaim_machine retry_commit lifecycle_commit check
556
+ count
557
+ -----
558
+ 1
559
+ (1 row)
560
+
561
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
562
+ step retry_onboard:
563
+ select identity_disposition, membership_disposition, binding_disposition
564
+ from agent_board.onboard_federated_fleet_agent(
565
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
566
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
567
+ 'atomic-lifecycle-agent',
568
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
569
+ 'raw_ed25519_base64url',
570
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
571
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
572
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
573
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
574
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
575
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
576
+ 'atomic-lifecycle-agent'
577
+ );
578
+
579
+ identity_disposition|membership_disposition|binding_disposition
580
+ --------------------+----------------------+-------------------
581
+ reused |reused |reused
582
+ (1 row)
583
+
584
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
585
+ step reclaim_machine:
586
+ select owner_agent_id from agent_board.reclaim_fleet_machine(
587
+ '16240000-0000-0000-0000-000000000003',
588
+ '16240000-0000-0000-0000-000000000004',
589
+ '16240000-0000-0000-0000-000000000001', 'isolation machine reclaim'
590
+ );
591
+ <waiting ...>
592
+ step retry_commit: COMMIT;
593
+ step reclaim_machine: <... completed>
594
+ owner_agent_id
595
+ ------------------------------------
596
+ 16240000-0000-0000-0000-000000000004
597
+ (1 row)
598
+
599
+ step lifecycle_commit: COMMIT;
600
+ step check:
601
+ select a.status as agent_status,
602
+ k.status as key_status,
603
+ b.lifecycle_state as binding_state,
604
+ h.lifecycle_state as harness_state,
605
+ r.lifecycle_state as repo_state,
606
+ m.lifecycle_state as machine_state,
607
+ d.lifecycle_state as domain_state,
608
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
609
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
610
+ from agent_board.agents a
611
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
612
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
613
+ join agent_board.fleet_machines m on m.id=b.machine_id
614
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
615
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
616
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
617
+ where a.handle='atomic-lifecycle-agent';
618
+
619
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
620
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
621
+ active |active |revoked |active |active |active |active | 1| 1
622
+ (1 row)
623
+
624
+
625
+ starting permutation: retry_begin retry_onboard lifecycle_begin revoke_domain retry_commit lifecycle_commit check
626
+ count
627
+ -----
628
+ 1
629
+ (1 row)
630
+
631
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
632
+ step retry_onboard:
633
+ select identity_disposition, membership_disposition, binding_disposition
634
+ from agent_board.onboard_federated_fleet_agent(
635
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
636
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
637
+ 'atomic-lifecycle-agent',
638
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
639
+ 'raw_ed25519_base64url',
640
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
641
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
642
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
643
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
644
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
645
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
646
+ 'atomic-lifecycle-agent'
647
+ );
648
+
649
+ identity_disposition|membership_disposition|binding_disposition
650
+ --------------------+----------------------+-------------------
651
+ reused |reused |reused
652
+ (1 row)
653
+
654
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
655
+ step revoke_domain:
656
+ select subject_kind from agent_board.revoke_fleet_subject(
657
+ 'trust_domain', '16240000-0000-0000-0000-000000000002',
658
+ '16240000-0000-0000-0000-000000000001', 'isolation domain revoke', jsonb_build_object()
659
+ );
660
+ <waiting ...>
661
+ step retry_commit: COMMIT;
662
+ step revoke_domain: <... completed>
663
+ subject_kind
664
+ ------------
665
+ trust_domain
666
+ (1 row)
667
+
668
+ step lifecycle_commit: COMMIT;
669
+ step check:
670
+ select a.status as agent_status,
671
+ k.status as key_status,
672
+ b.lifecycle_state as binding_state,
673
+ h.lifecycle_state as harness_state,
674
+ r.lifecycle_state as repo_state,
675
+ m.lifecycle_state as machine_state,
676
+ d.lifecycle_state as domain_state,
677
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
678
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
679
+ from agent_board.agents a
680
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
681
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
682
+ join agent_board.fleet_machines m on m.id=b.machine_id
683
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
684
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
685
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
686
+ where a.handle='atomic-lifecycle-agent';
687
+
688
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
689
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
690
+ active |active |active |active |active |active |revoked | 1| 1
691
+ (1 row)
692
+
693
+
694
+ starting permutation: retry_begin retry_onboard lifecycle_begin reclaim_domain retry_commit lifecycle_commit check
695
+ count
696
+ -----
697
+ 1
698
+ (1 row)
699
+
700
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
701
+ step retry_onboard:
702
+ select identity_disposition, membership_disposition, binding_disposition
703
+ from agent_board.onboard_federated_fleet_agent(
704
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
705
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
706
+ 'atomic-lifecycle-agent',
707
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
708
+ 'raw_ed25519_base64url',
709
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
710
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
711
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
712
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
713
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
714
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
715
+ 'atomic-lifecycle-agent'
716
+ );
717
+
718
+ identity_disposition|membership_disposition|binding_disposition
719
+ --------------------+----------------------+-------------------
720
+ reused |reused |reused
721
+ (1 row)
722
+
723
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
724
+ step reclaim_domain:
725
+ select owner_agent_id from agent_board.reclaim_fleet_trust_domain(
726
+ '16240000-0000-0000-0000-000000000002',
727
+ '16240000-0000-0000-0000-000000000004',
728
+ '16240000-0000-0000-0000-000000000001', 'isolation domain reclaim'
729
+ );
730
+ <waiting ...>
731
+ step retry_commit: COMMIT;
732
+ step reclaim_domain: <... completed>
733
+ owner_agent_id
734
+ ------------------------------------
735
+ 16240000-0000-0000-0000-000000000004
736
+ (1 row)
737
+
738
+ step lifecycle_commit: COMMIT;
739
+ step check:
740
+ select a.status as agent_status,
741
+ k.status as key_status,
742
+ b.lifecycle_state as binding_state,
743
+ h.lifecycle_state as harness_state,
744
+ r.lifecycle_state as repo_state,
745
+ m.lifecycle_state as machine_state,
746
+ d.lifecycle_state as domain_state,
747
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
748
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
749
+ from agent_board.agents a
750
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
751
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
752
+ join agent_board.fleet_machines m on m.id=b.machine_id
753
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
754
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
755
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
756
+ where a.handle='atomic-lifecycle-agent';
757
+
758
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
759
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
760
+ active |active |active |active |active |active |active | 1| 1
761
+ (1 row)
762
+
763
+
764
+ starting permutation: lifecycle_begin revoke_fleet_agent retry_begin retry_onboard lifecycle_commit retry_commit check
765
+ count
766
+ -----
767
+ 1
768
+ (1 row)
769
+
770
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
771
+ step revoke_fleet_agent:
772
+ select subject_kind from agent_board.revoke_fleet_subject(
773
+ 'agent', (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
774
+ '16240000-0000-0000-0000-000000000001', 'isolation agent revoke', jsonb_build_object()
775
+ );
776
+
777
+ subject_kind
778
+ ------------
779
+ agent
780
+ (1 row)
781
+
782
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
783
+ step retry_onboard:
784
+ select identity_disposition, membership_disposition, binding_disposition
785
+ from agent_board.onboard_federated_fleet_agent(
786
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
787
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
788
+ 'atomic-lifecycle-agent',
789
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
790
+ 'raw_ed25519_base64url',
791
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
792
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
793
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
794
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
795
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
796
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
797
+ 'atomic-lifecycle-agent'
798
+ );
799
+ <waiting ...>
800
+ step lifecycle_commit: COMMIT;
801
+ step retry_onboard: <... completed>
802
+ ERROR: fleet onboarding invite is not usable
803
+ step retry_commit: COMMIT;
804
+ step check:
805
+ select a.status as agent_status,
806
+ k.status as key_status,
807
+ b.lifecycle_state as binding_state,
808
+ h.lifecycle_state as harness_state,
809
+ r.lifecycle_state as repo_state,
810
+ m.lifecycle_state as machine_state,
811
+ d.lifecycle_state as domain_state,
812
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
813
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
814
+ from agent_board.agents a
815
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
816
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
817
+ join agent_board.fleet_machines m on m.id=b.machine_id
818
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
819
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
820
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
821
+ where a.handle='atomic-lifecycle-agent';
822
+
823
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
824
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
825
+ active |active |revoked |active |active |active |active | 1| 1
826
+ (1 row)
827
+
828
+
829
+ starting permutation: lifecycle_begin revoke_fleet_key retry_begin retry_onboard lifecycle_commit retry_commit check
830
+ count
831
+ -----
832
+ 1
833
+ (1 row)
834
+
835
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
836
+ step revoke_fleet_key:
837
+ select subject_kind from agent_board.revoke_fleet_subject(
838
+ 'signing_key', (select k.id from agent_board.agent_signing_keys k join agent_board.agents a on a.id=k.agent_id where a.handle='atomic-lifecycle-agent'),
839
+ '16240000-0000-0000-0000-000000000001', 'isolation key revoke', jsonb_build_object()
840
+ );
841
+
842
+ subject_kind
843
+ ------------
844
+ signing_key
845
+ (1 row)
846
+
847
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
848
+ step retry_onboard:
849
+ select identity_disposition, membership_disposition, binding_disposition
850
+ from agent_board.onboard_federated_fleet_agent(
851
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
852
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
853
+ 'atomic-lifecycle-agent',
854
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
855
+ 'raw_ed25519_base64url',
856
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
857
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
858
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
859
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
860
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
861
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
862
+ 'atomic-lifecycle-agent'
863
+ );
864
+ <waiting ...>
865
+ step lifecycle_commit: COMMIT;
866
+ step retry_onboard: <... completed>
867
+ ERROR: enrollment replay conflicts with the frozen identity contract
868
+ step retry_commit: COMMIT;
869
+ step check:
870
+ select a.status as agent_status,
871
+ k.status as key_status,
872
+ b.lifecycle_state as binding_state,
873
+ h.lifecycle_state as harness_state,
874
+ r.lifecycle_state as repo_state,
875
+ m.lifecycle_state as machine_state,
876
+ d.lifecycle_state as domain_state,
877
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
878
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
879
+ from agent_board.agents a
880
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
881
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
882
+ join agent_board.fleet_machines m on m.id=b.machine_id
883
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
884
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
885
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
886
+ where a.handle='atomic-lifecycle-agent';
887
+
888
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
889
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
890
+ active |revoked |active |active |active |active |active | 1| 1
891
+ (1 row)
892
+
893
+
894
+ starting permutation: lifecycle_begin revoke_agent retry_begin retry_onboard lifecycle_commit retry_commit check
895
+ count
896
+ -----
897
+ 1
898
+ (1 row)
899
+
900
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
901
+ step revoke_agent:
902
+ select status from agent_board.revoke_agent(
903
+ (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
904
+ 'isolation legacy agent revoke'
905
+ );
906
+
907
+ status
908
+ ---------
909
+ suspended
910
+ (1 row)
911
+
912
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
913
+ step retry_onboard:
914
+ select identity_disposition, membership_disposition, binding_disposition
915
+ from agent_board.onboard_federated_fleet_agent(
916
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
917
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
918
+ 'atomic-lifecycle-agent',
919
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
920
+ 'raw_ed25519_base64url',
921
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
922
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
923
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
924
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
925
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
926
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
927
+ 'atomic-lifecycle-agent'
928
+ );
929
+ <waiting ...>
930
+ step lifecycle_commit: COMMIT;
931
+ step retry_onboard: <... completed>
932
+ ERROR: enrollment replay conflicts with the frozen identity contract
933
+ step retry_commit: COMMIT;
934
+ step check:
935
+ select a.status as agent_status,
936
+ k.status as key_status,
937
+ b.lifecycle_state as binding_state,
938
+ h.lifecycle_state as harness_state,
939
+ r.lifecycle_state as repo_state,
940
+ m.lifecycle_state as machine_state,
941
+ d.lifecycle_state as domain_state,
942
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
943
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
944
+ from agent_board.agents a
945
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
946
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
947
+ join agent_board.fleet_machines m on m.id=b.machine_id
948
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
949
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
950
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
951
+ where a.handle='atomic-lifecycle-agent';
952
+
953
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
954
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
955
+ suspended |active |active |active |active |active |active | 1| 1
956
+ (1 row)
957
+
958
+
959
+ starting permutation: lifecycle_begin revoke_agent_subtree retry_begin retry_onboard lifecycle_commit retry_commit check
960
+ count
961
+ -----
962
+ 1
963
+ (1 row)
964
+
965
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
966
+ step revoke_agent_subtree:
967
+ select revoked_agent_count from agent_board.revoke_agent_subtree(
968
+ (select id from agent_board.agents where handle='atomic-lifecycle-agent'),
969
+ '16240000-0000-0000-0000-000000000001', 'isolation agent subtree revoke'
970
+ );
971
+
972
+ revoked_agent_count
973
+ -------------------
974
+ 1
975
+ (1 row)
976
+
977
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
978
+ step retry_onboard:
979
+ select identity_disposition, membership_disposition, binding_disposition
980
+ from agent_board.onboard_federated_fleet_agent(
981
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
982
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
983
+ 'atomic-lifecycle-agent',
984
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
985
+ 'raw_ed25519_base64url',
986
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
987
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
988
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
989
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
990
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
991
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
992
+ 'atomic-lifecycle-agent'
993
+ );
994
+ <waiting ...>
995
+ step lifecycle_commit: COMMIT;
996
+ step retry_onboard: <... completed>
997
+ ERROR: enrollment replay conflicts with the frozen identity contract
998
+ step retry_commit: COMMIT;
999
+ step check:
1000
+ select a.status as agent_status,
1001
+ k.status as key_status,
1002
+ b.lifecycle_state as binding_state,
1003
+ h.lifecycle_state as harness_state,
1004
+ r.lifecycle_state as repo_state,
1005
+ m.lifecycle_state as machine_state,
1006
+ d.lifecycle_state as domain_state,
1007
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1008
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1009
+ from agent_board.agents a
1010
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1011
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1012
+ join agent_board.fleet_machines m on m.id=b.machine_id
1013
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1014
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1015
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1016
+ where a.handle='atomic-lifecycle-agent';
1017
+
1018
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1019
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1020
+ revoked |revoked |active |active |active |active |active | 1| 1
1021
+ (1 row)
1022
+
1023
+
1024
+ starting permutation: lifecycle_begin revoke_human_subtree retry_begin retry_onboard lifecycle_commit retry_commit check
1025
+ count
1026
+ -----
1027
+ 1
1028
+ (1 row)
1029
+
1030
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1031
+ step revoke_human_subtree:
1032
+ select revoked_agent_count from agent_board.revoke_human_subtree(
1033
+ (select owner_user_id from agent_board.agents where handle='atomic-lifecycle-agent'),
1034
+ '16240000-0000-0000-0000-000000000001', 'isolation human subtree revoke'
1035
+ );
1036
+
1037
+ revoked_agent_count
1038
+ -------------------
1039
+ 1
1040
+ (1 row)
1041
+
1042
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1043
+ step retry_onboard:
1044
+ select identity_disposition, membership_disposition, binding_disposition
1045
+ from agent_board.onboard_federated_fleet_agent(
1046
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1047
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1048
+ 'atomic-lifecycle-agent',
1049
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1050
+ 'raw_ed25519_base64url',
1051
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1052
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1053
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1054
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1055
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1056
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1057
+ 'atomic-lifecycle-agent'
1058
+ );
1059
+ <waiting ...>
1060
+ step lifecycle_commit: COMMIT;
1061
+ step retry_onboard: <... completed>
1062
+ ERROR: human owner has been revoked
1063
+ step retry_commit: COMMIT;
1064
+ step check:
1065
+ select a.status as agent_status,
1066
+ k.status as key_status,
1067
+ b.lifecycle_state as binding_state,
1068
+ h.lifecycle_state as harness_state,
1069
+ r.lifecycle_state as repo_state,
1070
+ m.lifecycle_state as machine_state,
1071
+ d.lifecycle_state as domain_state,
1072
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1073
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1074
+ from agent_board.agents a
1075
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1076
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1077
+ join agent_board.fleet_machines m on m.id=b.machine_id
1078
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1079
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1080
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1081
+ where a.handle='atomic-lifecycle-agent';
1082
+
1083
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1084
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1085
+ revoked |revoked |active |active |active |active |active | 1| 1
1086
+ (1 row)
1087
+
1088
+
1089
+ starting permutation: lifecycle_begin revoke_harness retry_begin retry_onboard lifecycle_commit retry_commit check
1090
+ count
1091
+ -----
1092
+ 1
1093
+ (1 row)
1094
+
1095
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1096
+ step revoke_harness:
1097
+ select subject_kind from agent_board.revoke_fleet_subject(
1098
+ 'harness', (select id from agent_board.fleet_harness_registrations where machine_id='16240000-0000-0000-0000-000000000003'),
1099
+ '16240000-0000-0000-0000-000000000001', 'isolation harness revoke', jsonb_build_object()
1100
+ );
1101
+
1102
+ subject_kind
1103
+ ------------
1104
+ harness
1105
+ (1 row)
1106
+
1107
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1108
+ step retry_onboard:
1109
+ select identity_disposition, membership_disposition, binding_disposition
1110
+ from agent_board.onboard_federated_fleet_agent(
1111
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1112
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1113
+ 'atomic-lifecycle-agent',
1114
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1115
+ 'raw_ed25519_base64url',
1116
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1117
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1118
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1119
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1120
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1121
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1122
+ 'atomic-lifecycle-agent'
1123
+ );
1124
+ <waiting ...>
1125
+ step lifecycle_commit: COMMIT;
1126
+ step retry_onboard: <... completed>
1127
+ ERROR: fleet onboarding invite is not usable
1128
+ step retry_commit: COMMIT;
1129
+ step check:
1130
+ select a.status as agent_status,
1131
+ k.status as key_status,
1132
+ b.lifecycle_state as binding_state,
1133
+ h.lifecycle_state as harness_state,
1134
+ r.lifecycle_state as repo_state,
1135
+ m.lifecycle_state as machine_state,
1136
+ d.lifecycle_state as domain_state,
1137
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1138
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1139
+ from agent_board.agents a
1140
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1141
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1142
+ join agent_board.fleet_machines m on m.id=b.machine_id
1143
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1144
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1145
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1146
+ where a.handle='atomic-lifecycle-agent';
1147
+
1148
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1149
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1150
+ active |active |active |revoked |active |active |active | 1| 1
1151
+ (1 row)
1152
+
1153
+
1154
+ starting permutation: lifecycle_begin revoke_repo retry_begin retry_onboard lifecycle_commit retry_commit check
1155
+ count
1156
+ -----
1157
+ 1
1158
+ (1 row)
1159
+
1160
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1161
+ step revoke_repo:
1162
+ select subject_kind from agent_board.revoke_fleet_subject(
1163
+ 'repo_scope', (select frs.id from agent_board.fleet_repo_scopes frs join agent_board.fleet_harness_registrations fhr on fhr.id=frs.harness_registration_id where fhr.machine_id='16240000-0000-0000-0000-000000000003'),
1164
+ '16240000-0000-0000-0000-000000000001', 'isolation repo revoke', jsonb_build_object()
1165
+ );
1166
+
1167
+ subject_kind
1168
+ ------------
1169
+ repo_scope
1170
+ (1 row)
1171
+
1172
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1173
+ step retry_onboard:
1174
+ select identity_disposition, membership_disposition, binding_disposition
1175
+ from agent_board.onboard_federated_fleet_agent(
1176
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1177
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1178
+ 'atomic-lifecycle-agent',
1179
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1180
+ 'raw_ed25519_base64url',
1181
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1182
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1183
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1184
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1185
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1186
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1187
+ 'atomic-lifecycle-agent'
1188
+ );
1189
+ <waiting ...>
1190
+ step lifecycle_commit: COMMIT;
1191
+ step retry_onboard: <... completed>
1192
+ ERROR: fleet onboarding invite is not usable
1193
+ step retry_commit: COMMIT;
1194
+ step check:
1195
+ select a.status as agent_status,
1196
+ k.status as key_status,
1197
+ b.lifecycle_state as binding_state,
1198
+ h.lifecycle_state as harness_state,
1199
+ r.lifecycle_state as repo_state,
1200
+ m.lifecycle_state as machine_state,
1201
+ d.lifecycle_state as domain_state,
1202
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1203
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1204
+ from agent_board.agents a
1205
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1206
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1207
+ join agent_board.fleet_machines m on m.id=b.machine_id
1208
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1209
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1210
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1211
+ where a.handle='atomic-lifecycle-agent';
1212
+
1213
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1214
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1215
+ active |active |active |active |revoked |active |active | 1| 1
1216
+ (1 row)
1217
+
1218
+
1219
+ starting permutation: lifecycle_begin revoke_machine retry_begin retry_onboard lifecycle_commit retry_commit check
1220
+ count
1221
+ -----
1222
+ 1
1223
+ (1 row)
1224
+
1225
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1226
+ step revoke_machine:
1227
+ select subject_kind from agent_board.revoke_fleet_subject(
1228
+ 'machine', '16240000-0000-0000-0000-000000000003',
1229
+ '16240000-0000-0000-0000-000000000001', 'isolation machine revoke', jsonb_build_object()
1230
+ );
1231
+
1232
+ subject_kind
1233
+ ------------
1234
+ machine
1235
+ (1 row)
1236
+
1237
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1238
+ step retry_onboard:
1239
+ select identity_disposition, membership_disposition, binding_disposition
1240
+ from agent_board.onboard_federated_fleet_agent(
1241
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1242
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1243
+ 'atomic-lifecycle-agent',
1244
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1245
+ 'raw_ed25519_base64url',
1246
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1247
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1248
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1249
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1250
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1251
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1252
+ 'atomic-lifecycle-agent'
1253
+ );
1254
+ <waiting ...>
1255
+ step lifecycle_commit: COMMIT;
1256
+ step retry_onboard: <... completed>
1257
+ ERROR: fleet onboarding machine is not usable
1258
+ step retry_commit: COMMIT;
1259
+ step check:
1260
+ select a.status as agent_status,
1261
+ k.status as key_status,
1262
+ b.lifecycle_state as binding_state,
1263
+ h.lifecycle_state as harness_state,
1264
+ r.lifecycle_state as repo_state,
1265
+ m.lifecycle_state as machine_state,
1266
+ d.lifecycle_state as domain_state,
1267
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1268
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1269
+ from agent_board.agents a
1270
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1271
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1272
+ join agent_board.fleet_machines m on m.id=b.machine_id
1273
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1274
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1275
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1276
+ where a.handle='atomic-lifecycle-agent';
1277
+
1278
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1279
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1280
+ active |active |active |active |active |revoked |active | 1| 1
1281
+ (1 row)
1282
+
1283
+
1284
+ starting permutation: lifecycle_begin reclaim_machine retry_begin retry_onboard lifecycle_commit retry_commit check
1285
+ count
1286
+ -----
1287
+ 1
1288
+ (1 row)
1289
+
1290
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1291
+ step reclaim_machine:
1292
+ select owner_agent_id from agent_board.reclaim_fleet_machine(
1293
+ '16240000-0000-0000-0000-000000000003',
1294
+ '16240000-0000-0000-0000-000000000004',
1295
+ '16240000-0000-0000-0000-000000000001', 'isolation machine reclaim'
1296
+ );
1297
+
1298
+ owner_agent_id
1299
+ ------------------------------------
1300
+ 16240000-0000-0000-0000-000000000004
1301
+ (1 row)
1302
+
1303
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1304
+ step retry_onboard:
1305
+ select identity_disposition, membership_disposition, binding_disposition
1306
+ from agent_board.onboard_federated_fleet_agent(
1307
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1308
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1309
+ 'atomic-lifecycle-agent',
1310
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1311
+ 'raw_ed25519_base64url',
1312
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1313
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1314
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1315
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1316
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1317
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1318
+ 'atomic-lifecycle-agent'
1319
+ );
1320
+ <waiting ...>
1321
+ step lifecycle_commit: COMMIT;
1322
+ step retry_onboard: <... completed>
1323
+ ERROR: fleet onboarding machine is not usable
1324
+ step retry_commit: COMMIT;
1325
+ step check:
1326
+ select a.status as agent_status,
1327
+ k.status as key_status,
1328
+ b.lifecycle_state as binding_state,
1329
+ h.lifecycle_state as harness_state,
1330
+ r.lifecycle_state as repo_state,
1331
+ m.lifecycle_state as machine_state,
1332
+ d.lifecycle_state as domain_state,
1333
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1334
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1335
+ from agent_board.agents a
1336
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1337
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1338
+ join agent_board.fleet_machines m on m.id=b.machine_id
1339
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1340
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1341
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1342
+ where a.handle='atomic-lifecycle-agent';
1343
+
1344
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1345
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1346
+ active |active |revoked |active |active |active |active | 1| 1
1347
+ (1 row)
1348
+
1349
+
1350
+ starting permutation: lifecycle_begin revoke_domain retry_begin retry_onboard lifecycle_commit retry_commit check
1351
+ count
1352
+ -----
1353
+ 1
1354
+ (1 row)
1355
+
1356
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1357
+ step revoke_domain:
1358
+ select subject_kind from agent_board.revoke_fleet_subject(
1359
+ 'trust_domain', '16240000-0000-0000-0000-000000000002',
1360
+ '16240000-0000-0000-0000-000000000001', 'isolation domain revoke', jsonb_build_object()
1361
+ );
1362
+
1363
+ subject_kind
1364
+ ------------
1365
+ trust_domain
1366
+ (1 row)
1367
+
1368
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1369
+ step retry_onboard:
1370
+ select identity_disposition, membership_disposition, binding_disposition
1371
+ from agent_board.onboard_federated_fleet_agent(
1372
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1373
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1374
+ 'atomic-lifecycle-agent',
1375
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1376
+ 'raw_ed25519_base64url',
1377
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1378
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1379
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1380
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1381
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1382
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1383
+ 'atomic-lifecycle-agent'
1384
+ );
1385
+ <waiting ...>
1386
+ step lifecycle_commit: COMMIT;
1387
+ step retry_onboard: <... completed>
1388
+ ERROR: fleet onboarding trust domain is not usable
1389
+ step retry_commit: COMMIT;
1390
+ step check:
1391
+ select a.status as agent_status,
1392
+ k.status as key_status,
1393
+ b.lifecycle_state as binding_state,
1394
+ h.lifecycle_state as harness_state,
1395
+ r.lifecycle_state as repo_state,
1396
+ m.lifecycle_state as machine_state,
1397
+ d.lifecycle_state as domain_state,
1398
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1399
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1400
+ from agent_board.agents a
1401
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1402
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1403
+ join agent_board.fleet_machines m on m.id=b.machine_id
1404
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1405
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1406
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1407
+ where a.handle='atomic-lifecycle-agent';
1408
+
1409
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1410
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1411
+ active |active |active |active |active |active |revoked | 1| 1
1412
+ (1 row)
1413
+
1414
+
1415
+ starting permutation: lifecycle_begin reclaim_domain retry_begin retry_onboard lifecycle_commit retry_commit check
1416
+ count
1417
+ -----
1418
+ 1
1419
+ (1 row)
1420
+
1421
+ step lifecycle_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1422
+ step reclaim_domain:
1423
+ select owner_agent_id from agent_board.reclaim_fleet_trust_domain(
1424
+ '16240000-0000-0000-0000-000000000002',
1425
+ '16240000-0000-0000-0000-000000000004',
1426
+ '16240000-0000-0000-0000-000000000001', 'isolation domain reclaim'
1427
+ );
1428
+
1429
+ owner_agent_id
1430
+ ------------------------------------
1431
+ 16240000-0000-0000-0000-000000000004
1432
+ (1 row)
1433
+
1434
+ step retry_begin: BEGIN; SET LOCAL "request.jwt.claim.role" = 'service_role';
1435
+ step retry_onboard:
1436
+ select identity_disposition, membership_disposition, binding_disposition
1437
+ from agent_board.onboard_federated_fleet_agent(
1438
+ 'https://atomic-lifecycle.test', 'message-board', 'human-lifecycle',
1439
+ jsonb_build_object('iss','https://atomic-lifecycle.test','aud','message-board','sub','human-lifecycle','iat',200),
1440
+ 'atomic-lifecycle-agent',
1441
+ 'yd_DIFGWGusVg3SbktDJQ1bE5UWvtR33xln4b05JIhk',
1442
+ 'raw_ed25519_base64url',
1443
+ 'sha256:NeVC2vx1MbTY56jUwJcLLr6YwB4IKCERsXWbUwhf5pA',
1444
+ true, null, 'agent', ARRAY['board:send'], ARRAY[]::text[],
1445
+ (select code from agent_board.board_invite_tokens where created_by_agent_id='16240000-0000-0000-0000-000000000001'),
1446
+ (select id from agent_board.boards where slug='atomic-lifecycle-board'),
1447
+ '16240000-0000-0000-0000-000000000003', 'codex', 'phase-loop',
1448
+ 'message-board', 'sha256:atomic-lifecycle-repo', 'worker', 'phase_worker',
1449
+ 'atomic-lifecycle-agent'
1450
+ );
1451
+ <waiting ...>
1452
+ step lifecycle_commit: COMMIT;
1453
+ step retry_onboard: <... completed>
1454
+ ERROR: fleet onboarding trust domain is not usable
1455
+ step retry_commit: COMMIT;
1456
+ step check:
1457
+ select a.status as agent_status,
1458
+ k.status as key_status,
1459
+ b.lifecycle_state as binding_state,
1460
+ h.lifecycle_state as harness_state,
1461
+ r.lifecycle_state as repo_state,
1462
+ m.lifecycle_state as machine_state,
1463
+ d.lifecycle_state as domain_state,
1464
+ (select count(*) from agent_board.agents aa where aa.handle='atomic-lifecycle-agent') as agents,
1465
+ (select count(*) from agent_board.fleet_machine_agents bb join agent_board.agents aa on aa.id=bb.agent_id where aa.handle='atomic-lifecycle-agent') as bindings
1466
+ from agent_board.agents a
1467
+ join agent_board.agent_signing_keys k on k.agent_id=a.id
1468
+ join agent_board.fleet_machine_agents b on b.agent_id=a.id
1469
+ join agent_board.fleet_machines m on m.id=b.machine_id
1470
+ join agent_board.fleet_trust_domains d on d.id=m.trust_domain_id
1471
+ join agent_board.fleet_harness_registrations h on h.machine_id=m.id
1472
+ join agent_board.fleet_repo_scopes r on r.harness_registration_id=h.id
1473
+ where a.handle='atomic-lifecycle-agent';
1474
+
1475
+ agent_status|key_status|binding_state|harness_state|repo_state|machine_state|domain_state|agents|bindings
1476
+ ------------+----------+-------------+-------------+----------+-------------+------------+------+--------
1477
+ active |active |active |active |active |active |active | 1| 1
1478
+ (1 row)
1479
+