@consiliency/agent-board-schema 1.25.0 → 1.28.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 +8 -0
- package/migrations/20260908000100_agent_board_signer_lifecycle_revalidation.sql +451 -0
- package/migrations/20260909000100_agent_board_ledger_revoked_authority.sql +1036 -0
- package/package.json +1 -1
- package/schema-manifest.json +21 -3
- package/src/tooling.test.mjs +2 -2
- package/tests/agent_board_atomic_fleet_onboarding.test.sql +23 -2
- package/tests/agent_board_ledger_authority.test.sql +1010 -0
- package/tests/agent_board_signed_authority_provenance.test.sql +24 -1
- package/tests/agent_board_signer_lifecycle.test.sql +715 -0
- package/tests/catalog/p_metadata_parameters.json +12 -0
- package/tests/isolation/expected/ledger_authority_revoke.out +483 -0
- package/tests/isolation/expected/signed_grant_onboarding_deadlock.out +220 -0
- package/tests/isolation/expected/signer_lifecycle_revoke.out +307 -0
- package/tests/isolation/specs/ledger_authority_revoke.spec +290 -0
- package/tests/isolation/specs/signed_grant_onboarding_deadlock.spec +159 -0
- package/tests/isolation/specs/signer_lifecycle_revoke.spec +186 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@consiliency/agent-board-schema",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.0",
|
|
4
4
|
"description": "Canonical, immutable, exact-pinnable agent_board schema bundle: ordered SQL migrations, digest + compatibility manifest, and deterministic materialize/plan/check tooling for adopters.",
|
|
5
5
|
"repository": "https://github.com/Consiliency/message-board.git",
|
|
6
6
|
"type": "module",
|
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.28.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": 127,
|
|
50
|
+
"aggregateSha256": "c550b9a50fadba563b30975d911079bdd96f59ac64a752553df9fcfb5df0e6d4",
|
|
51
51
|
"migrations": [
|
|
52
52
|
{
|
|
53
53
|
"order": 0,
|
|
@@ -1173,6 +1173,24 @@
|
|
|
1173
1173
|
"sourceRef": "message-board",
|
|
1174
1174
|
"bytes": 12633,
|
|
1175
1175
|
"sha256": "21111e289e0bb70ac3236f5422476c0c51d0bca5a815c11dd4e48b6932cf7c6b"
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
"order": 125,
|
|
1179
|
+
"id": "20260908000100_agent_board_signer_lifecycle_revalidation",
|
|
1180
|
+
"filename": "20260908000100_agent_board_signer_lifecycle_revalidation.sql",
|
|
1181
|
+
"origin": "message-board-forward",
|
|
1182
|
+
"sourceRef": "message-board",
|
|
1183
|
+
"bytes": 29336,
|
|
1184
|
+
"sha256": "bfb1ae60f69dae0a0aaf1007dbf14e171f324cdced1caf9f4d490f41a60c14e5"
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
"order": 126,
|
|
1188
|
+
"id": "20260909000100_agent_board_ledger_revoked_authority",
|
|
1189
|
+
"filename": "20260909000100_agent_board_ledger_revoked_authority.sql",
|
|
1190
|
+
"origin": "message-board-forward",
|
|
1191
|
+
"sourceRef": "message-board",
|
|
1192
|
+
"bytes": 67493,
|
|
1193
|
+
"sha256": "7522e32c61f8845e511255d94d273d98eb7b72b2f906976c3a2494629927462d"
|
|
1176
1194
|
}
|
|
1177
1195
|
],
|
|
1178
1196
|
"excludedBridge": {
|
package/src/tooling.test.mjs
CHANGED
|
@@ -38,9 +38,9 @@ describe('manifest integrity', () => {
|
|
|
38
38
|
expect(manifest.schemaVersion).toBe(8);
|
|
39
39
|
expect(manifest.minClientVersion).toMatch(/^\d+\.\d+\.\d+$/);
|
|
40
40
|
});
|
|
41
|
-
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 + five ATOMICFLEETONBOARDING (onboarding + ceiling-lock + revocation-evidence + fedsession-gate + fedsession-lock-order) + one OUTBOXWAKE + one ENROLLLOCKORDER + one FEDPROVIDERABSENCE + one WAKERECOVERY + one CONSENTRECONCILE + one ENROLLRESUMPTION + one SIGNEDAUTHORITY forward migrations (migrationCount = prior 113 + 5 + 1 + 1 + 1 + 1 + 1 + 1 + 1 =
|
|
41
|
+
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 + five ATOMICFLEETONBOARDING (onboarding + ceiling-lock + revocation-evidence + fedsession-gate + fedsession-lock-order) + one OUTBOXWAKE + one ENROLLLOCKORDER + one FEDPROVIDERABSENCE + one WAKERECOVERY + one CONSENTRECONCILE + one ENROLLRESUMPTION + one SIGNEDAUTHORITY + one SIGNERLIFECYCLE + one LEDGERAUTHORITY forward migrations (migrationCount = prior 113 + 5 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 127)', () => {
|
|
42
42
|
expect(manifest.migrationCount).toBe(manifest.migrations.length);
|
|
43
|
-
expect(manifest.migrationCount).toBe(
|
|
43
|
+
expect(manifest.migrationCount).toBe(127);
|
|
44
44
|
// MBSESSION switched enforcement on (scoped-send re-grant): the client-visible
|
|
45
45
|
// schema version bumped to 8. MBDELEG tightens delegation and MBFED adds only
|
|
46
46
|
// enrollment-only additive surface (identity_providers registry, enrollment audit,
|
|
@@ -521,7 +521,12 @@ select is( -- pgtap-allow-raise-checked: catalog read only; the RPC names below
|
|
|
521
521
|
array[
|
|
522
522
|
'agent_board._redeem_unbounded_invite_for_agent(text,uuid) => UNSERIALIZED',
|
|
523
523
|
'agent_board.create_invite_link(uuid,text,text,integer,timestamp with time zone,uuid,jsonb) => UNSERIALIZED',
|
|
524
|
-
|
|
524
|
+
-- Retired from UNSERIALIZED by #276 (20260909000100). Adding the fleet-ledger gate made
|
|
525
|
+
-- grant_board_role row-lock both agents and board_memberships, which section 9 of
|
|
526
|
+
-- agent_board_signer_lifecycle.test.sql requires to be advisory-serialised; taking that
|
|
527
|
+
-- lock also closes this reader's exposure to the ceiling row's ABSENCE, one of the three
|
|
528
|
+
-- 20260901000110 left explicitly undetermined.
|
|
529
|
+
'agent_board.grant_board_role(uuid,uuid,text,uuid) => serialized',
|
|
525
530
|
'agent_board.onboard_federated_fleet_agent(text,text,text,jsonb,text,text,text,text,boolean,text,text,text[],text[],text,uuid,uuid,text,text,text,text,text,text,text) => serialized'
|
|
526
531
|
]::text[],
|
|
527
532
|
'every ceiling-authorization reader in pg_proc is declared with its serialization state'
|
|
@@ -569,6 +574,12 @@ select is( -- pgtap-allow-raise-checked: catalog read only; the RPC names below
|
|
|
569
574
|
or strpos(agent_board_test.stripped_body(p.oid, true), 'board_authority_ceilings:') > 0)
|
|
570
575
|
) definers),
|
|
571
576
|
array[
|
|
577
|
+
-- Joined this class in #276: it reads the fleet revocation ledger. This is the UNLOCKED
|
|
578
|
+
-- predicate; the share-locking _assert_actor_not_fleet_revoked wrapper left this surface
|
|
579
|
+
-- when the two were split, because it now reaches the ledger through this function rather
|
|
580
|
+
-- than naming the table itself. Internal — it reads rows for an arbitrary agent id with no
|
|
581
|
+
-- authorization of its own, so service_role only, like every other helper here.
|
|
582
|
+
'agent_board._actor_fleet_revoked(uuid) [definer] => service_role',
|
|
572
583
|
'agent_board._lock_board_authority_ceiling(uuid) [invoker] => service_role',
|
|
573
584
|
'agent_board._redeem_fleet_invite_for_agent(text,uuid) [definer] => service_role',
|
|
574
585
|
'agent_board._redeem_invite_for_agent(text,uuid) [definer] => service_role',
|
|
@@ -577,11 +588,21 @@ select is( -- pgtap-allow-raise-checked: catalog read only; the RPC names below
|
|
|
577
588
|
'agent_board.enroll_federated_human(text,text,text,jsonb,text) [definer] => service_role',
|
|
578
589
|
'agent_board.enroll_federated_identity(text,text,text,jsonb,text,text,text,text,boolean,text,text,text[],text[],text) [definer] => service_role',
|
|
579
590
|
'agent_board.evaluate_fleet_sender_policy(uuid,uuid,uuid,uuid,text,uuid,boolean) [definer] => authenticated,service_role',
|
|
591
|
+
-- Joined this class in #276: the live grant chokepoint now takes _lock_board_authority_ceiling
|
|
592
|
+
-- (forced by the section-9 agents/board_memberships class in agent_board_signer_lifecycle.test.sql
|
|
593
|
+
-- once the ledger gate made it lock both). Still authenticated,service_role — #276 removes
|
|
594
|
+
-- authority from a revoked principal, it does not change who may call the RPC.
|
|
595
|
+
'agent_board.grant_board_role(uuid,uuid,text,uuid) [definer] => authenticated,service_role',
|
|
580
596
|
'agent_board.onboard_federated_fleet_agent(text,text,text,jsonb,text,text,text,text,boolean,text,text,text[],text[],text,uuid,uuid,text,text,text,text,text,text,text) [definer] => service_role',
|
|
581
597
|
'agent_board.reactivate_fleet_machine(uuid,uuid,text) [definer] => service_role',
|
|
582
598
|
'agent_board.revoke_fleet_subject(text,uuid,uuid,text,jsonb) [definer] => authenticated,service_role',
|
|
583
599
|
'agent_board.revoke_human_subtree(uuid,uuid,text) [definer] => service_role',
|
|
584
|
-
'agent_board.set_board_authority_ceiling(uuid,text,uuid) [definer] => authenticated,service_role'
|
|
600
|
+
'agent_board.set_board_authority_ceiling(uuid,text,uuid) [definer] => authenticated,service_role',
|
|
601
|
+
-- Joined this class in #269 F4: the signed grant wrapper now takes the board advisory lock
|
|
602
|
+
-- FIRST, because its order was board_memberships(grantee) -> agents(signer) against
|
|
603
|
+
-- onboard_federated_fleet_agent's agents -> board_memberships -- a reproduced ABBA between
|
|
604
|
+
-- two honest callers. It is service_role-only like every other signed_* wrapper (#118).
|
|
605
|
+
'agent_board.signed_grant_board_role(jsonb,jsonb) [definer] => service_role'
|
|
585
606
|
]::text[],
|
|
586
607
|
'every function on this migration set''s surface is declared with its definer flag and exact EXECUTE grantees'
|
|
587
608
|
);
|