@cat-factory/contracts 0.223.0 → 0.225.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.
- package/dist/agent-gating.d.ts.map +1 -1
- package/dist/agent-gating.js +14 -0
- package/dist/agent-gating.js.map +1 -1
- package/dist/binary-modalities.d.ts +61 -0
- package/dist/binary-modalities.d.ts.map +1 -1
- package/dist/binary-modalities.js +84 -0
- package/dist/binary-modalities.js.map +1 -1
- package/dist/debug-api.d.ts +9 -0
- package/dist/debug-api.d.ts.map +1 -1
- package/dist/debug-api.js +6 -0
- package/dist/debug-api.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +147 -2
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +74 -1
- package/dist/execution.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/merge.d.ts +2210 -157
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +83 -0
- package/dist/merge.js.map +1 -1
- package/dist/observability.d.ts +71 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +47 -0
- package/dist/observability.js.map +1 -1
- package/dist/pr-report.d.ts +351 -1
- package/dist/pr-report.d.ts.map +1 -1
- package/dist/pr-report.js +164 -1
- package/dist/pr-report.js.map +1 -1
- package/dist/reproduction.js +1 -1
- package/dist/reproduction.js.map +1 -1
- package/dist/requests.d.ts +8 -0
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +9 -0
- package/dist/requests.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +10 -0
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bug-hunt.d.ts +10 -0
- package/dist/routes/bug-hunt.d.ts.map +1 -1
- package/dist/routes/debug-api.d.ts +4 -0
- package/dist/routes/debug-api.d.ts.map +1 -1
- package/dist/routes/execution.d.ts +44 -0
- package/dist/routes/execution.d.ts.map +1 -1
- package/dist/routes/human-review.d.ts +5 -0
- package/dist/routes/human-review.d.ts.map +1 -1
- package/dist/routes/human-test.d.ts +25 -0
- package/dist/routes/human-test.d.ts.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/merge.d.ts +3109 -157
- package/dist/routes/merge.d.ts.map +1 -1
- package/dist/routes/tutorial.d.ts +149 -0
- package/dist/routes/tutorial.d.ts.map +1 -0
- package/dist/routes/tutorial.js +46 -0
- package/dist/routes/tutorial.js.map +1 -0
- package/dist/routes/visual-confirm.d.ts +15 -0
- package/dist/routes/visual-confirm.d.ts.map +1 -1
- package/dist/routes/workspace-members.d.ts +5 -5
- package/dist/routes/workspaces.d.ts +1008 -4
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/snapshot.d.ts +510 -1
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +9 -0
- package/dist/snapshot.js.map +1 -1
- package/dist/tutorial.d.ts +69 -0
- package/dist/tutorial.d.ts.map +1 -0
- package/dist/tutorial.js +83 -0
- package/dist/tutorial.js.map +1 -0
- package/dist/workspace-members.d.ts +6 -5
- package/dist/workspace-members.d.ts.map +1 -1
- package/dist/workspace-members.js +2 -1
- package/dist/workspace-members.js.map +1 -1
- package/package.json +1 -1
package/dist/pr-report.d.ts
CHANGED
|
@@ -4,7 +4,18 @@ import * as v from 'valibot';
|
|
|
4
4
|
* external consumer must notice. Backwards compatibility is a non-goal (see CLAUDE.md), so
|
|
5
5
|
* a bump means "re-read the schema", not "a compatibility shim exists".
|
|
6
6
|
*/
|
|
7
|
-
export declare const PR_VERIFICATION_REPORT_VERSION =
|
|
7
|
+
export declare const PR_VERIFICATION_REPORT_VERSION = 5;
|
|
8
|
+
/**
|
|
9
|
+
* How much of one captured command log the report carries, per command.
|
|
10
|
+
*
|
|
11
|
+
* Bounded here rather than left to the producer: the harness already trims each tail to what a
|
|
12
|
+
* REPAIR PROMPT needs, and a pull-request body has a far tighter budget than a model's context
|
|
13
|
+
* window — ten checks at the harness's own ceiling would blow {@link
|
|
14
|
+
* hostMarkdown.MAX_SECTION_CHARS} on their own and cost the reader the whole machine-readable
|
|
15
|
+
* block. The cut keeps the END of the log (where a failure is reported) and is recorded in the
|
|
16
|
+
* report's `truncations`, so a shortened log never reads as a whole one.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PR_REPORT_MAX_OUTPUT_CHARS = 2000;
|
|
8
19
|
/**
|
|
9
20
|
* Whether a section has evidence to show.
|
|
10
21
|
* - `reported` — the producing step ran and its evidence is below.
|
|
@@ -151,6 +162,187 @@ export declare const prReportTestsSchema: v.ObjectSchema<{
|
|
|
151
162
|
readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
152
163
|
}, undefined>;
|
|
153
164
|
export type PrReportTests = v.InferOutput<typeof prReportTestsSchema>;
|
|
165
|
+
/** One command's outcome in the run's pre-PR validation attempt. */
|
|
166
|
+
export declare const prReportValidationCommandSchema: v.ObjectSchema<{
|
|
167
|
+
/** The check's configured label (`lint`, `test`, `build`, …). */
|
|
168
|
+
readonly label: v.StringSchema<undefined>;
|
|
169
|
+
/** The command line the harness ran in the checkout. */
|
|
170
|
+
readonly command: v.StringSchema<undefined>;
|
|
171
|
+
/** Exit code (0 = pass); 124 on watchdog timeout, 127 on spawn failure. */
|
|
172
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
173
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
174
|
+
/** Set when the command was killed by the per-command watchdog rather than exiting. */
|
|
175
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
176
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
177
|
+
/**
|
|
178
|
+
* The END of the command's combined stdout+stderr, secret-scrubbed and bounded to {@link
|
|
179
|
+
* PR_REPORT_MAX_OUTPUT_CHARS}.
|
|
180
|
+
*
|
|
181
|
+
* Carried for a FAILING command only, and that is a stated rule rather than a silent one: a
|
|
182
|
+
* green check's log is the one thing in this report a reviewer never acts on, and ten of them
|
|
183
|
+
* would cost the body budget that makes the failing one readable. `null` on a passing row
|
|
184
|
+
* therefore means "not retained", never "the command printed nothing" — the section says so in
|
|
185
|
+
* as many words, because those two readings are exactly the kind of collapse this report exists
|
|
186
|
+
* to remove.
|
|
187
|
+
*/
|
|
188
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
189
|
+
}, undefined>;
|
|
190
|
+
export type PrReportValidationCommand = v.InferOutput<typeof prReportValidationCommandSchema>;
|
|
191
|
+
/**
|
|
192
|
+
* The PRE-PR VALIDATION section: the service's own check commands, run by the executor-harness
|
|
193
|
+
* against the final checkout before the pull request was allowed to open, with their exit codes
|
|
194
|
+
* and the captured output of whatever failed.
|
|
195
|
+
*
|
|
196
|
+
* This is the report's strongest single claim, because it is the one the platform ENFORCED: only
|
|
197
|
+
* a green checkout opens a PR, so a `reported` + `passed` section says the commands in the table
|
|
198
|
+
* below actually ran and actually exited 0 on this tree. It is deliberately distinct from the
|
|
199
|
+
* `ci` section: CI is the host's verdict on the pushed branch (a different machine, later, and
|
|
200
|
+
* for a red run possibly never), while this is the platform's own captured run of the service's
|
|
201
|
+
* commands on the exact tree that was pushed.
|
|
202
|
+
*
|
|
203
|
+
* `absent` splits the causes that need different reactions, per the report's governing rule: a
|
|
204
|
+
* service that configured no checks is a deployment gap, a step that never got that far is a run
|
|
205
|
+
* outcome, and an older runner image that reports nothing is neither.
|
|
206
|
+
*/
|
|
207
|
+
export declare const prReportValidationSchema: v.ObjectSchema<{
|
|
208
|
+
readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
|
|
209
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
210
|
+
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
211
|
+
/** Whether every command in the recorded attempt exited 0 (⇒ the PR was allowed to open). */
|
|
212
|
+
readonly passed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
213
|
+
/** The agent kind of the step that ran the checks, so a reader knows which dispatch this is. */
|
|
214
|
+
readonly stepKind: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
215
|
+
/** How many agent+check rounds ran, and the budget they ran under. */
|
|
216
|
+
readonly attempts: v.NumberSchema<undefined>;
|
|
217
|
+
readonly maxAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
218
|
+
/** Epoch ms the recorded attempt finished. */
|
|
219
|
+
readonly at: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
220
|
+
/** Per-command outcomes of the recorded attempt (capped like every list; see `truncations`). */
|
|
221
|
+
readonly commands: v.ArraySchema<v.ObjectSchema<{
|
|
222
|
+
/** The check's configured label (`lint`, `test`, `build`, …). */
|
|
223
|
+
readonly label: v.StringSchema<undefined>;
|
|
224
|
+
/** The command line the harness ran in the checkout. */
|
|
225
|
+
readonly command: v.StringSchema<undefined>;
|
|
226
|
+
/** Exit code (0 = pass); 124 on watchdog timeout, 127 on spawn failure. */
|
|
227
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
228
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
229
|
+
/** Set when the command was killed by the per-command watchdog rather than exiting. */
|
|
230
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
231
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
232
|
+
/**
|
|
233
|
+
* The END of the command's combined stdout+stderr, secret-scrubbed and bounded to {@link
|
|
234
|
+
* PR_REPORT_MAX_OUTPUT_CHARS}.
|
|
235
|
+
*
|
|
236
|
+
* Carried for a FAILING command only, and that is a stated rule rather than a silent one: a
|
|
237
|
+
* green check's log is the one thing in this report a reviewer never acts on, and ten of them
|
|
238
|
+
* would cost the body budget that makes the failing one readable. `null` on a passing row
|
|
239
|
+
* therefore means "not retained", never "the command printed nothing" — the section says so in
|
|
240
|
+
* as many words, because those two readings are exactly the kind of collapse this report exists
|
|
241
|
+
* to remove.
|
|
242
|
+
*/
|
|
243
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
244
|
+
}, undefined>, undefined>;
|
|
245
|
+
}, undefined>;
|
|
246
|
+
export type PrReportValidation = v.InferOutput<typeof prReportValidationSchema>;
|
|
247
|
+
/** One tree's run of the declared reproduction command (the pre-fix tree, or the final one). */
|
|
248
|
+
export declare const prReportReproductionPhaseSchema: v.ObjectSchema<{
|
|
249
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
250
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
251
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
252
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
253
|
+
/**
|
|
254
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
255
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
256
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
257
|
+
* design exists to prevent.
|
|
258
|
+
*/
|
|
259
|
+
readonly setupFailed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
260
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
261
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
262
|
+
}, undefined>;
|
|
263
|
+
export type PrReportReproductionPhase = v.InferOutput<typeof prReportReproductionPhaseSchema>;
|
|
264
|
+
/**
|
|
265
|
+
* The BUGFIX REPRODUCTION PROOF section: evidence that the declared reproducing check was RED on
|
|
266
|
+
* the pre-fix tree and GREEN on the final one, which is the entire content of the claim "this
|
|
267
|
+
* change fixes the bug" and the last big agent ASSERTION on a bugfix PR still taken on trust.
|
|
268
|
+
*
|
|
269
|
+
* `verdict` is computed by the harness from two exit codes, never self-reported by a model — the
|
|
270
|
+
* `repro-test` kind's own `outcome` field has always been the model's claim, and this section is
|
|
271
|
+
* what checks it. Three shapes reach a reviewer:
|
|
272
|
+
*
|
|
273
|
+
* - `reproduced` — red at base, green at final, with both captured logs below.
|
|
274
|
+
* - `inconclusive` — anything else, stated plainly rather than dressed up. An ABSENT `final` is
|
|
275
|
+
* normal here: a green base already settles the verdict, so the second tree is not run.
|
|
276
|
+
* - `declared_infeasible` — the agent structurally declared reproduction impossible, with its
|
|
277
|
+
* reason and the alternative verification it performed. Nothing ran, so there are no phases.
|
|
278
|
+
*
|
|
279
|
+
* `observation` is the harness's own one-line diagnosis of an inconclusive shape and is rendered
|
|
280
|
+
* VERBATIM. It is not interchangeable with re-deriving a cause from `base.passed`: a green base
|
|
281
|
+
* can mean the test does not capture the defect, or that a resumed run's pre-fix tree already
|
|
282
|
+
* carried this step's own interrupted work, and only the side that ran can tell those apart.
|
|
283
|
+
*/
|
|
284
|
+
export declare const prReportReproductionSchema: v.ObjectSchema<{
|
|
285
|
+
readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
|
|
286
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
287
|
+
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
288
|
+
/** The computed verdict. Null only when `status` is `absent`. */
|
|
289
|
+
readonly verdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["reproduced", "inconclusive", "declared_infeasible"], undefined>, undefined>, undefined>;
|
|
290
|
+
/** The command run identically against both trees (empty for `declared_infeasible`). */
|
|
291
|
+
readonly command: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
292
|
+
/** The declared test files that constitute the reproduction. */
|
|
293
|
+
readonly testPaths: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
294
|
+
/**
|
|
295
|
+
* How many declared paths were DROPPED before the proof ran (unsafe, over-long, or over the
|
|
296
|
+
* cap). Non-zero means the pre-fix tree was rebuilt from an incomplete reproduction, which can
|
|
297
|
+
* green it and read as "the test does not capture the defect" — so it is stated rather than
|
|
298
|
+
* implied.
|
|
299
|
+
*/
|
|
300
|
+
readonly omittedTestPaths: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
301
|
+
/** The pre-fix tree's run. Absent for `declared_infeasible`. */
|
|
302
|
+
readonly base: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
303
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
304
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
305
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
306
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
307
|
+
/**
|
|
308
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
309
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
310
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
311
|
+
* design exists to prevent.
|
|
312
|
+
*/
|
|
313
|
+
readonly setupFailed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
314
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
315
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
316
|
+
}, undefined>, undefined>, undefined>;
|
|
317
|
+
/** The final tree's run. Absent for `declared_infeasible`, or when the base run settled it. */
|
|
318
|
+
readonly final: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
319
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
320
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
321
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
322
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
323
|
+
/**
|
|
324
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
325
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
326
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
327
|
+
* design exists to prevent.
|
|
328
|
+
*/
|
|
329
|
+
readonly setupFailed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
330
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
331
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
332
|
+
}, undefined>, undefined>, undefined>;
|
|
333
|
+
/** How many agent+verify rounds ran, and the budget they ran under. */
|
|
334
|
+
readonly attempts: v.NumberSchema<undefined>;
|
|
335
|
+
readonly maxAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
336
|
+
/** For `declared_infeasible`: WHY the bug could not be reproduced, verbatim from the agent. */
|
|
337
|
+
readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
338
|
+
/** For `declared_infeasible`: what the agent verified INSTEAD, verbatim. */
|
|
339
|
+
readonly alternativeVerification: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
340
|
+
/** The producer's own one-line diagnosis of the observed shape. Rendered verbatim. */
|
|
341
|
+
readonly observation: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
342
|
+
/** Epoch ms the proof settled. */
|
|
343
|
+
readonly at: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
344
|
+
}, undefined>;
|
|
345
|
+
export type PrReportReproduction = v.InferOutput<typeof prReportReproductionSchema>;
|
|
154
346
|
/** One ephemeral environment the `deployer` step stood up (per service frame). */
|
|
155
347
|
export declare const prReportEnvironmentSchema: v.ObjectSchema<{
|
|
156
348
|
/** The service frame the environment was provisioned for. */
|
|
@@ -236,6 +428,20 @@ export declare const prReportEvidenceArtifactSchema: v.ObjectSchema<{
|
|
|
236
428
|
readonly artifactId: v.StringSchema<undefined>;
|
|
237
429
|
/** Whether a reference design image was paired with it for visual confirmation. */
|
|
238
430
|
readonly hasReference: v.BooleanSchema<undefined>;
|
|
431
|
+
/**
|
|
432
|
+
* Direct link to the artifact's BYTES, on the deployment's own authenticated blob endpoint —
|
|
433
|
+
* the thing a reviewer (or a downstream tool holding an API key) actually wants from a row that
|
|
434
|
+
* used to carry an opaque id and nothing else.
|
|
435
|
+
*
|
|
436
|
+
* Deliberately the API URL rather than the app deep link beside it on the section: the deep link
|
|
437
|
+
* lands a human in the run's evidence panel, which is the right place to BROWSE, and is useless
|
|
438
|
+
* to anything that is not a browser with a session. Both are emitted because they answer
|
|
439
|
+
* different questions, and neither substitutes for the other.
|
|
440
|
+
*
|
|
441
|
+
* Null when the deployment configured no public backend URL, so the report never emits a link to
|
|
442
|
+
* nowhere; the `artifactId` is still there, which is what an operator greps the store for.
|
|
443
|
+
*/
|
|
444
|
+
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
239
445
|
}, undefined>;
|
|
240
446
|
export type PrReportEvidenceArtifact = v.InferOutput<typeof prReportEvidenceArtifactSchema>;
|
|
241
447
|
/**
|
|
@@ -278,6 +484,20 @@ export declare const prReportEnvironmentEvidenceSchema: v.ObjectSchema<{
|
|
|
278
484
|
readonly artifactId: v.StringSchema<undefined>;
|
|
279
485
|
/** Whether a reference design image was paired with it for visual confirmation. */
|
|
280
486
|
readonly hasReference: v.BooleanSchema<undefined>;
|
|
487
|
+
/**
|
|
488
|
+
* Direct link to the artifact's BYTES, on the deployment's own authenticated blob endpoint —
|
|
489
|
+
* the thing a reviewer (or a downstream tool holding an API key) actually wants from a row that
|
|
490
|
+
* used to carry an opaque id and nothing else.
|
|
491
|
+
*
|
|
492
|
+
* Deliberately the API URL rather than the app deep link beside it on the section: the deep link
|
|
493
|
+
* lands a human in the run's evidence panel, which is the right place to BROWSE, and is useless
|
|
494
|
+
* to anything that is not a browser with a session. Both are emitted because they answer
|
|
495
|
+
* different questions, and neither substitutes for the other.
|
|
496
|
+
*
|
|
497
|
+
* Null when the deployment configured no public backend URL, so the report never emits a link to
|
|
498
|
+
* nowhere; the `artifactId` is still there, which is what an operator greps the store for.
|
|
499
|
+
*/
|
|
500
|
+
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
281
501
|
}, undefined>, undefined>;
|
|
282
502
|
/**
|
|
283
503
|
* Deep link into the run's captured evidence in the app. Null when the deployment configured
|
|
@@ -367,6 +587,20 @@ export declare const prReportEnvironmentsSchema: v.ObjectSchema<{
|
|
|
367
587
|
readonly artifactId: v.StringSchema<undefined>;
|
|
368
588
|
/** Whether a reference design image was paired with it for visual confirmation. */
|
|
369
589
|
readonly hasReference: v.BooleanSchema<undefined>;
|
|
590
|
+
/**
|
|
591
|
+
* Direct link to the artifact's BYTES, on the deployment's own authenticated blob endpoint —
|
|
592
|
+
* the thing a reviewer (or a downstream tool holding an API key) actually wants from a row that
|
|
593
|
+
* used to carry an opaque id and nothing else.
|
|
594
|
+
*
|
|
595
|
+
* Deliberately the API URL rather than the app deep link beside it on the section: the deep link
|
|
596
|
+
* lands a human in the run's evidence panel, which is the right place to BROWSE, and is useless
|
|
597
|
+
* to anything that is not a browser with a session. Both are emitted because they answer
|
|
598
|
+
* different questions, and neither substitutes for the other.
|
|
599
|
+
*
|
|
600
|
+
* Null when the deployment configured no public backend URL, so the report never emits a link to
|
|
601
|
+
* nowhere; the `artifactId` is still there, which is what an operator greps the store for.
|
|
602
|
+
*/
|
|
603
|
+
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
370
604
|
}, undefined>, undefined>;
|
|
371
605
|
/**
|
|
372
606
|
* Deep link into the run's captured evidence in the app. Null when the deployment configured
|
|
@@ -660,6 +894,108 @@ export declare const prVerificationReportSchema: v.ObjectSchema<{
|
|
|
660
894
|
readonly fixerAttempts: v.NumberSchema<undefined>;
|
|
661
895
|
readonly maxFixerAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
662
896
|
}, undefined>;
|
|
897
|
+
/** The platform's OWN run of the service's check commands against the pushed tree. */
|
|
898
|
+
readonly validation: v.ObjectSchema<{
|
|
899
|
+
readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
|
|
900
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
901
|
+
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
902
|
+
/** Whether every command in the recorded attempt exited 0 (⇒ the PR was allowed to open). */
|
|
903
|
+
readonly passed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
904
|
+
/** The agent kind of the step that ran the checks, so a reader knows which dispatch this is. */
|
|
905
|
+
readonly stepKind: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
906
|
+
/** How many agent+check rounds ran, and the budget they ran under. */
|
|
907
|
+
readonly attempts: v.NumberSchema<undefined>;
|
|
908
|
+
readonly maxAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
909
|
+
/** Epoch ms the recorded attempt finished. */
|
|
910
|
+
readonly at: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
911
|
+
/** Per-command outcomes of the recorded attempt (capped like every list; see `truncations`). */
|
|
912
|
+
readonly commands: v.ArraySchema<v.ObjectSchema<{
|
|
913
|
+
/** The check's configured label (`lint`, `test`, `build`, …). */
|
|
914
|
+
readonly label: v.StringSchema<undefined>;
|
|
915
|
+
/** The command line the harness ran in the checkout. */
|
|
916
|
+
readonly command: v.StringSchema<undefined>;
|
|
917
|
+
/** Exit code (0 = pass); 124 on watchdog timeout, 127 on spawn failure. */
|
|
918
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
919
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
920
|
+
/** Set when the command was killed by the per-command watchdog rather than exiting. */
|
|
921
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
922
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
923
|
+
/**
|
|
924
|
+
* The END of the command's combined stdout+stderr, secret-scrubbed and bounded to {@link
|
|
925
|
+
* PR_REPORT_MAX_OUTPUT_CHARS}.
|
|
926
|
+
*
|
|
927
|
+
* Carried for a FAILING command only, and that is a stated rule rather than a silent one: a
|
|
928
|
+
* green check's log is the one thing in this report a reviewer never acts on, and ten of them
|
|
929
|
+
* would cost the body budget that makes the failing one readable. `null` on a passing row
|
|
930
|
+
* therefore means "not retained", never "the command printed nothing" — the section says so in
|
|
931
|
+
* as many words, because those two readings are exactly the kind of collapse this report exists
|
|
932
|
+
* to remove.
|
|
933
|
+
*/
|
|
934
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
935
|
+
}, undefined>, undefined>;
|
|
936
|
+
}, undefined>;
|
|
937
|
+
/** Red-on-the-pre-fix-tree, green-on-the-final-tree evidence for a bugfix run. */
|
|
938
|
+
readonly reproduction: v.ObjectSchema<{
|
|
939
|
+
readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
|
|
940
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
941
|
+
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
942
|
+
/** The computed verdict. Null only when `status` is `absent`. */
|
|
943
|
+
readonly verdict: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["reproduced", "inconclusive", "declared_infeasible"], undefined>, undefined>, undefined>;
|
|
944
|
+
/** The command run identically against both trees (empty for `declared_infeasible`). */
|
|
945
|
+
readonly command: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
946
|
+
/** The declared test files that constitute the reproduction. */
|
|
947
|
+
readonly testPaths: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
948
|
+
/**
|
|
949
|
+
* How many declared paths were DROPPED before the proof ran (unsafe, over-long, or over the
|
|
950
|
+
* cap). Non-zero means the pre-fix tree was rebuilt from an incomplete reproduction, which can
|
|
951
|
+
* green it and read as "the test does not capture the defect" — so it is stated rather than
|
|
952
|
+
* implied.
|
|
953
|
+
*/
|
|
954
|
+
readonly omittedTestPaths: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
955
|
+
/** The pre-fix tree's run. Absent for `declared_infeasible`. */
|
|
956
|
+
readonly base: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
957
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
958
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
959
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
960
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
961
|
+
/**
|
|
962
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
963
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
964
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
965
|
+
* design exists to prevent.
|
|
966
|
+
*/
|
|
967
|
+
readonly setupFailed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
968
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
969
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
970
|
+
}, undefined>, undefined>, undefined>;
|
|
971
|
+
/** The final tree's run. Absent for `declared_infeasible`, or when the base run settled it. */
|
|
972
|
+
readonly final: v.OptionalSchema<v.NullableSchema<v.ObjectSchema<{
|
|
973
|
+
readonly exitCode: v.NumberSchema<undefined>;
|
|
974
|
+
readonly passed: v.BooleanSchema<undefined>;
|
|
975
|
+
readonly durationMs: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
976
|
+
readonly timedOut: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
977
|
+
/**
|
|
978
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
979
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
980
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
981
|
+
* design exists to prevent.
|
|
982
|
+
*/
|
|
983
|
+
readonly setupFailed: v.OptionalSchema<v.NullableSchema<v.BooleanSchema<undefined>, undefined>, undefined>;
|
|
984
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
985
|
+
readonly outputTail: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
986
|
+
}, undefined>, undefined>, undefined>;
|
|
987
|
+
/** How many agent+verify rounds ran, and the budget they ran under. */
|
|
988
|
+
readonly attempts: v.NumberSchema<undefined>;
|
|
989
|
+
readonly maxAttempts: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
990
|
+
/** For `declared_infeasible`: WHY the bug could not be reproduced, verbatim from the agent. */
|
|
991
|
+
readonly reason: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
992
|
+
/** For `declared_infeasible`: what the agent verified INSTEAD, verbatim. */
|
|
993
|
+
readonly alternativeVerification: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
994
|
+
/** The producer's own one-line diagnosis of the observed shape. Rendered verbatim. */
|
|
995
|
+
readonly observation: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
996
|
+
/** Epoch ms the proof settled. */
|
|
997
|
+
readonly at: v.OptionalSchema<v.NullableSchema<v.NumberSchema<undefined>, undefined>, undefined>;
|
|
998
|
+
}, undefined>;
|
|
663
999
|
readonly tests: v.ObjectSchema<{
|
|
664
1000
|
readonly status: v.PicklistSchema<["reported", "absent"], undefined>;
|
|
665
1001
|
readonly note: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
@@ -802,6 +1138,20 @@ export declare const prVerificationReportSchema: v.ObjectSchema<{
|
|
|
802
1138
|
readonly artifactId: v.StringSchema<undefined>;
|
|
803
1139
|
/** Whether a reference design image was paired with it for visual confirmation. */
|
|
804
1140
|
readonly hasReference: v.BooleanSchema<undefined>;
|
|
1141
|
+
/**
|
|
1142
|
+
* Direct link to the artifact's BYTES, on the deployment's own authenticated blob endpoint —
|
|
1143
|
+
* the thing a reviewer (or a downstream tool holding an API key) actually wants from a row that
|
|
1144
|
+
* used to carry an opaque id and nothing else.
|
|
1145
|
+
*
|
|
1146
|
+
* Deliberately the API URL rather than the app deep link beside it on the section: the deep link
|
|
1147
|
+
* lands a human in the run's evidence panel, which is the right place to BROWSE, and is useless
|
|
1148
|
+
* to anything that is not a browser with a session. Both are emitted because they answer
|
|
1149
|
+
* different questions, and neither substitutes for the other.
|
|
1150
|
+
*
|
|
1151
|
+
* Null when the deployment configured no public backend URL, so the report never emits a link to
|
|
1152
|
+
* nowhere; the `artifactId` is still there, which is what an operator greps the store for.
|
|
1153
|
+
*/
|
|
1154
|
+
readonly url: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
805
1155
|
}, undefined>, undefined>;
|
|
806
1156
|
/**
|
|
807
1157
|
* Deep link into the run's captured evidence in the app. Null when the deployment configured
|
package/dist/pr-report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-report.d.ts","sourceRoot":"","sources":["../src/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"pr-report.d.ts","sourceRoot":"","sources":["../src/pr-report.ts"],"names":[],"mappings":"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"}
|
package/dist/pr-report.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as v from 'valibot';
|
|
|
2
2
|
import { mergeAssessmentSchema } from './merge.js';
|
|
3
3
|
import { judgeDispositionSchema, judgeFindingSchema } from './judge.js';
|
|
4
4
|
import { requirementPrioritySchema, requirementStateSchema } from './spec.js';
|
|
5
|
+
import { reproductionStatusSchema } from './reproduction.js';
|
|
5
6
|
import { requirementVerdictStatusSchema, testEnvironmentSchema } from './testing.js';
|
|
6
7
|
import { vcsProviderSchema } from './routes/auth.js';
|
|
7
8
|
// ---------------------------------------------------------------------------
|
|
@@ -26,7 +27,18 @@ import { vcsProviderSchema } from './routes/auth.js';
|
|
|
26
27
|
* external consumer must notice. Backwards compatibility is a non-goal (see CLAUDE.md), so
|
|
27
28
|
* a bump means "re-read the schema", not "a compatibility shim exists".
|
|
28
29
|
*/
|
|
29
|
-
export const PR_VERIFICATION_REPORT_VERSION =
|
|
30
|
+
export const PR_VERIFICATION_REPORT_VERSION = 5;
|
|
31
|
+
/**
|
|
32
|
+
* How much of one captured command log the report carries, per command.
|
|
33
|
+
*
|
|
34
|
+
* Bounded here rather than left to the producer: the harness already trims each tail to what a
|
|
35
|
+
* REPAIR PROMPT needs, and a pull-request body has a far tighter budget than a model's context
|
|
36
|
+
* window — ten checks at the harness's own ceiling would blow {@link
|
|
37
|
+
* hostMarkdown.MAX_SECTION_CHARS} on their own and cost the reader the whole machine-readable
|
|
38
|
+
* block. The cut keeps the END of the log (where a failure is reported) and is recorded in the
|
|
39
|
+
* report's `truncations`, so a shortened log never reads as a whole one.
|
|
40
|
+
*/
|
|
41
|
+
export const PR_REPORT_MAX_OUTPUT_CHARS = 2_000;
|
|
30
42
|
/**
|
|
31
43
|
* Whether a section has evidence to show.
|
|
32
44
|
* - `reported` — the producing step ran and its evidence is below.
|
|
@@ -134,6 +146,139 @@ export const prReportTestsSchema = v.object({
|
|
|
134
146
|
fixerAttempts: v.number(),
|
|
135
147
|
maxFixerAttempts: v.optional(v.nullable(v.number())),
|
|
136
148
|
});
|
|
149
|
+
// ---- Captured command output ----------------------------------------------
|
|
150
|
+
//
|
|
151
|
+
// The two sections below are the report's only CAPTURED-OUTPUT evidence: a command ran, and here
|
|
152
|
+
// is what it printed. Everything else in the report is a structured verdict somebody (a gate, a
|
|
153
|
+
// judge, an agent) produced; these two are the raw thing itself, which is why they are worth the
|
|
154
|
+
// body budget they cost. Both come off the step the harness wrote them onto — `step.validation`
|
|
155
|
+
// and `step.reproduction` — so neither re-runs anything at compose time.
|
|
156
|
+
/** One command's outcome in the run's pre-PR validation attempt. */
|
|
157
|
+
export const prReportValidationCommandSchema = v.object({
|
|
158
|
+
/** The check's configured label (`lint`, `test`, `build`, …). */
|
|
159
|
+
label: v.string(),
|
|
160
|
+
/** The command line the harness ran in the checkout. */
|
|
161
|
+
command: v.string(),
|
|
162
|
+
/** Exit code (0 = pass); 124 on watchdog timeout, 127 on spawn failure. */
|
|
163
|
+
exitCode: v.number(),
|
|
164
|
+
passed: v.boolean(),
|
|
165
|
+
/** Set when the command was killed by the per-command watchdog rather than exiting. */
|
|
166
|
+
timedOut: v.optional(v.nullable(v.boolean())),
|
|
167
|
+
durationMs: v.optional(v.nullable(v.number())),
|
|
168
|
+
/**
|
|
169
|
+
* The END of the command's combined stdout+stderr, secret-scrubbed and bounded to {@link
|
|
170
|
+
* PR_REPORT_MAX_OUTPUT_CHARS}.
|
|
171
|
+
*
|
|
172
|
+
* Carried for a FAILING command only, and that is a stated rule rather than a silent one: a
|
|
173
|
+
* green check's log is the one thing in this report a reviewer never acts on, and ten of them
|
|
174
|
+
* would cost the body budget that makes the failing one readable. `null` on a passing row
|
|
175
|
+
* therefore means "not retained", never "the command printed nothing" — the section says so in
|
|
176
|
+
* as many words, because those two readings are exactly the kind of collapse this report exists
|
|
177
|
+
* to remove.
|
|
178
|
+
*/
|
|
179
|
+
outputTail: v.optional(v.nullable(v.string())),
|
|
180
|
+
});
|
|
181
|
+
/**
|
|
182
|
+
* The PRE-PR VALIDATION section: the service's own check commands, run by the executor-harness
|
|
183
|
+
* against the final checkout before the pull request was allowed to open, with their exit codes
|
|
184
|
+
* and the captured output of whatever failed.
|
|
185
|
+
*
|
|
186
|
+
* This is the report's strongest single claim, because it is the one the platform ENFORCED: only
|
|
187
|
+
* a green checkout opens a PR, so a `reported` + `passed` section says the commands in the table
|
|
188
|
+
* below actually ran and actually exited 0 on this tree. It is deliberately distinct from the
|
|
189
|
+
* `ci` section: CI is the host's verdict on the pushed branch (a different machine, later, and
|
|
190
|
+
* for a red run possibly never), while this is the platform's own captured run of the service's
|
|
191
|
+
* commands on the exact tree that was pushed.
|
|
192
|
+
*
|
|
193
|
+
* `absent` splits the causes that need different reactions, per the report's governing rule: a
|
|
194
|
+
* service that configured no checks is a deployment gap, a step that never got that far is a run
|
|
195
|
+
* outcome, and an older runner image that reports nothing is neither.
|
|
196
|
+
*/
|
|
197
|
+
export const prReportValidationSchema = v.object({
|
|
198
|
+
status: prReportSectionStatusSchema,
|
|
199
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
200
|
+
note: v.optional(v.nullable(v.string())),
|
|
201
|
+
/** Whether every command in the recorded attempt exited 0 (⇒ the PR was allowed to open). */
|
|
202
|
+
passed: v.optional(v.nullable(v.boolean())),
|
|
203
|
+
/** The agent kind of the step that ran the checks, so a reader knows which dispatch this is. */
|
|
204
|
+
stepKind: v.optional(v.nullable(v.string())),
|
|
205
|
+
/** How many agent+check rounds ran, and the budget they ran under. */
|
|
206
|
+
attempts: v.number(),
|
|
207
|
+
maxAttempts: v.optional(v.nullable(v.number())),
|
|
208
|
+
/** Epoch ms the recorded attempt finished. */
|
|
209
|
+
at: v.optional(v.nullable(v.number())),
|
|
210
|
+
/** Per-command outcomes of the recorded attempt (capped like every list; see `truncations`). */
|
|
211
|
+
commands: v.array(prReportValidationCommandSchema),
|
|
212
|
+
});
|
|
213
|
+
/** One tree's run of the declared reproduction command (the pre-fix tree, or the final one). */
|
|
214
|
+
export const prReportReproductionPhaseSchema = v.object({
|
|
215
|
+
exitCode: v.number(),
|
|
216
|
+
passed: v.boolean(),
|
|
217
|
+
durationMs: v.optional(v.nullable(v.number())),
|
|
218
|
+
timedOut: v.optional(v.nullable(v.boolean())),
|
|
219
|
+
/**
|
|
220
|
+
* Set when this tree's SETUP command failed, so the check never ran meaningfully. Reported
|
|
221
|
+
* rather than folded into a plain failure: a tree that could not be prepared says nothing about
|
|
222
|
+
* the defect, and reading it as "red" is precisely the false `reproduced` the symmetric-worktree
|
|
223
|
+
* design exists to prevent.
|
|
224
|
+
*/
|
|
225
|
+
setupFailed: v.optional(v.nullable(v.boolean())),
|
|
226
|
+
/** The END of the run's output, secret-scrubbed and bounded (see the validation twin). */
|
|
227
|
+
outputTail: v.optional(v.nullable(v.string())),
|
|
228
|
+
});
|
|
229
|
+
/**
|
|
230
|
+
* The BUGFIX REPRODUCTION PROOF section: evidence that the declared reproducing check was RED on
|
|
231
|
+
* the pre-fix tree and GREEN on the final one, which is the entire content of the claim "this
|
|
232
|
+
* change fixes the bug" and the last big agent ASSERTION on a bugfix PR still taken on trust.
|
|
233
|
+
*
|
|
234
|
+
* `verdict` is computed by the harness from two exit codes, never self-reported by a model — the
|
|
235
|
+
* `repro-test` kind's own `outcome` field has always been the model's claim, and this section is
|
|
236
|
+
* what checks it. Three shapes reach a reviewer:
|
|
237
|
+
*
|
|
238
|
+
* - `reproduced` — red at base, green at final, with both captured logs below.
|
|
239
|
+
* - `inconclusive` — anything else, stated plainly rather than dressed up. An ABSENT `final` is
|
|
240
|
+
* normal here: a green base already settles the verdict, so the second tree is not run.
|
|
241
|
+
* - `declared_infeasible` — the agent structurally declared reproduction impossible, with its
|
|
242
|
+
* reason and the alternative verification it performed. Nothing ran, so there are no phases.
|
|
243
|
+
*
|
|
244
|
+
* `observation` is the harness's own one-line diagnosis of an inconclusive shape and is rendered
|
|
245
|
+
* VERBATIM. It is not interchangeable with re-deriving a cause from `base.passed`: a green base
|
|
246
|
+
* can mean the test does not capture the defect, or that a resumed run's pre-fix tree already
|
|
247
|
+
* carried this step's own interrupted work, and only the side that ran can tell those apart.
|
|
248
|
+
*/
|
|
249
|
+
export const prReportReproductionSchema = v.object({
|
|
250
|
+
status: prReportSectionStatusSchema,
|
|
251
|
+
/** Says WHY the section is empty when `status` is `absent` — never a bare blank. */
|
|
252
|
+
note: v.optional(v.nullable(v.string())),
|
|
253
|
+
/** The computed verdict. Null only when `status` is `absent`. */
|
|
254
|
+
verdict: v.optional(v.nullable(reproductionStatusSchema)),
|
|
255
|
+
/** The command run identically against both trees (empty for `declared_infeasible`). */
|
|
256
|
+
command: v.optional(v.nullable(v.string())),
|
|
257
|
+
/** The declared test files that constitute the reproduction. */
|
|
258
|
+
testPaths: v.array(v.string()),
|
|
259
|
+
/**
|
|
260
|
+
* How many declared paths were DROPPED before the proof ran (unsafe, over-long, or over the
|
|
261
|
+
* cap). Non-zero means the pre-fix tree was rebuilt from an incomplete reproduction, which can
|
|
262
|
+
* green it and read as "the test does not capture the defect" — so it is stated rather than
|
|
263
|
+
* implied.
|
|
264
|
+
*/
|
|
265
|
+
omittedTestPaths: v.optional(v.nullable(v.number())),
|
|
266
|
+
/** The pre-fix tree's run. Absent for `declared_infeasible`. */
|
|
267
|
+
base: v.optional(v.nullable(prReportReproductionPhaseSchema)),
|
|
268
|
+
/** The final tree's run. Absent for `declared_infeasible`, or when the base run settled it. */
|
|
269
|
+
final: v.optional(v.nullable(prReportReproductionPhaseSchema)),
|
|
270
|
+
/** How many agent+verify rounds ran, and the budget they ran under. */
|
|
271
|
+
attempts: v.number(),
|
|
272
|
+
maxAttempts: v.optional(v.nullable(v.number())),
|
|
273
|
+
/** For `declared_infeasible`: WHY the bug could not be reproduced, verbatim from the agent. */
|
|
274
|
+
reason: v.optional(v.nullable(v.string())),
|
|
275
|
+
/** For `declared_infeasible`: what the agent verified INSTEAD, verbatim. */
|
|
276
|
+
alternativeVerification: v.optional(v.nullable(v.string())),
|
|
277
|
+
/** The producer's own one-line diagnosis of the observed shape. Rendered verbatim. */
|
|
278
|
+
observation: v.optional(v.nullable(v.string())),
|
|
279
|
+
/** Epoch ms the proof settled. */
|
|
280
|
+
at: v.optional(v.nullable(v.number())),
|
|
281
|
+
});
|
|
137
282
|
/** One ephemeral environment the `deployer` step stood up (per service frame). */
|
|
138
283
|
export const prReportEnvironmentSchema = v.object({
|
|
139
284
|
/** The service frame the environment was provisioned for. */
|
|
@@ -221,6 +366,20 @@ export const prReportEvidenceArtifactSchema = v.object({
|
|
|
221
366
|
artifactId: v.string(),
|
|
222
367
|
/** Whether a reference design image was paired with it for visual confirmation. */
|
|
223
368
|
hasReference: v.boolean(),
|
|
369
|
+
/**
|
|
370
|
+
* Direct link to the artifact's BYTES, on the deployment's own authenticated blob endpoint —
|
|
371
|
+
* the thing a reviewer (or a downstream tool holding an API key) actually wants from a row that
|
|
372
|
+
* used to carry an opaque id and nothing else.
|
|
373
|
+
*
|
|
374
|
+
* Deliberately the API URL rather than the app deep link beside it on the section: the deep link
|
|
375
|
+
* lands a human in the run's evidence panel, which is the right place to BROWSE, and is useless
|
|
376
|
+
* to anything that is not a browser with a session. Both are emitted because they answer
|
|
377
|
+
* different questions, and neither substitutes for the other.
|
|
378
|
+
*
|
|
379
|
+
* Null when the deployment configured no public backend URL, so the report never emits a link to
|
|
380
|
+
* nowhere; the `artifactId` is still there, which is what an operator greps the store for.
|
|
381
|
+
*/
|
|
382
|
+
url: v.nullable(v.string()),
|
|
224
383
|
});
|
|
225
384
|
/**
|
|
226
385
|
* The MIDDLE leg of the lifecycle proof: what was actually observed against the environment
|
|
@@ -450,6 +609,10 @@ export const prVerificationReportSchema = v.object({
|
|
|
450
609
|
generatedAt: v.number(),
|
|
451
610
|
run: prReportRunSchema,
|
|
452
611
|
ci: prReportCiSchema,
|
|
612
|
+
/** The platform's OWN run of the service's check commands against the pushed tree. */
|
|
613
|
+
validation: prReportValidationSchema,
|
|
614
|
+
/** Red-on-the-pre-fix-tree, green-on-the-final-tree evidence for a bugfix run. */
|
|
615
|
+
reproduction: prReportReproductionSchema,
|
|
453
616
|
tests: prReportTestsSchema,
|
|
454
617
|
requirements: prReportRequirementsSchema,
|
|
455
618
|
environments: prReportEnvironmentsSchema,
|