@consiliency/agent-board-schema 1.12.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 +124 -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 +282 -3
- package/src/tooling.test.mjs +113 -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_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_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,
|
|
@@ -786,6 +786,285 @@
|
|
|
786
786
|
"sourceRef": "message-board",
|
|
787
787
|
"bytes": 11567,
|
|
788
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"
|
|
789
1068
|
}
|
|
790
1069
|
],
|
|
791
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 + one FEDSESSION-AUTOJOIN + one GATENULL + one MEMBSTATE 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,
|
|
@@ -105,6 +105,41 @@ describe('manifest integrity', () => {
|
|
|
105
105
|
// MEMBSTATE (#75): update_board_membership gains an authorization model (it previously
|
|
106
106
|
// had none) — self-service transitions only, owner/admin for another agent's row.
|
|
107
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',
|
|
108
143
|
]) {
|
|
109
144
|
expect(names.has(f)).toBe(true);
|
|
110
145
|
}
|
|
@@ -167,3 +202,79 @@ describe('plan / check postures + exit codes (SemVer contract)', () => {
|
|
|
167
202
|
expect(EXIT).toEqual({ exact: 0, behind: 10, ahead: 11, divergent: 12, error: 13 });
|
|
168
203
|
});
|
|
169
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
|
+
});
|