@cat-factory/contracts 0.161.0 → 0.163.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 (61) hide show
  1. package/dist/execution.d.ts +20 -0
  2. package/dist/execution.d.ts.map +1 -1
  3. package/dist/execution.js +19 -0
  4. package/dist/execution.js.map +1 -1
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/notification-webhooks.d.ts +115 -0
  10. package/dist/notification-webhooks.d.ts.map +1 -0
  11. package/dist/notification-webhooks.js +86 -0
  12. package/dist/notification-webhooks.js.map +1 -0
  13. package/dist/pr-report.d.ts +346 -0
  14. package/dist/pr-report.d.ts.map +1 -0
  15. package/dist/pr-report.js +206 -0
  16. package/dist/pr-report.js.map +1 -0
  17. package/dist/public-api-keys.d.ts +31 -13
  18. package/dist/public-api-keys.d.ts.map +1 -1
  19. package/dist/public-api-keys.js +26 -8
  20. package/dist/public-api-keys.js.map +1 -1
  21. package/dist/public-decisions.d.ts +254 -0
  22. package/dist/public-decisions.d.ts.map +1 -0
  23. package/dist/public-decisions.js +150 -0
  24. package/dist/public-decisions.js.map +1 -0
  25. package/dist/routes/agent-runs.d.ts +2 -0
  26. package/dist/routes/agent-runs.d.ts.map +1 -1
  27. package/dist/routes/execution.d.ts +8 -0
  28. package/dist/routes/execution.d.ts.map +1 -1
  29. package/dist/routes/human-review.d.ts +1 -0
  30. package/dist/routes/human-review.d.ts.map +1 -1
  31. package/dist/routes/human-test.d.ts +5 -0
  32. package/dist/routes/human-test.d.ts.map +1 -1
  33. package/dist/routes/index.d.ts +2 -0
  34. package/dist/routes/index.d.ts.map +1 -1
  35. package/dist/routes/index.js +2 -0
  36. package/dist/routes/index.js.map +1 -1
  37. package/dist/routes/notification-webhooks.d.ts +111 -0
  38. package/dist/routes/notification-webhooks.d.ts.map +1 -0
  39. package/dist/routes/notification-webhooks.js +33 -0
  40. package/dist/routes/notification-webhooks.js.map +1 -0
  41. package/dist/routes/public-api.d.ts +59 -3
  42. package/dist/routes/public-api.d.ts.map +1 -1
  43. package/dist/routes/public-api.js +15 -0
  44. package/dist/routes/public-api.js.map +1 -1
  45. package/dist/routes/public-decisions.d.ts +602 -0
  46. package/dist/routes/public-decisions.d.ts.map +1 -0
  47. package/dist/routes/public-decisions.js +90 -0
  48. package/dist/routes/public-decisions.js.map +1 -0
  49. package/dist/routes/visual-confirm.d.ts +3 -0
  50. package/dist/routes/visual-confirm.d.ts.map +1 -1
  51. package/dist/routes/workspace-settings.d.ts +3 -0
  52. package/dist/routes/workspace-settings.d.ts.map +1 -1
  53. package/dist/routes/workspaces.d.ts +4 -0
  54. package/dist/routes/workspaces.d.ts.map +1 -1
  55. package/dist/snapshot.d.ts +2 -0
  56. package/dist/snapshot.d.ts.map +1 -1
  57. package/dist/workspace-settings.d.ts +14 -0
  58. package/dist/workspace-settings.d.ts.map +1 -1
  59. package/dist/workspace-settings.js +14 -0
  60. package/dist/workspace-settings.js.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,346 @@
1
+ import * as v from 'valibot';
2
+ /**
3
+ * The wire version of the report payload. Bumped when the JSON shape changes in a way an
4
+ * external consumer must notice. Backwards compatibility is a non-goal (see CLAUDE.md), so
5
+ * a bump means "re-read the schema", not "a compatibility shim exists".
6
+ */
7
+ export declare const PR_VERIFICATION_REPORT_VERSION = 1;
8
+ /**
9
+ * Whether a section has evidence to show.
10
+ * - `reported` — the producing step ran and its evidence is below.
11
+ * - `absent` — no producing step in this pipeline (or it never settled). `note` says so
12
+ * explicitly; a section is NEVER silently omitted, because "no tester section"
13
+ * and "the tester found nothing" must not look the same to a reviewer.
14
+ */
15
+ export declare const prReportSectionStatusSchema: v.PicklistSchema<["reported", "absent"], undefined>;
16
+ export type PrReportSectionStatus = v.InferOutput<typeof prReportSectionStatusSchema>;
17
+ /** One pipeline step, as the report's run metadata lists it. */
18
+ export declare const prReportStepSchema: v.ObjectSchema<{
19
+ /** 0-based position in the pipeline. */
20
+ readonly index: v.NumberSchema<undefined>;
21
+ /** The step's agent kind (`coder`, `ci`, `tester-api`, `merger`, a custom kind, …). */
22
+ readonly agentKind: v.StringSchema<undefined>;
23
+ /** The step's terminal state at compose time (`done`, `running`, `failed`, …). */
24
+ readonly state: v.StringSchema<undefined>;
25
+ /** The model actually resolved for the step, when one ran. */
26
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
27
+ }, undefined>;
28
+ export type PrReportStep = v.InferOutput<typeof prReportStepSchema>;
29
+ /** One tracker issue the task is linked to (GitHub Issues / Jira / Linear). */
30
+ export declare const prReportIssueSchema: v.ObjectSchema<{
31
+ /** The task source the issue came from (`github` / `jira` / `linear` / …). */
32
+ readonly source: v.StringSchema<undefined>;
33
+ /** The issue's id in that source (issue number, Jira key, …). */
34
+ readonly externalId: v.StringSchema<undefined>;
35
+ readonly title: v.StringSchema<undefined>;
36
+ readonly url: v.StringSchema<undefined>;
37
+ }, undefined>;
38
+ export type PrReportIssue = v.InferOutput<typeof prReportIssueSchema>;
39
+ /** Run metadata: what task this PR implements, and how it was produced. */
40
+ export declare const prReportRunSchema: v.ObjectSchema<{
41
+ /** The `ExecutionInstance` id — the key the observability panel is scoped by. */
42
+ readonly executionId: v.StringSchema<undefined>;
43
+ /** The board block (task) the run implements. */
44
+ readonly blockId: v.StringSchema<undefined>;
45
+ readonly blockTitle: v.StringSchema<undefined>;
46
+ readonly pipelineId: v.StringSchema<undefined>;
47
+ readonly pipelineName: v.StringSchema<undefined>;
48
+ /** The repo the run targeted, `owner/name`, when resolved. */
49
+ readonly repo: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
50
+ /** The VCS provider the repo lives on — neutral vocabulary, never assumed to be GitHub. */
51
+ readonly provider: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["github", "gitlab"], undefined>, undefined>, undefined>;
52
+ /** Epoch ms the run was created, when recorded. */
53
+ readonly startedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
54
+ /** Every step of the pipeline, in order. */
55
+ readonly steps: v.ArraySchema<v.ObjectSchema<{
56
+ /** 0-based position in the pipeline. */
57
+ readonly index: v.NumberSchema<undefined>;
58
+ /** The step's agent kind (`coder`, `ci`, `tester-api`, `merger`, a custom kind, …). */
59
+ readonly agentKind: v.StringSchema<undefined>;
60
+ /** The step's terminal state at compose time (`done`, `running`, `failed`, …). */
61
+ readonly state: v.StringSchema<undefined>;
62
+ /** The model actually resolved for the step, when one ran. */
63
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
64
+ }, undefined>, undefined>;
65
+ /** The tracker issues linked to the task (empty when none). */
66
+ readonly issues: v.ArraySchema<v.ObjectSchema<{
67
+ /** The task source the issue came from (`github` / `jira` / `linear` / …). */
68
+ readonly source: v.StringSchema<undefined>;
69
+ /** The issue's id in that source (issue number, Jira key, …). */
70
+ readonly externalId: v.StringSchema<undefined>;
71
+ readonly title: v.StringSchema<undefined>;
72
+ readonly url: v.StringSchema<undefined>;
73
+ }, undefined>, undefined>;
74
+ }, undefined>;
75
+ export type PrReportRun = v.InferOutput<typeof prReportRunSchema>;
76
+ /** One CI check run, as the `ci` gate's precheck saw it. */
77
+ export declare const prReportCheckSchema: v.ObjectSchema<{
78
+ readonly name: v.StringSchema<undefined>;
79
+ /** The provider's conclusion (`success`, `failure`, `timed_out`, …); null while running. */
80
+ readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
81
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
82
+ /** The repo the check belongs to, on a multi-repo task. */
83
+ readonly repo: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
84
+ }, undefined>;
85
+ export type PrReportCheck = v.InferOutput<typeof prReportCheckSchema>;
86
+ /**
87
+ * The `ci` gate's verdict. Composed from the gate step's own recorded state
88
+ * (`step.gate`) — NOT by re-probing the `CiStatusProvider`, which would cost a round trip
89
+ * and could disagree with the verdict the gate actually acted on.
90
+ */
91
+ export declare const prReportCiSchema: v.ObjectSchema<{
92
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
93
+ /** Says why the section is empty when `status` is `absent`. */
94
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
95
+ /** The gate's last precheck verdict. */
96
+ readonly verdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
97
+ /** The PR head commit the verdict was computed against. */
98
+ readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
99
+ /**
100
+ * The checks behind a FAILING verdict, by name + conclusion. Empty on a pass (the gate
101
+ * records failing-check detail only, since a green run has nothing to triage).
102
+ */
103
+ readonly failingChecks: v.ArraySchema<v.ObjectSchema<{
104
+ readonly name: v.StringSchema<undefined>;
105
+ /** The provider's conclusion (`success`, `failure`, `timed_out`, …); null while running. */
106
+ readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
107
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
108
+ /** The repo the check belongs to, on a multi-repo task. */
109
+ readonly repo: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
110
+ }, undefined>, undefined>;
111
+ /** How many `ci-fixer` rounds the gate dispatched, and its ceiling. */
112
+ readonly fixerAttempts: v.NumberSchema<undefined>;
113
+ readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
114
+ }, undefined>;
115
+ export type PrReportCi = v.InferOutput<typeof prReportCiSchema>;
116
+ /** One area the tester exercised, and how it went. */
117
+ export declare const prReportTestOutcomeSchema: v.ObjectSchema<{
118
+ readonly name: v.StringSchema<undefined>;
119
+ readonly status: v.StringSchema<undefined>;
120
+ readonly detail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
121
+ }, undefined>;
122
+ export type PrReportTestOutcome = v.InferOutput<typeof prReportTestOutcomeSchema>;
123
+ /** One concern the tester surfaced (a bug/risk the fixer was asked to address). */
124
+ export declare const prReportTestConcernSchema: v.ObjectSchema<{
125
+ readonly title: v.StringSchema<undefined>;
126
+ readonly severity: v.StringSchema<undefined>;
127
+ }, undefined>;
128
+ export type PrReportTestConcern = v.InferOutput<typeof prReportTestConcernSchema>;
129
+ /** The tester gate's structured report (`tester-api` / `tester-ui`). */
130
+ export declare const prReportTestsSchema: v.ObjectSchema<{
131
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
132
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
133
+ /** The tester's release verdict: did it greenlight the change? */
134
+ readonly greenlight: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
135
+ readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
136
+ /** Where the system under test ran (`local` docker-compose infra / `ephemeral` env). */
137
+ readonly environment: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
138
+ /** What the tester chose to exercise. */
139
+ readonly tested: v.ArraySchema<v.StringSchema<undefined>, undefined>;
140
+ readonly outcomes: v.ArraySchema<v.ObjectSchema<{
141
+ readonly name: v.StringSchema<undefined>;
142
+ readonly status: v.StringSchema<undefined>;
143
+ readonly detail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
144
+ }, undefined>, undefined>;
145
+ readonly concerns: v.ArraySchema<v.ObjectSchema<{
146
+ readonly title: v.StringSchema<undefined>;
147
+ readonly severity: v.StringSchema<undefined>;
148
+ }, undefined>, undefined>;
149
+ /** How many `fixer` rounds the tester looped through, and its ceiling. */
150
+ readonly fixerAttempts: v.NumberSchema<undefined>;
151
+ readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
152
+ }, undefined>;
153
+ export type PrReportTests = v.InferOutput<typeof prReportTestsSchema>;
154
+ /** One ephemeral environment the `deployer` step stood up (per service frame). */
155
+ export declare const prReportEnvironmentSchema: v.ObjectSchema<{
156
+ /** The service frame the environment was provisioned for. */
157
+ readonly frameId: v.StringSchema<undefined>;
158
+ /** `ready` (live), `failed` (the provision broke) or `skipped` (an infraless frame). */
159
+ readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
160
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
161
+ readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
162
+ }, undefined>;
163
+ export type PrReportEnvironment = v.InferOutput<typeof prReportEnvironmentSchema>;
164
+ /**
165
+ * The ephemeral-environment lifecycle: which environments came up, and whether they were
166
+ * torn down again. `teardown` reads the run's live environment projection:
167
+ * - `confirmed` — every environment reached a torn-down/expired state.
168
+ * - `pending` — at least one is still live (the run may still be using it).
169
+ * - `not_applicable` — nothing was ever provisioned.
170
+ */
171
+ export declare const prReportEnvironmentsSchema: v.ObjectSchema<{
172
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
173
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
174
+ readonly entries: v.ArraySchema<v.ObjectSchema<{
175
+ /** The service frame the environment was provisioned for. */
176
+ readonly frameId: v.StringSchema<undefined>;
177
+ /** `ready` (live), `failed` (the provision broke) or `skipped` (an infraless frame). */
178
+ readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
179
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
180
+ readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
181
+ }, undefined>, undefined>;
182
+ readonly teardown: v.PicklistSchema<["confirmed", "pending", "not_applicable"], undefined>;
183
+ }, undefined>;
184
+ export type PrReportEnvironments = v.InferOutput<typeof prReportEnvironmentsSchema>;
185
+ /**
186
+ * The `merger` step's scored assessment plus the engine's resolved decision. `assessment` is
187
+ * the agent's own scoring; `outcome`/`reason`/`presetName` are what the engine's
188
+ * `MergeResolver` did with it against the task's merge preset.
189
+ */
190
+ export declare const prReportMergeSchema: v.ObjectSchema<{
191
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
192
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
193
+ readonly assessment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
194
+ readonly complexity: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
195
+ readonly risk: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
196
+ readonly impact: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
197
+ readonly rationale: v.StringSchema<undefined>;
198
+ }, undefined>, undefined>, undefined>;
199
+ readonly outcome: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
200
+ readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
201
+ readonly presetName: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
202
+ }, undefined>;
203
+ export type PrReportMerge = v.InferOutput<typeof prReportMergeSchema>;
204
+ /**
205
+ * Where a human can inspect what every step actually did — the run's observability panel
206
+ * (Model activity / Provided context). Built from the deployment's public app URL
207
+ * (`appBaseUrl`); null when the deployment configured none, so the report never emits a
208
+ * link to nowhere.
209
+ */
210
+ export declare const prReportObservabilitySchema: v.ObjectSchema<{
211
+ readonly runUrl: v.NullableSchema<v.StringSchema<undefined>, undefined>;
212
+ }, undefined>;
213
+ export type PrReportObservability = v.InferOutput<typeof prReportObservabilitySchema>;
214
+ export declare const prVerificationReportSchema: v.ObjectSchema<{
215
+ /** See {@link PR_VERIFICATION_REPORT_VERSION}. */
216
+ readonly version: v.NumberSchema<undefined>;
217
+ /** Epoch ms the report was composed (refreshed on every publish). */
218
+ readonly generatedAt: v.NumberSchema<undefined>;
219
+ readonly run: v.ObjectSchema<{
220
+ /** The `ExecutionInstance` id — the key the observability panel is scoped by. */
221
+ readonly executionId: v.StringSchema<undefined>;
222
+ /** The board block (task) the run implements. */
223
+ readonly blockId: v.StringSchema<undefined>;
224
+ readonly blockTitle: v.StringSchema<undefined>;
225
+ readonly pipelineId: v.StringSchema<undefined>;
226
+ readonly pipelineName: v.StringSchema<undefined>;
227
+ /** The repo the run targeted, `owner/name`, when resolved. */
228
+ readonly repo: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
229
+ /** The VCS provider the repo lives on — neutral vocabulary, never assumed to be GitHub. */
230
+ readonly provider: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["github", "gitlab"], undefined>, undefined>, undefined>;
231
+ /** Epoch ms the run was created, when recorded. */
232
+ readonly startedAt: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
233
+ /** Every step of the pipeline, in order. */
234
+ readonly steps: v.ArraySchema<v.ObjectSchema<{
235
+ /** 0-based position in the pipeline. */
236
+ readonly index: v.NumberSchema<undefined>;
237
+ /** The step's agent kind (`coder`, `ci`, `tester-api`, `merger`, a custom kind, …). */
238
+ readonly agentKind: v.StringSchema<undefined>;
239
+ /** The step's terminal state at compose time (`done`, `running`, `failed`, …). */
240
+ readonly state: v.StringSchema<undefined>;
241
+ /** The model actually resolved for the step, when one ran. */
242
+ readonly model: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
243
+ }, undefined>, undefined>;
244
+ /** The tracker issues linked to the task (empty when none). */
245
+ readonly issues: v.ArraySchema<v.ObjectSchema<{
246
+ /** The task source the issue came from (`github` / `jira` / `linear` / …). */
247
+ readonly source: v.StringSchema<undefined>;
248
+ /** The issue's id in that source (issue number, Jira key, …). */
249
+ readonly externalId: v.StringSchema<undefined>;
250
+ readonly title: v.StringSchema<undefined>;
251
+ readonly url: v.StringSchema<undefined>;
252
+ }, undefined>, undefined>;
253
+ }, undefined>;
254
+ readonly ci: v.ObjectSchema<{
255
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
256
+ /** Says why the section is empty when `status` is `absent`. */
257
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
258
+ /** The gate's last precheck verdict. */
259
+ readonly verdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["pass", "pending", "fail"], undefined>, undefined>, undefined>;
260
+ /** The PR head commit the verdict was computed against. */
261
+ readonly headSha: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
262
+ /**
263
+ * The checks behind a FAILING verdict, by name + conclusion. Empty on a pass (the gate
264
+ * records failing-check detail only, since a green run has nothing to triage).
265
+ */
266
+ readonly failingChecks: v.ArraySchema<v.ObjectSchema<{
267
+ readonly name: v.StringSchema<undefined>;
268
+ /** The provider's conclusion (`success`, `failure`, `timed_out`, …); null while running. */
269
+ readonly conclusion: v.NullableSchema<v.StringSchema<undefined>, undefined>;
270
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
271
+ /** The repo the check belongs to, on a multi-repo task. */
272
+ readonly repo: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
273
+ }, undefined>, undefined>;
274
+ /** How many `ci-fixer` rounds the gate dispatched, and its ceiling. */
275
+ readonly fixerAttempts: v.NumberSchema<undefined>;
276
+ readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
277
+ }, undefined>;
278
+ readonly tests: v.ObjectSchema<{
279
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
280
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
281
+ /** The tester's release verdict: did it greenlight the change? */
282
+ readonly greenlight: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
283
+ readonly summary: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
284
+ /** Where the system under test ran (`local` docker-compose infra / `ephemeral` env). */
285
+ readonly environment: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
286
+ /** What the tester chose to exercise. */
287
+ readonly tested: v.ArraySchema<v.StringSchema<undefined>, undefined>;
288
+ readonly outcomes: v.ArraySchema<v.ObjectSchema<{
289
+ readonly name: v.StringSchema<undefined>;
290
+ readonly status: v.StringSchema<undefined>;
291
+ readonly detail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
292
+ }, undefined>, undefined>;
293
+ readonly concerns: v.ArraySchema<v.ObjectSchema<{
294
+ readonly title: v.StringSchema<undefined>;
295
+ readonly severity: v.StringSchema<undefined>;
296
+ }, undefined>, undefined>;
297
+ /** How many `fixer` rounds the tester looped through, and its ceiling. */
298
+ readonly fixerAttempts: v.NumberSchema<undefined>;
299
+ readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
300
+ }, undefined>;
301
+ readonly environments: v.ObjectSchema<{
302
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
303
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
304
+ readonly entries: v.ArraySchema<v.ObjectSchema<{
305
+ /** The service frame the environment was provisioned for. */
306
+ readonly frameId: v.StringSchema<undefined>;
307
+ /** `ready` (live), `failed` (the provision broke) or `skipped` (an infraless frame). */
308
+ readonly status: v.PicklistSchema<["ready", "failed", "skipped"], undefined>;
309
+ readonly url: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
310
+ readonly error: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
311
+ }, undefined>, undefined>;
312
+ readonly teardown: v.PicklistSchema<["confirmed", "pending", "not_applicable"], undefined>;
313
+ }, undefined>;
314
+ readonly merge: v.ObjectSchema<{
315
+ readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
316
+ readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
317
+ readonly assessment: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
318
+ readonly complexity: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
319
+ readonly risk: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
320
+ readonly impact: v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 1, undefined>]>;
321
+ readonly rationale: v.StringSchema<undefined>;
322
+ }, undefined>, undefined>, undefined>;
323
+ readonly outcome: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
324
+ readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
325
+ readonly presetName: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
326
+ }, undefined>;
327
+ readonly observability: v.ObjectSchema<{
328
+ readonly runUrl: v.NullableSchema<v.StringSchema<undefined>, undefined>;
329
+ }, undefined>;
330
+ /**
331
+ * What the report had to leave out to stay inside a pull-request body, one human-readable
332
+ * note per capped list (`"tests.outcomes: showing 50 of 118"`). Empty on any ordinary run.
333
+ *
334
+ * A capped list is only safe if it SAYS it was capped — "50 failing checks" and "50 of 118
335
+ * failing checks" call for very different reviewer reactions, and the whole point of this
336
+ * report is that a reader can trust what it shows to be the whole picture.
337
+ */
338
+ readonly truncations: v.ArraySchema<v.StringSchema<undefined>, undefined>;
339
+ }, undefined>;
340
+ export type PrVerificationReport = v.InferOutput<typeof prVerificationReportSchema>;
341
+ /**
342
+ * Parse-or-throw a report payload — used by the conformance suite (and any external
343
+ * consumer) to prove the JSON block the engine emitted is exactly this shape.
344
+ */
345
+ export declare function parsePrVerificationReport(value: unknown): PrVerificationReport;
346
+ //# sourceMappingURL=pr-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-report.d.ts","sourceRoot":"","sources":["../src/pr-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ import * as v from 'valibot';
2
+ import { mergeAssessmentSchema } from './merge.js';
3
+ import { vcsProviderSchema } from './routes/auth.js';
4
+ // ---------------------------------------------------------------------------
5
+ // PR verification report — the structured evidence bundle the ENGINE maintains on a
6
+ // run's pull request.
7
+ //
8
+ // The PR an agent run opens used to carry only whatever prose the coder agent wrote, so a
9
+ // reviewer had to take "tests pass" on faith. The platform already CAPTURES the facts (the
10
+ // `ci` gate's aggregated check runs, the tester's structured report, the deployer's
11
+ // per-frame environment outcomes, the merger's scored assessment, the per-step models); this
12
+ // is the wire shape that composes them into one report the engine writes onto the PR body —
13
+ // captured facts, never the agent's assertions.
14
+ //
15
+ // It is rendered as human-readable markdown PLUS a fenced JSON block carrying exactly this
16
+ // shape, so external tooling can ingest a report without scraping prose. See
17
+ // `docs/initiatives/pr-verification-report.md` for the form/shape decisions and
18
+ // `@cat-factory/kernel`'s `domain/pr-report.ts` for the marker-delimited splice that keeps
19
+ // the write idempotent across re-runs and retries.
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * The wire version of the report payload. Bumped when the JSON shape changes in a way an
23
+ * external consumer must notice. Backwards compatibility is a non-goal (see CLAUDE.md), so
24
+ * a bump means "re-read the schema", not "a compatibility shim exists".
25
+ */
26
+ export const PR_VERIFICATION_REPORT_VERSION = 1;
27
+ /**
28
+ * Whether a section has evidence to show.
29
+ * - `reported` — the producing step ran and its evidence is below.
30
+ * - `absent` — no producing step in this pipeline (or it never settled). `note` says so
31
+ * explicitly; a section is NEVER silently omitted, because "no tester section"
32
+ * and "the tester found nothing" must not look the same to a reviewer.
33
+ */
34
+ export const prReportSectionStatusSchema = v.picklist(['reported', 'absent']);
35
+ /** One pipeline step, as the report's run metadata lists it. */
36
+ export const prReportStepSchema = v.object({
37
+ /** 0-based position in the pipeline. */
38
+ index: v.number(),
39
+ /** The step's agent kind (`coder`, `ci`, `tester-api`, `merger`, a custom kind, …). */
40
+ agentKind: v.string(),
41
+ /** The step's terminal state at compose time (`done`, `running`, `failed`, …). */
42
+ state: v.string(),
43
+ /** The model actually resolved for the step, when one ran. */
44
+ model: v.optional(v.nullable(v.string())),
45
+ });
46
+ /** One tracker issue the task is linked to (GitHub Issues / Jira / Linear). */
47
+ export const prReportIssueSchema = v.object({
48
+ /** The task source the issue came from (`github` / `jira` / `linear` / …). */
49
+ source: v.string(),
50
+ /** The issue's id in that source (issue number, Jira key, …). */
51
+ externalId: v.string(),
52
+ title: v.string(),
53
+ url: v.string(),
54
+ });
55
+ /** Run metadata: what task this PR implements, and how it was produced. */
56
+ export const prReportRunSchema = v.object({
57
+ /** The `ExecutionInstance` id — the key the observability panel is scoped by. */
58
+ executionId: v.string(),
59
+ /** The board block (task) the run implements. */
60
+ blockId: v.string(),
61
+ blockTitle: v.string(),
62
+ pipelineId: v.string(),
63
+ pipelineName: v.string(),
64
+ /** The repo the run targeted, `owner/name`, when resolved. */
65
+ repo: v.optional(v.nullable(v.string())),
66
+ /** The VCS provider the repo lives on — neutral vocabulary, never assumed to be GitHub. */
67
+ provider: v.optional(v.nullable(vcsProviderSchema)),
68
+ /** Epoch ms the run was created, when recorded. */
69
+ startedAt: v.optional(v.nullable(v.number())),
70
+ /** Every step of the pipeline, in order. */
71
+ steps: v.array(prReportStepSchema),
72
+ /** The tracker issues linked to the task (empty when none). */
73
+ issues: v.array(prReportIssueSchema),
74
+ });
75
+ /** One CI check run, as the `ci` gate's precheck saw it. */
76
+ export const prReportCheckSchema = v.object({
77
+ name: v.string(),
78
+ /** The provider's conclusion (`success`, `failure`, `timed_out`, …); null while running. */
79
+ conclusion: v.nullable(v.string()),
80
+ url: v.optional(v.nullable(v.string())),
81
+ /** The repo the check belongs to, on a multi-repo task. */
82
+ repo: v.optional(v.nullable(v.string())),
83
+ });
84
+ /**
85
+ * The `ci` gate's verdict. Composed from the gate step's own recorded state
86
+ * (`step.gate`) — NOT by re-probing the `CiStatusProvider`, which would cost a round trip
87
+ * and could disagree with the verdict the gate actually acted on.
88
+ */
89
+ export const prReportCiSchema = v.object({
90
+ status: prReportSectionStatusSchema,
91
+ /** Says why the section is empty when `status` is `absent`. */
92
+ note: v.optional(v.nullable(v.string())),
93
+ /** The gate's last precheck verdict. */
94
+ verdict: v.optional(v.nullable(v.picklist(['pass', 'pending', 'fail']))),
95
+ /** The PR head commit the verdict was computed against. */
96
+ headSha: v.optional(v.nullable(v.string())),
97
+ /**
98
+ * The checks behind a FAILING verdict, by name + conclusion. Empty on a pass (the gate
99
+ * records failing-check detail only, since a green run has nothing to triage).
100
+ */
101
+ failingChecks: v.array(prReportCheckSchema),
102
+ /** How many `ci-fixer` rounds the gate dispatched, and its ceiling. */
103
+ fixerAttempts: v.number(),
104
+ maxFixerAttempts: v.optional(v.nullable(v.number())),
105
+ });
106
+ /** One area the tester exercised, and how it went. */
107
+ export const prReportTestOutcomeSchema = v.object({
108
+ name: v.string(),
109
+ status: v.string(),
110
+ detail: v.optional(v.nullable(v.string())),
111
+ });
112
+ /** One concern the tester surfaced (a bug/risk the fixer was asked to address). */
113
+ export const prReportTestConcernSchema = v.object({
114
+ title: v.string(),
115
+ severity: v.string(),
116
+ });
117
+ /** The tester gate's structured report (`tester-api` / `tester-ui`). */
118
+ export const prReportTestsSchema = v.object({
119
+ status: prReportSectionStatusSchema,
120
+ note: v.optional(v.nullable(v.string())),
121
+ /** The tester's release verdict: did it greenlight the change? */
122
+ greenlight: v.optional(v.nullable(v.boolean())),
123
+ summary: v.optional(v.nullable(v.string())),
124
+ /** Where the system under test ran (`local` docker-compose infra / `ephemeral` env). */
125
+ environment: v.optional(v.nullable(v.string())),
126
+ /** What the tester chose to exercise. */
127
+ tested: v.array(v.string()),
128
+ outcomes: v.array(prReportTestOutcomeSchema),
129
+ concerns: v.array(prReportTestConcernSchema),
130
+ /** How many `fixer` rounds the tester looped through, and its ceiling. */
131
+ fixerAttempts: v.number(),
132
+ maxFixerAttempts: v.optional(v.nullable(v.number())),
133
+ });
134
+ /** One ephemeral environment the `deployer` step stood up (per service frame). */
135
+ export const prReportEnvironmentSchema = v.object({
136
+ /** The service frame the environment was provisioned for. */
137
+ frameId: v.string(),
138
+ /** `ready` (live), `failed` (the provision broke) or `skipped` (an infraless frame). */
139
+ status: v.picklist(['ready', 'failed', 'skipped']),
140
+ url: v.optional(v.nullable(v.string())),
141
+ error: v.optional(v.nullable(v.string())),
142
+ });
143
+ /**
144
+ * The ephemeral-environment lifecycle: which environments came up, and whether they were
145
+ * torn down again. `teardown` reads the run's live environment projection:
146
+ * - `confirmed` — every environment reached a torn-down/expired state.
147
+ * - `pending` — at least one is still live (the run may still be using it).
148
+ * - `not_applicable` — nothing was ever provisioned.
149
+ */
150
+ export const prReportEnvironmentsSchema = v.object({
151
+ status: prReportSectionStatusSchema,
152
+ note: v.optional(v.nullable(v.string())),
153
+ entries: v.array(prReportEnvironmentSchema),
154
+ teardown: v.picklist(['confirmed', 'pending', 'not_applicable']),
155
+ });
156
+ /**
157
+ * The `merger` step's scored assessment plus the engine's resolved decision. `assessment` is
158
+ * the agent's own scoring; `outcome`/`reason`/`presetName` are what the engine's
159
+ * `MergeResolver` did with it against the task's merge preset.
160
+ */
161
+ export const prReportMergeSchema = v.object({
162
+ status: prReportSectionStatusSchema,
163
+ note: v.optional(v.nullable(v.string())),
164
+ assessment: v.optional(v.nullable(mergeAssessmentSchema)),
165
+ outcome: v.optional(v.nullable(v.string())),
166
+ reason: v.optional(v.nullable(v.string())),
167
+ presetName: v.optional(v.nullable(v.string())),
168
+ });
169
+ /**
170
+ * Where a human can inspect what every step actually did — the run's observability panel
171
+ * (Model activity / Provided context). Built from the deployment's public app URL
172
+ * (`appBaseUrl`); null when the deployment configured none, so the report never emits a
173
+ * link to nowhere.
174
+ */
175
+ export const prReportObservabilitySchema = v.object({
176
+ runUrl: v.nullable(v.string()),
177
+ });
178
+ export const prVerificationReportSchema = v.object({
179
+ /** See {@link PR_VERIFICATION_REPORT_VERSION}. */
180
+ version: v.number(),
181
+ /** Epoch ms the report was composed (refreshed on every publish). */
182
+ generatedAt: v.number(),
183
+ run: prReportRunSchema,
184
+ ci: prReportCiSchema,
185
+ tests: prReportTestsSchema,
186
+ environments: prReportEnvironmentsSchema,
187
+ merge: prReportMergeSchema,
188
+ observability: prReportObservabilitySchema,
189
+ /**
190
+ * What the report had to leave out to stay inside a pull-request body, one human-readable
191
+ * note per capped list (`"tests.outcomes: showing 50 of 118"`). Empty on any ordinary run.
192
+ *
193
+ * A capped list is only safe if it SAYS it was capped — "50 failing checks" and "50 of 118
194
+ * failing checks" call for very different reviewer reactions, and the whole point of this
195
+ * report is that a reader can trust what it shows to be the whole picture.
196
+ */
197
+ truncations: v.array(v.string()),
198
+ });
199
+ /**
200
+ * Parse-or-throw a report payload — used by the conformance suite (and any external
201
+ * consumer) to prove the JSON block the engine emitted is exactly this shape.
202
+ */
203
+ export function parsePrVerificationReport(value) {
204
+ return v.parse(prVerificationReportSchema, value);
205
+ }
206
+ //# sourceMappingURL=pr-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../src/pr-report.ts"],"names":[],"mappings":"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"}