@lovrozagar/oat 0.9.1 → 0.11.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.
Files changed (283) hide show
  1. package/README.md +26 -1936
  2. package/dist/cli.js +326 -60
  3. package/dist/config/define-config.d.ts +15 -1
  4. package/dist/config/define-config.d.ts.map +1 -1
  5. package/dist/config/define-config.js.map +1 -1
  6. package/dist/config/validate.d.ts +12 -0
  7. package/dist/config/validate.d.ts.map +1 -0
  8. package/dist/config/validate.js +86 -0
  9. package/dist/config/validate.js.map +1 -0
  10. package/dist/conformance/effects.d.ts +9 -0
  11. package/dist/conformance/effects.d.ts.map +1 -0
  12. package/dist/conformance/effects.js +276 -0
  13. package/dist/conformance/effects.js.map +1 -0
  14. package/dist/conformance/expected-failures.d.ts +18 -0
  15. package/dist/conformance/expected-failures.d.ts.map +1 -0
  16. package/dist/conformance/expected-failures.js +48 -0
  17. package/dist/conformance/expected-failures.js.map +1 -0
  18. package/dist/conformance/feature-gate.d.ts +7 -0
  19. package/dist/conformance/feature-gate.d.ts.map +1 -0
  20. package/dist/conformance/feature-gate.js +428 -0
  21. package/dist/conformance/feature-gate.js.map +1 -0
  22. package/dist/conformance/fuzz.d.ts +108 -0
  23. package/dist/conformance/fuzz.d.ts.map +1 -0
  24. package/dist/conformance/fuzz.js +246 -0
  25. package/dist/conformance/fuzz.js.map +1 -0
  26. package/dist/conformance/leaks.d.ts +10 -0
  27. package/dist/conformance/leaks.d.ts.map +1 -0
  28. package/dist/conformance/leaks.js +23 -0
  29. package/dist/conformance/leaks.js.map +1 -0
  30. package/dist/conformance/pool.d.ts +49 -0
  31. package/dist/conformance/pool.d.ts.map +1 -0
  32. package/dist/conformance/pool.js +75 -0
  33. package/dist/conformance/pool.js.map +1 -0
  34. package/dist/conformance/rate-limit.d.ts +7 -0
  35. package/dist/conformance/rate-limit.d.ts.map +1 -0
  36. package/dist/conformance/rate-limit.js +372 -0
  37. package/dist/conformance/rate-limit.js.map +1 -0
  38. package/dist/conformance/scope.d.ts +15 -0
  39. package/dist/conformance/scope.d.ts.map +1 -0
  40. package/dist/conformance/scope.js +78 -0
  41. package/dist/conformance/scope.js.map +1 -0
  42. package/dist/conformance/seed-contract.d.ts +11 -0
  43. package/dist/conformance/seed-contract.d.ts.map +1 -0
  44. package/dist/conformance/seed-contract.js +680 -0
  45. package/dist/conformance/seed-contract.js.map +1 -0
  46. package/dist/conformance/shapes.d.ts +35 -0
  47. package/dist/conformance/shapes.d.ts.map +1 -0
  48. package/dist/conformance/shapes.js +162 -0
  49. package/dist/conformance/shapes.js.map +1 -0
  50. package/dist/conformance/specs.d.ts +21 -0
  51. package/dist/conformance/specs.d.ts.map +1 -0
  52. package/dist/conformance/specs.js +306 -0
  53. package/dist/conformance/specs.js.map +1 -0
  54. package/dist/conformance/suite.d.ts +209 -0
  55. package/dist/conformance/suite.d.ts.map +1 -0
  56. package/dist/conformance/suite.js +1538 -0
  57. package/dist/conformance/suite.js.map +1 -0
  58. package/dist/conformance/unique.d.ts +7 -0
  59. package/dist/conformance/unique.d.ts.map +1 -0
  60. package/dist/conformance/unique.js +586 -0
  61. package/dist/conformance/unique.js.map +1 -0
  62. package/dist/conformance/worker.d.ts +3 -0
  63. package/dist/conformance/worker.d.ts.map +1 -0
  64. package/dist/conformance/worker.js +27 -0
  65. package/dist/conformance/worker.js.map +1 -0
  66. package/dist/index.d.ts +10 -3
  67. package/dist/index.js +6 -2
  68. package/dist/reference/defects.d.ts +71 -1
  69. package/dist/reference/defects.d.ts.map +1 -1
  70. package/dist/reference/defects.js +74 -8
  71. package/dist/reference/defects.js.map +1 -1
  72. package/dist/reference/dialect.d.ts +6 -4
  73. package/dist/reference/dialect.d.ts.map +1 -1
  74. package/dist/reference/dialect.js +1 -0
  75. package/dist/reference/dialect.js.map +1 -1
  76. package/dist/reference/http.d.ts +17 -25
  77. package/dist/reference/http.d.ts.map +1 -1
  78. package/dist/reference/http.js +574 -224
  79. package/dist/reference/http.js.map +1 -1
  80. package/dist/reference/listing.d.ts +51 -0
  81. package/dist/reference/listing.d.ts.map +1 -0
  82. package/dist/reference/listing.js +256 -0
  83. package/dist/reference/listing.js.map +1 -0
  84. package/dist/reference/model.d.ts +35 -1
  85. package/dist/reference/model.d.ts.map +1 -1
  86. package/dist/reference/model.js +42 -0
  87. package/dist/reference/model.js.map +1 -1
  88. package/dist/reference/query.d.ts +132 -43
  89. package/dist/reference/query.d.ts.map +1 -1
  90. package/dist/reference/query.js +397 -315
  91. package/dist/reference/query.js.map +1 -1
  92. package/dist/reference/shapes.d.ts +60 -0
  93. package/dist/reference/shapes.d.ts.map +1 -0
  94. package/dist/reference/shapes.js +142 -0
  95. package/dist/reference/shapes.js.map +1 -0
  96. package/dist/reference/spec.d.ts +9 -2
  97. package/dist/reference/spec.d.ts.map +1 -1
  98. package/dist/reference/spec.js +291 -71
  99. package/dist/reference/spec.js.map +1 -1
  100. package/dist/reference/store-api.d.ts +14 -43
  101. package/dist/reference/store-api.d.ts.map +1 -1
  102. package/dist/reference/store-api.js +8 -58
  103. package/dist/reference/store-api.js.map +1 -1
  104. package/dist/reference/stores/memory.d.ts +12 -15
  105. package/dist/reference/stores/memory.d.ts.map +1 -1
  106. package/dist/reference/stores/memory.js +22 -70
  107. package/dist/reference/stores/memory.js.map +1 -1
  108. package/dist/reference/stores/postgres.d.ts +11 -23
  109. package/dist/reference/stores/postgres.d.ts.map +1 -1
  110. package/dist/reference/stores/postgres.js +53 -334
  111. package/dist/reference/stores/postgres.js.map +1 -1
  112. package/dist/reference/stores/sql-compile.d.ts +36 -0
  113. package/dist/reference/stores/sql-compile.d.ts.map +1 -0
  114. package/dist/reference/stores/sql-compile.js +95 -0
  115. package/dist/reference/stores/sql-compile.js.map +1 -0
  116. package/dist/reference/stores/sqlite.d.ts +12 -27
  117. package/dist/reference/stores/sqlite.d.ts.map +1 -1
  118. package/dist/reference/stores/sqlite.js +54 -355
  119. package/dist/reference/stores/sqlite.js.map +1 -1
  120. package/dist/report/console.d.ts +2 -1
  121. package/dist/report/console.d.ts.map +1 -1
  122. package/dist/report/console.js +56 -10
  123. package/dist/report/console.js.map +1 -1
  124. package/dist/report/matrix.d.ts +10 -13
  125. package/dist/report/matrix.d.ts.map +1 -1
  126. package/dist/report/matrix.js +82 -18
  127. package/dist/report/matrix.js.map +1 -1
  128. package/dist/report/render.d.ts +18 -1
  129. package/dist/report/render.d.ts.map +1 -1
  130. package/dist/report/render.js +169 -14
  131. package/dist/report/render.js.map +1 -1
  132. package/dist/runtime/async.d.ts +16 -3
  133. package/dist/runtime/async.d.ts.map +1 -1
  134. package/dist/runtime/async.js +24 -19
  135. package/dist/runtime/async.js.map +1 -1
  136. package/dist/runtime/auth.d.ts +2 -9
  137. package/dist/runtime/auth.d.ts.map +1 -1
  138. package/dist/runtime/auth.js +38 -62
  139. package/dist/runtime/auth.js.map +1 -1
  140. package/dist/runtime/body.d.ts +15 -3
  141. package/dist/runtime/body.d.ts.map +1 -1
  142. package/dist/runtime/body.js +61 -12
  143. package/dist/runtime/body.js.map +1 -1
  144. package/dist/runtime/check-costs.d.ts +15 -0
  145. package/dist/runtime/check-costs.d.ts.map +1 -0
  146. package/dist/runtime/check-costs.js +114 -0
  147. package/dist/runtime/check-costs.js.map +1 -0
  148. package/dist/runtime/check-ids.d.ts +15 -0
  149. package/dist/runtime/check-ids.d.ts.map +1 -0
  150. package/dist/runtime/check-ids.js +140 -0
  151. package/dist/runtime/check-ids.js.map +1 -0
  152. package/dist/runtime/checks.d.ts +122 -18
  153. package/dist/runtime/checks.d.ts.map +1 -1
  154. package/dist/runtime/checks.js +3437 -1933
  155. package/dist/runtime/checks.js.map +1 -1
  156. package/dist/runtime/client.d.ts +112 -0
  157. package/dist/runtime/client.d.ts.map +1 -1
  158. package/dist/runtime/client.js +271 -39
  159. package/dist/runtime/client.js.map +1 -1
  160. package/dist/runtime/cookies.d.ts +16 -2
  161. package/dist/runtime/cookies.d.ts.map +1 -1
  162. package/dist/runtime/cookies.js +83 -22
  163. package/dist/runtime/cookies.js.map +1 -1
  164. package/dist/runtime/exchanges.d.ts +4 -5
  165. package/dist/runtime/exchanges.d.ts.map +1 -1
  166. package/dist/runtime/exchanges.js +33 -55
  167. package/dist/runtime/exchanges.js.map +1 -1
  168. package/dist/runtime/exit.d.ts +40 -0
  169. package/dist/runtime/exit.d.ts.map +1 -0
  170. package/dist/runtime/exit.js +48 -0
  171. package/dist/runtime/exit.js.map +1 -0
  172. package/dist/runtime/feature-gate.d.ts +0 -9
  173. package/dist/runtime/feature-gate.d.ts.map +1 -1
  174. package/dist/runtime/feature-gate.js +0 -21
  175. package/dist/runtime/feature-gate.js.map +1 -1
  176. package/dist/runtime/finding.d.ts +61 -7
  177. package/dist/runtime/finding.d.ts.map +1 -1
  178. package/dist/runtime/finding.js +74 -12
  179. package/dist/runtime/finding.js.map +1 -1
  180. package/dist/runtime/fixture.d.ts +35 -28
  181. package/dist/runtime/fixture.d.ts.map +1 -1
  182. package/dist/runtime/fixture.js +92 -731
  183. package/dist/runtime/fixture.js.map +1 -1
  184. package/dist/runtime/generate.d.ts +63 -0
  185. package/dist/runtime/generate.d.ts.map +1 -0
  186. package/dist/runtime/generate.js +635 -0
  187. package/dist/runtime/generate.js.map +1 -0
  188. package/dist/runtime/headers.d.ts +6 -0
  189. package/dist/runtime/headers.d.ts.map +1 -0
  190. package/dist/runtime/headers.js +16 -0
  191. package/dist/runtime/headers.js.map +1 -0
  192. package/dist/runtime/path.d.ts +7 -0
  193. package/dist/runtime/path.d.ts.map +1 -0
  194. package/dist/runtime/path.js +44 -0
  195. package/dist/runtime/path.js.map +1 -0
  196. package/dist/runtime/payloads.d.ts +2 -0
  197. package/dist/runtime/payloads.d.ts.map +1 -1
  198. package/dist/runtime/payloads.js +2 -1
  199. package/dist/runtime/payloads.js.map +1 -1
  200. package/dist/runtime/rate-limit.d.ts +6 -4
  201. package/dist/runtime/rate-limit.d.ts.map +1 -1
  202. package/dist/runtime/rate-limit.js +22 -33
  203. package/dist/runtime/rate-limit.js.map +1 -1
  204. package/dist/runtime/redact.d.ts +24 -0
  205. package/dist/runtime/redact.d.ts.map +1 -0
  206. package/dist/runtime/redact.js +98 -0
  207. package/dist/runtime/redact.js.map +1 -0
  208. package/dist/runtime/run.d.ts +51 -2
  209. package/dist/runtime/run.d.ts.map +1 -1
  210. package/dist/runtime/run.js +463 -195
  211. package/dist/runtime/run.js.map +1 -1
  212. package/dist/runtime/runs.d.ts +5 -0
  213. package/dist/runtime/runs.d.ts.map +1 -1
  214. package/dist/runtime/runs.js +7 -1
  215. package/dist/runtime/runs.js.map +1 -1
  216. package/dist/runtime/scope.d.ts +163 -0
  217. package/dist/runtime/scope.d.ts.map +1 -0
  218. package/dist/runtime/scope.js +423 -0
  219. package/dist/runtime/scope.js.map +1 -0
  220. package/dist/runtime/teardown.d.ts +17 -4
  221. package/dist/runtime/teardown.d.ts.map +1 -1
  222. package/dist/runtime/teardown.js +49 -16
  223. package/dist/runtime/teardown.js.map +1 -1
  224. package/dist/runtime/transcript.d.ts +34 -2
  225. package/dist/runtime/transcript.d.ts.map +1 -1
  226. package/dist/runtime/transcript.js +119 -24
  227. package/dist/runtime/transcript.js.map +1 -1
  228. package/dist/runtime/unique.d.ts +2 -11
  229. package/dist/runtime/unique.d.ts.map +1 -1
  230. package/dist/runtime/unique.js +27 -53
  231. package/dist/runtime/unique.js.map +1 -1
  232. package/dist/runtime/validate.d.ts +13 -2
  233. package/dist/runtime/validate.d.ts.map +1 -1
  234. package/dist/runtime/validate.js +51 -31
  235. package/dist/runtime/validate.js.map +1 -1
  236. package/dist/runtime/wait.d.ts +2 -1
  237. package/dist/runtime/wait.d.ts.map +1 -1
  238. package/dist/runtime/wait.js +2 -36
  239. package/dist/runtime/wait.js.map +1 -1
  240. package/dist/runtime/world.d.ts +31 -3
  241. package/dist/runtime/world.d.ts.map +1 -1
  242. package/dist/runtime/world.js +113 -32
  243. package/dist/runtime/world.js.map +1 -1
  244. package/dist/spec/collection.d.ts +8 -2
  245. package/dist/spec/collection.d.ts.map +1 -1
  246. package/dist/spec/collection.js +47 -7
  247. package/dist/spec/collection.js.map +1 -1
  248. package/dist/spec/extensions.d.ts +5 -1
  249. package/dist/spec/extensions.d.ts.map +1 -1
  250. package/dist/spec/extensions.js +9 -2
  251. package/dist/spec/extensions.js.map +1 -1
  252. package/dist/spec/graph.d.ts +46 -0
  253. package/dist/spec/graph.d.ts.map +1 -1
  254. package/dist/spec/graph.js +175 -11
  255. package/dist/spec/graph.js.map +1 -1
  256. package/dist/spec/load.d.ts +25 -5
  257. package/dist/spec/load.d.ts.map +1 -1
  258. package/dist/spec/load.js +160 -59
  259. package/dist/spec/load.js.map +1 -1
  260. package/dist/spec/query-capabilities.d.ts +4 -0
  261. package/dist/spec/query-capabilities.d.ts.map +1 -1
  262. package/dist/spec/query-capabilities.js +6 -0
  263. package/dist/spec/query-capabilities.js.map +1 -1
  264. package/dist/spec/schema.d.ts +20 -0
  265. package/dist/spec/schema.d.ts.map +1 -0
  266. package/dist/spec/schema.js +118 -0
  267. package/dist/spec/schema.js.map +1 -0
  268. package/dist/spec/tag-schema.d.ts +12 -0
  269. package/dist/spec/tag-schema.d.ts.map +1 -0
  270. package/dist/spec/tag-schema.js +143 -0
  271. package/dist/spec/tag-schema.js.map +1 -0
  272. package/dist/spec/types.js +17 -1
  273. package/dist/spec/types.js.map +1 -1
  274. package/docs/api.md +59 -0
  275. package/docs/assumptions.md +99 -0
  276. package/docs/checks.md +183 -0
  277. package/docs/commands.md +214 -0
  278. package/docs/configuration.md +650 -0
  279. package/docs/model.md +184 -0
  280. package/docs/reference-defects.md +94 -0
  281. package/docs/reports.md +211 -0
  282. package/docs/tags.md +400 -0
  283. package/package.json +3 -1
@@ -5,13 +5,14 @@
5
5
  * ground truth — they compare the API against itself, through independent projections, or against
6
6
  * the oracle of what oat just wrote. Check ids are stable: the conformance suite asserts on them.
7
7
  */
8
- import type { Hooks } from "../config/define-config.ts";
8
+ import type { Hooks, PayloadPolicy } from "../config/define-config.ts";
9
9
  import type { InviteSpec } from "../spec/extensions.ts";
10
+ import { type CheckId } from "./check-ids.ts";
10
11
  import type { QueryCapability } from "../spec/extensions.ts";
11
12
  import { type EffectiveQueryCapabilities } from "../spec/query-capabilities.ts";
12
- import type { OperationModel, SpecModel } from "../spec/graph.ts";
13
- import type { Client } from "./client.ts";
14
- import type { FindingCollector } from "./finding.ts";
13
+ import { type EntityModel, type OperationModel, type SpecModel } from "../spec/graph.ts";
14
+ import type { Client, ReadClient } from "./client.ts";
15
+ import { type FindingCollector, type Outcome } from "./finding.ts";
15
16
  import type { BackoffConfig } from "./poll.ts";
16
17
  import type { UploadContext } from "./upload.ts";
17
18
  import type { SchemaValidator } from "./validate.ts";
@@ -29,11 +30,15 @@ export interface Actor {
29
30
  /** Value the owner puts in an invite body for this principal. */
30
31
  inviteAs: string | undefined;
31
32
  }
32
- export interface CheckContext {
33
+ /**
34
+ * What a check runs against. A check that does not mutate gets a client that cannot write; a
35
+ * helper that writes asks for a `WriteContext`, so a read-only check calling it does not compile.
36
+ */
37
+ export interface CheckContext<C extends ReadClient = ReadClient> {
33
38
  entityName: string;
34
39
  identity: string;
35
40
  model: SpecModel;
36
- client: Client;
41
+ client: C;
37
42
  findings: FindingCollector;
38
43
  scope: Record<string, string>;
39
44
  listOp: OperationModel;
@@ -61,6 +66,8 @@ export interface CheckContext {
61
66
  altScope: Record<string, string> | undefined;
62
67
  validator: SchemaValidator | undefined;
63
68
  seed: number;
69
+ /** Per-run token for values that must not collide across runs: unique columns, idempotency keys. */
70
+ nonce: string;
64
71
  /** Effective unique column sets for this entity (`[]` when the tag is absent or empty). */
65
72
  uniqueSets: string[][];
66
73
  /** First-variant create 409 adopted a same-tenant row; unique probes still run. */
@@ -79,33 +86,130 @@ export interface CheckContext {
79
86
  waitOps: OperationModel[];
80
87
  hooks: Hooks;
81
88
  outOfBand: BackoffConfig;
89
+ /**
90
+ * The payload policy, and the write paths that have had the whole catalog this run — keyed
91
+ * by media type and field type, naming the entity that ran it. Optional so a hand-built
92
+ * context still works; absent means the whole catalog.
93
+ */
94
+ payloads?: {
95
+ policy: PayloadPolicy;
96
+ ran: Map<string, string>;
97
+ };
98
+ /**
99
+ * Whether an operation is graded by this run. Always true on a full run. Checks that judge
100
+ * several operations consult it before invoking or judging one. Optional so a hand-built
101
+ * context still works.
102
+ */
103
+ inScope?: (op: OperationModel) => boolean;
104
+ /**
105
+ * Registers a record this check caused to exist — a declared effect, a started job — for
106
+ * teardown. Records made through the entity's own create are tracked without it.
107
+ */
108
+ recordCreated?: (entity: string, id: string, scope: Record<string, string>) => void;
109
+ /**
110
+ * Narrows what this check graded to the operations it actually judged. A check that judges
111
+ * after the fact — from whatever the transcript happens to hold — calls it, so an operation
112
+ * nothing ever exercised is not reported as held. Checks that invoke their subjects need not.
113
+ */
114
+ judged?: (operationIds: readonly string[]) => void;
82
115
  }
83
- export interface Check {
84
- id: string;
85
- /** Skipped silently when the entity lacks the operations this check needs. */
86
- applicable: (ctx: CheckContext) => boolean;
116
+ /** The context of a check that changes server state. */
117
+ export type WriteContext = CheckContext<Client>;
118
+ /**
119
+ * What a check's planning step decided: it can run, with what it needs to — or it cannot, and why.
120
+ *
121
+ * Planning is the only place a check decides whether it applies, and `run` receives what the plan
122
+ * found instead of looking again. A check that applies but then finds nothing to test cannot
123
+ * happen by construction: the two questions are one.
124
+ */
125
+ export type Plan<T> = {
126
+ ok: true;
127
+ value: T;
128
+ } | {
129
+ ok: false;
130
+ needs?: string;
131
+ };
132
+ export declare function ready<T>(value: T): Plan<T>;
133
+ /** The check cannot run here; `needs` says what is missing, else the check's own `needs` does. */
134
+ export declare function cannot(needs?: string): Plan<never>;
135
+ /** `next`, once `gate` holds — a plan built in stages, stopping at the first thing missing. */
136
+ export declare function andThen<A, T>(gate: Plan<A>, next: (value: A) => Plan<T>): Plan<T>;
137
+ /** A plan that carries nothing: the check applies exactly when `condition` holds. */
138
+ export declare function when(condition: boolean, needs?: string): Plan<undefined>;
139
+ interface CheckBase<T> {
140
+ id: CheckId;
141
+ /** Decides whether the check applies to this entity, and gathers what `run` needs if it does. */
142
+ plan(ctx: CheckContext): Plan<T>;
87
143
  /**
88
144
  * Check ids whose failure makes this one's result meaningless. When any has already fired for
89
145
  * this entity, the check is skipped rather than reporting a consequence as a separate defect —
90
146
  * one root cause should produce one finding, not a page of them.
91
147
  */
92
- dependsOn?: string[];
148
+ dependsOn?: CheckId[];
149
+ /**
150
+ * Whether the check judges traffic other checks sent. It runs after every check before it has
151
+ * finished, never alongside them, so it cannot miss what its batch-mates were still sending.
152
+ */
153
+ judgesTranscript?: boolean;
93
154
  /**
94
155
  * What this check needs in order to run at all, in the reader's terms.
95
156
  *
96
- * Reported when `applicable` returns false. Skipping silently would leave someone on an API
157
+ * Reported when the plan cannot run. Skipping silently would leave someone on an API
97
158
  * shaped differently from the fixture believing a quiet run meant a clean one, when in truth
98
159
  * half the suite never fired.
99
160
  */
100
161
  needs?: string;
101
162
  /**
102
- * Whether the check changes server state. Mutating checks run alone and in order; read-only
103
- * checks batch together. Two writers racing on the same cohort would make each other's
104
- * observations wrong, and the resulting finding would describe the interference rather than
105
- * the backend.
163
+ * Operations whose contract this check judges, decided from the entity graph alone.
164
+ *
165
+ * Static so `oat plan --ops` can show a scope without a network, and so a targeted run can
166
+ * queue only the entities whose checks grade a target. Every other operation a check calls is
167
+ * support: needed to reach or observe a subject, never graded itself. Required, so a new check
168
+ * cannot run invisibly under `--ops`.
106
169
  */
107
- mutates?: boolean;
108
- run: (ctx: CheckContext) => Promise<void>;
170
+ subjects: (entity: EntityModel, model: SpecModel) => string[];
109
171
  }
172
+ /**
173
+ * Whether the check changes server state. Mutating checks run alone and in order, with a client
174
+ * that can write; read-only checks batch together, with one that cannot. Two writers racing on
175
+ * the same cohort would make each other's observations wrong, and the resulting finding would
176
+ * describe the interference rather than the backend.
177
+ */
178
+ export type Check<T = unknown> = CheckBase<T> & ({
179
+ mutates: true;
180
+ run(ctx: WriteContext, plan: T): Promise<Outcome>;
181
+ } | {
182
+ mutates?: false;
183
+ run(ctx: CheckContext, plan: T): Promise<Outcome>;
184
+ });
185
+ /** Subject sets shared by the registry. Each reads the same fields the check's context is built from. */
186
+ export declare const subjectsOf: {
187
+ async: (entity: EntityModel, model: SpecModel) => string[];
188
+ asyncReceipt: (entity: EntityModel, model: SpecModel) => string[];
189
+ create: (entity: EntityModel) => string[];
190
+ createAndForeignReads: (entity: EntityModel, model: SpecModel) => string[];
191
+ createAndList: (entity: EntityModel) => string[];
192
+ delete: (entity: EntityModel) => string[];
193
+ deleteAndList: (entity: EntityModel) => string[];
194
+ effects: (entity: EntityModel, model: SpecModel) => string[];
195
+ invite: (entity: EntityModel) => string[];
196
+ list: (entity: EntityModel) => string[];
197
+ nonCreate: (entity: EntityModel, model: SpecModel) => string[];
198
+ read: (entity: EntityModel) => string[];
199
+ readAndGated: (entity: EntityModel, model: SpecModel) => string[];
200
+ readAndList: (entity: EntityModel) => string[];
201
+ update: (entity: EntityModel) => string[];
202
+ waits: (entity: EntityModel, model: SpecModel) => string[];
203
+ writeAndRead: (entity: EntityModel) => string[];
204
+ };
110
205
  export declare const CHECKS: readonly Check[];
206
+ /** Plans a check and, when it applies, runs it — what the scheduler does, for one check. */
207
+ export declare function runCheck(check: Check, ctx: WriteContext): Promise<Outcome>;
208
+ /**
209
+ * The registry checks itself as it loads: ids are unique, every id is one `CheckId` names, and
210
+ * every dependency is registered earlier. A dependency registered later can never suppress
211
+ * anything — it has not run yet when the scheduler consults it.
212
+ */
213
+ export declare function validateRegistry(checks: readonly Check[]): void;
214
+ export {};
111
215
  //# sourceMappingURL=checks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/runtime/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/runtime/checks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAEN,KAAK,0BAA0B,EAS/B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EAMd,MAAM,kBAAkB,CAAA;AAKzB,OAAO,KAAK,EAAE,MAAM,EAAY,UAAU,EAAkB,MAAM,aAAa,CAAA;AAK/E,OAAO,EAAsB,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAa,MAAM,cAAc,CAAA;AAKjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,KAAK,OAAO,EAAiC,MAAM,YAAY,CAAA;AAoBxE,kGAAkG;AAClG,MAAM,WAAW,KAAK;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,MAAM,EAAE,CAAC,CAAA;IACT,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,cAAc,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;IACpC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;IACpC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IAC7B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,0BAA0B,CAAA;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,uFAAuF;IACvF,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD;;;OAGG;IACH,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,6FAA6F;IAC7F,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAC5C,SAAS,EAAE,eAAe,GAAG,SAAS,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAA;IACb,2FAA2F;IAC3F,UAAU,EAAE,MAAM,EAAE,EAAE,CAAA;IACtB,mFAAmF;IACnF,aAAa,EAAE,OAAO,CAAA;IACtB,6EAA6E;IAC7E,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,6EAA6E;IAC7E,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,wDAAwD;IACxD,OAAO,EAAE,aAAa,CAAA;IACtB,8DAA8D;IAC9D,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,0DAA0D;IAC1D,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,uDAAuD;IACvD,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,aAAa,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC9D;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,OAAO,CAAA;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IACnF;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;CAClD;AAED,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;AA4G/C;;;;;;GAMG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5E,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAE1C;AAED,kGAAkG;AAClG,wBAAgB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAElD;AAED,+FAA+F;AAC/F,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAEjF;AAED,qFAAqF;AACrF,wBAAgB,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAExE;AAED,UAAU,SAAS,CAAC,CAAC;IACpB,EAAE,EAAE,OAAO,CAAA;IACX,iGAAiG;IACjG,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IAChC;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,EAAE,CAAA;CAC7D;AAED;;;;;GAKG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,GAC5C,CACG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GACpE;IAAE,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CACxE,CAAA;AAQF,yGAAyG;AACzG,eAAO,MAAM,UAAU;oBACN,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;2BACjC,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;qBAE9C,WAAW,KAAG,MAAM,EAAE;oCACP,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;4BAYhD,WAAW,KAAG,MAAM,EAAE;qBAC7B,WAAW,KAAG,MAAM,EAAE;4BACf,WAAW,KAAG,MAAM,EAAE;sBAC5B,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;qBACzC,WAAW,KAAG,MAAM,EAAE;mBAExB,WAAW,KAAG,MAAM,EAAE;wBACjB,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;mBAC7C,WAAW,KAAG,MAAM,EAAE;2BACd,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;0BAGzC,WAAW,KAAG,MAAM,EAAE;qBAC3B,WAAW,KAAG,MAAM,EAAE;oBACvB,WAAW,SAAS,SAAS,KAAG,MAAM,EAAE;2BACjC,WAAW,KAAG,MAAM,EAAE;CAC7C,CAAA;AA4zQD,eAAO,MAAM,MAAM,EAAE,SAAS,KAAK,EA0HlC,CAAA;AAED,4FAA4F;AAC5F,wBAAsB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAIhF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI,CAkB/D"}