@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,112 @@
1
+ -- This proves the finite dispatch recognizer, independently of platform presence.
2
+ -- Native-call effects are covered by the companion native_cast_effect file.
3
+ create extension if not exists pgtap with schema extensions;
4
+ set search_path=extensions,public,agent_board;
5
+ begin;
6
+ select plan(29);
7
+ \ir fixtures/agent_board_667_conversion_guard.sql
8
+ create temp table xb_cf_prior_profile on commit drop as select * from pg_temp.xb_cf_problems();
9
+ select ok((select count(*)>0 from pg_temp.xb_cf_primitives)
10
+ and (select count(*)>0 from pg_temp.xb_cf_slots()),'CF reference and registered callback census are nonempty');
11
+ select is((select array_agg(identity order by identity) from pg_temp.xb_cf_wrappers),
12
+ array['realtime."cast"(text,regtype)',
13
+ 'realtime.check_equality_op(realtime.equality_op,regtype,text,text,boolean)',
14
+ 'realtime.check_equality_op(realtime.equality_op,regtype,text,text)']::text[],
15
+ 'CF admission scope is exactly the three conversion identities');
16
+ select is((select string_agg(identity||': '||problem,', ' order by identity,problem) from pg_temp.xb_cf_problems()),
17
+ null::text,'CF clean dispatch matches the finite primitive reference')
18
+ where exists(select 1 from pg_temp.xb_cf_wrappers where to_regprocedure(identity) is not null);
19
+ select * from skip('native converters absent; no primitive admission credit',1)
20
+ where not exists(select 1 from pg_temp.xb_cf_wrappers where to_regprocedure(identity) is not null);
21
+ select is((select string_agg(identity,', ' order by identity) from pg_temp.xb_cf_type_coverage()),
22
+ null::text,'CF every catalog type callback is discovered');
23
+ select is((select string_agg(identity||': '||problem,', ' order by identity) from pg_temp.xb_cf_wrapper_problems()),
24
+ null::text,'CF present native definitions and security metadata match');
25
+ select is((select count(*) from pg_temp.xb_cf_admitted()),
26
+ (select count(*) from pg_temp.xb_cf_wrappers where to_regprocedure(identity) is not null),
27
+ 'CF only the present verified conversion wrappers are admitted');
28
+ select diag('No native conversion wrapper present: classifier checks are not native execution credit')
29
+ where not exists(select 1 from pg_temp.xb_cf_wrappers where to_regprocedure(identity) is not null);
30
+
31
+ create temp table xb_cf_answer(value integer) on commit drop;
32
+ select lives_ok($$insert into xb_cf_answer select '4'::information_schema.cardinal_number$$,
33
+ 'CF reviewed system-domain conversion succeeds');
34
+ select is((select value from xb_cf_answer),4,'CF reviewed system-domain conversion returns its value');
35
+ select throws_ok($$select '-1'::information_schema.cardinal_number$$,'23514',
36
+ 'value for domain information_schema.cardinal_number violates check constraint "cardinal_number_domain_check"',
37
+ 'CF reviewed system-domain constraint actually refuses its invalid value');
38
+
39
+ create schema xb_conversion_profile_probe;
40
+ create function xb_conversion_profile_probe.positive(i integer) returns boolean language sql immutable as $$select i>0$$;
41
+ create domain xb_conversion_profile_probe.positive_integer as integer check(xb_conversion_profile_probe.positive(value));
42
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='domain xb_conversion_profile_probe.positive_integer'),
43
+ 'CF new domain constraint names its domain');
44
+ select is((select count(*) from pg_temp.xb_cf_admitted()),0::bigint,'CF custom domain prevents conversion admission');
45
+ drop domain xb_conversion_profile_probe.positive_integer;
46
+ drop function xb_conversion_profile_probe.positive(integer);
47
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
48
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF domain removal restores the prior profile');
49
+
50
+ create function xb_conversion_profile_probe.compare(a integer,b integer) returns boolean language sql immutable as $$select a=b$$;
51
+ create operator xb_conversion_profile_probe.=== (leftarg=integer,rightarg=integer,procedure=xb_conversion_profile_probe.compare);
52
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='xb_conversion_profile_probe.compare(integer,integer)' and problem like 'unreviewed primitive%'),
53
+ 'CF custom operator callback names its full implementation identity');
54
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='operator xb_conversion_profile_probe.===(pg_catalog.int4,pg_catalog.int4)'),
55
+ 'CF custom operator also names its dispatch identity');
56
+ drop operator xb_conversion_profile_probe.=== (integer,integer);
57
+ drop function xb_conversion_profile_probe.compare(integer,integer);
58
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
59
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF operator removal restores the prior profile');
60
+
61
+ create type xb_conversion_profile_probe.cast_target as enum('one','two');
62
+ create function xb_conversion_profile_probe.from_integer(i integer) returns xb_conversion_profile_probe.cast_target
63
+ language sql immutable as $$select case when i=1 then 'one'::xb_conversion_profile_probe.cast_target else 'two'::xb_conversion_profile_probe.cast_target end$$;
64
+ create cast(integer as xb_conversion_profile_probe.cast_target) with function xb_conversion_profile_probe.from_integer(integer) as implicit;
65
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='xb_conversion_profile_probe.from_integer(integer)' and problem like 'unreviewed primitive%'),
66
+ 'CF custom cast callback names its full implementation identity');
67
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='cast pg_catalog.int4 -> xb_conversion_profile_probe.cast_target'),
68
+ 'CF custom implicit cast also names its dispatch identity');
69
+ drop cast(integer as xb_conversion_profile_probe.cast_target);
70
+ drop function xb_conversion_profile_probe.from_integer(integer);
71
+ drop type xb_conversion_profile_probe.cast_target;
72
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
73
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF cast removal restores the prior profile');
74
+
75
+ create function xb_conversion_profile_probe.format(text,text) returns text language sql immutable as $$select $1$$;
76
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='xb_conversion_profile_probe.format(text,text)' and problem='shadow of fixed conversion call'),
77
+ 'CF format shadow names its full overload');
78
+ drop function xb_conversion_profile_probe.format(text,text);
79
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
80
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF shadow removal restores the prior profile');
81
+
82
+ create function xb_conversion_profile_probe.range_difference(a float8,b float8) returns float8 language sql immutable as $$select a-b$$;
83
+ create type xb_conversion_profile_probe.float_span as range(subtype=float8,subtype_diff=xb_conversion_profile_probe.range_difference);
84
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='xb_conversion_profile_probe.range_difference(double precision,double precision)' and problem like 'unreviewed primitive%'),
85
+ 'CF range callback names its full implementation identity');
86
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='range xb_conversion_profile_probe.float_span'),
87
+ 'CF custom range also names its dispatch identity');
88
+ drop type xb_conversion_profile_probe.float_span;
89
+ drop function xb_conversion_profile_probe.range_difference(float8,float8);
90
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
91
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF range removal restores the prior profile');
92
+
93
+ create text search configuration xb_conversion_profile_probe.words(copy=pg_catalog.simple);
94
+ select ok(exists(select 1 from pg_temp.xb_cf_problems() where identity='configuration xb_conversion_profile_probe.words'),
95
+ 'CF new text-search configuration names itself');
96
+ select is((select count(*) from pg_temp.xb_cf_admitted()),0::bigint,'CF unreviewed text-search dispatch prevents admission');
97
+ drop text search configuration xb_conversion_profile_probe.words;
98
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
99
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF text-search removal restores the prior profile');
100
+
101
+ create function xb_conversion_profile_probe.unknown_callback(integer) returns boolean language sql immutable as $$select true$$;
102
+ select is(pg_temp.xb_cf_function_problem('xb_conversion_profile_probe.unknown_callback(integer)'::regprocedure),
103
+ 'unreviewed primitive xb_conversion_profile_probe.unknown_callback(integer)',
104
+ 'CF classifier positively refuses an unreviewed implementation');
105
+ drop function xb_conversion_profile_probe.unknown_callback(integer);
106
+ select is((select jsonb_agg(to_jsonb(p) order by identity,problem) from pg_temp.xb_cf_problems() p),
107
+ (select jsonb_agg(to_jsonb(p) order by identity,problem) from xb_cf_prior_profile p),'CF all negative controls restore the prior dispatch profile');
108
+ select is((select count(*) from pg_temp.xb_cf_admitted()),
109
+ (select count(*) from pg_temp.xb_cf_wrappers where to_regprocedure(identity) is not null),
110
+ 'CF exact profile restoration restores only the verified present admissions');
111
+ select * from finish();
112
+ rollback;