@consiliency/agent-board-schema 1.64.0 → 1.74.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 (171) hide show
  1. package/README.md +19 -0
  2. package/fixtures/already-applied.json +44 -4
  3. package/migrations/20261015000100_agent_board_session_provenance.sql +367 -0
  4. package/migrations/20261015000200_agent_board_request_preserve_removed.sql +87 -0
  5. package/migrations/20261015000300_agent_board_rls_correlation.sql +132 -0
  6. package/migrations/20261015000400_agent_board_resolution_authority.sql +146 -0
  7. package/migrations/20261026000100_agent_board_thread_association.sql +1287 -0
  8. package/migrations/20261101000100_agent_board_session_measured_mint.sql +145 -0
  9. package/migrations/20261104065658_agent_board_reply_delivery.sql +659 -0
  10. package/migrations/20261104170000_agent_board_tasking_replay_scope.sql +320 -0
  11. package/migrations/20261104180000_agent_board_delivery_writer_execute.sql +51 -0
  12. package/migrations/20261104190000_agent_board_message_replay_scope.sql +373 -0
  13. package/package.json +1 -1
  14. package/schema-manifest.json +93 -3
  15. package/src/deployment-drift-main.test.mjs +156 -0
  16. package/src/deployment-drift-script.test.mjs +14 -1
  17. package/src/policy-comment.test.mjs +17 -0
  18. package/src/tooling.test.mjs +12 -2
  19. package/tests/agent_board_661_reply_delivery.test.sql +185 -0
  20. package/tests/agent_board_667_boundary.test.sql +162 -0
  21. package/tests/agent_board_667_conversion_branches.test.sql +91 -0
  22. package/tests/agent_board_667_conversion_profile.test.sql +112 -0
  23. package/tests/agent_board_667_history_class.test.sql +785 -0
  24. package/tests/agent_board_667_native_cast_effect.test.sql +88 -0
  25. package/tests/agent_board_667_realtime_apply_behavior.test.sql +117 -0
  26. package/tests/agent_board_667_realtime_apply_controls.test.sql +143 -0
  27. package/tests/agent_board_667_realtime_apply_profile.test.sql +61 -0
  28. package/tests/agent_board_667_retention.test.sql +201 -0
  29. package/tests/agent_board_667_routing.test.sql +294 -0
  30. package/tests/agent_board_667_sender_effects.test.sql +100 -0
  31. package/tests/agent_board_667_sender_profile_controls.test.sql +29 -0
  32. package/tests/agent_board_667_storage_delimiter_behavior.test.sql +84 -0
  33. package/tests/agent_board_667_storage_delimiter_controls.test.sql +23 -0
  34. package/tests/agent_board_667_storage_delimiter_profile.test.sql +61 -0
  35. package/tests/agent_board_667_storage_search_behavior.test.sql +93 -0
  36. package/tests/agent_board_667_storage_search_controls.test.sql +22 -0
  37. package/tests/agent_board_667_storage_search_profile.test.sql +60 -0
  38. package/tests/agent_board_667_storage_timestamp_behavior.test.sql +58 -0
  39. package/tests/agent_board_667_storage_timestamp_controls.test.sql +22 -0
  40. package/tests/agent_board_667_storage_timestamp_profile.test.sql +54 -0
  41. package/tests/agent_board_667_writers.test.sql +281 -0
  42. package/tests/agent_board_717_message_replay_scope.test.sql +828 -0
  43. package/tests/agent_board_717_tasking_replay_scope.test.sql +661 -0
  44. package/tests/agent_board_addressing.test.sql +8 -5
  45. package/tests/agent_board_claim_subject_gate.test.sql +7 -3
  46. package/tests/agent_board_claimpolicy_race.test.sql +39 -11
  47. package/tests/agent_board_consent_gating.test.sql +4 -4
  48. package/tests/agent_board_delegate_role_class.test.sql +33 -15
  49. package/tests/agent_board_delivery_writer_execute.test.sql +371 -0
  50. package/tests/agent_board_fk_lock_edges.test.sql +3 -0
  51. package/tests/agent_board_gatenull_membstate.test.sql +7 -4
  52. package/tests/agent_board_hosted_delegates.test.sql +5 -2
  53. package/tests/agent_board_inbox_rpcs.test.sql +5 -3
  54. package/tests/agent_board_obsgate.test.sql +8 -4
  55. package/tests/agent_board_obsgate4.test.sql +2 -2
  56. package/tests/agent_board_outbox_wake_ordering.test.sql +25 -2
  57. package/tests/agent_board_own_post_not_delivered.test.sql +11 -9
  58. package/tests/agent_board_policy_correlation.test.sql +189 -0
  59. package/tests/agent_board_request_removed.test.sql +96 -0
  60. package/tests/agent_board_resolution_authority.test.sql +190 -0
  61. package/tests/agent_board_session_identity_behavior_classes.test.sql +2 -2
  62. package/tests/agent_board_session_identity_limits.test.sql +1 -1
  63. package/tests/agent_board_session_identity_measured_mint.test.sql +342 -0
  64. package/tests/agent_board_session_identity_predicate_isolation.test.sql +146 -0
  65. package/tests/agent_board_session_provenance.test.sql +106 -0
  66. package/tests/agent_board_sidserver_authority.test.sql +69 -0
  67. package/tests/agent_board_sidserver_catalog.test.sql +47 -0
  68. package/tests/agent_board_signed_write_gateway.test.sql +4 -2
  69. package/tests/agent_board_task_thread_lock_order.test.sql +67 -42
  70. package/tests/agent_board_v2_invariants.test.sql +5 -2
  71. package/tests/agent_board_write_enforcement_class.test.sql +3 -3
  72. package/tests/catalog/function_execute_privileges.json +43 -7
  73. package/tests/catalog/p_metadata_parameters.json +16 -0
  74. package/tests/fixtures/agent_board_667_apply_rls_guard.sql +195 -0
  75. package/tests/fixtures/agent_board_667_apply_rls_provenance.md +125 -0
  76. package/tests/fixtures/agent_board_667_apply_rls_reference.sql +1903 -0
  77. package/tests/fixtures/agent_board_667_conversion_guard.sql +162 -0
  78. package/tests/fixtures/agent_board_667_conversion_reference.md +23 -0
  79. package/tests/fixtures/agent_board_667_conversion_reference.sql +5325 -0
  80. package/tests/fixtures/agent_board_667_delimiter_guard.sql +92 -0
  81. package/tests/fixtures/agent_board_667_delimiter_provenance.md +116 -0
  82. package/tests/fixtures/agent_board_667_delimiter_reference.sql +10150 -0
  83. package/tests/fixtures/agent_board_667_search_guard.sql +92 -0
  84. package/tests/fixtures/agent_board_667_search_provenance.md +141 -0
  85. package/tests/fixtures/agent_board_667_search_reference.sql +4779 -0
  86. package/tests/fixtures/agent_board_667_sender_guard.sql +102 -0
  87. package/tests/fixtures/agent_board_667_sender_reference.md +20 -0
  88. package/tests/fixtures/agent_board_667_sender_reference.sql +875 -0
  89. package/tests/fixtures/agent_board_667_timestamp_graph.sql +84 -0
  90. package/tests/fixtures/agent_board_667_timestamp_guard.sql +94 -0
  91. package/tests/fixtures/agent_board_667_timestamp_provenance.md +99 -0
  92. package/tests/fixtures/agent_board_667_timestamp_reference.sql +2938 -0
  93. package/tests/isolation/expected/association_artifact_anchor_order.out +108 -0
  94. package/tests/isolation/expected/association_board_vs_board.out +71 -0
  95. package/tests/isolation/expected/association_post_wait_authority.out +77 -0
  96. package/tests/isolation/expected/association_strong_history_writers.out +203 -0
  97. package/tests/isolation/expected/association_strong_isolation.out +185 -0
  98. package/tests/isolation/expected/association_vs_artifact_claim_escalation.out +199 -0
  99. package/tests/isolation/expected/association_vs_heartbeat.out +78 -0
  100. package/tests/isolation/expected/association_vs_multi_anchor_artifact.out +67 -0
  101. package/tests/isolation/expected/association_vs_private_message.out +67 -0
  102. package/tests/isolation/expected/association_vs_task_and_conflict.out +133 -0
  103. package/tests/isolation/expected/association_vs_taskful_cross_thread.out +133 -0
  104. package/tests/isolation/expected/consent_approval_lock.out +1 -1
  105. package/tests/isolation/expected/message_replay_scope.out +209 -0
  106. package/tests/isolation/expected/tasking_replay_scope.out +125 -0
  107. package/tests/isolation/specs/association_artifact_anchor_order.spec +46 -0
  108. package/tests/isolation/specs/association_board_vs_board.spec +37 -0
  109. package/tests/isolation/specs/association_post_wait_authority.spec +48 -0
  110. package/tests/isolation/specs/association_strong_history_writers.spec +61 -0
  111. package/tests/isolation/specs/association_strong_isolation.spec +50 -0
  112. package/tests/isolation/specs/association_vs_artifact_claim_escalation.spec +41 -0
  113. package/tests/isolation/specs/association_vs_heartbeat.spec +47 -0
  114. package/tests/isolation/specs/association_vs_multi_anchor_artifact.spec +38 -0
  115. package/tests/isolation/specs/association_vs_private_message.spec +33 -0
  116. package/tests/isolation/specs/association_vs_task_and_conflict.spec +38 -0
  117. package/tests/isolation/specs/association_vs_taskful_cross_thread.spec +42 -0
  118. package/tests/isolation/specs/consent_approval_lock.spec +13 -7
  119. package/tests/isolation/specs/message_replay_scope.spec +77 -0
  120. package/tests/isolation/specs/tasking_replay_scope.spec +72 -0
  121. package/tests/mutations/717-f1/M0_prefix_main_acl_and_comments.sql +11 -0
  122. package/tests/mutations/717-f1/M10_wrapper_stops_delegating.sql +7 -0
  123. package/tests/mutations/717-f1/M11_transitive_recipient_content.sql +8 -0
  124. package/tests/mutations/717-f1/M12_transitive_recipient_visibility.sql +8 -0
  125. package/tests/mutations/717-f1/M13_transitive_worker_content.sql +15 -0
  126. package/tests/mutations/717-f1/M1a_regrant_upsert_delivery_recipient.sql +1 -0
  127. package/tests/mutations/717-f1/M1b_regrant_upsert_inbox_item.sql +1 -0
  128. package/tests/mutations/717-f1/M1c_regrant_queue_inbox_callbacks.sql +1 -0
  129. package/tests/mutations/717-f1/M1d_regrant_queue_board_post_callbacks.sql +1 -0
  130. package/tests/mutations/717-f1/M1e_regrant_next_thread_message_sequence.sql +1 -0
  131. package/tests/mutations/717-f1/M2_blanket_schema_grant.sql +1 -0
  132. package/tests/mutations/717-f1/M3_new_overload_of_sink.sql +10 -0
  133. package/tests/mutations/717-f1/M4_new_route_calling_sink.sql +7 -0
  134. package/tests/mutations/717-f1/M5_actor_trusts_supplied_id.sql +5 -0
  135. package/tests/mutations/717-f1/M6_signed_route_granted_to_authenticated.sql +1 -0
  136. package/tests/mutations/717-f1/M7_worker_granted_to_authenticated.sql +1 -0
  137. package/tests/mutations/717-f1/M8_recipient_state_rewrites_visibility.sql +5 -0
  138. package/tests/mutations/717-f1/M9_public_route_revoked_from_service_role.sql +1 -0
  139. package/tests/mutations/717-f1/outbox_wake_ordering/W1_regrant_queue_inbox_callbacks.sql +1 -0
  140. package/tests/mutations/717-f1/outbox_wake_ordering/W2_revoke_worker_from_service_role.sql +1 -0
  141. package/tests/mutations/717-f1/outbox_wake_ordering/W3_invoker_caller_of_sink.sql +1 -0
  142. package/tests/mutations/717-f1/outbox_wake_ordering/W4_public_regrant_board_post_sink.sql +1 -0
  143. package/tests/mutations/717-f1/run.sh +17 -0
  144. package/tests/mutations/717-f2b/C1_new_delivery_route.sql +4 -0
  145. package/tests/mutations/717-f2b/C2_new_replay_lookup.sql +3 -0
  146. package/tests/mutations/717-f2b/C3_internal_regranted.sql +2 -0
  147. package/tests/mutations/717-f2b/C4_wrapper_writes_delivery.sql +9 -0
  148. package/tests/mutations/717-f2b/C5_class_member_dynamic_sql.sql +9 -0
  149. package/tests/mutations/717-f2b/C6_drop_board_scope_constraint.sql +2 -0
  150. package/tests/mutations/717-f2b/C7_state_private_helper_content.sql +14 -0
  151. package/tests/mutations/717-f2b/L1_dm_lock_split_by_recipient.sql +8 -0
  152. package/tests/mutations/717-f2b/L2_dm_lock_removed.sql +12 -0
  153. package/tests/mutations/717-f2b/L3_mc_lock_split_by_recipients.sql +8 -0
  154. package/tests/mutations/717-f2b/L4_mc_lock_removed.sql +12 -0
  155. package/tests/mutations/717-f2b/M0_prefix_definitions.sql +17 -0
  156. package/tests/mutations/717-f2b/M10_mc_lookup_any_author.sql +15 -0
  157. package/tests/mutations/717-f2b/M11_dm_swallow_refusal.sql +8 -0
  158. package/tests/mutations/717-f2b/M12_mc_swallow_refusal.sql +8 -0
  159. package/tests/mutations/717-f2b/M13_signed_dm_swallows_refusal.sql +32 -0
  160. package/tests/mutations/717-f2b/M14_signed_mc_swallows_refusal.sql +20 -0
  161. package/tests/mutations/717-f2b/M15_mc_any_source.sql +7 -0
  162. package/tests/mutations/717-f2b/M1_dm_drop_recipient_proof.sql +16 -0
  163. package/tests/mutations/717-f2b/M2_mc_drop_recipient_proof.sql +16 -0
  164. package/tests/mutations/717-f2b/M3_dm_metadata_as_proof.sql +12 -0
  165. package/tests/mutations/717-f2b/M4_mc_metadata_as_proof.sql +16 -0
  166. package/tests/mutations/717-f2b/M5_dm_any_mode.sql +11 -0
  167. package/tests/mutations/717-f2b/M6_dm_board_delivery_counts.sql +11 -0
  168. package/tests/mutations/717-f2b/M7_mc_any_mode.sql +11 -0
  169. package/tests/mutations/717-f2b/M8_dm_thread_stamp_as_proof.sql +12 -0
  170. package/tests/mutations/717-f2b/M9_dm_lookup_any_author.sql +15 -0
  171. package/tests/mutations/717-f2b/run.sh +82 -0
@@ -0,0 +1,108 @@
1
+ Parsed test spec with 5 sessions
2
+
3
+ starting permutation: a_begin a_artifact b_begin b_artifact a_commit b_commit check
4
+ step a_begin: begin; set local statement_timeout='2s'; select set_config('request.jwt.claim.role','service_role',true);
5
+ set_config
6
+ ------------
7
+ service_role
8
+ (1 row)
9
+
10
+ step a_artifact: select count(*) from agent_board.add_artifact('66780000-0000-4000-8000-000000000001','https://example.test/first',p_thread_id=>'66780000-0000-4000-8000-000000000010',p_task_id=>'66780000-0000-4000-8000-000000000030');
11
+ count
12
+ -----
13
+ 1
14
+ (1 row)
15
+
16
+ step b_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
17
+ set_config
18
+ ------------
19
+ service_role
20
+ (1 row)
21
+
22
+ step b_artifact: select count(*) from agent_board.add_artifact('66780000-0000-4000-8000-000000000001','https://example.test/second',p_thread_id=>'66780000-0000-4000-8000-000000000011',p_task_id=>'66780000-0000-4000-8000-000000000031'); <waiting ...>
23
+ step a_commit: commit;
24
+ step b_artifact: <... completed>
25
+ count
26
+ -----
27
+ 1
28
+ (1 row)
29
+
30
+ step b_commit: commit;
31
+ step check: select count(*) as artifacts, count(distinct thread_id) as explicit_threads, count(distinct task_id) as task_anchors from agent_board.artifacts where thread_id in ('66780000-0000-4000-8000-000000000010','66780000-0000-4000-8000-000000000011');
32
+ artifacts|explicit_threads|task_anchors
33
+ ---------+----------------+------------
34
+ 2| 2| 2
35
+ (1 row)
36
+
37
+
38
+ starting permutation: b_begin b_artifact a_begin a_artifact b_commit a_commit check
39
+ step b_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
40
+ set_config
41
+ ------------
42
+ service_role
43
+ (1 row)
44
+
45
+ step b_artifact: select count(*) from agent_board.add_artifact('66780000-0000-4000-8000-000000000001','https://example.test/second',p_thread_id=>'66780000-0000-4000-8000-000000000011',p_task_id=>'66780000-0000-4000-8000-000000000031');
46
+ count
47
+ -----
48
+ 1
49
+ (1 row)
50
+
51
+ step a_begin: begin; set local statement_timeout='2s'; select set_config('request.jwt.claim.role','service_role',true);
52
+ set_config
53
+ ------------
54
+ service_role
55
+ (1 row)
56
+
57
+ step a_artifact: select count(*) from agent_board.add_artifact('66780000-0000-4000-8000-000000000001','https://example.test/first',p_thread_id=>'66780000-0000-4000-8000-000000000010',p_task_id=>'66780000-0000-4000-8000-000000000030'); <waiting ...>
58
+ step b_commit: commit;
59
+ step a_artifact: <... completed>
60
+ count
61
+ -----
62
+ 1
63
+ (1 row)
64
+
65
+ step a_commit: commit;
66
+ step check: select count(*) as artifacts, count(distinct thread_id) as explicit_threads, count(distinct task_id) as task_anchors from agent_board.artifacts where thread_id in ('66780000-0000-4000-8000-000000000010','66780000-0000-4000-8000-000000000011');
67
+ artifacts|explicit_threads|task_anchors
68
+ ---------+----------------+------------
69
+ 2| 2| 2
70
+ (1 row)
71
+
72
+
73
+ starting permutation: hold_high a_begin a_artifact probe_low release_high a_commit probe_commit check
74
+ step hold_high: begin; select id from agent_board.threads where id='66780000-0000-4000-8000-000000000011' for no key update;
75
+ id
76
+ ------------------------------------
77
+ 66780000-0000-4000-8000-000000000011
78
+ (1 row)
79
+
80
+ step a_begin: begin; set local statement_timeout='2s'; select set_config('request.jwt.claim.role','service_role',true);
81
+ set_config
82
+ ------------
83
+ service_role
84
+ (1 row)
85
+
86
+ step a_artifact: select count(*) from agent_board.add_artifact('66780000-0000-4000-8000-000000000001','https://example.test/first',p_thread_id=>'66780000-0000-4000-8000-000000000010',p_task_id=>'66780000-0000-4000-8000-000000000030'); <waiting ...>
87
+ step probe_low: begin; select id from agent_board.threads where id='66780000-0000-4000-8000-000000000010' for no key update; <waiting ...>
88
+ step release_high: commit;
89
+ step a_artifact: <... completed>
90
+ count
91
+ -----
92
+ 1
93
+ (1 row)
94
+
95
+ step a_commit: commit;
96
+ step probe_low: <... completed>
97
+ id
98
+ ------------------------------------
99
+ 66780000-0000-4000-8000-000000000010
100
+ (1 row)
101
+
102
+ step probe_commit: commit;
103
+ step check: select count(*) as artifacts, count(distinct thread_id) as explicit_threads, count(distinct task_id) as task_anchors from agent_board.artifacts where thread_id in ('66780000-0000-4000-8000-000000000010','66780000-0000-4000-8000-000000000011');
104
+ artifacts|explicit_threads|task_anchors
105
+ ---------+----------------+------------
106
+ 1| 1| 1
107
+ (1 row)
108
+
@@ -0,0 +1,71 @@
1
+ Parsed test spec with 3 sessions
2
+
3
+ starting permutation: a_begin a_post b_begin b_post a_commit b_commit check
4
+ step a_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
5
+ set_config
6
+ ------------
7
+ service_role
8
+ (1 row)
9
+
10
+ step a_post: select agent_board_test.xb_667_board_race('66790000-0000-4000-8000-000000000020','first') as outcome;
11
+ outcome
12
+ -------
13
+ allowed
14
+ (1 row)
15
+
16
+ step b_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
17
+ set_config
18
+ ------------
19
+ service_role
20
+ (1 row)
21
+
22
+ step b_post: select agent_board_test.xb_667_board_race('66790000-0000-4000-8000-000000000021','second') as outcome; <waiting ...>
23
+ step a_commit: commit;
24
+ step b_post: <... completed>
25
+ outcome
26
+ -----------------------------------------
27
+ 42501:thread belongs to a different board
28
+ (1 row)
29
+
30
+ step b_commit: commit;
31
+ step check: select t.board_id, (select count(*) from agent_board.messages m where m.thread_id=t.id) as messages, (select count(*) from agent_board.messages m where m.thread_id=t.id and m.body='first') as first_messages, (select count(*) from agent_board.messages m where m.thread_id=t.id and m.body='second') as second_messages, (select count(*) from agent_board.delivery_recipients d join agent_board.messages m on m.id=d.source_message_id where m.thread_id=t.id) as deliveries from agent_board.threads t where t.id='66790000-0000-4000-8000-000000000010';
32
+ board_id|messages|first_messages|second_messages|deliveries
33
+ ------------------------------------+--------+--------------+---------------+----------
34
+ 66790000-0000-4000-8000-000000000020| 1| 1| 0| 0
35
+ (1 row)
36
+
37
+
38
+ starting permutation: b_begin b_post a_begin a_post b_commit a_commit check
39
+ step b_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
40
+ set_config
41
+ ------------
42
+ service_role
43
+ (1 row)
44
+
45
+ step b_post: select agent_board_test.xb_667_board_race('66790000-0000-4000-8000-000000000021','second') as outcome;
46
+ outcome
47
+ -------
48
+ allowed
49
+ (1 row)
50
+
51
+ step a_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
52
+ set_config
53
+ ------------
54
+ service_role
55
+ (1 row)
56
+
57
+ step a_post: select agent_board_test.xb_667_board_race('66790000-0000-4000-8000-000000000020','first') as outcome; <waiting ...>
58
+ step b_commit: commit;
59
+ step a_post: <... completed>
60
+ outcome
61
+ -----------------------------------------
62
+ 42501:thread belongs to a different board
63
+ (1 row)
64
+
65
+ step a_commit: commit;
66
+ step check: select t.board_id, (select count(*) from agent_board.messages m where m.thread_id=t.id) as messages, (select count(*) from agent_board.messages m where m.thread_id=t.id and m.body='first') as first_messages, (select count(*) from agent_board.messages m where m.thread_id=t.id and m.body='second') as second_messages, (select count(*) from agent_board.delivery_recipients d join agent_board.messages m on m.id=d.source_message_id where m.thread_id=t.id) as deliveries from agent_board.threads t where t.id='66790000-0000-4000-8000-000000000010';
67
+ board_id|messages|first_messages|second_messages|deliveries
68
+ ------------------------------------+--------+--------------+---------------+----------
69
+ 66790000-0000-4000-8000-000000000021| 1| 0| 1| 0
70
+ (1 row)
71
+
@@ -0,0 +1,77 @@
1
+ Parsed test spec with 4 sessions
2
+
3
+ starting permutation: a_begin a_post_denied b_begin b_post a_commit b_end check_denied
4
+ step a_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
5
+ set_config
6
+ ------------
7
+ service_role
8
+ (1 row)
9
+
10
+ step a_post_denied: select count(*) from agent_board.post_board_message('66750000-0000-4000-8000-000000000010','66750000-0000-4000-8000-000000000001','66750000-0000-4000-8000-000000000020','s','b');
11
+ count
12
+ -----
13
+ 1
14
+ (1 row)
15
+
16
+ step b_begin: begin; set local role authenticated; select set_config('request.jwt.claim.role','authenticated',true); select set_config('request.jwt.claim.sub','66750000-0000-4000-8000-0000000000b1',true);
17
+ set_config
18
+ -------------
19
+ authenticated
20
+ (1 row)
21
+
22
+ set_config
23
+ ------------------------------------
24
+ 66750000-0000-4000-8000-0000000000b1
25
+ (1 row)
26
+
27
+ step b_post: select count(*) from agent_board.post_message('66750000-0000-4000-8000-000000000010','66750000-0000-4000-8000-000000000002','private after wait'); <waiting ...>
28
+ step a_commit: commit;
29
+ step b_post: <... completed>
30
+ ERROR: thread posting requires a non-observer board role
31
+ step b_end: end;
32
+ step check_denied: select count(*) as messages, max(message_sequence) as max_sequence from agent_board.messages where thread_id='66750000-0000-4000-8000-000000000010';
33
+ messages|max_sequence
34
+ --------+------------
35
+ 1| 1
36
+ (1 row)
37
+
38
+
39
+ starting permutation: a_begin a_post_member c_begin c_post a_commit c_end check_member
40
+ step a_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
41
+ set_config
42
+ ------------
43
+ service_role
44
+ (1 row)
45
+
46
+ step a_post_member: select count(*) from agent_board.post_board_message('66750000-0000-4000-8000-000000000011','66750000-0000-4000-8000-000000000001','66750000-0000-4000-8000-000000000020','s','b');
47
+ count
48
+ -----
49
+ 1
50
+ (1 row)
51
+
52
+ step c_begin: begin; set local role authenticated; select set_config('request.jwt.claim.role','authenticated',true); select set_config('request.jwt.claim.sub','66750000-0000-4000-8000-0000000000c1',true);
53
+ set_config
54
+ -------------
55
+ authenticated
56
+ (1 row)
57
+
58
+ set_config
59
+ ------------------------------------
60
+ 66750000-0000-4000-8000-0000000000c1
61
+ (1 row)
62
+
63
+ step c_post: select count(*) from agent_board.post_message('66750000-0000-4000-8000-000000000011','66750000-0000-4000-8000-000000000003','member after wait'); <waiting ...>
64
+ step a_commit: commit;
65
+ step c_post: <... completed>
66
+ count
67
+ -----
68
+ 1
69
+ (1 row)
70
+
71
+ step c_end: end;
72
+ step check_member: select count(*) as messages, max(message_sequence) as max_sequence from agent_board.messages where thread_id='66750000-0000-4000-8000-000000000011';
73
+ messages|max_sequence
74
+ --------+------------
75
+ 2| 2
76
+ (1 row)
77
+
@@ -0,0 +1,203 @@
1
+ unused step name: a_ru
2
+ unused step name: a_task
3
+ Parsed test spec with 4 sessions
4
+
5
+ starting permutation: a_rr w_begin w_artifact a_post w_commit a_end check
6
+ step a_rr: begin isolation level repeatable read; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66770000-0000-4000-8000-000000000010';
7
+ set_config
8
+ ------------
9
+ service_role
10
+ (1 row)
11
+
12
+ count
13
+ -----
14
+ 1
15
+ (1 row)
16
+
17
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
18
+ set_config
19
+ ------------
20
+ service_role
21
+ (1 row)
22
+
23
+ step w_artifact: select count(*) from agent_board.add_artifact('66770000-0000-4000-8000-000000000001','https://example.test/strong',p_thread_id=>'66770000-0000-4000-8000-000000000010');
24
+ count
25
+ -----
26
+ 1
27
+ (1 row)
28
+
29
+ step a_post: select agent_board_test.xb_667_try_history_association() as outcome; <waiting ...>
30
+ step w_commit: commit;
31
+ step a_post: <... completed>
32
+ outcome
33
+ ----------------------------------------------------------------
34
+ 0A000:first thread association requires read committed isolation
35
+ (1 row)
36
+
37
+ step a_end: end;
38
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.artifacts where thread_id=t.id) as artifacts, (select count(*) from agent_board.conflicts where thread_id=t.id) as conflicts, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66770000-0000-4000-8000-000000000010';
39
+ stamped|artifacts|conflicts|messages
40
+ -------+---------+---------+--------
41
+ f | 1| 0| 0
42
+ (1 row)
43
+
44
+
45
+ starting permutation: a_ser w_begin w_artifact a_post w_commit a_end check
46
+ step a_ser: begin isolation level serializable; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66770000-0000-4000-8000-000000000010';
47
+ set_config
48
+ ------------
49
+ service_role
50
+ (1 row)
51
+
52
+ count
53
+ -----
54
+ 1
55
+ (1 row)
56
+
57
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
58
+ set_config
59
+ ------------
60
+ service_role
61
+ (1 row)
62
+
63
+ step w_artifact: select count(*) from agent_board.add_artifact('66770000-0000-4000-8000-000000000001','https://example.test/strong',p_thread_id=>'66770000-0000-4000-8000-000000000010');
64
+ count
65
+ -----
66
+ 1
67
+ (1 row)
68
+
69
+ step a_post: select agent_board_test.xb_667_try_history_association() as outcome; <waiting ...>
70
+ step w_commit: commit;
71
+ step a_post: <... completed>
72
+ outcome
73
+ ----------------------------------------------------------------
74
+ 0A000:first thread association requires read committed isolation
75
+ (1 row)
76
+
77
+ step a_end: end;
78
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.artifacts where thread_id=t.id) as artifacts, (select count(*) from agent_board.conflicts where thread_id=t.id) as conflicts, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66770000-0000-4000-8000-000000000010';
79
+ stamped|artifacts|conflicts|messages
80
+ -------+---------+---------+--------
81
+ f | 1| 0| 0
82
+ (1 row)
83
+
84
+
85
+ starting permutation: a_rr w_begin w_conflict a_post w_commit a_end check
86
+ step a_rr: begin isolation level repeatable read; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66770000-0000-4000-8000-000000000010';
87
+ set_config
88
+ ------------
89
+ service_role
90
+ (1 row)
91
+
92
+ count
93
+ -----
94
+ 1
95
+ (1 row)
96
+
97
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
98
+ set_config
99
+ ------------
100
+ service_role
101
+ (1 row)
102
+
103
+ step w_conflict: select count(*) from agent_board.raise_conflict('66770000-0000-4000-8000-000000000010','66770000-0000-4000-8000-000000000001','private conflict');
104
+ count
105
+ -----
106
+ 1
107
+ (1 row)
108
+
109
+ step a_post: select agent_board_test.xb_667_try_history_association() as outcome; <waiting ...>
110
+ step w_commit: commit;
111
+ step a_post: <... completed>
112
+ outcome
113
+ ----------------------------------------------------------------
114
+ 0A000:first thread association requires read committed isolation
115
+ (1 row)
116
+
117
+ step a_end: end;
118
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.artifacts where thread_id=t.id) as artifacts, (select count(*) from agent_board.conflicts where thread_id=t.id) as conflicts, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66770000-0000-4000-8000-000000000010';
119
+ stamped|artifacts|conflicts|messages
120
+ -------+---------+---------+--------
121
+ f | 0| 1| 0
122
+ (1 row)
123
+
124
+
125
+ starting permutation: a_ser w_begin w_conflict a_post w_commit a_end check
126
+ step a_ser: begin isolation level serializable; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66770000-0000-4000-8000-000000000010';
127
+ set_config
128
+ ------------
129
+ service_role
130
+ (1 row)
131
+
132
+ count
133
+ -----
134
+ 1
135
+ (1 row)
136
+
137
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
138
+ set_config
139
+ ------------
140
+ service_role
141
+ (1 row)
142
+
143
+ step w_conflict: select count(*) from agent_board.raise_conflict('66770000-0000-4000-8000-000000000010','66770000-0000-4000-8000-000000000001','private conflict');
144
+ count
145
+ -----
146
+ 1
147
+ (1 row)
148
+
149
+ step a_post: select agent_board_test.xb_667_try_history_association() as outcome; <waiting ...>
150
+ step w_commit: commit;
151
+ step a_post: <... completed>
152
+ outcome
153
+ ----------------------------------------------------------------
154
+ 0A000:first thread association requires read committed isolation
155
+ (1 row)
156
+
157
+ step a_end: end;
158
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.artifacts where thread_id=t.id) as artifacts, (select count(*) from agent_board.conflicts where thread_id=t.id) as conflicts, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66770000-0000-4000-8000-000000000010';
159
+ stamped|artifacts|conflicts|messages
160
+ -------+---------+---------+--------
161
+ f | 0| 1| 0
162
+ (1 row)
163
+
164
+
165
+ starting permutation: w_rr p_begin p_post w_stale_artifact p_commit w_commit check
166
+ step w_rr: begin isolation level repeatable read; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66770000-0000-4000-8000-000000000010';
167
+ set_config
168
+ ------------
169
+ service_role
170
+ (1 row)
171
+
172
+ count
173
+ -----
174
+ 1
175
+ (1 row)
176
+
177
+ step p_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
178
+ set_config
179
+ ------------
180
+ service_role
181
+ (1 row)
182
+
183
+ step p_post: select count(*) from agent_board.post_board_message('66770000-0000-4000-8000-000000000010','66770000-0000-4000-8000-000000000001','66770000-0000-4000-8000-000000000020','s','b');
184
+ count
185
+ -----
186
+ 1
187
+ (1 row)
188
+
189
+ step w_stale_artifact: select agent_board_test.xb_667_try_stale_artifact() as outcome; <waiting ...>
190
+ step p_commit: commit;
191
+ step w_stale_artifact: <... completed>
192
+ outcome
193
+ ---------------------------------------------------------
194
+ 40001:could not serialize access due to concurrent update
195
+ (1 row)
196
+
197
+ step w_commit: commit;
198
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.artifacts where thread_id=t.id) as artifacts, (select count(*) from agent_board.conflicts where thread_id=t.id) as conflicts, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66770000-0000-4000-8000-000000000010';
199
+ stamped|artifacts|conflicts|messages
200
+ -------+---------+---------+--------
201
+ t | 0| 0| 1
202
+ (1 row)
203
+
@@ -0,0 +1,185 @@
1
+ Parsed test spec with 4 sessions
2
+
3
+ starting permutation: a_ru a_post a_end check
4
+ step a_ru: begin isolation level read uncommitted; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66740000-0000-4000-8000-000000000010';
5
+ set_config
6
+ ------------
7
+ service_role
8
+ (1 row)
9
+
10
+ count
11
+ -----
12
+ 1
13
+ (1 row)
14
+
15
+ step a_post: select agent_board_test.xb_667_try_association() as outcome;
16
+ outcome
17
+ ----------------------------------------------------------------
18
+ 0A000:first thread association requires read committed isolation
19
+ (1 row)
20
+
21
+ step a_end: end;
22
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.tasks where thread_id=t.id) as tasks, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66740000-0000-4000-8000-000000000010';
23
+ stamped|tasks|messages
24
+ -------+-----+--------
25
+ f | 0| 0
26
+ (1 row)
27
+
28
+
29
+ starting permutation: a_rr w_begin w_task a_post w_commit a_end check
30
+ step a_rr: begin isolation level repeatable read; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66740000-0000-4000-8000-000000000010';
31
+ set_config
32
+ ------------
33
+ service_role
34
+ (1 row)
35
+
36
+ count
37
+ -----
38
+ 1
39
+ (1 row)
40
+
41
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
42
+ set_config
43
+ ------------
44
+ service_role
45
+ (1 row)
46
+
47
+ step w_task: select count(*) from agent_board.create_task('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','private task');
48
+ count
49
+ -----
50
+ 1
51
+ (1 row)
52
+
53
+ step a_post: select agent_board_test.xb_667_try_association() as outcome; <waiting ...>
54
+ step w_commit: commit;
55
+ step a_post: <... completed>
56
+ outcome
57
+ ----------------------------------------------------------------
58
+ 0A000:first thread association requires read committed isolation
59
+ (1 row)
60
+
61
+ step a_end: end;
62
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.tasks where thread_id=t.id) as tasks, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66740000-0000-4000-8000-000000000010';
63
+ stamped|tasks|messages
64
+ -------+-----+--------
65
+ f | 1| 0
66
+ (1 row)
67
+
68
+
69
+ starting permutation: a_ser w_begin w_task a_post w_commit a_end check
70
+ step a_ser: begin isolation level serializable; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66740000-0000-4000-8000-000000000010';
71
+ set_config
72
+ ------------
73
+ service_role
74
+ (1 row)
75
+
76
+ count
77
+ -----
78
+ 1
79
+ (1 row)
80
+
81
+ step w_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
82
+ set_config
83
+ ------------
84
+ service_role
85
+ (1 row)
86
+
87
+ step w_task: select count(*) from agent_board.create_task('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','private task');
88
+ count
89
+ -----
90
+ 1
91
+ (1 row)
92
+
93
+ step a_post: select agent_board_test.xb_667_try_association() as outcome; <waiting ...>
94
+ step w_commit: commit;
95
+ step a_post: <... completed>
96
+ outcome
97
+ ----------------------------------------------------------------
98
+ 0A000:first thread association requires read committed isolation
99
+ (1 row)
100
+
101
+ step a_end: end;
102
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.tasks where thread_id=t.id) as tasks, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66740000-0000-4000-8000-000000000010';
103
+ stamped|tasks|messages
104
+ -------+-----+--------
105
+ f | 1| 0
106
+ (1 row)
107
+
108
+
109
+ starting permutation: p_begin p_post p_commit a_rr a_task a_end check
110
+ step p_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
111
+ set_config
112
+ ------------
113
+ service_role
114
+ (1 row)
115
+
116
+ step p_post: select count(*) from agent_board.post_board_message('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','66740000-0000-4000-8000-000000000020','s','b');
117
+ count
118
+ -----
119
+ 1
120
+ (1 row)
121
+
122
+ step p_commit: commit;
123
+ step a_rr: begin isolation level repeatable read; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66740000-0000-4000-8000-000000000010';
124
+ set_config
125
+ ------------
126
+ service_role
127
+ (1 row)
128
+
129
+ count
130
+ -----
131
+ 1
132
+ (1 row)
133
+
134
+ step a_task: select count(*) from agent_board.create_task('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','board task');
135
+ count
136
+ -----
137
+ 1
138
+ (1 row)
139
+
140
+ step a_end: end;
141
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.tasks where thread_id=t.id) as tasks, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66740000-0000-4000-8000-000000000010';
142
+ stamped|tasks|messages
143
+ -------+-----+--------
144
+ t | 1| 1
145
+ (1 row)
146
+
147
+
148
+ starting permutation: p_begin p_post p_commit a_ser a_task a_end check
149
+ step p_begin: begin; select set_config('request.jwt.claim.role','service_role',true);
150
+ set_config
151
+ ------------
152
+ service_role
153
+ (1 row)
154
+
155
+ step p_post: select count(*) from agent_board.post_board_message('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','66740000-0000-4000-8000-000000000020','s','b');
156
+ count
157
+ -----
158
+ 1
159
+ (1 row)
160
+
161
+ step p_commit: commit;
162
+ step a_ser: begin isolation level serializable; select set_config('request.jwt.claim.role','service_role',true); select count(*) from agent_board.threads where id='66740000-0000-4000-8000-000000000010';
163
+ set_config
164
+ ------------
165
+ service_role
166
+ (1 row)
167
+
168
+ count
169
+ -----
170
+ 1
171
+ (1 row)
172
+
173
+ step a_task: select count(*) from agent_board.create_task('66740000-0000-4000-8000-000000000010','66740000-0000-4000-8000-000000000001','board task');
174
+ count
175
+ -----
176
+ 1
177
+ (1 row)
178
+
179
+ step a_end: end;
180
+ step check: select (t.board_id is not null) as stamped, (select count(*) from agent_board.tasks where thread_id=t.id) as tasks, (select count(*) from agent_board.messages where thread_id=t.id) as messages from agent_board.threads t where t.id='66740000-0000-4000-8000-000000000010';
181
+ stamped|tasks|messages
182
+ -------+-----+--------
183
+ t | 1| 1
184
+ (1 row)
185
+