@feltdb/core 0.11.4 → 0.11.6
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/dist/architecture-invariant.d.ts +407 -0
- package/dist/architecture-invariant.d.ts.map +1 -0
- package/dist/architecture-invariant.js +708 -0
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +3 -1
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/crates/feltdb/src/lib.rs +10 -1
- package/dist/create/server-source/crates/feltdb/src/semantic_decision.rs +124 -12
- package/dist/create/server-source/crates/feltdb/src/semantic_query.rs +599 -0
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +222 -0
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +1 -0
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +1 -0
- package/dist/create/server-source/crates/feltdb/tests/semantic_query.rs +767 -0
- package/dist/create/server-source/crates/feltdb/tests/semantic_query_contract.rs +363 -0
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +5 -0
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +150 -2
- package/dist/db.d.ts +46 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +60 -0
- package/dist/embedded-query.d.ts +1 -0
- package/dist/embedded-query.d.ts.map +1 -1
- package/dist/embedded-query.js +15 -4
- package/dist/feltdb-vision-invariants.d.ts +46 -0
- package/dist/feltdb-vision-invariants.d.ts.map +1 -0
- package/dist/feltdb-vision-invariants.js +240 -0
- package/dist/feltdb.d.ts +7 -0
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/http-db.d.ts +9 -0
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +8 -0
- package/dist/index-core.d.ts +3 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +3 -0
- package/dist/runtime-snapshot.d.ts +337 -0
- package/dist/runtime-snapshot.d.ts.map +1 -0
- package/dist/runtime-snapshot.js +482 -0
- package/dist/semantic-decision.d.ts +57 -0
- package/dist/semantic-decision.d.ts.map +1 -1
- package/dist/state-contract.d.ts +3 -2
- package/dist/state-contract.d.ts.map +1 -1
- package/dist/studio-app/assets/{feltdb_wasm-BGgGSBOP.js → feltdb_wasm-D58hv7aa.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-BgFXYOtc.wasm +0 -0
- package/dist/studio-app/assets/index-gR6d3Tys.js +30 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-ClM6Qpod.wasm +0 -0
- package/dist/studio-app/assets/index-ptUom553.js +0 -30
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import type { AuthorizationDecision, AuthorizationRequest, AuthorizationSubject } from './authorization.js';
|
|
2
|
+
import type { AuthorityQueryPage, AuthorityQueryRequest } from './http-db.js';
|
|
3
|
+
/** Durable collection holding one head record per declared invariant. */
|
|
4
|
+
export declare const FELTDB_ARCHITECTURE_INVARIANT_COLLECTION = "_feltdb.ArchitectureInvariant";
|
|
5
|
+
/** Durable collection holding the immutable declaration of every version. */
|
|
6
|
+
export declare const FELTDB_ARCHITECTURE_INVARIANT_VERSION_COLLECTION = "_feltdb.ArchitectureInvariantVersion";
|
|
7
|
+
/** Durable collection holding immutable advisory evaluations. */
|
|
8
|
+
export declare const FELTDB_ARCHITECTURE_EVALUATION_COLLECTION = "_feltdb.ArchitectureInvariantEvaluation";
|
|
9
|
+
export declare const ARCHITECTURE_INVARIANT_CONTRACT_VERSION = 1;
|
|
10
|
+
/** Largest page a bounded invariant or evaluation query may request. */
|
|
11
|
+
export declare const ARCHITECTURE_INVARIANT_MAX_LIMIT = 1000;
|
|
12
|
+
/** Page size used when a caller does not request one. */
|
|
13
|
+
export declare const ARCHITECTURE_INVARIANT_DEFAULT_LIMIT = 100;
|
|
14
|
+
/**
|
|
15
|
+
* A free-form label an application uses to group its own invariants.
|
|
16
|
+
*
|
|
17
|
+
* FeltDB does not define a taxonomy of architecture. The declaring application
|
|
18
|
+
* already has one, and a closed list here would quietly become a competing
|
|
19
|
+
* one.
|
|
20
|
+
*/
|
|
21
|
+
export type ArchitectureInvariantCategory = string;
|
|
22
|
+
export declare const ARCHITECTURE_INVARIANT_SEVERITIES: readonly ["critical", "high", "medium", "low", "info"];
|
|
23
|
+
export type ArchitectureInvariantSeverity = typeof ARCHITECTURE_INVARIANT_SEVERITIES[number];
|
|
24
|
+
export declare const ARCHITECTURE_INVARIANT_STATUSES: readonly ["active", "inactive"];
|
|
25
|
+
export type ArchitectureInvariantStatus = typeof ARCHITECTURE_INVARIANT_STATUSES[number];
|
|
26
|
+
/**
|
|
27
|
+
* How an invariant can be established.
|
|
28
|
+
*
|
|
29
|
+
* Not every invariant is mechanically checkable. Some are decided by a test or
|
|
30
|
+
* a conformance check, some need evidence interpreted by an advisory
|
|
31
|
+
* evaluator, and some can only be escalated to a person. All three are
|
|
32
|
+
* first-class: `human-review` is a complete answer to "how is this verified",
|
|
33
|
+
* not an admission that the model failed to describe it.
|
|
34
|
+
*/
|
|
35
|
+
export declare const ARCHITECTURE_VERIFICATION_METHODS: readonly ["automated-test", "contract-conformance", "source-analysis", "runtime-observation", "benchmark", "jev-advisory", "human-review"];
|
|
36
|
+
export type ArchitectureVerificationMethod = typeof ARCHITECTURE_VERIFICATION_METHODS[number];
|
|
37
|
+
/**
|
|
38
|
+
* Advisory results an evaluator may record.
|
|
39
|
+
*
|
|
40
|
+
* `UNKNOWN` exists so that missing evidence stays missing evidence. An
|
|
41
|
+
* evaluator that cannot establish a condition records `UNKNOWN`; it does not
|
|
42
|
+
* record `DRIFT`, and FeltDB never promotes one to the other.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ARCHITECTURE_EVALUATION_RESULTS: readonly ["PASS", "DRIFT", "UNKNOWN"];
|
|
45
|
+
export type ArchitectureEvaluationResult = typeof ARCHITECTURE_EVALUATION_RESULTS[number];
|
|
46
|
+
export declare const ARCHITECTURE_INVARIANT_CAPABILITIES: {
|
|
47
|
+
readonly declare: "architecture:invariant.declare";
|
|
48
|
+
readonly read: "architecture:invariant.read";
|
|
49
|
+
readonly evaluate: "architecture:evaluation.record";
|
|
50
|
+
readonly readEvaluation: "architecture:evaluation.read";
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* One way this invariant can be established.
|
|
54
|
+
*
|
|
55
|
+
* FeltDB stores it and never interprets it. A different evaluator can read the
|
|
56
|
+
* same declaration without any change to this model.
|
|
57
|
+
*/
|
|
58
|
+
export interface ArchitectureInvariantVerification {
|
|
59
|
+
method: ArchitectureVerificationMethod;
|
|
60
|
+
/** Where the evidence comes from, as a `scheme:reference`. */
|
|
61
|
+
reference?: string;
|
|
62
|
+
/** The evaluator this entry was written for, when it was written for one. */
|
|
63
|
+
evaluator?: string;
|
|
64
|
+
/** The condition, in whatever form the named evaluator accepts. */
|
|
65
|
+
predicate?: string;
|
|
66
|
+
notes?: string;
|
|
67
|
+
parameters?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A relationship to an authority that owns the referenced material.
|
|
71
|
+
*
|
|
72
|
+
* The invariant states what must remain true about that authority's own
|
|
73
|
+
* declaration. It does not become a second copy of it.
|
|
74
|
+
*/
|
|
75
|
+
export interface ArchitectureInvariantAuthorityReference {
|
|
76
|
+
/** The owning authority, for example `.flow`, `appport`, `authboundry`. */
|
|
77
|
+
authority: string;
|
|
78
|
+
/** What is referenced inside that authority. */
|
|
79
|
+
reference: string;
|
|
80
|
+
/** The relationship that must remain true. */
|
|
81
|
+
relationship: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Provenance, in the terms FeltDB already uses.
|
|
85
|
+
*
|
|
86
|
+
* The actor is an `AuthorizationSubject`, the decision id is the one the
|
|
87
|
+
* existing authorization boundary issued, and the scope is the tenant and
|
|
88
|
+
* application the record belongs to. Nothing here is a second provenance
|
|
89
|
+
* mechanism.
|
|
90
|
+
*/
|
|
91
|
+
export interface ArchitectureProvenance {
|
|
92
|
+
subject: AuthorizationSubject;
|
|
93
|
+
tenant_id: string;
|
|
94
|
+
application_id: string;
|
|
95
|
+
recorded_at: string;
|
|
96
|
+
/** What produced the write, for example `feltdb.cli`, `attn`, `studio`. */
|
|
97
|
+
source: string;
|
|
98
|
+
/** The decision the authorization boundary issued for this write. */
|
|
99
|
+
authorization_decision_id?: string;
|
|
100
|
+
}
|
|
101
|
+
/** The meaning-bearing part of an invariant. Changing it creates a version. */
|
|
102
|
+
export interface ArchitectureInvariantDeclaration {
|
|
103
|
+
name: string;
|
|
104
|
+
description: string;
|
|
105
|
+
category: ArchitectureInvariantCategory;
|
|
106
|
+
severity: ArchitectureInvariantSeverity;
|
|
107
|
+
/** The architectural surface the invariant is declared over. */
|
|
108
|
+
scope: string;
|
|
109
|
+
/** How this invariant can be established. At least one entry is required. */
|
|
110
|
+
verification: ArchitectureInvariantVerification[];
|
|
111
|
+
references: ArchitectureInvariantAuthorityReference[];
|
|
112
|
+
}
|
|
113
|
+
/** The current state of one declared invariant. */
|
|
114
|
+
export interface ArchitectureInvariant extends ArchitectureInvariantDeclaration {
|
|
115
|
+
/** Stable declared identity, unique within a tenant and application. */
|
|
116
|
+
id: string;
|
|
117
|
+
tenant_id: string;
|
|
118
|
+
application_id: string;
|
|
119
|
+
contract_version: typeof ARCHITECTURE_INVARIANT_CONTRACT_VERSION;
|
|
120
|
+
status: ArchitectureInvariantStatus;
|
|
121
|
+
version: number;
|
|
122
|
+
/** Digest of the declaration at `version`. */
|
|
123
|
+
declaration_digest: string;
|
|
124
|
+
created_at: string;
|
|
125
|
+
created_by: AuthorizationSubject;
|
|
126
|
+
updated_at: string;
|
|
127
|
+
updated_by: AuthorizationSubject;
|
|
128
|
+
deactivated_at?: string;
|
|
129
|
+
deactivated_by?: AuthorizationSubject;
|
|
130
|
+
deactivation_reason?: string;
|
|
131
|
+
provenance: ArchitectureProvenance;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* One immutable declaration version.
|
|
135
|
+
*
|
|
136
|
+
* A version is never rewritten. This is what lets an application answer what
|
|
137
|
+
* it believed had to be true when an evaluation happened, rather than only
|
|
138
|
+
* what it believes today.
|
|
139
|
+
*/
|
|
140
|
+
export interface ArchitectureInvariantVersion extends ArchitectureInvariantDeclaration {
|
|
141
|
+
invariant_id: string;
|
|
142
|
+
tenant_id: string;
|
|
143
|
+
application_id: string;
|
|
144
|
+
contract_version: typeof ARCHITECTURE_INVARIANT_CONTRACT_VERSION;
|
|
145
|
+
version: number;
|
|
146
|
+
declaration_digest: string;
|
|
147
|
+
supersedes?: number;
|
|
148
|
+
change_reason?: string;
|
|
149
|
+
declared_at: string;
|
|
150
|
+
declared_by: AuthorizationSubject;
|
|
151
|
+
provenance: ArchitectureProvenance;
|
|
152
|
+
}
|
|
153
|
+
export interface ArchitectureEvaluationFinding {
|
|
154
|
+
summary: string;
|
|
155
|
+
severity?: ArchitectureInvariantSeverity;
|
|
156
|
+
evidence?: string[];
|
|
157
|
+
}
|
|
158
|
+
export interface ArchitectureEvaluator {
|
|
159
|
+
/** Evaluator identity, for example `jev`. */
|
|
160
|
+
id: string;
|
|
161
|
+
/** Evaluator version, so an evaluation stays attributable to a build. */
|
|
162
|
+
version: string;
|
|
163
|
+
}
|
|
164
|
+
/** One advisory evaluation, bound to the exact invariant version evaluated. */
|
|
165
|
+
export interface ArchitectureEvaluation {
|
|
166
|
+
id: string;
|
|
167
|
+
tenant_id: string;
|
|
168
|
+
application_id: string;
|
|
169
|
+
contract_version: typeof ARCHITECTURE_INVARIANT_CONTRACT_VERSION;
|
|
170
|
+
invariant_id: string;
|
|
171
|
+
invariant_version: number;
|
|
172
|
+
/** Digest of the declaration as it stood at `invariant_version`. */
|
|
173
|
+
invariant_declaration_digest: string;
|
|
174
|
+
evaluator: ArchitectureEvaluator;
|
|
175
|
+
result: ArchitectureEvaluationResult;
|
|
176
|
+
/** References to evidence the evaluator used, for example `git:abc123`. */
|
|
177
|
+
evidence: string[];
|
|
178
|
+
explanation: string;
|
|
179
|
+
findings: ArchitectureEvaluationFinding[];
|
|
180
|
+
confidence?: number;
|
|
181
|
+
evaluated_at: string;
|
|
182
|
+
recorded_at: string;
|
|
183
|
+
provenance: ArchitectureProvenance;
|
|
184
|
+
}
|
|
185
|
+
export interface ArchitectureInvariantPage {
|
|
186
|
+
invariants: ArchitectureInvariant[];
|
|
187
|
+
nextCursor?: string;
|
|
188
|
+
exhausted: boolean;
|
|
189
|
+
}
|
|
190
|
+
export interface ArchitectureInvariantVersionPage {
|
|
191
|
+
versions: ArchitectureInvariantVersion[];
|
|
192
|
+
nextCursor?: string;
|
|
193
|
+
exhausted: boolean;
|
|
194
|
+
}
|
|
195
|
+
export interface ArchitectureEvaluationPage {
|
|
196
|
+
evaluations: ArchitectureEvaluation[];
|
|
197
|
+
nextCursor?: string;
|
|
198
|
+
exhausted: boolean;
|
|
199
|
+
}
|
|
200
|
+
export interface ArchitectureSnapshotEntry {
|
|
201
|
+
invariant: ArchitectureInvariant;
|
|
202
|
+
version: ArchitectureInvariantVersion;
|
|
203
|
+
latestEvaluation?: ArchitectureEvaluation;
|
|
204
|
+
}
|
|
205
|
+
export interface ArchitectureSnapshotPage {
|
|
206
|
+
entries: ArchitectureSnapshotEntry[];
|
|
207
|
+
nextCursor?: string;
|
|
208
|
+
exhausted: boolean;
|
|
209
|
+
}
|
|
210
|
+
/** Durable substrate the service writes through. */
|
|
211
|
+
export interface ArchitectureInvariantStore {
|
|
212
|
+
read<T>(collection: string, recordId: string): Promise<T | undefined>;
|
|
213
|
+
create<T>(collection: string, recordId: string, value: T): Promise<void>;
|
|
214
|
+
replace<T>(collection: string, recordId: string, value: T): Promise<void>;
|
|
215
|
+
query<T>(request: AuthorityQueryRequest): Promise<AuthorityQueryPage<T>>;
|
|
216
|
+
}
|
|
217
|
+
/** The part of a FeltDB instance this substrate needs. Satisfied by `StateFirstDB`. */
|
|
218
|
+
export interface ArchitectureInvariantDatabase {
|
|
219
|
+
collection<T>(name: string): {
|
|
220
|
+
get(id: string | number): Promise<T | null>;
|
|
221
|
+
insert(data: Partial<T>, id?: string | number): Promise<string>;
|
|
222
|
+
update(id: string | number, changes: Partial<T>): Promise<void>;
|
|
223
|
+
};
|
|
224
|
+
query<T = Record<string, unknown>>(request: AuthorityQueryRequest): Promise<AuthorityQueryPage<T>>;
|
|
225
|
+
}
|
|
226
|
+
/** Structurally satisfied by the core `AuthorizationClient`. */
|
|
227
|
+
export interface ArchitectureAuthorizationGate {
|
|
228
|
+
check(request: AuthorizationRequest): Promise<AuthorizationDecision>;
|
|
229
|
+
}
|
|
230
|
+
export interface ArchitectureInvariantScope {
|
|
231
|
+
tenantId: string;
|
|
232
|
+
applicationId: string;
|
|
233
|
+
}
|
|
234
|
+
export interface ArchitectureInvariantAuthorization {
|
|
235
|
+
gate: ArchitectureAuthorizationGate;
|
|
236
|
+
subject: AuthorizationSubject;
|
|
237
|
+
}
|
|
238
|
+
export interface ArchitectureInvariantServiceOptions {
|
|
239
|
+
scope: ArchitectureInvariantScope;
|
|
240
|
+
/** Who is writing. Recorded as provenance on every mutation. */
|
|
241
|
+
actor: AuthorizationSubject;
|
|
242
|
+
/** What produced the write. Recorded as provenance on every mutation. */
|
|
243
|
+
source: string;
|
|
244
|
+
/** FeltDB's existing authorization boundary. Omitted means no narrowing. */
|
|
245
|
+
authorization?: ArchitectureInvariantAuthorization;
|
|
246
|
+
/** Injectable clock, so evidence ordering is testable. */
|
|
247
|
+
now?: () => Date;
|
|
248
|
+
/** Injectable identity, so evaluation ids are testable. */
|
|
249
|
+
newEvaluationId?: () => string;
|
|
250
|
+
}
|
|
251
|
+
export interface CreateArchitectureInvariantInput extends Partial<ArchitectureInvariantDeclaration> {
|
|
252
|
+
id: string;
|
|
253
|
+
name: string;
|
|
254
|
+
description: string;
|
|
255
|
+
category: ArchitectureInvariantCategory;
|
|
256
|
+
severity: ArchitectureInvariantSeverity;
|
|
257
|
+
scope: string;
|
|
258
|
+
}
|
|
259
|
+
export interface UpdateArchitectureInvariantInput {
|
|
260
|
+
name?: string;
|
|
261
|
+
description?: string;
|
|
262
|
+
category?: ArchitectureInvariantCategory;
|
|
263
|
+
severity?: ArchitectureInvariantSeverity;
|
|
264
|
+
scope?: string;
|
|
265
|
+
verification?: ArchitectureInvariantVerification[];
|
|
266
|
+
references?: ArchitectureInvariantAuthorityReference[];
|
|
267
|
+
/** Why the meaning changed. Stored on the new version. */
|
|
268
|
+
reason?: string;
|
|
269
|
+
/** Rejects the write when the stored version has moved on. */
|
|
270
|
+
expectedVersion?: number;
|
|
271
|
+
}
|
|
272
|
+
export interface DeactivateArchitectureInvariantInput {
|
|
273
|
+
reason?: string;
|
|
274
|
+
expectedVersion?: number;
|
|
275
|
+
}
|
|
276
|
+
export interface ListArchitectureInvariantsInput {
|
|
277
|
+
status?: ArchitectureInvariantStatus;
|
|
278
|
+
category?: ArchitectureInvariantCategory;
|
|
279
|
+
severity?: ArchitectureInvariantSeverity;
|
|
280
|
+
scope?: string;
|
|
281
|
+
limit?: number;
|
|
282
|
+
cursor?: string;
|
|
283
|
+
}
|
|
284
|
+
export interface ListArchitectureInvariantVersionsInput {
|
|
285
|
+
limit?: number;
|
|
286
|
+
cursor?: string;
|
|
287
|
+
}
|
|
288
|
+
export interface RecordArchitectureEvaluationInput {
|
|
289
|
+
invariantId: string;
|
|
290
|
+
invariantVersion: number;
|
|
291
|
+
evaluator: string;
|
|
292
|
+
evaluatorVersion?: string;
|
|
293
|
+
result: ArchitectureEvaluationResult;
|
|
294
|
+
evidence?: string[];
|
|
295
|
+
explanation: string;
|
|
296
|
+
findings?: ArchitectureEvaluationFinding[];
|
|
297
|
+
confidence?: number;
|
|
298
|
+
evaluatedAt?: string | number | Date;
|
|
299
|
+
/** Caller-supplied identity, for an idempotent retry of the same evaluation. */
|
|
300
|
+
evaluationId?: string;
|
|
301
|
+
}
|
|
302
|
+
export interface ListArchitectureEvaluationsInput {
|
|
303
|
+
invariantId?: string;
|
|
304
|
+
invariantVersion?: number;
|
|
305
|
+
evaluator?: string;
|
|
306
|
+
result?: ArchitectureEvaluationResult;
|
|
307
|
+
limit?: number;
|
|
308
|
+
cursor?: string;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* A store that can only write one collection.
|
|
312
|
+
*
|
|
313
|
+
* `evaluations.record()` runs against this, which is what makes "an evaluation
|
|
314
|
+
* cannot mutate an invariant" a property of the substrate rather than a rule
|
|
315
|
+
* the recording path is trusted to follow.
|
|
316
|
+
*/
|
|
317
|
+
export declare function restrictWritesTo(store: ArchitectureInvariantStore, collection: string): ArchitectureInvariantStore;
|
|
318
|
+
/** Adapt a FeltDB instance to the durable substrate this service writes through. */
|
|
319
|
+
export declare function createArchitectureInvariantStore(db: ArchitectureInvariantDatabase): ArchitectureInvariantStore;
|
|
320
|
+
/**
|
|
321
|
+
* The durable architecture invariant substrate.
|
|
322
|
+
*
|
|
323
|
+
* `invariants` declares what must be true. `evaluations` retains what an
|
|
324
|
+
* advisory evaluator observed about it. Neither side can do the other's job.
|
|
325
|
+
*/
|
|
326
|
+
export declare class FeltDBArchitectureInvariantService {
|
|
327
|
+
readonly scope: ArchitectureInvariantScope;
|
|
328
|
+
private readonly actor;
|
|
329
|
+
private readonly source;
|
|
330
|
+
private readonly authorization?;
|
|
331
|
+
private readonly clock;
|
|
332
|
+
private readonly newEvaluationId;
|
|
333
|
+
private readonly evaluationStore;
|
|
334
|
+
private readonly store;
|
|
335
|
+
constructor(store: ArchitectureInvariantStore, options: ArchitectureInvariantServiceOptions);
|
|
336
|
+
/** Durable record key. Scoping by tenant and application is part of identity. */
|
|
337
|
+
private scopedKey;
|
|
338
|
+
private versionKey;
|
|
339
|
+
private resourceUri;
|
|
340
|
+
/**
|
|
341
|
+
* Ask FeltDB's existing authorization boundary, and fail closed.
|
|
342
|
+
*
|
|
343
|
+
* With no gate configured the caller has not asked for narrowing, and this
|
|
344
|
+
* substrate must not invent an authorization answer FeltDB did not give.
|
|
345
|
+
*/
|
|
346
|
+
private authorize;
|
|
347
|
+
private provenance;
|
|
348
|
+
private readInvariantRow;
|
|
349
|
+
/**
|
|
350
|
+
* Every collection read is a bounded, tenant- and application-scoped query
|
|
351
|
+
* with an explicit order, so a page is reproducible and a cursor resumes
|
|
352
|
+
* where the previous page ended instead of rescanning the collection.
|
|
353
|
+
*/
|
|
354
|
+
private scopedQuery;
|
|
355
|
+
private writeVersion;
|
|
356
|
+
readonly invariants: {
|
|
357
|
+
/** Declare an invariant. The declaration becomes version 1. */
|
|
358
|
+
create: (input: CreateArchitectureInvariantInput) => Promise<ArchitectureInvariant>;
|
|
359
|
+
/** Read the current declaration. */
|
|
360
|
+
get: (invariantId: string) => Promise<ArchitectureInvariant>;
|
|
361
|
+
/** Read one immutable declaration version. */
|
|
362
|
+
version: (invariantId: string, version: number) => Promise<ArchitectureInvariantVersion>;
|
|
363
|
+
/** Page the declaration history of one invariant, oldest version first. */
|
|
364
|
+
versions: (invariantId: string, input?: ListArchitectureInvariantVersionsInput) => Promise<ArchitectureInvariantVersionPage>;
|
|
365
|
+
/** Page declared invariants within this tenant and application. */
|
|
366
|
+
list: (input?: ListArchitectureInvariantsInput) => Promise<ArchitectureInvariantPage>;
|
|
367
|
+
/**
|
|
368
|
+
* Change what an invariant means.
|
|
369
|
+
*
|
|
370
|
+
* A changed declaration becomes a new version; the previous version keeps
|
|
371
|
+
* its exact words, so evaluations recorded against it stay readable. An
|
|
372
|
+
* update that changes nothing is a no-op and creates no version.
|
|
373
|
+
*/
|
|
374
|
+
update: (invariantId: string, input?: UpdateArchitectureInvariantInput) => Promise<ArchitectureInvariant>;
|
|
375
|
+
/**
|
|
376
|
+
* Retire an invariant without rewriting it.
|
|
377
|
+
*
|
|
378
|
+
* Deactivation is lifecycle, not meaning: the declaration keeps its
|
|
379
|
+
* version, and evaluations recorded against it remain readable.
|
|
380
|
+
*/
|
|
381
|
+
deactivate: (invariantId: string, input?: DeactivateArchitectureInvariantInput) => Promise<ArchitectureInvariant>;
|
|
382
|
+
};
|
|
383
|
+
readonly evaluations: {
|
|
384
|
+
/**
|
|
385
|
+
* Retain one advisory evaluation.
|
|
386
|
+
*
|
|
387
|
+
* The evaluation binds to the exact invariant version it names, and to
|
|
388
|
+
* that version's declaration digest. A conclusive result must cite
|
|
389
|
+
* evidence; `UNKNOWN` need not, because the absence of evidence is what it
|
|
390
|
+
* reports.
|
|
391
|
+
*/
|
|
392
|
+
record: (input: RecordArchitectureEvaluationInput) => Promise<ArchitectureEvaluation>;
|
|
393
|
+
get: (evaluationId: string) => Promise<ArchitectureEvaluation>;
|
|
394
|
+
/** Page retained evaluations within this tenant and application. */
|
|
395
|
+
list: (input?: ListArchitectureEvaluationsInput) => Promise<ArchitectureEvaluationPage>;
|
|
396
|
+
};
|
|
397
|
+
/**
|
|
398
|
+
* Return the current declaration and its latest evaluation for each invariant.
|
|
399
|
+
*
|
|
400
|
+
* The invariant page is the snapshot boundary: history is never expanded and
|
|
401
|
+
* every evaluation lookup is limited to one record.
|
|
402
|
+
*/
|
|
403
|
+
readonly snapshot: (input?: ListArchitectureInvariantsInput) => Promise<ArchitectureSnapshotPage>;
|
|
404
|
+
}
|
|
405
|
+
/** Bind the durable architecture invariant substrate to a FeltDB instance. */
|
|
406
|
+
export declare function createArchitectureInvariantService(db: ArchitectureInvariantDatabase, options: ArchitectureInvariantServiceOptions): FeltDBArchitectureInvariantService;
|
|
407
|
+
//# sourceMappingURL=architecture-invariant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-invariant.d.ts","sourceRoot":"","sources":["../src/architecture-invariant.ts"],"names":[],"mappings":"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"}
|