@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,102 @@
1
+ -- Requires conversion_guard.sql in this transaction. This is a finite effect
2
+ -- disposition for the two native INSERT/SET templates, not a schema exemption.
3
+ -- Dates and relation names are data: every live descendant is checked by shape.
4
+ create or replace function pg_temp.xb_sf_name(p_oid oid,p_kind text) returns jsonb
5
+ language sql volatile set search_path=pg_catalog as $$
6
+ select jsonb_build_array(n.nspname,t.typname) from pg_type t join pg_namespace n on n.oid=t.typnamespace
7
+ where p_kind='type' and t.oid=p_oid
8
+ union all select jsonb_build_array(n.nspname,c.collname) from pg_collation c join pg_namespace n on n.oid=c.collnamespace
9
+ where p_kind='collation' and c.oid=p_oid
10
+ union all select jsonb_build_array(n.nspname,c.opcname,a.amname) from pg_opclass c
11
+ join pg_namespace n on n.oid=c.opcnamespace join pg_am a on a.oid=c.opcmethod where p_kind='class' and c.oid=p_oid
12
+ $$;
13
+ create or replace function pg_temp.xb_sf_targets() returns table(rel oid)
14
+ language sql volatile set search_path=pg_catalog as $$
15
+ with recursive targets(rel) as (
16
+ select to_regclass('realtime.messages')::oid where to_regclass('realtime.messages') is not null
17
+ union select i.inhrelid from targets t join pg_inherits i on i.inhparent=t.rel
18
+ ) select rel from targets
19
+ $$;
20
+ create or replace function pg_temp.xb_sf_profile(p_rel oid) returns jsonb
21
+ language sql volatile set search_path=pg_catalog as $$
22
+ select jsonb_build_object(
23
+ 'relation',jsonb_build_object('owner',pg_get_userbyid(c.relowner),
24
+ 'acl',(select jsonb_agg(a::text order by a::text collate "C") from unnest(c.relacl) a),
25
+ 'kind',c.relkind,'access_method',(select amname from pg_am where oid=c.relam),
26
+ 'options',c.reloptions,'is_partition',c.relispartition,'row_security',c.relrowsecurity,
27
+ 'force_row_security',c.relforcerowsecurity,'partition_key',pg_get_partkeydef(c.oid)),
28
+ 'columns',(select jsonb_agg(jsonb_build_object('number',a.attnum,'name',a.attname,
29
+ 'type',pg_temp.xb_sf_name(a.atttypid,'type'),'modifier',a.atttypmod,'dimensions',a.attndims,
30
+ 'not_null',a.attnotnull,'dropped',a.attisdropped,'identity',a.attidentity,
31
+ 'generated',a.attgenerated,'collation',pg_temp.xb_sf_name(a.attcollation,'collation'),
32
+ 'acl',a.attacl,'options',a.attoptions,'has_missing',a.atthasmissing,
33
+ 'default',pg_get_expr(d.adbin,d.adrelid)) order by a.attnum)
34
+ from pg_attribute a left join pg_attrdef d on d.adrelid=a.attrelid and d.adnum=a.attnum
35
+ where a.attrelid=c.oid and a.attnum>0),
36
+ 'constraints',(select coalesce(jsonb_agg(jsonb_build_object('type',k.contype,
37
+ 'columns',k.conkey,'definition',pg_get_constraintdef(k.oid),'validated',k.convalidated)
38
+ order by k.contype,pg_get_constraintdef(k.oid)),'[]') from pg_constraint k where k.conrelid=c.oid),
39
+ 'indexes',(select coalesce(jsonb_agg(jsonb_build_object(
40
+ 'keys',i.indkey::smallint[],'classes',(select jsonb_agg(pg_temp.xb_sf_name(x,'class')) from unnest(i.indclass) x),
41
+ 'collations',(select jsonb_agg(pg_temp.xb_sf_name(x,'collation')) from unnest(i.indcollation) x),
42
+ 'options',i.indoption::smallint[],'attributes',i.indnatts,'key_attributes',i.indnkeyatts,
43
+ 'unique',i.indisunique,'primary',i.indisprimary,'exclusion',i.indisexclusion,
44
+ 'immediate',i.indimmediate,'nulls_not_distinct',i.indnullsnotdistinct,
45
+ 'valid',i.indisvalid,'ready',i.indisready,'live',i.indislive,
46
+ 'predicate',pg_get_expr(i.indpred,i.indrelid),'expression',pg_get_expr(i.indexprs,i.indrelid),
47
+ 'access_method',m.amname,'relation_options',ic.reloptions)
48
+ order by i.indisprimary,i.indexrelid),'[]') from pg_index i
49
+ join pg_class ic on ic.oid=i.indexrelid join pg_am m on m.oid=ic.relam where i.indrelid=c.oid))
50
+ from pg_class c where c.oid=p_rel
51
+ $$;
52
+
53
+ \ir agent_board_667_sender_reference.sql
54
+
55
+ create or replace function pg_temp.xb_sf_problems() returns table(identity text,problem text)
56
+ language sql volatile set search_path=pg_catalog as $$
57
+ with targets as (select rel,rel=to_regclass('realtime.messages') as root from pg_temp.xb_sf_targets()),
58
+ shapes as (select t.*,pg_temp.xb_sf_profile(t.rel) as actual,r.payload as expected
59
+ from targets t join pg_temp.xb_sf_reference r on r.kind='shape' and r.identity=case when t.root then 'root' else 'leaf' end)
60
+ select 'realtime.messages','missing native destination' where to_regclass('realtime.messages') is null
61
+ union all select 'realtime.messages','no writable leaf partition' where not exists(select 1 from targets where not root)
62
+ union all select s.rel::regclass::text,'unreviewed relation profile: '||k
63
+ from shapes s cross join lateral jsonb_object_keys(s.expected) k where s.actual->k is distinct from s.expected->k
64
+ union all select s.rel::regclass::text||'.'||(a->>'name'),'unreviewed column/default expression'
65
+ from shapes s cross join lateral jsonb_array_elements(s.actual->'columns') a
66
+ where not exists(select 1 from jsonb_array_elements(s.expected->'columns') e where e=a)
67
+ union all select s.rel::regclass::text||'.'||k.conname,'unreviewed constraint'
68
+ from shapes s join pg_constraint k on k.conrelid=s.rel
69
+ where not exists(select 1 from jsonb_array_elements(s.expected->'constraints') e
70
+ where e=jsonb_build_object('type',k.contype,'columns',k.conkey,'definition',pg_get_constraintdef(k.oid),'validated',k.convalidated))
71
+ or k.condeferrable or k.condeferred
72
+ union all select i.indexrelid::regclass::text,'index set requires exact effect disposition'
73
+ from shapes s join pg_index i on i.indrelid=s.rel where s.actual->'indexes' is distinct from s.expected->'indexes'
74
+ union all select s.rel::regclass::text,'unreviewed inheritance/partition edge' from shapes s
75
+ where (s.root and exists(select 1 from pg_inherits i where i.inhrelid=s.rel))
76
+ or (not s.root and (select count(*) from pg_inherits i where i.inhrelid=s.rel and i.inhparent=to_regclass('realtime.messages') and not i.inhdetachpending)<>1)
77
+ or (not s.root and (select count(*) from pg_inherits i where i.inhrelid=s.rel)<>1)
78
+ union all select t.rel::regclass::text||'.'||p.polname,'unreviewed RLS policy' from targets t join pg_policy p on p.polrelid=t.rel
79
+ union all select t.rel::regclass::text||'.'||g.tgname||' -> '||pg_temp.xb_cf_fn(g.tgfoid),'unreviewed trigger'
80
+ from targets t join pg_trigger g on g.tgrelid=t.rel
81
+ union all select t.rel::regclass::text||'.'||r.rulename,'unreviewed rewrite rule' from targets t join pg_rewrite r on r.ev_class=t.rel
82
+ union all select k.conrelid::regclass::text||'.'||k.conname,'unreviewed foreign-key edge'
83
+ from pg_constraint k where k.contype='f' and exists(select 1 from targets t where t.rel in (k.conrelid,k.confrelid))
84
+ union all select 'schema realtime','native schema security drift' from pg_namespace n
85
+ join pg_temp.xb_sf_reference r on r.kind='schema' and r.identity=n.nspname
86
+ where r.payload is distinct from jsonb_build_object('owner',pg_get_userbyid(n.nspowner),
87
+ 'acl',(select jsonb_agg(a::text order by a::text collate "C") from unnest(n.nspacl) a))
88
+ union all select pg_temp.xb_cf_fn(p.oid),'unreviewed fixed-call shadow' from pg_proc p
89
+ where p.proname in ('format','to_jsonb','gen_random_uuid','jsonb_set','timezone','clock_timestamp')
90
+ and not exists(select 1 from pg_temp.xb_sf_reference r where r.kind='primitive' and to_regprocedure(r.identity)=p.oid)
91
+ union all select r.identity,'fixed-call declaration or security drift' from pg_temp.xb_sf_reference r
92
+ where r.kind='primitive' and r.payload is distinct from pg_temp.xb_cf_meta(to_regprocedure(r.identity))
93
+ union all select r.identity,'native sender declaration or security drift' from pg_temp.xb_sf_reference r
94
+ join pg_proc p on p.oid=to_regprocedure(r.identity)
95
+ where r.kind='wrapper' and r.payload is distinct from pg_temp.xb_cf_meta(p.oid)
96
+ union all select identity,problem from pg_temp.xb_cf_problems()
97
+ $$;
98
+ create or replace function pg_temp.xb_sf_admitted() returns table(fn oid)
99
+ language sql volatile set search_path=pg_catalog as $$
100
+ select p.oid from pg_temp.xb_sf_reference r join pg_proc p on p.oid=to_regprocedure(r.identity)
101
+ where r.kind='wrapper' and not exists(select 1 from pg_temp.xb_sf_problems())
102
+ $$;
@@ -0,0 +1,20 @@
1
+ This is a finite effect disposition for `realtime.send(jsonb,text,text,boolean)` and `realtime.send_binary(bytea,text,text,boolean)`. It does not admit Storage, `apply_rls`, arbitrary invoker SQL, or a whole schema. Native bodies/security, fixed calls, target columns/defaults, constraints, indexes and schema permissions are explicit references. Primitive declarations rest on the trusted PostgreSQL 17.11 implementation and the existing conversion dispatch guard, not binary attestation.
2
+
3
+ Source: CI run [40532374972](https://github.com/Consiliency/message-board/actions/runs/40532374972), head `50c7c9c184c227984c153e061c51b270682978d5`, protocol-2 catalog SHA256 `2c4598bd8b03474d54dc2221e17a83c6a47e1c14b48bd4fe2946e51d08a8160f`. All captured destination descendants share one portable leaf profile. The owned `public.ecr.aws/supabase/postgres:17.11.0.004` reconstruction matched the captured parent and five leaf profiles, sender declarations/security, schema permissions and sixteen fixed-call declarations. Its initially different `extensions.gen_random_uuid` grants were corrected on that owned database to the captured ACL before collecting the reference. This is metadata reconstruction, not a native Supabase service instance or authorization for a production change.
4
+
5
+ Every live descendant is discovered recursively through `pg_inherits` and positively compared with the structural profile. No date or partition name is an exemption. Unknown policies, triggers, rules, foreign-key edges, expressions, callbacks and shadows name themselves and close admission. The class permits ordinary direct leaves with the reviewed columns/defaults, heap storage and two reviewed btree indexes; a subpartition or foreign leaf requires new disposition. Trigger/policy bodies need no purity inference because none is admitted in this captured destination class. Defaults and index/check expressions match the reviewed templates; all registered type/operator/access-method dispatch also passes the conversion guard. Fixed-call shadows include the explicitly bound pgcrypto UUID alias; sharing its name or schema is insufficient.
6
+
7
+ The root `RANGE (inserted_at)` key is a proposed structural condition checked against the live catalog. Protocol 2 did not record `pg_partitioned_table`; its parent primary key, timestamp bounds and descendant profiles support the reconstruction but are not a direct native key observation. That key, additional live constraint flags, and all owned-build declaration references must still match native CI before acceptance. A passing minimal database or an absent wrapper gives no native call/effect credit.
8
+
9
+ Native senders catch errors and return void. Positive probes therefore check exact own rows and payload/ID/event/topic/private/extension/default state separately from `lives_ok`. Refusal probes keep the native RLS warning and require no own row. Topic-unquoting controls must actually insert the own message and append the intended own history; syntax errors in the swallowed exception block receive no mutation credit. Other controls introduce valid registered paths and test the recognizer's named refusal and restoration. Some diagnostic controls are redundant with another refusal layer; they are not independent safety-family credits.
10
+
11
+ Regeneration is manual and review bound. `--collect` prints a metadata-only SQL transaction for an **owned test database**; it creates only temporary helpers and rolls back. Connect using libpq environment, never a URL in argv. Retain the single JSON result along with the native catalog, inspect the generated diff, and verify the native environment separately:
12
+
13
+ ```sh
14
+ node scripts/generate-667-sender-reference.mjs --collect native-catalog.json > collect.sql
15
+ # Run collect.sql on the owned reference database; retain its single JSON result.
16
+ node scripts/generate-667-sender-reference.mjs native-catalog.json collected-fixed.json --check
17
+ node scripts/generate-667-sender-reference.mjs native-catalog.json collected-fixed.json --output proposed-reference.sql
18
+ ```
19
+
20
+ CI never regenerates a reference to clear a failure. It requires the live definitions and effect class to match. The remaining four native routines need separate positive dispositions and proof.