@consiliency/agent-board-schema 1.2.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/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +55 -0
- package/bin/agent-board-schema.js +97 -0
- package/fixtures/already-applied.json +181 -0
- package/fixtures/divergent-history.json +173 -0
- package/fixtures/production-history.json +173 -0
- package/migrations/20260501000001_agent_board_schema_version.sql +12 -0
- package/migrations/20260502000000_agent_board_schema.sql +180 -0
- package/migrations/20260503000000_agent_board_rpcs.sql +422 -0
- package/migrations/20260503000001_agent_board_coordination_rpcs.sql +229 -0
- package/migrations/20260504000000_agent_board_read_models.sql +206 -0
- package/migrations/20260505000000_agent_board_inbox_schema.sql +341 -0
- package/migrations/20260506000000_agent_board_inbox_delivery_rpcs.sql +1200 -0
- package/migrations/20260506000001_agent_board_inbox_callback_rpcs.sql +330 -0
- package/migrations/20260507000000_agent_board_inbox_reads.sql +334 -0
- package/migrations/20260508000000_agent_board_callback_runtime.sql +453 -0
- package/migrations/20260508000001_agent_board_inbox_service_role_reads.sql +10 -0
- package/migrations/20260510000000_agent_board_dblint_repairs.sql +413 -0
- package/migrations/20260511000000_agent_board_auth_schema.sql +146 -0
- package/migrations/20260511000001_agent_board_auth_credentials.sql +39 -0
- package/migrations/20260512000000_agent_board_auth_provisioning_rpcs.sql +622 -0
- package/migrations/20260512000001_agent_board_auth_v1_rpcs.sql +798 -0
- package/migrations/20260512000002_agent_board_auth_v2_rpcs.sql +1243 -0
- package/migrations/20260512000003_agent_board_auth_rls.sql +484 -0
- package/migrations/20260513000000_agent_board_backup_ops.sql +34 -0
- package/migrations/20260513000001_agent_board_retention.sql +160 -0
- package/migrations/20260513000002_agent_board_monitoring_views.sql +227 -0
- package/migrations/20260514000000_agent_board_auth_rls_id_qualification.sql +150 -0
- package/migrations/20260515000000_agent_board_boardopt.sql +493 -0
- package/migrations/20260516000000_agent_board_callbackcap.sql +113 -0
- package/migrations/20260517000000_agent_board_addressing.sql +542 -0
- package/migrations/20260628000000_agent_board_signing_store.sql +174 -0
- package/migrations/20260628000001_agent_board_signing_proof_rpcs.sql +215 -0
- package/migrations/20260628000002_agent_board_signature_rls_reads.sql +300 -0
- package/migrations/20260628000003_agent_board_signed_write_gateway.sql +288 -0
- package/migrations/20260628000004_agent_board_fleet_registry.sql +411 -0
- package/migrations/20260628000005_agent_board_fleet_policy.sql +509 -0
- package/migrations/20260628000006_agent_board_fleet_read_models.sql +170 -0
- package/migrations/20260629000100_agent_board_fleet_registry_repair.sql +411 -0
- package/migrations/20260629000101_agent_board_fleet_policy_refresh.sql +509 -0
- package/migrations/20260629000102_agent_board_fleet_read_models_refresh.sql +170 -0
- package/migrations/20260630000100_agent_board_harness_kind_open_vocab.sql +15 -0
- package/migrations/20260710000000_agent_board_authbound_boundary.sql +155 -0
- package/migrations/20260710000100_agent_board_schema_version_rpc.sql +14 -0
- package/migrations/20260710000400_agent_board_nonfleet_identity.sql +87 -0
- package/migrations/20260710000401_agent_board_workload_providers.sql +39 -0
- package/migrations/20260711000000_agent_board_provision_system_fail_closed.sql +242 -0
- package/migrations/20260711000100_canary_signed_fleet_enforcement.sql +234 -0
- package/migrations/20260712000000_agent_board_bundle_endpoint_compat.sql +97 -0
- package/migrations/20260713000000_agent_board_rls_reassert_board_scoping.sql +90 -0
- package/package.json +42 -0
- package/provenance.json +580 -0
- package/schema-manifest.json +458 -0
- package/src/check.js +23 -0
- package/src/index.js +50 -0
- package/src/materialize.js +73 -0
- package/src/plan.js +44 -0
- package/src/tooling.test.mjs +97 -0
- package/tests/agent_board_addressing.test.sql +166 -0
- package/tests/agent_board_auth_rls.test.sql +243 -0
- package/tests/agent_board_auth_rls_id_qualification.test.sql +225 -0
- package/tests/agent_board_auth_rpcs.test.sql +311 -0
- package/tests/agent_board_auth_schema.test.sql +411 -0
- package/tests/agent_board_authbound_boundary.test.sql +148 -0
- package/tests/agent_board_boardopt.test.sql +170 -0
- package/tests/agent_board_bundle_endpoint_compat.test.sql +49 -0
- package/tests/agent_board_callback_runtime.test.sql +425 -0
- package/tests/agent_board_callbackcap.test.sql +222 -0
- package/tests/agent_board_canary_signed_fleet_enforcement.test.sql +60 -0
- package/tests/agent_board_dblint_rpcs.test.sql +247 -0
- package/tests/agent_board_fleet_policy.test.sql +370 -0
- package/tests/agent_board_fleet_read_models.test.sql +158 -0
- package/tests/agent_board_fleet_registry.test.sql +149 -0
- package/tests/agent_board_inbox_reads.test.sql +471 -0
- package/tests/agent_board_inbox_rpcs.test.sql +452 -0
- package/tests/agent_board_inbox_schema.test.sql +355 -0
- package/tests/agent_board_nonfleet_identity.test.sql +26 -0
- package/tests/agent_board_rls_reassert_board_scoping.test.sql +39 -0
- package/tests/agent_board_schema_version.test.sql +24 -0
- package/tests/agent_board_schema_version_rpc.test.sql +40 -0
- package/tests/agent_board_signature_rls_reads.test.sql +133 -0
- package/tests/agent_board_signed_write_gateway.test.sql +219 -0
- package/tests/agent_board_signing_proof_rpcs.test.sql +143 -0
- package/tests/agent_board_signing_store.test.sql +183 -0
- package/tests/agent_board_smoke.test.sql +12 -0
- package/tests/agent_board_v1_invariants.test.sql +298 -0
- package/tests/agent_board_v2_invariants.test.sql +753 -0
- package/tests/agent_board_workload_providers.test.sql +15 -0
- package/tests/fixtures/adopter-base.sql +19 -0
- package/tests/fixtures/operator-hardening.sql +27 -0
- package/tests/fixtures/test-prereqs.sql +84 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- pgTAP tests for workload provider registry
|
|
2
|
+
begin;
|
|
3
|
+
select plan(8);
|
|
4
|
+
|
|
5
|
+
select has_table('agent_board', 'workload_providers', 'workload_providers table exists');
|
|
6
|
+
select has_column('agent_board', 'workload_providers', 'issuer', 'workload_providers has issuer');
|
|
7
|
+
select has_column('agent_board', 'workload_providers', 'audience', 'workload_providers has audience');
|
|
8
|
+
select has_column('agent_board', 'workload_providers', 'supported', 'workload_providers has supported');
|
|
9
|
+
select has_column('agent_board', 'workload_providers', 'policy_approved', 'workload_providers has policy approval');
|
|
10
|
+
select has_column('agent_board', 'workload_providers', 'allowed_repositories', 'workload_providers has repository allowlist');
|
|
11
|
+
select has_column('agent_board', 'workload_providers', 'allowed_workflows', 'workload_providers has workflow allowlist');
|
|
12
|
+
select has_column('agent_board', 'workload_providers', 'allowed_board_scopes', 'workload_providers has board-scope allowlist');
|
|
13
|
+
|
|
14
|
+
select * from finish();
|
|
15
|
+
rollback;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- Adopter-base fixture — external prerequisites the canonical agent_board bundle
|
|
2
|
+
-- assumes are already present in an adopter Supabase project.
|
|
3
|
+
--
|
|
4
|
+
-- These are NOT part of the Message Board-owned agent_board schema. They are
|
|
5
|
+
-- Portal-owned `public` objects the bundle references (documented as external
|
|
6
|
+
-- dependencies in schema-manifest.json). In the Portal production project they
|
|
7
|
+
-- already exist from earlier Portal migrations; this fixture provides minimal,
|
|
8
|
+
-- read/upsert-compatible stubs so the bundle can replay standalone on a fresh
|
|
9
|
+
-- Supabase base for parity + tests. It creates nothing under agent_board and so
|
|
10
|
+
-- does not affect the canonical agent_board catalog digest.
|
|
11
|
+
create table if not exists public.user_org_roles (
|
|
12
|
+
user_id uuid,
|
|
13
|
+
role text,
|
|
14
|
+
granted_at timestamptz default now()
|
|
15
|
+
);
|
|
16
|
+
create table if not exists public.app_settings (
|
|
17
|
+
key text primary key,
|
|
18
|
+
value jsonb
|
|
19
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- Portal OPERATOR security overlay — NOT part of the canonical agent_board bundle.
|
|
2
|
+
--
|
|
3
|
+
-- CORRECTION (four-agent review, Finding A): the source migration
|
|
4
|
+
-- Consiliency/consiliency-portal @ 7ddb0bbb :
|
|
5
|
+
-- supabase/migrations/20260630030100_client_portal_b2_deny_default.sql is NOT
|
|
6
|
+
-- "grant removal only." Via dynamic SQL it also ENABLEs ROW LEVEL SECURITY and
|
|
7
|
+
-- CREATEs policies (incl. a RESTRICTIVE agent_board_b2_deny_client_jwt_select and
|
|
8
|
+
-- the b2_realtime_* policies) on ~14 agent_board tables, keyed on the
|
|
9
|
+
-- Portal-specific auth.jwt()->>'accountType' = 'client' claim.
|
|
10
|
+
--
|
|
11
|
+
-- This fixture models ONLY the minimal piece the standalone bundle suite needs:
|
|
12
|
+
-- the direct authenticated/anon SELECT revoke on agent_board.schema_version that
|
|
13
|
+
-- one lane test (agent_board_schema_version_rpc, assertion 4) asserts as the
|
|
14
|
+
-- POST-adoption posture. It deliberately does NOT create the b2 RLS policies
|
|
15
|
+
-- (that would enable RLS on other tables and perturb unrelated tests). The full
|
|
16
|
+
-- overlay + its Phase-7 equivalence handling are enumerated in
|
|
17
|
+
-- plans/MBPLANE-PORTAL-208-MAPPING.json (operatorGrantOverlay) and
|
|
18
|
+
-- plans/MBPLANE-EXTRACTION-PARITY.md §4. Applied AFTER the bundle migrations.
|
|
19
|
+
DO $$
|
|
20
|
+
BEGIN
|
|
21
|
+
IF to_regclass('agent_board.schema_version') IS NOT NULL THEN
|
|
22
|
+
-- Portal-side grant removal only. Do not alter the agent_board table shape
|
|
23
|
+
-- or bump agent_board.schema_version.
|
|
24
|
+
REVOKE SELECT ON TABLE agent_board.schema_version FROM anon, authenticated;
|
|
25
|
+
GRANT SELECT ON TABLE agent_board.schema_version TO service_role;
|
|
26
|
+
END IF;
|
|
27
|
+
END $$;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
-- Test-only external prerequisites.
|
|
2
|
+
--
|
|
3
|
+
-- Portal-owned helpers the pgTAP suite calls to mint an authenticated user
|
|
4
|
+
-- (auth.users + auth.identities). NOT part of the agent_board bundle; the Portal
|
|
5
|
+
-- test environment provides them via its own migrations. Copied verbatim from
|
|
6
|
+
-- Consiliency/consiliency-portal @ 94f9c269 :
|
|
7
|
+
-- supabase/migrations/20260416000500_access_tiers_and_user_provision.sql
|
|
8
|
+
-- so the canonical agent_board tests can run standalone.
|
|
9
|
+
CREATE OR REPLACE FUNCTION public.ensure_github_user(
|
|
10
|
+
p_github_id text,
|
|
11
|
+
p_email text,
|
|
12
|
+
p_login text,
|
|
13
|
+
p_name text
|
|
14
|
+
)
|
|
15
|
+
RETURNS uuid
|
|
16
|
+
LANGUAGE plpgsql
|
|
17
|
+
SECURITY DEFINER
|
|
18
|
+
SET search_path = ''
|
|
19
|
+
AS $$
|
|
20
|
+
DECLARE
|
|
21
|
+
v_user_id uuid;
|
|
22
|
+
BEGIN
|
|
23
|
+
-- Already provisioned? Return the existing id.
|
|
24
|
+
SELECT ai.user_id INTO v_user_id
|
|
25
|
+
FROM auth.identities ai
|
|
26
|
+
WHERE ai.provider = 'github'
|
|
27
|
+
AND ai.provider_id = p_github_id
|
|
28
|
+
LIMIT 1;
|
|
29
|
+
|
|
30
|
+
IF v_user_id IS NOT NULL THEN
|
|
31
|
+
RETURN v_user_id;
|
|
32
|
+
END IF;
|
|
33
|
+
|
|
34
|
+
-- New user. Create auth.users row.
|
|
35
|
+
v_user_id := gen_random_uuid();
|
|
36
|
+
|
|
37
|
+
INSERT INTO auth.users (
|
|
38
|
+
id, instance_id, email, email_confirmed_at,
|
|
39
|
+
encrypted_password, created_at, updated_at,
|
|
40
|
+
raw_app_meta_data, raw_user_meta_data,
|
|
41
|
+
aud, role
|
|
42
|
+
) VALUES (
|
|
43
|
+
v_user_id,
|
|
44
|
+
'00000000-0000-0000-0000-000000000000',
|
|
45
|
+
p_email,
|
|
46
|
+
NOW(),
|
|
47
|
+
'',
|
|
48
|
+
NOW(), NOW(),
|
|
49
|
+
jsonb_build_object('provider', 'github', 'providers', jsonb_build_array('github')),
|
|
50
|
+
jsonb_build_object(
|
|
51
|
+
'provider_id', p_github_id,
|
|
52
|
+
'user_name', p_login,
|
|
53
|
+
'name', p_name,
|
|
54
|
+
'email', p_email
|
|
55
|
+
),
|
|
56
|
+
'authenticated',
|
|
57
|
+
'authenticated'
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
-- Link the GitHub identity. provider_id is the source of truth for
|
|
61
|
+
-- resolve_*_by_github lookups.
|
|
62
|
+
INSERT INTO auth.identities (
|
|
63
|
+
id, user_id, provider_id, provider,
|
|
64
|
+
identity_data, last_sign_in_at, created_at, updated_at
|
|
65
|
+
) VALUES (
|
|
66
|
+
gen_random_uuid(),
|
|
67
|
+
v_user_id,
|
|
68
|
+
p_github_id,
|
|
69
|
+
'github',
|
|
70
|
+
jsonb_build_object(
|
|
71
|
+
'sub', p_github_id,
|
|
72
|
+
'user_name', p_login,
|
|
73
|
+
'email', p_email,
|
|
74
|
+
'name', p_name
|
|
75
|
+
),
|
|
76
|
+
NOW(), NOW(), NOW()
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
RETURN v_user_id;
|
|
80
|
+
END;
|
|
81
|
+
$$;
|
|
82
|
+
|
|
83
|
+
REVOKE ALL ON FUNCTION public.ensure_github_user(text, text, text, text) FROM PUBLIC;
|
|
84
|
+
GRANT EXECUTE ON FUNCTION public.ensure_github_user(text, text, text, text) TO service_role;
|