@emilia-protocol/gate 0.15.2 → 0.16.1

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/CHANGELOG.md CHANGED
@@ -4,6 +4,46 @@
4
4
  All notable changes to `@emilia-protocol/gate` are documented here.
5
5
  This package follows [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## 0.16.1 (2026-07-26)
8
+
9
+ ### Fixed
10
+
11
+ - PostgreSQL 17 role-graph checks now distinguish provider-managed
12
+ administrative grants from executable `INHERIT` or `SET` authority, while
13
+ continuing to reject every usable owner/executor or privileged-role path.
14
+ - Forward migrations remove their own temporary owner grant without deleting
15
+ a managed provider's non-usable administrative grant.
16
+ - The protected npm publisher uses an explicit local tarball file spec.
17
+
18
+ ## 0.16.0 (2026-07-25)
19
+
20
+ ### Added
21
+
22
+ - `./consequence-actuator`, a short-lived signed execution-envelope boundary
23
+ for separately deployed credential-owning actuators, with immutable tenant,
24
+ action, CAID, provider account, target, operation, attempt, idempotency,
25
+ nonce, and expiry bindings.
26
+ - A PostgreSQL RPC-only permanent envelope store with tenant-principal
27
+ isolation, forced RLS, no direct runtime or `service_role` table authority,
28
+ and no release path after provider invocation.
29
+ - `./discovery-permit-resolver`, which retrieves pinned action-control
30
+ discovery without redirect, network-boundary, freshness, or source drift.
31
+ - A split managed reference deployment where the decision service owns policy
32
+ and envelope signing while the actuator alone owns provider credentials and
33
+ signs exact execution observations.
34
+
35
+ ### Security
36
+
37
+ - A provider timeout consumes the execution envelope as `INDETERMINATE`; blind
38
+ replay is refused and only authenticated, attempt-bound evidence may
39
+ reconcile the Proposal-to-Effect lifecycle.
40
+ - Production actuator construction requires an atomic, durable,
41
+ ownership-fenced, permanently consuming store. Process-local storage is
42
+ available only through an explicit test-only opt-in.
43
+ - The decision process has no provider credential or provider API
44
+ implementation. Signed actuator observations are verified under a pinned key
45
+ and exact execution tuple before use as lifecycle evidence.
46
+
7
47
  ## 0.15.2 (2026-07-23)
8
48
 
9
49
  ### Fixed
package/README.md CHANGED
@@ -733,3 +733,20 @@ The mechanism is specified in `draft-schrock-ep-enforcement-point` (the Receipt-
733
733
  `draft-schrock-ep-authorization-receipts`. Earn the **RR-1** conformance level via
734
734
  `receiptRequiredConformance()` in `@emilia-protocol/require-receipt`. Reference implementation;
735
735
  experimental. Apache-2.0. Fails closed.
736
+
737
+ ## Authority allocation
738
+
739
+ `@emilia-protocol/gate/authority-allocation` provides the same-team runtime
740
+ counterpart for Conservation of Authority. A relying party installs one
741
+ authoritative allocation snapshot pinned to an exact authority head and epoch.
742
+ The validator refuses child action or audience widening, budget or expiry
743
+ widening, duplicate sibling branches, and aggregate cents or calls overspend.
744
+ Reservations are atomic, replay-fenced, and can be finalized only with the
745
+ winning owner token, monotonic fencing token, and exact authority head and
746
+ epoch.
747
+
748
+ `createMemoryAuthorityAllocationStore()` is deterministic, non-durable
749
+ conformance infrastructure. `createPostgresAuthorityAllocationStore()` and
750
+ `AUTHORITY_ALLOCATION_DDL` define the durable transactional boundary; they are
751
+ reference code and a database contract, not evidence that any deployment uses
752
+ or correctly operates that boundary.
@@ -0,0 +1,2 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export * from './dist/authority-allocation.js';
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Compatibility entry point for the TypeScript consequence actuator module.
3
+ export * from './dist/consequence-actuator.js';
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Compatibility entry point for the TypeScript discovery permit resolver.
3
+ export * from './dist/discovery-permit-resolver.js';
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Runtime counterpart for Conservation of Authority.
3
+ *
4
+ * This module keeps path containment and aggregate sibling conservation
5
+ * separate. A relying party pins one complete parent allocation snapshot to an
6
+ * exact authority head and epoch. Every sibling is checked against that parent,
7
+ * both resource dimensions are summed independently, and reservations cross a
8
+ * single atomic store boundary before they can be committed.
9
+ *
10
+ * The memory store is deterministic conformance infrastructure, not durable
11
+ * custody. The PostgreSQL adapter requires a real transaction callback and
12
+ * serializes every mutation for one relying-party/parent pair.
13
+ */
14
+ export declare const AUTHORITY_ALLOCATION_VERSION = "EP-AUTHORITY-ALLOCATION-v1";
15
+ export declare const AUTHORITY_ALLOCATION_CURRENT_TABLE = "ep_authority_allocation_current";
16
+ export declare const AUTHORITY_ALLOCATION_SNAPSHOT_TABLE = "ep_authority_allocation_snapshots";
17
+ export declare const AUTHORITY_ALLOCATION_BRANCH_TABLE = "ep_authority_allocation_branches";
18
+ export declare const AUTHORITY_ALLOCATION_RESERVATION_TABLE = "ep_authority_allocation_reservations";
19
+ export interface AuthorityAllocationBudget {
20
+ cents: number;
21
+ calls: number;
22
+ }
23
+ export interface AuthorityAllocationPin {
24
+ relying_party_id: string;
25
+ authority_head: string;
26
+ authority_epoch: number;
27
+ }
28
+ export interface AuthorityBranchAllocation {
29
+ allocation_id: string;
30
+ parent_id: string;
31
+ actions: readonly string[];
32
+ audiences: readonly string[];
33
+ budget: AuthorityAllocationBudget;
34
+ expires_at: string;
35
+ }
36
+ export interface AuthorityAllocationSnapshot {
37
+ version: typeof AUTHORITY_ALLOCATION_VERSION;
38
+ relying_party_id: string;
39
+ parent_id: string;
40
+ authority_head: string;
41
+ authority_epoch: number;
42
+ actions: readonly string[];
43
+ audiences: readonly string[];
44
+ budget: AuthorityAllocationBudget;
45
+ expires_at: string;
46
+ sibling_allocations: readonly AuthorityBranchAllocation[];
47
+ }
48
+ export interface AuthorityAllocationReservationRequest {
49
+ relying_party_id: string;
50
+ parent_id: string;
51
+ allocation_id: string;
52
+ reservation_id: string;
53
+ authority_head: string;
54
+ authority_epoch: number;
55
+ budget: AuthorityAllocationBudget;
56
+ /** Used by the deterministic memory adapter. PostgreSQL uses database time. */
57
+ now?: string | number | Date;
58
+ }
59
+ export interface AuthorityAllocationOwner {
60
+ owner_token: string;
61
+ fencing_token: number;
62
+ authority_head: string;
63
+ authority_epoch: number;
64
+ }
65
+ export interface AuthorityAllocationFinalizeRequest {
66
+ relying_party_id: string;
67
+ parent_id: string;
68
+ allocation_id: string;
69
+ reservation_id: string;
70
+ authority_head: string;
71
+ authority_epoch: number;
72
+ owner_token: string;
73
+ fencing_token: number;
74
+ }
75
+ export type AuthorityAllocationRefusalReason = 'allocation_not_found' | 'allocation_expired' | 'authority_pin_mismatch' | 'budget_exceeded' | 'reservation_replayed' | 'reservation_not_found' | 'reservation_owner_mismatch' | 'reservation_already_committed' | 'reservation_already_released' | 'snapshot_conflict' | 'stale_authority_epoch' | 'reservations_in_flight';
76
+ export type AuthorityAllocationInstallResult = {
77
+ ok: true;
78
+ installed: boolean;
79
+ snapshot_fingerprint: string;
80
+ } | {
81
+ ok: false;
82
+ reason: AuthorityAllocationRefusalReason;
83
+ };
84
+ export type AuthorityAllocationReservationResult = {
85
+ ok: true;
86
+ reservation_id: string;
87
+ allocation_id: string;
88
+ budget: AuthorityAllocationBudget;
89
+ remaining: AuthorityAllocationBudget;
90
+ owner: AuthorityAllocationOwner;
91
+ } | {
92
+ ok: false;
93
+ reason: AuthorityAllocationRefusalReason;
94
+ };
95
+ export type AuthorityAllocationFinalizeResult = {
96
+ ok: true;
97
+ state: 'committed' | 'released';
98
+ } | {
99
+ ok: false;
100
+ reason: AuthorityAllocationRefusalReason;
101
+ };
102
+ export interface AuthorityAllocationReservationView {
103
+ reservation_id: string;
104
+ allocation_id: string;
105
+ authority_head: string;
106
+ authority_epoch: number;
107
+ budget: AuthorityAllocationBudget;
108
+ state: 'reserved' | 'committed' | 'released';
109
+ fencing_token: number;
110
+ }
111
+ export interface AuthorityAllocationStateView {
112
+ snapshot: AuthorityAllocationSnapshot;
113
+ snapshot_fingerprint: string;
114
+ usage: {
115
+ parent: {
116
+ reserved: AuthorityAllocationBudget;
117
+ committed: AuthorityAllocationBudget;
118
+ };
119
+ branches: Record<string, {
120
+ reserved: AuthorityAllocationBudget;
121
+ committed: AuthorityAllocationBudget;
122
+ }>;
123
+ };
124
+ reservations: AuthorityAllocationReservationView[];
125
+ }
126
+ export interface AuthorityAllocationStore {
127
+ readonly durable: boolean;
128
+ installSnapshot(snapshot: AuthorityAllocationSnapshot, pin: AuthorityAllocationPin): Promise<AuthorityAllocationInstallResult>;
129
+ reserve(request: AuthorityAllocationReservationRequest): Promise<AuthorityAllocationReservationResult>;
130
+ commit(request: AuthorityAllocationFinalizeRequest): Promise<AuthorityAllocationFinalizeResult>;
131
+ release(request: AuthorityAllocationFinalizeRequest): Promise<AuthorityAllocationFinalizeResult>;
132
+ inspect(pin: AuthorityAllocationPin & {
133
+ parent_id: string;
134
+ }): Promise<AuthorityAllocationStateView | null>;
135
+ }
136
+ export declare class AuthorityAllocationValidationError extends TypeError {
137
+ readonly code: string;
138
+ constructor(code: string, message: string);
139
+ }
140
+ type QueryRow = Record<string, unknown>;
141
+ export interface AuthorityAllocationPostgresQueryResult {
142
+ rowCount: number | null;
143
+ rows: QueryRow[];
144
+ }
145
+ export type AuthorityAllocationPostgresQuery = (text: string, params?: readonly unknown[]) => Promise<AuthorityAllocationPostgresQueryResult>;
146
+ export interface AuthorityAllocationPostgresOptions {
147
+ /**
148
+ * Must run the callback in one PostgreSQL transaction. Database errors must
149
+ * reject the callback so the transaction is rolled back.
150
+ */
151
+ transaction<T>(callback: (query: AuthorityAllocationPostgresQuery) => Promise<T>): Promise<T>;
152
+ }
153
+ /**
154
+ * Validate and normalize a complete authoritative allocation snapshot.
155
+ * Throws AuthorityAllocationValidationError on every malformed or widening
156
+ * condition and returns a detached, deterministically ordered snapshot.
157
+ */
158
+ export declare function validateAuthorityAllocationSnapshot(input: AuthorityAllocationSnapshot, pin: AuthorityAllocationPin): AuthorityAllocationSnapshot;
159
+ /**
160
+ * Deterministic linearizable in-memory implementation for conformance tests.
161
+ * Owner capabilities and fences are deterministic and therefore unsuitable
162
+ * for production. The store is explicitly marked non-durable.
163
+ */
164
+ export declare function createMemoryAuthorityAllocationStore(): AuthorityAllocationStore;
165
+ /**
166
+ * PostgreSQL schema contract. Historical snapshots are append-only;
167
+ * ep_authority_allocation_current identifies the one exact head+epoch that can
168
+ * accept reservations. Reservation IDs are replay-fenced across all epochs for
169
+ * one relying-party/parent pair, and owner capabilities are stored only as
170
+ * domain-separated SHA-256 digests.
171
+ */
172
+ export declare const AUTHORITY_ALLOCATION_DDL = "CREATE TABLE IF NOT EXISTS ep_authority_allocation_snapshots (\n relying_party_id TEXT NOT NULL CHECK (octet_length(relying_party_id) BETWEEN 1 AND 512),\n parent_id TEXT NOT NULL CHECK (octet_length(parent_id) BETWEEN 1 AND 512),\n authority_head TEXT NOT NULL CHECK (authority_head ~ '^sha256:[0-9a-f]{64}$'),\n authority_epoch BIGINT NOT NULL CHECK (authority_epoch >= 0),\n snapshot_fingerprint TEXT NOT NULL CHECK (snapshot_fingerprint ~ '^sha256:[0-9a-f]{64}$'),\n snapshot_json JSONB NOT NULL CHECK (jsonb_typeof(snapshot_json) = 'object'),\n installed_at TIMESTAMPTZ NOT NULL DEFAULT transaction_timestamp(),\n PRIMARY KEY (relying_party_id, parent_id, authority_head, authority_epoch)\n);\nCREATE TABLE IF NOT EXISTS ep_authority_allocation_current (\n relying_party_id TEXT NOT NULL,\n parent_id TEXT NOT NULL,\n authority_head TEXT NOT NULL,\n authority_epoch BIGINT NOT NULL,\n snapshot_fingerprint TEXT NOT NULL,\n next_fencing_token BIGINT NOT NULL DEFAULT 1 CHECK (next_fencing_token > 0),\n PRIMARY KEY (relying_party_id, parent_id),\n FOREIGN KEY (relying_party_id, parent_id, authority_head, authority_epoch)\n REFERENCES ep_authority_allocation_snapshots\n (relying_party_id, parent_id, authority_head, authority_epoch)\n);\nCREATE TABLE IF NOT EXISTS ep_authority_allocation_branches (\n relying_party_id TEXT NOT NULL,\n parent_id TEXT NOT NULL,\n authority_head TEXT NOT NULL,\n authority_epoch BIGINT NOT NULL,\n allocation_id TEXT NOT NULL CHECK (octet_length(allocation_id) BETWEEN 1 AND 512),\n budget_cents BIGINT NOT NULL CHECK (budget_cents >= 0),\n budget_calls BIGINT NOT NULL CHECK (budget_calls >= 0),\n expires_at TIMESTAMPTZ NOT NULL,\n PRIMARY KEY (relying_party_id, parent_id, authority_head, authority_epoch, allocation_id),\n FOREIGN KEY (relying_party_id, parent_id, authority_head, authority_epoch)\n REFERENCES ep_authority_allocation_snapshots\n (relying_party_id, parent_id, authority_head, authority_epoch)\n);\nCREATE TABLE IF NOT EXISTS ep_authority_allocation_reservations (\n relying_party_id TEXT NOT NULL,\n parent_id TEXT NOT NULL,\n authority_head TEXT NOT NULL,\n authority_epoch BIGINT NOT NULL,\n allocation_id TEXT NOT NULL,\n reservation_id TEXT NOT NULL CHECK (octet_length(reservation_id) BETWEEN 1 AND 512),\n budget_cents BIGINT NOT NULL CHECK (budget_cents >= 0),\n budget_calls BIGINT NOT NULL CHECK (budget_calls >= 0),\n state TEXT NOT NULL CHECK (state IN ('reserved', 'committed', 'released')),\n owner_digest TEXT NOT NULL CHECK (owner_digest ~ '^sha256:[0-9a-f]{64}$'),\n fencing_token BIGINT NOT NULL CHECK (fencing_token > 0),\n reserved_at TIMESTAMPTZ NOT NULL DEFAULT transaction_timestamp(),\n finalized_at TIMESTAMPTZ NULL,\n PRIMARY KEY (relying_party_id, parent_id, reservation_id),\n UNIQUE (relying_party_id, parent_id, fencing_token),\n FOREIGN KEY (relying_party_id, parent_id, authority_head, authority_epoch, allocation_id)\n REFERENCES ep_authority_allocation_branches\n (relying_party_id, parent_id, authority_head, authority_epoch, allocation_id),\n CHECK (\n (state = 'reserved' AND finalized_at IS NULL)\n OR (state IN ('committed', 'released') AND finalized_at IS NOT NULL)\n )\n);\nREVOKE ALL ON ep_authority_allocation_snapshots FROM PUBLIC;\nREVOKE ALL ON ep_authority_allocation_current FROM PUBLIC;\nREVOKE ALL ON ep_authority_allocation_branches FROM PUBLIC;\nREVOKE ALL ON ep_authority_allocation_reservations FROM PUBLIC;";
173
+ /** Exact statements used by createPostgresAuthorityAllocationStore(). */
174
+ export declare const AUTHORITY_ALLOCATION_SQL: Readonly<{
175
+ lockParent: "SELECT pg_advisory_xact_lock(pg_catalog.hashtextextended(pg_catalog.jsonb_build_array($1::text, $2::text)::text, 0))";
176
+ readCurrent: "SELECT authority_head, authority_epoch, snapshot_fingerprint, next_fencing_token, clock_timestamp() AS database_now FROM ep_authority_allocation_current WHERE relying_party_id = $1 AND parent_id = $2 FOR UPDATE";
177
+ activeReservations: "SELECT count(*)::bigint AS active FROM ep_authority_allocation_reservations WHERE relying_party_id = $1 AND parent_id = $2 AND state = 'reserved'";
178
+ insertSnapshot: "INSERT INTO ep_authority_allocation_snapshots (relying_party_id, parent_id, authority_head, authority_epoch, snapshot_fingerprint, snapshot_json) VALUES ($1, $2, $3, $4, $5, $6::jsonb)";
179
+ insertBranch: "INSERT INTO ep_authority_allocation_branches (relying_party_id, parent_id, authority_head, authority_epoch, allocation_id, budget_cents, budget_calls, expires_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8::timestamptz)";
180
+ insertCurrent: "INSERT INTO ep_authority_allocation_current (relying_party_id, parent_id, authority_head, authority_epoch, snapshot_fingerprint) VALUES ($1, $2, $3, $4, $5)";
181
+ advanceCurrent: "UPDATE ep_authority_allocation_current SET authority_head = $3, authority_epoch = $4, snapshot_fingerprint = $5 WHERE relying_party_id = $1 AND parent_id = $2 AND authority_epoch < $4";
182
+ readSnapshot: "SELECT snapshot_json, snapshot_fingerprint FROM ep_authority_allocation_snapshots WHERE relying_party_id = $1 AND parent_id = $2 AND authority_head = $3 AND authority_epoch = $4";
183
+ readBranch: "SELECT budget_cents, budget_calls, expires_at FROM ep_authority_allocation_branches WHERE relying_party_id = $1 AND parent_id = $2 AND authority_head = $3 AND authority_epoch = $4 AND allocation_id = $5";
184
+ readReservation: "SELECT allocation_id, authority_head, authority_epoch, budget_cents, budget_calls, state, owner_digest, fencing_token FROM ep_authority_allocation_reservations WHERE relying_party_id = $1 AND parent_id = $2 AND reservation_id = $3";
185
+ readUsage: "SELECT allocation_id, state, COALESCE(sum(budget_cents), 0)::bigint AS cents, COALESCE(sum(budget_calls), 0)::bigint AS calls FROM ep_authority_allocation_reservations WHERE relying_party_id = $1 AND parent_id = $2 AND authority_head = $3 AND authority_epoch = $4 AND state IN ('reserved', 'committed') GROUP BY allocation_id, state";
186
+ nextFence: "UPDATE ep_authority_allocation_current SET next_fencing_token = next_fencing_token + 1 WHERE relying_party_id = $1 AND parent_id = $2 AND authority_head = $3 AND authority_epoch = $4 RETURNING next_fencing_token - 1 AS fencing_token";
187
+ insertReservation: "INSERT INTO ep_authority_allocation_reservations (relying_party_id, parent_id, authority_head, authority_epoch, allocation_id, reservation_id, budget_cents, budget_calls, state, owner_digest, fencing_token) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, 'reserved', $9, $10)";
188
+ commitReservation: "UPDATE ep_authority_allocation_reservations SET state = 'committed', finalized_at = transaction_timestamp() WHERE relying_party_id = $1 AND parent_id = $2 AND reservation_id = $3 AND allocation_id = $4 AND authority_head = $5 AND authority_epoch = $6 AND state = 'reserved' AND owner_digest = $7 AND fencing_token = $8";
189
+ releaseReservation: "UPDATE ep_authority_allocation_reservations SET state = 'released', finalized_at = transaction_timestamp() WHERE relying_party_id = $1 AND parent_id = $2 AND reservation_id = $3 AND allocation_id = $4 AND authority_head = $5 AND authority_epoch = $6 AND state = 'reserved' AND owner_digest = $7 AND fencing_token = $8";
190
+ inspectReservations: "SELECT reservation_id, allocation_id, authority_head, authority_epoch, budget_cents, budget_calls, state, fencing_token FROM ep_authority_allocation_reservations WHERE relying_party_id = $1 AND parent_id = $2 ORDER BY fencing_token";
191
+ }>;
192
+ /**
193
+ * Durable adapter boundary for PostgreSQL. Atomicity depends on the supplied
194
+ * transaction callback actually using one PostgreSQL transaction; the adapter
195
+ * additionally takes a transaction-scoped advisory lock for every parent.
196
+ */
197
+ export declare function createPostgresAuthorityAllocationStore(options: AuthorityAllocationPostgresOptions): AuthorityAllocationStore;
198
+ export declare function isDurableAuthorityAllocationStore(store: unknown): store is AuthorityAllocationStore;
199
+ export {};
200
+ //# sourceMappingURL=authority-allocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authority-allocation.d.ts","sourceRoot":"","sources":["../src/authority-allocation.ts"],"names":[],"mappings":"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"}