@consiliency/agent-board-schema 1.10.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fixtures/already-applied.json +136 -0
- package/migrations/20260729000100_agent_board_fedsession_autojoin_default_board.sql +364 -0
- package/migrations/20260730000100_agent_board_gatenull_service_role_bypass.sql +369 -0
- package/migrations/20260730000200_agent_board_membstate_authz.sql +195 -0
- package/migrations/20260731000100_agent_board_agentsdir_column_scope.sql +88 -0
- package/migrations/20260801000100_agent_board_leaveidem_terminal_noop.sql +317 -0
- package/migrations/20260802000100_agent_board_rolereset_reentry_clamp.sql +237 -0
- package/migrations/20260803000100_agent_board_rowid_total_order.sql +1201 -0
- package/migrations/20260804000100_agent_board_hygiene_actor_binding_rls.sql +229 -0
- package/migrations/20260806000100_agent_board_consent_substrate.sql +339 -0
- package/migrations/20260807000100_agent_board_consent_emission.sql +619 -0
- package/migrations/20260808000100_agent_board_rejectsem.sql +145 -0
- package/migrations/20260809000100_agent_board_consent_gating.sql +492 -0
- package/migrations/20260810000100_agent_board_consent_locking.sql +485 -0
- package/migrations/20260811000100_agent_board_retention_metadata_revoke.sql +23 -0
- package/migrations/20260812000100_agent_board_pubexec_class_revoke.sql +54 -0
- package/migrations/20260813000100_agent_board_invitepolicy_block.sql +420 -0
- package/migrations/20260814000100_agent_board_obsgate_thread_post_policy.sql +239 -0
- package/migrations/20260815000100_agent_board_obsgate2_authoring_gates.sql +287 -0
- package/migrations/20260816000100_agent_board_obsgate3_task_lifecycle.sql +118 -0
- package/migrations/20260817000100_agent_board_obsgate4_claims_lifecycle.sql +250 -0
- package/migrations/20260818000100_agent_board_fleet_machines_rls_correlation.sql +43 -0
- package/migrations/20260819000100_agent_board_resolve_noop_retire.sql +166 -0
- package/migrations/20260820000100_agent_board_roomdeleg_lane_b.sql +206 -0
- package/migrations/20260821000100_agent_board_claimgate_claimkey.sql +372 -0
- package/migrations/20260822000100_agent_board_mint_harden.sql +710 -0
- package/migrations/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql +207 -0
- package/migrations/20260823000100_agent_board_fleet_machine_hijack.sql +106 -0
- package/migrations/20260824000100_agent_board_claimgate_shadow.sql +443 -0
- package/migrations/20260825000100_agent_board_claimgate_enforce.sql +660 -0
- package/migrations/20260826000100_agent_board_fleet_machine_reactivation.sql +514 -0
- package/migrations/20260828000100_agent_board_delegation_cap_ceiling.sql +474 -0
- package/migrations/20260829000100_agent_board_fleet_machine_reclaim.sql +432 -0
- package/migrations/20260830000100_agent_board_delegation_sole_writer.sql +41 -0
- package/migrations/20260831000100_agent_board_fleet_domain_reclaim.sql +389 -0
- package/package.json +1 -1
- package/schema-manifest.json +309 -3
- package/src/tooling.test.mjs +123 -2
- package/tests/agent_board_actorspoof.test.sql +349 -0
- package/tests/agent_board_agentsdir.test.sql +154 -0
- package/tests/agent_board_authbound_boundary.test.sql +9 -1
- package/tests/agent_board_claimgate_enforce.test.sql +464 -0
- package/tests/agent_board_claimgate_predicate.test.sql +360 -0
- package/tests/agent_board_claimkey.test.sql +229 -0
- package/tests/agent_board_consent_backfill.test.sql +48 -0
- package/tests/agent_board_consent_emission.test.sql +601 -0
- package/tests/agent_board_consent_gating.test.sql +489 -0
- package/tests/agent_board_consent_substrate.test.sql +720 -0
- package/tests/agent_board_delegation_cap_ceiling.test.sql +303 -0
- package/tests/agent_board_delegation_enforcement.test.sql +55 -6
- package/tests/agent_board_delegation_policies.test.sql +107 -1
- package/tests/agent_board_fedsession.test.sql +6 -4
- package/tests/agent_board_fedsession_autojoin.test.sql +181 -0
- package/tests/agent_board_fleet_domain_reclaim.test.sql +419 -0
- package/tests/agent_board_fleet_machine_hijack.test.sql +190 -0
- package/tests/agent_board_fleet_machine_reactivation.test.sql +426 -0
- package/tests/agent_board_fleet_machine_reclaim.test.sql +509 -0
- package/tests/agent_board_fleet_machines_rls.test.sql +79 -0
- package/tests/agent_board_fleet_policy.test.sql +2 -2
- package/tests/agent_board_gatenull_membstate.test.sql +352 -0
- package/tests/agent_board_grants_hygiene.test.sql +408 -0
- package/tests/agent_board_identity_providers.test.sql +9 -0
- package/tests/agent_board_inbox_reads.test.sql +29 -12
- package/tests/agent_board_inbox_rpcs.test.sql +44 -34
- package/tests/agent_board_invitepolicy.test.sql +205 -0
- package/tests/agent_board_leaveidem.test.sql +194 -0
- package/tests/agent_board_mint_fleet_agent_session.test.sql +10 -10
- package/tests/agent_board_mint_harden.test.sql +303 -0
- package/tests/agent_board_mint_harden_backfill.test.sql +95 -0
- package/tests/agent_board_obsgate.test.sql +178 -0
- package/tests/agent_board_obsgate2.test.sql +153 -0
- package/tests/agent_board_obsgate3.test.sql +170 -0
- package/tests/agent_board_obsgate4.test.sql +196 -0
- package/tests/agent_board_portal_offline_invariant.test.sql +13 -2
- package/tests/agent_board_pubexec_class.test.sql +53 -0
- package/tests/agent_board_rejectsem.test.sql +271 -0
- package/tests/agent_board_resigning_refresh.test.sql +1 -1
- package/tests/agent_board_resolve_noop_retire.test.sql +71 -0
- package/tests/agent_board_retention_metadata_acl.test.sql +53 -0
- package/tests/agent_board_revoke_agent_subtree.test.sql +3 -3
- package/tests/agent_board_rolereset.test.sql +351 -0
- package/tests/agent_board_roomdeleg.test.sql +5 -3
- package/tests/agent_board_roomdeleg_lane_b.test.sql +144 -0
- package/tests/agent_board_roomlink.test.sql +25 -9
- package/tests/agent_board_rowid.test.sql +1274 -0
- package/tests/agent_board_signature_rls_reads.test.sql +3 -3
- package/tests/agent_board_signed_write_gateway.test.sql +3 -3
- package/tests/agent_board_signing_challenge_pending_cap.test.sql +2 -2
- package/tests/agent_board_signing_challenge_reaper.test.sql +2 -2
- package/tests/agent_board_signing_proof_rpcs.test.sql +4 -4
- package/tests/agent_board_signing_store.test.sql +6 -6
- package/tests/fixtures/isolation-substrate.sql +93 -0
- package/tests/fixtures/test-prereqs.sql +33 -0
- package/tests/isolation/expected/claimgate_ownerless_quota.out +36 -0
- package/tests/isolation/expected/claimkey_renew_race.out +38 -0
- package/tests/isolation/expected/consent_approval_lock.out +43 -0
- package/tests/isolation/expected/consent_emit_actual_state.out +37 -0
- package/tests/isolation/expected/domain_reclaim_revoke_race.out +40 -0
- package/tests/isolation/expected/reactivate_revoke_race.out +80 -0
- package/tests/isolation/expected/reclaim_revoke_race.out +40 -0
- package/tests/isolation/specs/claimgate_ownerless_quota.spec +77 -0
- package/tests/isolation/specs/claimkey_renew_race.spec +67 -0
- package/tests/isolation/specs/consent_approval_lock.spec +98 -0
- package/tests/isolation/specs/consent_emit_actual_state.spec +79 -0
- package/tests/isolation/specs/domain_reclaim_revoke_race.spec +88 -0
- package/tests/isolation/specs/reactivate_revoke_race.spec +115 -0
- package/tests/isolation/specs/reclaim_revoke_race.spec +94 -0
- package/tests/seeds/20260806000100_agent_board_consent_substrate.sql.pre.sql +19 -0
- package/tests/seeds/20260822000200_agent_board_mint_harden_fingerprint_backfill.sql.pre.sql +39 -0
package/schema-manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schema": "agent_board_schema_manifest.v1",
|
|
3
3
|
"interface": "IF-0-MBPLANE-BUNDLE-1",
|
|
4
4
|
"package": "@consiliency/agent-board-schema",
|
|
5
|
-
"packageVersion": "1.
|
|
5
|
+
"packageVersion": "1.22.0",
|
|
6
6
|
"schemaVersion": 8,
|
|
7
7
|
"minClientVersion": "1.1.0",
|
|
8
8
|
"source": {
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"usage": "upsert (retention/monitoring defaults; on conflict do nothing)"
|
|
47
47
|
}
|
|
48
48
|
],
|
|
49
|
-
"migrationCount":
|
|
50
|
-
"aggregateSha256": "
|
|
49
|
+
"migrationCount": 113,
|
|
50
|
+
"aggregateSha256": "fb690d702458562b331aed192580f1568018d9d007368c8b9edd45d35d18ad96",
|
|
51
51
|
"migrations": [
|
|
52
52
|
{
|
|
53
53
|
"order": 0,
|
|
@@ -759,6 +759,312 @@
|
|
|
759
759
|
"sourceRef": "message-board",
|
|
760
760
|
"bytes": 15404,
|
|
761
761
|
"sha256": "5f300449c29ec05c2cd3c2cd7eca622ca41e8b32b8856c5bc0695b5750a196e7"
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
"order": 79,
|
|
765
|
+
"id": "20260729000100_agent_board_fedsession_autojoin_default_board",
|
|
766
|
+
"filename": "20260729000100_agent_board_fedsession_autojoin_default_board.sql",
|
|
767
|
+
"origin": "message-board-forward",
|
|
768
|
+
"sourceRef": "message-board",
|
|
769
|
+
"bytes": 18252,
|
|
770
|
+
"sha256": "6f3a2db6c7349119b3893fe530788236ef5ccf4e6b0f3e21235497b8b7b232c0"
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
"order": 80,
|
|
774
|
+
"id": "20260730000100_agent_board_gatenull_service_role_bypass",
|
|
775
|
+
"filename": "20260730000100_agent_board_gatenull_service_role_bypass.sql",
|
|
776
|
+
"origin": "message-board-forward",
|
|
777
|
+
"sourceRef": "message-board",
|
|
778
|
+
"bytes": 17187,
|
|
779
|
+
"sha256": "db8b2a93996c1d61bd34fc58a5e4b3056563c53bb2eb20cbb4a3b0b799a0d91e"
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"order": 81,
|
|
783
|
+
"id": "20260730000200_agent_board_membstate_authz",
|
|
784
|
+
"filename": "20260730000200_agent_board_membstate_authz.sql",
|
|
785
|
+
"origin": "message-board-forward",
|
|
786
|
+
"sourceRef": "message-board",
|
|
787
|
+
"bytes": 11567,
|
|
788
|
+
"sha256": "a4d935614f970a946f27a5925c0166e1d41510a82078e559fb769f4ea39afc2e"
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"order": 82,
|
|
792
|
+
"id": "20260731000100_agent_board_agentsdir_column_scope",
|
|
793
|
+
"filename": "20260731000100_agent_board_agentsdir_column_scope.sql",
|
|
794
|
+
"origin": "message-board-forward",
|
|
795
|
+
"sourceRef": "message-board",
|
|
796
|
+
"bytes": 5715,
|
|
797
|
+
"sha256": "e05ddbbcf778828dbc4ba2631a5a288567d361371a60373c7e9090b718aa7433"
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"order": 83,
|
|
801
|
+
"id": "20260801000100_agent_board_leaveidem_terminal_noop",
|
|
802
|
+
"filename": "20260801000100_agent_board_leaveidem_terminal_noop.sql",
|
|
803
|
+
"origin": "message-board-forward",
|
|
804
|
+
"sourceRef": "message-board",
|
|
805
|
+
"bytes": 17467,
|
|
806
|
+
"sha256": "72b20a3a365d0c84969cd1129cbc04578ee487a70e28a4245171c2abc68ec779"
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
"order": 84,
|
|
810
|
+
"id": "20260802000100_agent_board_rolereset_reentry_clamp",
|
|
811
|
+
"filename": "20260802000100_agent_board_rolereset_reentry_clamp.sql",
|
|
812
|
+
"origin": "message-board-forward",
|
|
813
|
+
"sourceRef": "message-board",
|
|
814
|
+
"bytes": 12983,
|
|
815
|
+
"sha256": "d04f596cdc97dc2ddc83348ee49c48888b334d12c31394586e7058409fa48cce"
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
"order": 85,
|
|
819
|
+
"id": "20260803000100_agent_board_rowid_total_order",
|
|
820
|
+
"filename": "20260803000100_agent_board_rowid_total_order.sql",
|
|
821
|
+
"origin": "message-board-forward",
|
|
822
|
+
"sourceRef": "message-board",
|
|
823
|
+
"bytes": 56061,
|
|
824
|
+
"sha256": "a3c58ff1f55d3134c6096d10bf56df09db573938e7b4b92c13b7389451dd4c3c"
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
"order": 86,
|
|
828
|
+
"id": "20260804000100_agent_board_hygiene_actor_binding_rls",
|
|
829
|
+
"filename": "20260804000100_agent_board_hygiene_actor_binding_rls.sql",
|
|
830
|
+
"origin": "message-board-forward",
|
|
831
|
+
"sourceRef": "message-board",
|
|
832
|
+
"bytes": 10114,
|
|
833
|
+
"sha256": "3feac0b5002bbff56c89adc3b9f071e21e1bb5ab2c4eea1571cfb61f254caa88"
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"order": 87,
|
|
837
|
+
"id": "20260806000100_agent_board_consent_substrate",
|
|
838
|
+
"filename": "20260806000100_agent_board_consent_substrate.sql",
|
|
839
|
+
"origin": "message-board-forward",
|
|
840
|
+
"sourceRef": "message-board",
|
|
841
|
+
"bytes": 17238,
|
|
842
|
+
"sha256": "91ba2ec5885dfcaaa138ab3da3665a6779b6149147045773dfcbb707cfd9db07"
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
"order": 88,
|
|
846
|
+
"id": "20260807000100_agent_board_consent_emission",
|
|
847
|
+
"filename": "20260807000100_agent_board_consent_emission.sql",
|
|
848
|
+
"origin": "message-board-forward",
|
|
849
|
+
"sourceRef": "message-board",
|
|
850
|
+
"bytes": 31140,
|
|
851
|
+
"sha256": "b6fb6f8254169d4fc3ab8016ab2f9ec2a2800c800178aebb602ff1db4aa0e7ee"
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
"order": 89,
|
|
855
|
+
"id": "20260808000100_agent_board_rejectsem",
|
|
856
|
+
"filename": "20260808000100_agent_board_rejectsem.sql",
|
|
857
|
+
"origin": "message-board-forward",
|
|
858
|
+
"sourceRef": "message-board",
|
|
859
|
+
"bytes": 7879,
|
|
860
|
+
"sha256": "945a719e127573816cb9d18e318cf0778a99f3b0f8239b8e6ae0f8e62b04d919"
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"order": 90,
|
|
864
|
+
"id": "20260809000100_agent_board_consent_gating",
|
|
865
|
+
"filename": "20260809000100_agent_board_consent_gating.sql",
|
|
866
|
+
"origin": "message-board-forward",
|
|
867
|
+
"sourceRef": "message-board",
|
|
868
|
+
"bytes": 26782,
|
|
869
|
+
"sha256": "666e413ae1474e5e00de4d2bf2e7f7733f6ad149c91c3ef9a938e049115e387c"
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"order": 91,
|
|
873
|
+
"id": "20260810000100_agent_board_consent_locking",
|
|
874
|
+
"filename": "20260810000100_agent_board_consent_locking.sql",
|
|
875
|
+
"origin": "message-board-forward",
|
|
876
|
+
"sourceRef": "message-board",
|
|
877
|
+
"bytes": 25104,
|
|
878
|
+
"sha256": "d027468d3adb8563563f4fac4b13140013b68f28f39abe37c1de487c7fd36978"
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
"order": 92,
|
|
882
|
+
"id": "20260811000100_agent_board_retention_metadata_revoke",
|
|
883
|
+
"filename": "20260811000100_agent_board_retention_metadata_revoke.sql",
|
|
884
|
+
"origin": "message-board-forward",
|
|
885
|
+
"sourceRef": "message-board",
|
|
886
|
+
"bytes": 1476,
|
|
887
|
+
"sha256": "8d08dc986d532862d6593fe49b2e38e7447e57006360cae3406127c820ec19d6"
|
|
888
|
+
},
|
|
889
|
+
{
|
|
890
|
+
"order": 93,
|
|
891
|
+
"id": "20260812000100_agent_board_pubexec_class_revoke",
|
|
892
|
+
"filename": "20260812000100_agent_board_pubexec_class_revoke.sql",
|
|
893
|
+
"origin": "message-board-forward",
|
|
894
|
+
"sourceRef": "message-board",
|
|
895
|
+
"bytes": 2946,
|
|
896
|
+
"sha256": "34dabae96c11ab7fce68d71f1aa782eccef1bce5de4ad0567013d73949815606"
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
"order": 94,
|
|
900
|
+
"id": "20260813000100_agent_board_invitepolicy_block",
|
|
901
|
+
"filename": "20260813000100_agent_board_invitepolicy_block.sql",
|
|
902
|
+
"origin": "message-board-forward",
|
|
903
|
+
"sourceRef": "message-board",
|
|
904
|
+
"bytes": 18997,
|
|
905
|
+
"sha256": "8ee82c196483bf7d80091a46f6189328934fda2345947aea905505e37090719d"
|
|
906
|
+
},
|
|
907
|
+
{
|
|
908
|
+
"order": 95,
|
|
909
|
+
"id": "20260814000100_agent_board_obsgate_thread_post_policy",
|
|
910
|
+
"filename": "20260814000100_agent_board_obsgate_thread_post_policy.sql",
|
|
911
|
+
"origin": "message-board-forward",
|
|
912
|
+
"sourceRef": "message-board",
|
|
913
|
+
"bytes": 11686,
|
|
914
|
+
"sha256": "b36433d8aa78413b3d1e5119c45f8a24d37de053d03f4c4fd47b449814c4becb"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"order": 96,
|
|
918
|
+
"id": "20260815000100_agent_board_obsgate2_authoring_gates",
|
|
919
|
+
"filename": "20260815000100_agent_board_obsgate2_authoring_gates.sql",
|
|
920
|
+
"origin": "message-board-forward",
|
|
921
|
+
"sourceRef": "message-board",
|
|
922
|
+
"bytes": 14033,
|
|
923
|
+
"sha256": "7e76aa13aef8450aba50eb08d9da66b75a55457f41e3c92662137a1f6d7e2850"
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"order": 97,
|
|
927
|
+
"id": "20260816000100_agent_board_obsgate3_task_lifecycle",
|
|
928
|
+
"filename": "20260816000100_agent_board_obsgate3_task_lifecycle.sql",
|
|
929
|
+
"origin": "message-board-forward",
|
|
930
|
+
"sourceRef": "message-board",
|
|
931
|
+
"bytes": 6623,
|
|
932
|
+
"sha256": "921cc40511e4070c61f7b164a7528362a9662da2b902252a3e92091f01ebf0fd"
|
|
933
|
+
},
|
|
934
|
+
{
|
|
935
|
+
"order": 98,
|
|
936
|
+
"id": "20260817000100_agent_board_obsgate4_claims_lifecycle",
|
|
937
|
+
"filename": "20260817000100_agent_board_obsgate4_claims_lifecycle.sql",
|
|
938
|
+
"origin": "message-board-forward",
|
|
939
|
+
"sourceRef": "message-board",
|
|
940
|
+
"bytes": 12334,
|
|
941
|
+
"sha256": "6dd2d7928df2dff87c61b52e7edb75c5ec781fec5a85dd7c4273dadfd162f8ef"
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"order": 99,
|
|
945
|
+
"id": "20260818000100_agent_board_fleet_machines_rls_correlation",
|
|
946
|
+
"filename": "20260818000100_agent_board_fleet_machines_rls_correlation.sql",
|
|
947
|
+
"origin": "message-board-forward",
|
|
948
|
+
"sourceRef": "message-board",
|
|
949
|
+
"bytes": 2354,
|
|
950
|
+
"sha256": "f8bca2d75755589a1fa72d0c30ca799bd20db776d73a3a5e27832e112b57ea5d"
|
|
951
|
+
},
|
|
952
|
+
{
|
|
953
|
+
"order": 100,
|
|
954
|
+
"id": "20260819000100_agent_board_resolve_noop_retire",
|
|
955
|
+
"filename": "20260819000100_agent_board_resolve_noop_retire.sql",
|
|
956
|
+
"origin": "message-board-forward",
|
|
957
|
+
"sourceRef": "message-board",
|
|
958
|
+
"bytes": 7804,
|
|
959
|
+
"sha256": "68bcb6d1b7e8ee8424e6d1d13a5a7d2c7d4554f348cc2cbf946ec95999517ac5"
|
|
960
|
+
},
|
|
961
|
+
{
|
|
962
|
+
"order": 101,
|
|
963
|
+
"id": "20260820000100_agent_board_roomdeleg_lane_b",
|
|
964
|
+
"filename": "20260820000100_agent_board_roomdeleg_lane_b.sql",
|
|
965
|
+
"origin": "message-board-forward",
|
|
966
|
+
"sourceRef": "message-board",
|
|
967
|
+
"bytes": 11822,
|
|
968
|
+
"sha256": "2b10b8507b9bc704e9419b93d6d5d0af6d24f0ceef28c3eaa520516158f6c3e2"
|
|
969
|
+
},
|
|
970
|
+
{
|
|
971
|
+
"order": 102,
|
|
972
|
+
"id": "20260821000100_agent_board_claimgate_claimkey",
|
|
973
|
+
"filename": "20260821000100_agent_board_claimgate_claimkey.sql",
|
|
974
|
+
"origin": "message-board-forward",
|
|
975
|
+
"sourceRef": "message-board",
|
|
976
|
+
"bytes": 20128,
|
|
977
|
+
"sha256": "caf8a83d4f39fc0a3d76d5b97077f0c3cf281305e47c50d370e940497a211022"
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"order": 103,
|
|
981
|
+
"id": "20260822000100_agent_board_mint_harden",
|
|
982
|
+
"filename": "20260822000100_agent_board_mint_harden.sql",
|
|
983
|
+
"origin": "message-board-forward",
|
|
984
|
+
"sourceRef": "message-board",
|
|
985
|
+
"bytes": 33756,
|
|
986
|
+
"sha256": "67585b17791598391515e63fa680c35cedaf27edc7ba3296f98242b925b9f490"
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
"order": 104,
|
|
990
|
+
"id": "20260822000200_agent_board_mint_harden_fingerprint_backfill",
|
|
991
|
+
"filename": "20260822000200_agent_board_mint_harden_fingerprint_backfill.sql",
|
|
992
|
+
"origin": "message-board-forward",
|
|
993
|
+
"sourceRef": "message-board",
|
|
994
|
+
"bytes": 10716,
|
|
995
|
+
"sha256": "8bfd8e1bde5dbe85f21f5e0eb6c8f34462d16b92a763977ad9930539ac259698"
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"order": 105,
|
|
999
|
+
"id": "20260823000100_agent_board_fleet_machine_hijack",
|
|
1000
|
+
"filename": "20260823000100_agent_board_fleet_machine_hijack.sql",
|
|
1001
|
+
"origin": "message-board-forward",
|
|
1002
|
+
"sourceRef": "message-board",
|
|
1003
|
+
"bytes": 5078,
|
|
1004
|
+
"sha256": "73dcb65af8f8c754e2c6cc1c29f8649619a7653519a36a6b3acddf1a344a2bee"
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"order": 106,
|
|
1008
|
+
"id": "20260824000100_agent_board_claimgate_shadow",
|
|
1009
|
+
"filename": "20260824000100_agent_board_claimgate_shadow.sql",
|
|
1010
|
+
"origin": "message-board-forward",
|
|
1011
|
+
"sourceRef": "message-board",
|
|
1012
|
+
"bytes": 25078,
|
|
1013
|
+
"sha256": "da42126b6cf40b0b044513313b0921394cd25de13426b16bcebd09bbcf5310a1"
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
"order": 107,
|
|
1017
|
+
"id": "20260825000100_agent_board_claimgate_enforce",
|
|
1018
|
+
"filename": "20260825000100_agent_board_claimgate_enforce.sql",
|
|
1019
|
+
"origin": "message-board-forward",
|
|
1020
|
+
"sourceRef": "message-board",
|
|
1021
|
+
"bytes": 37587,
|
|
1022
|
+
"sha256": "7264c8ff93f366238788f1a68c72a7ca0651da6e1b0cd9e27516e9acc01e6d3f"
|
|
1023
|
+
},
|
|
1024
|
+
{
|
|
1025
|
+
"order": 108,
|
|
1026
|
+
"id": "20260826000100_agent_board_fleet_machine_reactivation",
|
|
1027
|
+
"filename": "20260826000100_agent_board_fleet_machine_reactivation.sql",
|
|
1028
|
+
"origin": "message-board-forward",
|
|
1029
|
+
"sourceRef": "message-board",
|
|
1030
|
+
"bytes": 23827,
|
|
1031
|
+
"sha256": "fe437413046fba73b5306f1e21de81116369989a5d6e934a57c83c91bd5abb4b"
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
"order": 109,
|
|
1035
|
+
"id": "20260828000100_agent_board_delegation_cap_ceiling",
|
|
1036
|
+
"filename": "20260828000100_agent_board_delegation_cap_ceiling.sql",
|
|
1037
|
+
"origin": "message-board-forward",
|
|
1038
|
+
"sourceRef": "message-board",
|
|
1039
|
+
"bytes": 25838,
|
|
1040
|
+
"sha256": "b9556374b6e512cc4f2ffc6a6d80d2abceca9ae1963e0f0ecdcd0485f6580e9e"
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
"order": 110,
|
|
1044
|
+
"id": "20260829000100_agent_board_fleet_machine_reclaim",
|
|
1045
|
+
"filename": "20260829000100_agent_board_fleet_machine_reclaim.sql",
|
|
1046
|
+
"origin": "message-board-forward",
|
|
1047
|
+
"sourceRef": "message-board",
|
|
1048
|
+
"bytes": 26058,
|
|
1049
|
+
"sha256": "6ba17d49d5ef9ced3824f4f7ef7dbb40dd9ac3564576dad8b479545b2bab3b19"
|
|
1050
|
+
},
|
|
1051
|
+
{
|
|
1052
|
+
"order": 111,
|
|
1053
|
+
"id": "20260830000100_agent_board_delegation_sole_writer",
|
|
1054
|
+
"filename": "20260830000100_agent_board_delegation_sole_writer.sql",
|
|
1055
|
+
"origin": "message-board-forward",
|
|
1056
|
+
"sourceRef": "message-board",
|
|
1057
|
+
"bytes": 2927,
|
|
1058
|
+
"sha256": "26f5febc3c63f665eeb6eca2909d72187f16bae2c2643065e8ddb7c919086a86"
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"order": 112,
|
|
1062
|
+
"id": "20260831000100_agent_board_fleet_domain_reclaim",
|
|
1063
|
+
"filename": "20260831000100_agent_board_fleet_domain_reclaim.sql",
|
|
1064
|
+
"origin": "message-board-forward",
|
|
1065
|
+
"sourceRef": "message-board",
|
|
1066
|
+
"bytes": 25051,
|
|
1067
|
+
"sha256": "8d24ec4d682969a5d9339aec0573fad65ee95993dce2f8dca214906549b5ebe8"
|
|
762
1068
|
}
|
|
763
1069
|
],
|
|
764
1070
|
"excludedBridge": {
|
package/src/tooling.test.mjs
CHANGED
|
@@ -37,9 +37,9 @@ describe('manifest integrity', () => {
|
|
|
37
37
|
expect(manifest.schemaVersion).toBe(8);
|
|
38
38
|
expect(manifest.minClientVersion).toMatch(/^\d+\.\d+\.\d+$/);
|
|
39
39
|
});
|
|
40
|
-
it('registers the four MBAUTHZ + four MBSENDAUTHZ + four MBSESSION + four MBDELEG + three MBFED + three MBHARDEN + two MBPORTALGATE + two MBPORTAL-PR32 + two ROOMOWN + two ROOMLINK + one ROOMDELEG + one LOCALAUTH + one ROOMUIAPI + one FEDSESSION forward migrations (migrationCount = prior
|
|
40
|
+
it('registers the four MBAUTHZ + four MBSENDAUTHZ + four MBSESSION + four MBDELEG + three MBFED + three MBHARDEN + two MBPORTALGATE + two MBPORTAL-PR32 + two ROOMOWN + two ROOMLINK + one ROOMDELEG + one LOCALAUTH + one ROOMUIAPI + one FEDSESSION + one FEDSESSION-AUTOJOIN + one GATENULL + one MEMBSTATE + one AGENTSDIR + one LEAVEIDEM + one ROLERESET + one MBROWID + one MBHYGIENE + one MBCONSENT-A + one MBCONSENT-B(a) + one MBCONSENT-B(i) + one MBCONSENT-B(ii) + one MBCONSENT-B(iii) + one MBHARDEN-#97 + one MBHARDEN-#118 + one INVITEPOLICY + one OBSGATE + one OBSGATE-2 + one OBSGATE-3 + one OBSGATE-4 + one FLEETMACHINERLS + one RESOLVENOOP + one ROOMDELEG-LANEB + one CLAIMKEY + two MINTHARDEN + one FLEETMACHINEHIJACK + one CLAIMGATE-SHADOW + one CLAIMGATE-ENFORCE + one FLEETMACHINEREACTIVATION + one DELEGCAPCEILING + one FLEETMACHINERECLAIM + one DELEGSOLEWRITER + one FLEETDOMAINRECLAIM forward migrations (migrationCount = prior 112 + 1 = 113)', () => {
|
|
41
41
|
expect(manifest.migrationCount).toBe(manifest.migrations.length);
|
|
42
|
-
expect(manifest.migrationCount).toBe(
|
|
42
|
+
expect(manifest.migrationCount).toBe(113);
|
|
43
43
|
// MBSESSION switched enforcement on (scoped-send re-grant): the client-visible
|
|
44
44
|
// schema version bumped to 8. MBDELEG tightens delegation and MBFED adds only
|
|
45
45
|
// enrollment-only additive surface (identity_providers registry, enrollment audit,
|
|
@@ -95,6 +95,51 @@ describe('manifest integrity', () => {
|
|
|
95
95
|
// backing the /portal-session Option A self-signed access-token minter. Additive
|
|
96
96
|
// (adds a nullable mode column to enrollment_federation_audit); schema stays 8.
|
|
97
97
|
'20260728000100_agent_board_enroll_federated_human.sql',
|
|
98
|
+
// FEDSESSION-AUTOJOIN: per-issuer default_board_id + auto-join a fresh fed-human to it
|
|
99
|
+
// (baseline member, first-time-only, non-fatal) inside enroll_federated_human. Additive;
|
|
100
|
+
// schema stays 8.
|
|
101
|
+
'20260729000100_agent_board_fedsession_autojoin_default_board.sql',
|
|
102
|
+
// GATENULL (#58): service_role-bypass hardening — an authenticated principal with no
|
|
103
|
+
// ACTIVE agent no longer takes the null-actor bypass on the four board-mutating RPCs.
|
|
104
|
+
'20260730000100_agent_board_gatenull_service_role_bypass.sql',
|
|
105
|
+
// MEMBSTATE (#75): update_board_membership gains an authorization model (it previously
|
|
106
|
+
// had none) — self-service transitions only, owner/admin for another agent's row.
|
|
107
|
+
'20260730000200_agent_board_membstate_authz.sql',
|
|
108
|
+
// AGENTSDIR (#80): agent_board.agents column read posture — `authenticated` may select only
|
|
109
|
+
// the directory columns; identity-linkage columns + metadata are withheld. Grants only.
|
|
110
|
+
'20260731000100_agent_board_agentsdir_column_scope.sql',
|
|
111
|
+
// LEAVEIDEM (#81): terminal membership states are true no-ops; left_at is preserved and
|
|
112
|
+
// the reserved ops_* metadata namespace is stripped from caller input.
|
|
113
|
+
'20260801000100_agent_board_leaveidem_terminal_noop.sql',
|
|
114
|
+
// ROLERESET (#79): role is not identity — the mutator clamps role to the table default on
|
|
115
|
+
// any non-active -> joined|subscribed re-entry (UPDATE branch only, never a trigger), and
|
|
116
|
+
// grant_board_role refuses a grant onto a non-active membership (pre-check P0002 + the
|
|
117
|
+
// mirrored UPDATE predicate that closes the TOCTOU window).
|
|
118
|
+
'20260802000100_agent_board_rolereset_reentry_clamp.sql',
|
|
119
|
+
// MBROWID: one authoritative membership row per (board_id, agent_id) — total-order reads
|
|
120
|
+
// (created_at desc, id desc) with duplicate-aware active-row selection, and the R-LINK-7
|
|
121
|
+
// bootstrap guard that suppresses a removed creator without breaking 'left' recovery.
|
|
122
|
+
'20260803000100_agent_board_rowid_total_order.sql',
|
|
123
|
+
// MBHYGIENE (#76): actor bound through _resolved_actor_agent_id in the addressing
|
|
124
|
+
// resolvers; RLS on schema_version as bundle-level defense in depth; and the two dead
|
|
125
|
+
// callback policy arms rewritten from an inner join through RLS-filtered
|
|
126
|
+
// callback_endpoints to a separate exists(...).
|
|
127
|
+
'20260804000100_agent_board_hygiene_actor_binding_rls.sql',
|
|
128
|
+
// MBCONSENT-A (#82/#89/#90): the consent SUBSTRATE only -- ledger, anti-forge
|
|
129
|
+
// rules, privilege posture, the two frozen predicates, backfill. No route changes.
|
|
130
|
+
'20260806000100_agent_board_consent_substrate.sql',
|
|
131
|
+
// MBCONSENT-B(a): emission only. Every membership transition writes one ledger
|
|
132
|
+
// event; nothing reads the predicate yet, so no call that succeeds can start failing.
|
|
133
|
+
'20260807000100_agent_board_consent_emission.sql',
|
|
134
|
+
// MBCONSENT-B(i) (#89): a refusal is not an eviction -- resolve_board_request
|
|
135
|
+
// writes `left`, so one rejection is no longer a permanent self-unrecoverable bar.
|
|
136
|
+
'20260808000100_agent_board_rejectsem.sql',
|
|
137
|
+
// MBCONSENT-B(ii) (#82, #108): route gating -- the change that closes the hole.
|
|
138
|
+
// NOT inert: calls that succeed today begin failing, by design.
|
|
139
|
+
'20260809000100_agent_board_consent_gating.sql',
|
|
140
|
+
// MBCONSENT-B(iii) (#109/#110 + the gating race): validate and mutate the SAME
|
|
141
|
+
// row. The sink gains an optional row identity and event kind.
|
|
142
|
+
'20260810000100_agent_board_consent_locking.sql',
|
|
98
143
|
]) {
|
|
99
144
|
expect(names.has(f)).toBe(true);
|
|
100
145
|
}
|
|
@@ -157,3 +202,79 @@ describe('plan / check postures + exit codes (SemVer contract)', () => {
|
|
|
157
202
|
expect(EXIT).toEqual({ exact: 0, behind: 10, ahead: 11, divergent: 12, error: 13 });
|
|
158
203
|
});
|
|
159
204
|
});
|
|
205
|
+
|
|
206
|
+
// BACKFILL PRESENCE. The pgTAP suite proves the backfill STATEMENT's semantics by re-running
|
|
207
|
+
// it, so it would stay green if the migration's copy were deleted -- and the migration's own
|
|
208
|
+
// backfill is a no-op under that harness anyway, because the runner applies migrations to an
|
|
209
|
+
// EMPTY schema and there are no pre-existing rows to annotate. Semantics and presence are two
|
|
210
|
+
// different claims and pgTAP can only make the first. This makes the second, by reading the
|
|
211
|
+
// shipped file.
|
|
212
|
+
describe('MBCONSENT-A backfill presence', () => {
|
|
213
|
+
const sql = readFileSync(
|
|
214
|
+
new URL('../migrations/20260806000100_agent_board_consent_substrate.sql', import.meta.url),
|
|
215
|
+
'utf8',
|
|
216
|
+
);
|
|
217
|
+
const stripped = sql.replace(/^\s*--.*$/gm, '');
|
|
218
|
+
|
|
219
|
+
it('ships a backfill that annotates pre-existing non-active memberships', () => {
|
|
220
|
+
expect(stripped).toMatch(/insert\s+into\s+agent_board\.board_membership_events/i);
|
|
221
|
+
expect(stripped).toMatch(/'backfill_neutral'/);
|
|
222
|
+
expect(stripped).toMatch(/membership_state\s+in\s*\(\s*'requested'\s*,\s*'invited'\s*\)/i);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('deduplicates per subject, so duplicate pending rows cannot emit one event each', () => {
|
|
226
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
227
|
+
expect(idx).toBeGreaterThan(-1);
|
|
228
|
+
const head = stripped.slice(Math.max(0, idx - 400), idx);
|
|
229
|
+
expect(head).toMatch(/distinct\s+on\s*\(\s*bm\.board_id\s*,\s*bm\.agent_id\s*\)/i);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('guards the backfill with not-exists so re-application is idempotent', () => {
|
|
233
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
234
|
+
expect(stripped.slice(idx)).toMatch(/not\s+exists\s*\(/i);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('correlates the not-exists guard on BOTH subject keys', () => {
|
|
238
|
+
// A guard that compares the wrong pair (e.g. e.agent_id = bm.board_id) still contains a
|
|
239
|
+
// `not exists (` token and still reads plausibly, but re-application duplicates every row.
|
|
240
|
+
// The pgTAP idempotency test exercises a hand-copied statement, so only this sees the
|
|
241
|
+
// shipped one.
|
|
242
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
243
|
+
const tail = stripped.slice(idx, idx + 1400);
|
|
244
|
+
expect(tail).toMatch(/e\.board_id\s*=\s*bm\.board_id/i);
|
|
245
|
+
expect(tail).toMatch(/e\.agent_id\s*=\s*bm\.agent_id/i);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it('annotates as board-authored, never as consent', () => {
|
|
249
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
250
|
+
const tail = stripped.slice(idx, idx + 800);
|
|
251
|
+
expect(tail).toMatch(/'board-authored'/);
|
|
252
|
+
expect(tail).not.toMatch(/'target-authored'|'operator-designated'/);
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
// These two are not style points -- losing either ABORTS THE MIGRATION on deploy, because a
|
|
256
|
+
// board-authored event requires actor <> subject and the anti-forge CHECK enforces it.
|
|
257
|
+
it('takes the actor from the BOARD creator, not the membership row', () => {
|
|
258
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
259
|
+
const tail = stripped.slice(idx, idx + 800);
|
|
260
|
+
// b.created_by_agent_id (the board's creator). bm.created_by_agent_id is whoever created
|
|
261
|
+
// the MEMBERSHIP row, which can be the subject -- producing board-authored with
|
|
262
|
+
// actor = subject, which the CHECK rejects.
|
|
263
|
+
expect(tail).toMatch(/\bb\.created_by_agent_id\b/);
|
|
264
|
+
expect(tail).not.toMatch(/'board-authored',\s*\n?\s*bm\.created_by_agent_id/);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('joins boards on the membership row board_id', () => {
|
|
268
|
+
// Breaking this join silently drops the production backfill while the pgTAP copy and every
|
|
269
|
+
// looser regex stay green -- the specific mutation the review named.
|
|
270
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
271
|
+
const tail = stripped.slice(idx, idx + 1200);
|
|
272
|
+
expect(tail).toMatch(/join\s+agent_board\.boards\s+b\s+on\s+b\.id\s*=\s*bm\.board_id/i);
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
it('excludes rows where the board creator IS the subject', () => {
|
|
276
|
+
const idx = stripped.indexOf("'backfill_neutral'");
|
|
277
|
+
const tail = stripped.slice(idx, idx + 1200);
|
|
278
|
+
expect(tail).toMatch(/b\.created_by_agent_id\s*<>\s*bm\.agent_id/);
|
|
279
|
+
});
|
|
280
|
+
});
|