@substrat-run/contracts 0.138.0 → 0.139.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.
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Entity archive and trash (#119) — the vocabulary the kernel and a module share.
3
+ *
4
+ * Three different acts get habitually conflated, and only one of them lives here:
5
+ *
6
+ * - **Subject erasure** (#37, K-37) removes a person's data from everywhere the platform can
7
+ * reach, history included. Not reversible, and not about an entity.
8
+ * - **Tenant delete and retention** (#36) removes a whole tenant after a grace window. Not
9
+ * about an entity either.
10
+ * - **Archive and trash** — this — hide ONE entity from active views and keep it. Both are
11
+ * reversible, both keep the row, and neither touches history: the events about the entity
12
+ * stay exactly as they were.
13
+ *
14
+ * Archive and trash are deliberately two acts with two permission keys. Archive says "done
15
+ * with this, keep it": the row stays readable through the entity's ordinary read authority.
16
+ * Trash says "I meant to delete this": the row stays recoverable, but only someone holding
17
+ * the declared trash key can see it or bring it back.
18
+ *
19
+ * ## The state is two columns, and the visible state is derived from them
20
+ *
21
+ * An entity that declares either one gets kernel-owned columns on its own table,
22
+ * `_substrat_archived_at` and `_substrat_trashed_at`. Stored apart rather than as one enum,
23
+ * so trash never forgets an archive: trashing an archived row and restoring it brings it back
24
+ * archived, never silently into the active view. What a reader sees is one state, derived:
25
+ *
26
+ * trashed when `_substrat_trashed_at` is set
27
+ * archived else when `_substrat_archived_at` is set
28
+ * active otherwise
29
+ */
30
+ import { z } from 'zod';
31
+ /** The state an archivable or trashable entity is in, as a reader sees it. */
32
+ export declare const entityStateName: z.ZodEnum<{
33
+ active: "active";
34
+ archived: "archived";
35
+ trashed: "trashed";
36
+ }>;
37
+ export type EntityStateName = z.infer<typeof entityStateName>;
38
+ /** The kernel-owned column that records an archive. */
39
+ export declare const ARCHIVED_AT_COLUMN = "_substrat_archived_at";
40
+ /** The kernel-owned column that records a trash. */
41
+ export declare const TRASHED_AT_COLUMN = "_substrat_trashed_at";
42
+ /**
43
+ * One entity's declaration, as the manifest carries it.
44
+ *
45
+ * Written into a model as `archive: { permission }` / `trash: { permission }` on the entity
46
+ * (`defineEntities`); `manifestEntities()` turns that into this and fills in `table` and
47
+ * `idColumn` from the registry, as it does for `searchables`. A hand-written manifest (an
48
+ * engine's) may declare it directly.
49
+ *
50
+ * `archivePermission` gates `ctx.archive` and `ctx.unarchive`; `trashPermission` gates
51
+ * `ctx.trash`, `ctx.restore` and the trashed readers. At least one is required. A key here
52
+ * must be one the module declares.
53
+ */
54
+ export declare const entityStateDeclaration: z.ZodObject<{
55
+ entityType: z.ZodString;
56
+ archivePermission: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "PermissionKey", "out">>;
57
+ trashPermission: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "PermissionKey", "out">>;
58
+ table: z.ZodOptional<z.ZodString>;
59
+ idColumn: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strip>;
61
+ export type EntityStateDeclaration = z.infer<typeof entityStateDeclaration>;
62
+ /** `ctx.archive` moved an entity out of the active view. Entity: the entity. */
63
+ export declare const ENTITY_ARCHIVED = "entity.archived";
64
+ /** `ctx.unarchive` brought an archived entity back. Entity: the entity. */
65
+ export declare const ENTITY_UNARCHIVED = "entity.unarchived";
66
+ /** `ctx.trash` moved an entity into the trash. Entity: the entity. */
67
+ export declare const ENTITY_TRASHED = "entity.trashed";
68
+ /** `ctx.restore` took an entity out of the trash, back to the state it was trashed from. */
69
+ export declare const ENTITY_RESTORED = "entity.restored";
70
+ /**
71
+ * The one payload all four carry: the entity, and the visible state before and after.
72
+ *
73
+ * Who did it and when are not here — they are the envelope's actor and `occurredAt`, stamped
74
+ * by the kernel, with the K-34 authorization chain beside them. `from` and `to` are the
75
+ * derived states, so `entity.restored` says where the entity went back to (`active` or
76
+ * `archived`) without the reader having to replay anything.
77
+ */
78
+ export declare const entityStateChangedPayload: z.ZodObject<{
79
+ entity: z.ZodObject<{
80
+ entityType: z.ZodString;
81
+ entityId: z.ZodString;
82
+ }, z.core.$strip>;
83
+ from: z.ZodEnum<{
84
+ active: "active";
85
+ archived: "archived";
86
+ trashed: "trashed";
87
+ }>;
88
+ to: z.ZodEnum<{
89
+ active: "active";
90
+ archived: "archived";
91
+ trashed: "trashed";
92
+ }>;
93
+ }, z.core.$strip>;
94
+ export type EntityStateChangedPayload = z.infer<typeof entityStateChangedPayload>;
95
+ //# sourceMappingURL=entity-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-state.d.ts","sourceRoot":"","sources":["../src/entity-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,8EAA8E;AAC9E,eAAO,MAAM,eAAe;;;;EAA4C,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAC1D,oDAAoD;AACpD,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB;;;;;;iBAMjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,gFAAgF;AAChF,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,sEAAsE;AACtE,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,4FAA4F;AAC5F,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAIpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Entity archive and trash (#119) — the vocabulary the kernel and a module share.
3
+ *
4
+ * Three different acts get habitually conflated, and only one of them lives here:
5
+ *
6
+ * - **Subject erasure** (#37, K-37) removes a person's data from everywhere the platform can
7
+ * reach, history included. Not reversible, and not about an entity.
8
+ * - **Tenant delete and retention** (#36) removes a whole tenant after a grace window. Not
9
+ * about an entity either.
10
+ * - **Archive and trash** — this — hide ONE entity from active views and keep it. Both are
11
+ * reversible, both keep the row, and neither touches history: the events about the entity
12
+ * stay exactly as they were.
13
+ *
14
+ * Archive and trash are deliberately two acts with two permission keys. Archive says "done
15
+ * with this, keep it": the row stays readable through the entity's ordinary read authority.
16
+ * Trash says "I meant to delete this": the row stays recoverable, but only someone holding
17
+ * the declared trash key can see it or bring it back.
18
+ *
19
+ * ## The state is two columns, and the visible state is derived from them
20
+ *
21
+ * An entity that declares either one gets kernel-owned columns on its own table,
22
+ * `_substrat_archived_at` and `_substrat_trashed_at`. Stored apart rather than as one enum,
23
+ * so trash never forgets an archive: trashing an archived row and restoring it brings it back
24
+ * archived, never silently into the active view. What a reader sees is one state, derived:
25
+ *
26
+ * trashed when `_substrat_trashed_at` is set
27
+ * archived else when `_substrat_archived_at` is set
28
+ * active otherwise
29
+ */
30
+ import { z } from 'zod';
31
+ import { entityRef } from './events.js';
32
+ import { permissionKey } from './ids.js';
33
+ /** The state an archivable or trashable entity is in, as a reader sees it. */
34
+ export const entityStateName = z.enum(['active', 'archived', 'trashed']);
35
+ /** The kernel-owned column that records an archive. */
36
+ export const ARCHIVED_AT_COLUMN = '_substrat_archived_at';
37
+ /** The kernel-owned column that records a trash. */
38
+ export const TRASHED_AT_COLUMN = '_substrat_trashed_at';
39
+ /**
40
+ * One entity's declaration, as the manifest carries it.
41
+ *
42
+ * Written into a model as `archive: { permission }` / `trash: { permission }` on the entity
43
+ * (`defineEntities`); `manifestEntities()` turns that into this and fills in `table` and
44
+ * `idColumn` from the registry, as it does for `searchables`. A hand-written manifest (an
45
+ * engine's) may declare it directly.
46
+ *
47
+ * `archivePermission` gates `ctx.archive` and `ctx.unarchive`; `trashPermission` gates
48
+ * `ctx.trash`, `ctx.restore` and the trashed readers. At least one is required. A key here
49
+ * must be one the module declares.
50
+ */
51
+ export const entityStateDeclaration = z.object({
52
+ entityType: z.string().min(1),
53
+ archivePermission: permissionKey.optional(),
54
+ trashPermission: permissionKey.optional(),
55
+ table: z.string().min(1).optional(),
56
+ idColumn: z.string().min(1).optional(),
57
+ });
58
+ /** `ctx.archive` moved an entity out of the active view. Entity: the entity. */
59
+ export const ENTITY_ARCHIVED = 'entity.archived';
60
+ /** `ctx.unarchive` brought an archived entity back. Entity: the entity. */
61
+ export const ENTITY_UNARCHIVED = 'entity.unarchived';
62
+ /** `ctx.trash` moved an entity into the trash. Entity: the entity. */
63
+ export const ENTITY_TRASHED = 'entity.trashed';
64
+ /** `ctx.restore` took an entity out of the trash, back to the state it was trashed from. */
65
+ export const ENTITY_RESTORED = 'entity.restored';
66
+ /**
67
+ * The one payload all four carry: the entity, and the visible state before and after.
68
+ *
69
+ * Who did it and when are not here — they are the envelope's actor and `occurredAt`, stamped
70
+ * by the kernel, with the K-34 authorization chain beside them. `from` and `to` are the
71
+ * derived states, so `entity.restored` says where the entity went back to (`active` or
72
+ * `archived`) without the reader having to replay anything.
73
+ */
74
+ export const entityStateChangedPayload = z.object({
75
+ entity: entityRef,
76
+ from: entityStateName,
77
+ to: entityStateName,
78
+ });
79
+ //# sourceMappingURL=entity-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-state.js","sourceRoot":"","sources":["../src/entity-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAGzE,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,iBAAiB,EAAE,aAAa,CAAC,QAAQ,EAAE;IAC3C,eAAe,EAAE,aAAa,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAGH,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AACjD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,eAAe;IACrB,EAAE,EAAE,eAAe;CACpB,CAAC,CAAC"}
@@ -0,0 +1,208 @@
1
+ import { z } from 'zod';
2
+ import { tenantId } from './ids.js';
3
+ /**
4
+ * Findings (#1748): anomalies a tenant triages like email, in one inbox with one lifecycle.
5
+ *
6
+ * - `invariant`: a rule was broken — expected 0, observed N (a scheduled run that failed).
7
+ * - `drift`: unusual against an expectation — a freshness expectation gone stale.
8
+ * - `recurring`: one failure shape, seen again and again — the tenant's own projection of an
9
+ * `_substrat_issues` fingerprint (#1233), counted over that tenant's occurrences only.
10
+ *
11
+ * A finding is TENANT-scoped by construction: its counters, versions and evidence come from
12
+ * that tenant's own rows, so the fleet aggregate it shares a fingerprint with is never visible
13
+ * through it. It carries no free text from the evidence (no message, no upstream reference):
14
+ * the evidence ref names where the rows are, and the reader reads them through its own
15
+ * tenant-forced view.
16
+ */
17
+ export declare const findingKind: z.ZodEnum<{
18
+ drift: "drift";
19
+ invariant: "invariant";
20
+ recurring: "recurring";
21
+ }>;
22
+ export type FindingKind = z.infer<typeof findingKind>;
23
+ /**
24
+ * The lifecycle. `_substrat_issues` maps onto it 1:1 — new → `open`, regressed → `open` with
25
+ * `regressed`, resolved → `resolved`, ignored → `suppressed` — and `acked` is the one state an
26
+ * issue has no word for: "somebody is on it".
27
+ */
28
+ export declare const findingStatus: z.ZodEnum<{
29
+ acked: "acked";
30
+ open: "open";
31
+ resolved: "resolved";
32
+ suppressed: "suppressed";
33
+ }>;
34
+ export type FindingStatus = z.infer<typeof findingStatus>;
35
+ /**
36
+ * What a verdict may SET. `suppressed` is never set directly: it is what a suppress RULE does,
37
+ * because a suppression without a scope and an expiry is a finding nobody will ever see again.
38
+ */
39
+ export declare const findingStatusInput: z.ZodEnum<{
40
+ acked: "acked";
41
+ open: "open";
42
+ resolved: "resolved";
43
+ }>;
44
+ export type FindingStatusInput = z.infer<typeof findingStatusInput>;
45
+ export declare const findingSeverity: z.ZodEnum<{
46
+ critical: "critical";
47
+ info: "info";
48
+ warning: "warning";
49
+ }>;
50
+ export type FindingSeverity = z.infer<typeof findingSeverity>;
51
+ /** Where the occurrences behind a finding are read: the reader's own tenant-forced view of them. */
52
+ export declare const findingEvidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
53
+ source: z.ZodLiteral<"ops-failures">;
54
+ fingerprint: z.ZodString;
55
+ }, z.core.$strip>, z.ZodObject<{
56
+ source: z.ZodLiteral<"sweep-runs">;
57
+ kind: z.ZodEnum<{
58
+ freshness: "freshness";
59
+ schedule: "schedule";
60
+ }>;
61
+ unit: z.ZodString;
62
+ }, z.core.$strip>], "source">;
63
+ export type FindingEvidence = z.infer<typeof findingEvidence>;
64
+ /**
65
+ * Why the finding is believed to have started, with the reason stated. Only `deploy` today: a
66
+ * finding that comes back under a version other than the one it was resolved under names the
67
+ * new version. Nothing is claimed when nothing changed — no cause is better than an invented one.
68
+ */
69
+ export declare const findingLikelyCause: z.ZodObject<{
70
+ kind: z.ZodLiteral<"deploy">;
71
+ version: z.ZodString;
72
+ reason: z.ZodString;
73
+ }, z.core.$strip>;
74
+ export type FindingLikelyCause = z.infer<typeof findingLikelyCause>;
75
+ export declare const findingEntry: z.ZodObject<{
76
+ id: z.ZodString;
77
+ tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
78
+ kind: z.ZodEnum<{
79
+ drift: "drift";
80
+ invariant: "invariant";
81
+ recurring: "recurring";
82
+ }>;
83
+ subject: z.ZodString;
84
+ status: z.ZodEnum<{
85
+ acked: "acked";
86
+ open: "open";
87
+ resolved: "resolved";
88
+ suppressed: "suppressed";
89
+ }>;
90
+ regressed: z.ZodBoolean;
91
+ severity: z.ZodEnum<{
92
+ critical: "critical";
93
+ info: "info";
94
+ warning: "warning";
95
+ }>;
96
+ title: z.ZodString;
97
+ operation: z.ZodNullable<z.ZodString>;
98
+ codes: z.ZodArray<z.ZodEnum<{
99
+ conflict: "conflict";
100
+ forbidden: "forbidden";
101
+ internal: "internal";
102
+ not_found: "not_found";
103
+ permission_denied: "permission_denied";
104
+ precondition_failed: "precondition_failed";
105
+ rate_limited: "rate_limited";
106
+ unauthenticated: "unauthenticated";
107
+ unavailable: "unavailable";
108
+ validation_failed: "validation_failed";
109
+ }>>;
110
+ vertical: z.ZodNullable<z.ZodString>;
111
+ scopeId: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "ScopeId", "out">>;
112
+ count: z.ZodNumber;
113
+ firstSeen: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
114
+ lastSeen: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
115
+ lastVersion: z.ZodNullable<z.ZodString>;
116
+ resolvedVersion: z.ZodNullable<z.ZodString>;
117
+ resolvedAt: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "Instant", "out">>;
118
+ resolution: z.ZodNullable<z.ZodEnum<{
119
+ stale: "stale";
120
+ verdict: "verdict";
121
+ }>>;
122
+ acknowledgedAt: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "Instant", "out">>;
123
+ ruleId: z.ZodNullable<z.ZodString>;
124
+ evidence: z.ZodDiscriminatedUnion<[z.ZodObject<{
125
+ source: z.ZodLiteral<"ops-failures">;
126
+ fingerprint: z.ZodString;
127
+ }, z.core.$strip>, z.ZodObject<{
128
+ source: z.ZodLiteral<"sweep-runs">;
129
+ kind: z.ZodEnum<{
130
+ freshness: "freshness";
131
+ schedule: "schedule";
132
+ }>;
133
+ unit: z.ZodString;
134
+ }, z.core.$strip>], "source">;
135
+ likelyCause: z.ZodNullable<z.ZodObject<{
136
+ kind: z.ZodLiteral<"deploy">;
137
+ version: z.ZodString;
138
+ reason: z.ZodString;
139
+ }, z.core.$strip>>;
140
+ }, z.core.$strip>;
141
+ export type FindingEntry = z.infer<typeof findingEntry>;
142
+ /** The longest a suppression may last. A permanent "never show me this" is not a rule; it is a blind spot. */
143
+ export declare const FINDING_RULE_MAX_DAYS = 90;
144
+ /**
145
+ * A suppress rule (#1748): a scope plus an expiry. A matching occurrence is still COUNTED on its
146
+ * finding, but the finding stays `suppressed` instead of opening. Each set field narrows; at
147
+ * least one must be set, so a rule never silences a whole tenant.
148
+ */
149
+ export declare const findingRuleInput: z.ZodObject<{
150
+ kind: z.ZodOptional<z.ZodEnum<{
151
+ drift: "drift";
152
+ invariant: "invariant";
153
+ recurring: "recurring";
154
+ }>>;
155
+ operation: z.ZodOptional<z.ZodString>;
156
+ code: z.ZodOptional<z.ZodEnum<{
157
+ conflict: "conflict";
158
+ forbidden: "forbidden";
159
+ internal: "internal";
160
+ not_found: "not_found";
161
+ permission_denied: "permission_denied";
162
+ precondition_failed: "precondition_failed";
163
+ rate_limited: "rate_limited";
164
+ unauthenticated: "unauthenticated";
165
+ unavailable: "unavailable";
166
+ validation_failed: "validation_failed";
167
+ }>>;
168
+ subject: z.ZodOptional<z.ZodString>;
169
+ expiresAt: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
170
+ reason: z.ZodString;
171
+ }, z.core.$strip>;
172
+ export type FindingRuleInput = z.infer<typeof findingRuleInput>;
173
+ export declare const findingRuleEntry: z.ZodObject<{
174
+ id: z.ZodString;
175
+ tenantId: z.core.$ZodBranded<z.ZodString, "TenantId", "out">;
176
+ kind: z.ZodNullable<z.ZodEnum<{
177
+ drift: "drift";
178
+ invariant: "invariant";
179
+ recurring: "recurring";
180
+ }>>;
181
+ operation: z.ZodNullable<z.ZodString>;
182
+ code: z.ZodNullable<z.ZodEnum<{
183
+ conflict: "conflict";
184
+ forbidden: "forbidden";
185
+ internal: "internal";
186
+ not_found: "not_found";
187
+ permission_denied: "permission_denied";
188
+ precondition_failed: "precondition_failed";
189
+ rate_limited: "rate_limited";
190
+ unauthenticated: "unauthenticated";
191
+ unavailable: "unavailable";
192
+ validation_failed: "validation_failed";
193
+ }>>;
194
+ subject: z.ZodNullable<z.ZodString>;
195
+ expiresAt: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
196
+ reason: z.ZodString;
197
+ createdBy: z.ZodString;
198
+ createdAt: z.core.$ZodBranded<z.ZodString, "Instant", "out">;
199
+ }, z.core.$strip>;
200
+ export type FindingRuleEntry = z.infer<typeof findingRuleEntry>;
201
+ /** Filter for `listFindings`. `tenantId` absent is the staff fleet read; a tenant's read is forced to it. */
202
+ export interface FindingFilter {
203
+ tenantId?: z.infer<typeof tenantId>;
204
+ status?: FindingStatus;
205
+ kind?: FindingKind;
206
+ limit?: number;
207
+ }
208
+ //# sourceMappingURL=findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../src/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;;;;EAA8C,CAAC;AACvE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;EAAsD,CAAC;AACjF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;EAAwC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,eAAe;;;;EAA0C,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,oGAAoG;AACpG,eAAO,MAAM,eAAe;;;;;;;;;;6BAK1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;iBAK7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmCvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,8GAA8G;AAC9G,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;iBAWzB,CAAC;AACL,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,6GAA6G;AAC7G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,116 @@
1
+ import { z } from 'zod';
2
+ import { instant, scopeId, tenantId } from './ids.js';
3
+ import { errorCode } from './errors.js';
4
+ /**
5
+ * Findings (#1748): anomalies a tenant triages like email, in one inbox with one lifecycle.
6
+ *
7
+ * - `invariant`: a rule was broken — expected 0, observed N (a scheduled run that failed).
8
+ * - `drift`: unusual against an expectation — a freshness expectation gone stale.
9
+ * - `recurring`: one failure shape, seen again and again — the tenant's own projection of an
10
+ * `_substrat_issues` fingerprint (#1233), counted over that tenant's occurrences only.
11
+ *
12
+ * A finding is TENANT-scoped by construction: its counters, versions and evidence come from
13
+ * that tenant's own rows, so the fleet aggregate it shares a fingerprint with is never visible
14
+ * through it. It carries no free text from the evidence (no message, no upstream reference):
15
+ * the evidence ref names where the rows are, and the reader reads them through its own
16
+ * tenant-forced view.
17
+ */
18
+ export const findingKind = z.enum(['invariant', 'drift', 'recurring']);
19
+ /**
20
+ * The lifecycle. `_substrat_issues` maps onto it 1:1 — new → `open`, regressed → `open` with
21
+ * `regressed`, resolved → `resolved`, ignored → `suppressed` — and `acked` is the one state an
22
+ * issue has no word for: "somebody is on it".
23
+ */
24
+ export const findingStatus = z.enum(['open', 'acked', 'resolved', 'suppressed']);
25
+ /**
26
+ * What a verdict may SET. `suppressed` is never set directly: it is what a suppress RULE does,
27
+ * because a suppression without a scope and an expiry is a finding nobody will ever see again.
28
+ */
29
+ export const findingStatusInput = z.enum(['open', 'acked', 'resolved']);
30
+ export const findingSeverity = z.enum(['info', 'warning', 'critical']);
31
+ /** Where the occurrences behind a finding are read: the reader's own tenant-forced view of them. */
32
+ export const findingEvidence = z.discriminatedUnion('source', [
33
+ /** `GET /ops-failures`, grouped by this fingerprint. */
34
+ z.object({ source: z.literal('ops-failures'), fingerprint: z.string().min(1) }),
35
+ /** `GET /sweep-runs?kind=…&unit=…`. */
36
+ z.object({ source: z.literal('sweep-runs'), kind: z.enum(['schedule', 'freshness']), unit: z.string().min(1) }),
37
+ ]);
38
+ /**
39
+ * Why the finding is believed to have started, with the reason stated. Only `deploy` today: a
40
+ * finding that comes back under a version other than the one it was resolved under names the
41
+ * new version. Nothing is claimed when nothing changed — no cause is better than an invented one.
42
+ */
43
+ export const findingLikelyCause = z.object({
44
+ kind: z.literal('deploy'),
45
+ /** The version-registry id the finding was seen under. */
46
+ version: z.string().min(1),
47
+ reason: z.string().min(1),
48
+ });
49
+ export const findingEntry = z.object({
50
+ id: z.string().min(1),
51
+ tenantId,
52
+ kind: findingKind,
53
+ /** The dedupe key within (tenant, kind): a fingerprint, or a sweep unit. */
54
+ subject: z.string().min(1),
55
+ status: findingStatus,
56
+ /** A fresh occurrence reopened a resolved finding. Cleared by the next `resolved` verdict. */
57
+ regressed: z.boolean(),
58
+ severity: findingSeverity,
59
+ title: z.string().min(1),
60
+ operation: z.string().nullable(),
61
+ /** The taxonomy codes seen on this finding, newest first, at most five. */
62
+ codes: z.array(errorCode),
63
+ vertical: z.string().nullable(),
64
+ scopeId: scopeId.nullable(),
65
+ /** This tenant's occurrences since the finding was first seen — never a fleet count. */
66
+ count: z.number().int().positive(),
67
+ firstSeen: instant,
68
+ lastSeen: instant,
69
+ lastVersion: z.string().nullable(),
70
+ /** `lastVersion` when the last `resolved` landed — the X of "resolved under X, seen again under Y". */
71
+ resolvedVersion: z.string().nullable(),
72
+ resolvedAt: instant.nullable(),
73
+ /**
74
+ * How the last resolve happened: a person's `verdict`, or `stale` — an open finding that went
75
+ * quiet for the whole retention window, resolved (and audited) by the retention pass rather
76
+ * than deleted out from under whoever was watching it.
77
+ */
78
+ resolution: z.enum(['verdict', 'stale']).nullable(),
79
+ acknowledgedAt: instant.nullable(),
80
+ /** The suppress rule holding it, while `suppressed`. */
81
+ ruleId: z.string().nullable(),
82
+ evidence: findingEvidence,
83
+ likelyCause: findingLikelyCause.nullable(),
84
+ });
85
+ /** The longest a suppression may last. A permanent "never show me this" is not a rule; it is a blind spot. */
86
+ export const FINDING_RULE_MAX_DAYS = 90;
87
+ /**
88
+ * A suppress rule (#1748): a scope plus an expiry. A matching occurrence is still COUNTED on its
89
+ * finding, but the finding stays `suppressed` instead of opening. Each set field narrows; at
90
+ * least one must be set, so a rule never silences a whole tenant.
91
+ */
92
+ export const findingRuleInput = z
93
+ .object({
94
+ kind: findingKind.optional(),
95
+ operation: z.string().min(1).optional(),
96
+ code: errorCode.optional(),
97
+ subject: z.string().min(1).optional(),
98
+ expiresAt: instant,
99
+ reason: z.string().min(1).max(500),
100
+ })
101
+ .refine((r) => r.kind !== undefined || r.operation !== undefined || r.code !== undefined || r.subject !== undefined, {
102
+ message: 'a suppress rule names at least one of kind, operation, code or subject',
103
+ });
104
+ export const findingRuleEntry = z.object({
105
+ id: z.string().min(1),
106
+ tenantId,
107
+ kind: findingKind.nullable(),
108
+ operation: z.string().nullable(),
109
+ code: errorCode.nullable(),
110
+ subject: z.string().nullable(),
111
+ expiresAt: instant,
112
+ reason: z.string(),
113
+ createdBy: z.string(),
114
+ createdAt: instant,
115
+ });
116
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../src/findings.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -35,6 +35,7 @@ export * from './idempotency.js';
35
35
  export * from './connections.js';
36
36
  export * from './connection-health.js';
37
37
  export * from './control-plane.js';
38
+ export * from './findings.js';
38
39
  export * from './permission.js';
39
40
  export * from './impersonation.js';
40
41
  export * from './events.js';
@@ -56,6 +57,7 @@ export * from './ci.js';
56
57
  export * from './money.js';
57
58
  export * from './attachments.js';
58
59
  export * from './kernel-events.js';
60
+ export * from './entity-state.js';
59
61
  export * from './model.js';
60
62
  export * from './operations.js';
61
63
  export * from './lifecycle.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -35,6 +35,7 @@ export * from './idempotency.js';
35
35
  export * from './connections.js';
36
36
  export * from './connection-health.js';
37
37
  export * from './control-plane.js';
38
+ export * from './findings.js';
38
39
  export * from './permission.js';
39
40
  export * from './impersonation.js';
40
41
  export * from './events.js';
@@ -56,6 +57,7 @@ export * from './ci.js';
56
57
  export * from './money.js';
57
58
  export * from './attachments.js';
58
59
  export * from './kernel-events.js';
60
+ export * from './entity-state.js';
59
61
  export * from './model.js';
60
62
  export * from './operations.js';
61
63
  export * from './lifecycle.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"kernel-events.d.ts","sourceRoot":"","sources":["../src/kernel-events.ts"],"names":[],"mappings":"AA8BA,0FAA0F;AAC1F,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAAwC,CAAC;AAElG,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,SAAU,MAAM,KAAG,OAAoC,CAAC;AAE9F,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO5D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ3D"}
1
+ {"version":3,"file":"kernel-events.d.ts","sourceRoot":"","sources":["../src/kernel-events.ts"],"names":[],"mappings":"AAmCA,0FAA0F;AAC1F,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAAwC,CAAC;AAElG,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,SAAU,MAAM,KAAG,OAAoC,CAAC;AAE9F,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO5D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ3D"}
@@ -1,5 +1,6 @@
1
1
  import { ATTACHMENT_ADDED, ATTACHMENT_REMOVED } from './attachments.js';
2
2
  import { CAPABILITY_EXERCISED, CAPABILITY_MINTED, CAPABILITY_REVOKED } from './capability.js';
3
+ import { ENTITY_ARCHIVED, ENTITY_RESTORED, ENTITY_TRASHED, ENTITY_UNARCHIVED } from './entity-state.js';
3
4
  import { substratError } from './errors.js';
4
5
  import { ENTITY_LINKED, ENTITY_RELINKED } from './permission.js';
5
6
  /**
@@ -23,8 +24,12 @@ const KERNEL_AUTHORED = new Set([
23
24
  CAPABILITY_EXERCISED,
24
25
  CAPABILITY_MINTED,
25
26
  CAPABILITY_REVOKED,
27
+ ENTITY_ARCHIVED,
26
28
  ENTITY_LINKED,
27
29
  ENTITY_RELINKED,
30
+ ENTITY_RESTORED,
31
+ ENTITY_TRASHED,
32
+ ENTITY_UNARCHIVED,
28
33
  ]);
29
34
  /** The reserved types, for readers: a frozen snapshot, not the set the guards consult. */
30
35
  export const KERNEL_AUTHORED_EVENT_TYPES = Object.freeze([...KERNEL_AUTHORED]);
@@ -1 +1 @@
1
- {"version":3,"file":"kernel-events.js","sourceRoot":"","sources":["../src/kernel-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,eAAe;CAChB,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,CAAC,MAAM,2BAA2B,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AAElG,+CAA+C;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE9F,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACvC,MAAM,aAAa,CACjB,mBAAmB,EACnB,yBAAyB,IAAI,+CAA+C,EAC5E,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,EAAE,CACxE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACtC,MAAM,aAAa,CACjB,UAAU,EACV,qBAAqB,IAAI,qDAAqD;QAC5E,qDAAqD;QACrD,8CAA8C,CACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"kernel-events.js","sourceRoot":"","sources":["../src/kernel-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,aAAa;IACb,eAAe;IACf,eAAe;IACf,cAAc;IACd,iBAAiB;CAClB,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,CAAC,MAAM,2BAA2B,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AAElG,+CAA+C;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE9F,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACvC,MAAM,aAAa,CACjB,mBAAmB,EACnB,yBAAyB,IAAI,+CAA+C,EAC5E,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,EAAE,CACxE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACtC,MAAM,aAAa,CACjB,UAAU,EACV,qBAAqB,IAAI,qDAAqD;QAC5E,qDAAqD;QACrD,8CAA8C,CACjD,CAAC;AACJ,CAAC"}
@@ -300,6 +300,13 @@ export declare const moduleManifest: z.ZodObject<{
300
300
  table: z.ZodOptional<z.ZodString>;
301
301
  idColumn: z.ZodOptional<z.ZodString>;
302
302
  }, z.core.$strip>>>;
303
+ entityStates: z.ZodOptional<z.ZodArray<z.ZodObject<{
304
+ archivePermission: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "PermissionKey", "out">>;
305
+ trashPermission: z.ZodOptional<z.core.$ZodBranded<z.ZodString, "PermissionKey", "out">>;
306
+ table: z.ZodOptional<z.ZodString>;
307
+ idColumn: z.ZodOptional<z.ZodString>;
308
+ entityType: z.ZodString;
309
+ }, z.core.$strip>>>;
303
310
  ui: z.ZodOptional<z.ZodObject<{
304
311
  routes: z.ZodOptional<z.ZodArray<z.ZodObject<{
305
312
  path: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}