@patronage/software-factory 0.30.0-alpha.1 → 0.30.0-beta.1
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/index.d.ts +41 -368
- package/dist/index.js +1871 -2767
- package/dist/schemas.d.ts +19 -103
- package/dist/schemas.js +29 -74
- package/package.json +1 -1
package/dist/schemas.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ interface WaivedDemand {
|
|
|
13
13
|
operator: string;
|
|
14
14
|
rationale: string;
|
|
15
15
|
recordedAt: string;
|
|
16
|
-
session
|
|
16
|
+
session?: string;
|
|
17
17
|
/** The demand's refusals at evaluation time, preserved verbatim. */
|
|
18
18
|
unmetReasons: string[];
|
|
19
19
|
}
|
|
@@ -127,7 +127,6 @@ type ResolvedPrVerifyMode = "docs-only" | "trivial" | "full";
|
|
|
127
127
|
declare const reviewPromptSectionSchema: z.ZodObject<{
|
|
128
128
|
provenance: z.ZodEnum<{
|
|
129
129
|
"prior-review-ledger": "prior-review-ledger";
|
|
130
|
-
"profile-standing-checklist": "profile-standing-checklist";
|
|
131
130
|
"issue-review-focus": "issue-review-focus";
|
|
132
131
|
}>;
|
|
133
132
|
source: z.ZodString;
|
|
@@ -254,7 +253,6 @@ declare const readinessRepairSchema: z.ZodObject<{
|
|
|
254
253
|
action: z.ZodString;
|
|
255
254
|
code: z.ZodEnum<{
|
|
256
255
|
"undraft-pr": "undraft-pr";
|
|
257
|
-
"render-pr-body-sections": "render-pr-body-sections";
|
|
258
256
|
"await-post-undraft-checks": "await-post-undraft-checks";
|
|
259
257
|
}>;
|
|
260
258
|
command: z.ZodString;
|
|
@@ -289,9 +287,7 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
289
287
|
"out-of-scope": "out-of-scope";
|
|
290
288
|
}>;
|
|
291
289
|
}, z.core.$strip>>>;
|
|
292
|
-
finalReviewPoint: z.ZodBoolean;
|
|
293
290
|
github: z.ZodObject<{
|
|
294
|
-
currentWithBase: z.ZodBoolean;
|
|
295
291
|
draft: z.ZodBoolean;
|
|
296
292
|
mergeStateStatus: z.ZodString;
|
|
297
293
|
mergeable: z.ZodString;
|
|
@@ -302,67 +298,17 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
302
298
|
pending: "pending";
|
|
303
299
|
none: "none";
|
|
304
300
|
}>;
|
|
301
|
+
reviewDecision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
305
302
|
unresolvedReviewThreads: z.ZodNumber;
|
|
306
303
|
}, z.core.$strip>;
|
|
307
|
-
handledCommentsProducer: z.ZodOptional<z.ZodObject<{
|
|
308
|
-
identity: z.ZodString;
|
|
309
|
-
mode: z.ZodEnum<{
|
|
310
|
-
app: "app";
|
|
311
|
-
"commit-status": "commit-status";
|
|
312
|
-
}>;
|
|
313
|
-
}, z.core.$strip>>;
|
|
314
|
-
handledHumanComments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
315
|
-
clearedAt: z.ZodOptional<z.ZodString>;
|
|
316
|
-
sessionId: z.ZodOptional<z.ZodString>;
|
|
317
|
-
source: z.ZodEnum<{
|
|
318
|
-
cli: "cli";
|
|
319
|
-
"check-run": "check-run";
|
|
320
|
-
}>;
|
|
321
|
-
url: z.ZodString;
|
|
322
|
-
}, z.core.$strip>>>;
|
|
323
304
|
headSha: z.ZodString;
|
|
324
305
|
mergeBaseSha: z.ZodOptional<z.ZodString>;
|
|
325
306
|
patchId: z.ZodString;
|
|
326
|
-
postReadinessHumanComments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
327
|
-
author: z.ZodString;
|
|
328
|
-
createdAt: z.ZodString;
|
|
329
|
-
summary: z.ZodString;
|
|
330
|
-
url: z.ZodString;
|
|
331
|
-
}, z.core.$strip>>>;
|
|
332
|
-
postReadinessHumanReviews: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
333
|
-
author: z.ZodString;
|
|
334
|
-
createdAt: z.ZodString;
|
|
335
|
-
summary: z.ZodString;
|
|
336
|
-
url: z.ZodString;
|
|
337
|
-
}, z.core.$strip>>>;
|
|
338
307
|
pr: z.ZodNumber;
|
|
339
|
-
previewDeploy: z.ZodOptional<z.ZodObject<{
|
|
340
|
-
adminUrl: z.ZodOptional<z.ZodString>;
|
|
341
|
-
apiHealthUrl: z.ZodOptional<z.ZodString>;
|
|
342
|
-
headSha: z.ZodOptional<z.ZodString>;
|
|
343
|
-
localPreviewProof: z.ZodOptional<z.ZodUnknown>;
|
|
344
|
-
localProofPath: z.ZodOptional<z.ZodString>;
|
|
345
|
-
proofSource: z.ZodOptional<z.ZodEnum<{
|
|
346
|
-
"github-actions": "github-actions";
|
|
347
|
-
"local-self-certified": "local-self-certified";
|
|
348
|
-
}>>;
|
|
349
|
-
publicUrl: z.ZodOptional<z.ZodString>;
|
|
350
|
-
seedStatus: z.ZodEnum<{
|
|
351
|
-
unknown: "unknown";
|
|
352
|
-
passed: "passed";
|
|
353
|
-
failed: "failed";
|
|
354
|
-
skipped: "skipped";
|
|
355
|
-
}>;
|
|
356
|
-
stage: z.ZodOptional<z.ZodString>;
|
|
357
|
-
timingsMs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNumber>>>;
|
|
358
|
-
workflowRunUrl: z.ZodOptional<z.ZodString>;
|
|
359
|
-
}, z.core.$strip>>;
|
|
360
|
-
previewDeployRequired: z.ZodBoolean;
|
|
361
308
|
repairs: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
362
309
|
action: z.ZodString;
|
|
363
310
|
code: z.ZodEnum<{
|
|
364
311
|
"undraft-pr": "undraft-pr";
|
|
365
|
-
"render-pr-body-sections": "render-pr-body-sections";
|
|
366
312
|
"await-post-undraft-checks": "await-post-undraft-checks";
|
|
367
313
|
}>;
|
|
368
314
|
command: z.ZodString;
|
|
@@ -428,7 +374,6 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
428
374
|
}>>;
|
|
429
375
|
reviews: z.ZodObject<{
|
|
430
376
|
correctness: z.ZodObject<{
|
|
431
|
-
docsOnlyDeltaAccepted: z.ZodOptional<z.ZodBoolean>;
|
|
432
377
|
required: z.ZodBoolean;
|
|
433
378
|
reviewedHeadSha: z.ZodOptional<z.ZodString>;
|
|
434
379
|
reviewedPatchId: z.ZodOptional<z.ZodString>;
|
|
@@ -441,7 +386,6 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
441
386
|
}>;
|
|
442
387
|
}, z.core.$strip>;
|
|
443
388
|
security: z.ZodOptional<z.ZodObject<{
|
|
444
|
-
docsOnlyDeltaAccepted: z.ZodOptional<z.ZodBoolean>;
|
|
445
389
|
required: z.ZodBoolean;
|
|
446
390
|
reviewedHeadSha: z.ZodOptional<z.ZodString>;
|
|
447
391
|
reviewedPatchId: z.ZodOptional<z.ZodString>;
|
|
@@ -455,12 +399,6 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
455
399
|
}, z.core.$strip>>;
|
|
456
400
|
}, z.core.$strip>;
|
|
457
401
|
schemaVersion: z.ZodLiteral<1>;
|
|
458
|
-
stackRole: z.ZodEnum<{
|
|
459
|
-
single: "single";
|
|
460
|
-
slice: "slice";
|
|
461
|
-
rollup: "rollup";
|
|
462
|
-
"merge-gate prerequisite": "merge-gate prerequisite";
|
|
463
|
-
}>;
|
|
464
402
|
verification: z.ZodObject<{
|
|
465
403
|
command: z.ZodLiteral<"patronage-factory pr:verify">;
|
|
466
404
|
docsOnlyDeltaAccepted: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -476,7 +414,7 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
|
|
|
476
414
|
}, z.core.$strip>;
|
|
477
415
|
}, z.core.$strip>;
|
|
478
416
|
type ReadinessRepair = z.infer<typeof readinessRepairSchema>;
|
|
479
|
-
type ReadinessStatus = "ready" | "blocked"
|
|
417
|
+
type ReadinessStatus = "ready" | "blocked";
|
|
480
418
|
type ManagedReadinessLedger = z.infer<typeof managedReadinessLedgerSchema>;
|
|
481
419
|
//#endregion
|
|
482
420
|
//#region src/pr-ready.d.ts
|
|
@@ -484,8 +422,8 @@ interface PrReadyProof {
|
|
|
484
422
|
schemaVersion: 3;
|
|
485
423
|
/**
|
|
486
424
|
* What GitHub actually did when this run armed native auto-merge (#477).
|
|
487
|
-
* Present exactly when
|
|
488
|
-
* the PR rather than inferred from the invocation, because `gh pr merge
|
|
425
|
+
* Present exactly when a ready wave authorizes machine merge and arming ran;
|
|
426
|
+
* read back from the PR rather than inferred from the invocation, because `gh pr merge
|
|
489
427
|
* --auto` arms, merges, or does nothing with the same exit code and the same
|
|
490
428
|
* empty output. `not-armed` means the candidate is admitted but nothing will
|
|
491
429
|
* merge it, and `followUp` carries the re-dispatch.
|
|
@@ -524,8 +462,9 @@ interface PrReadyProof {
|
|
|
524
462
|
ledger: ManagedReadinessLedger;
|
|
525
463
|
/**
|
|
526
464
|
* Actionable facts that did not block (#477): a settling merge-freeze
|
|
527
|
-
* generation that
|
|
528
|
-
*
|
|
465
|
+
* generation that permitted readiness and any authorized arming with a
|
|
466
|
+
* notice, an admitted-but-unscheduled false boundary wave, and how each
|
|
467
|
+
* waived demand reads to a human. Absent when there are none.
|
|
529
468
|
*/
|
|
530
469
|
notices?: string[];
|
|
531
470
|
/** Committed profile blob evaluated by readiness. Required for merge. */
|
|
@@ -540,7 +479,7 @@ interface PrReadyProof {
|
|
|
540
479
|
* Demands that were in force, were NOT met, and were waived by the operator
|
|
541
480
|
* (#354, moved here from the merge-time proof by #477). Each entry carries
|
|
542
481
|
* the demand's refusals verbatim, so a waived demand can never read as a met
|
|
543
|
-
* one;
|
|
482
|
+
* one; readiness proceeds on the recorded operator act, not on evidence.
|
|
544
483
|
*/
|
|
545
484
|
waivedDemands?: WaivedDemand[];
|
|
546
485
|
}
|
|
@@ -822,11 +761,6 @@ declare const retroEnvelopeV1Schema: z.ZodObject<{
|
|
|
822
761
|
}, z.core.$strict>;
|
|
823
762
|
kind: z.ZodLiteral<"retro-envelope">;
|
|
824
763
|
outcome: z.ZodOptional<z.ZodObject<{
|
|
825
|
-
mergeCheck: z.ZodOptional<z.ZodEnum<{
|
|
826
|
-
pass: "pass";
|
|
827
|
-
fail: "fail";
|
|
828
|
-
"not-run": "not-run";
|
|
829
|
-
}>>;
|
|
830
764
|
status: z.ZodEnum<{
|
|
831
765
|
fail: "fail";
|
|
832
766
|
success: "success";
|
|
@@ -1084,7 +1018,6 @@ declare const prReviewProofSchema: z.ZodObject<{
|
|
|
1084
1018
|
promptSections: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1085
1019
|
provenance: z.ZodEnum<{
|
|
1086
1020
|
"prior-review-ledger": "prior-review-ledger";
|
|
1087
|
-
"profile-standing-checklist": "profile-standing-checklist";
|
|
1088
1021
|
"issue-review-focus": "issue-review-focus";
|
|
1089
1022
|
}>;
|
|
1090
1023
|
source: z.ZodString;
|
|
@@ -1286,9 +1219,8 @@ declare const prReadyProofSchema: z.ZodObject<{
|
|
|
1286
1219
|
"out-of-scope": "out-of-scope";
|
|
1287
1220
|
}>;
|
|
1288
1221
|
}, z.core.$strip>>>;
|
|
1289
|
-
finalReviewPoint: z.ZodBoolean
|
|
1222
|
+
finalReviewPoint: z.ZodOptional<z.ZodBoolean>;
|
|
1290
1223
|
github: z.ZodObject<{
|
|
1291
|
-
currentWithBase: z.ZodBoolean;
|
|
1292
1224
|
draft: z.ZodBoolean;
|
|
1293
1225
|
mergeStateStatus: z.ZodString;
|
|
1294
1226
|
mergeable: z.ZodString;
|
|
@@ -1299,6 +1231,7 @@ declare const prReadyProofSchema: z.ZodObject<{
|
|
|
1299
1231
|
pending: "pending";
|
|
1300
1232
|
none: "none";
|
|
1301
1233
|
}>;
|
|
1234
|
+
reviewDecision: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1302
1235
|
unresolvedReviewThreads: z.ZodNumber;
|
|
1303
1236
|
}, z.core.$strip>;
|
|
1304
1237
|
handledCommentsProducer: z.ZodOptional<z.ZodObject<{
|
|
@@ -1326,29 +1259,13 @@ declare const prReadyProofSchema: z.ZodObject<{
|
|
|
1326
1259
|
summary: z.ZodString;
|
|
1327
1260
|
url: z.ZodString;
|
|
1328
1261
|
}, z.core.$strip>>>;
|
|
1262
|
+
postReadinessHumanReviews: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1263
|
+
author: z.ZodString;
|
|
1264
|
+
createdAt: z.ZodString;
|
|
1265
|
+
summary: z.ZodString;
|
|
1266
|
+
url: z.ZodString;
|
|
1267
|
+
}, z.core.$strip>>>;
|
|
1329
1268
|
pr: z.ZodNumber;
|
|
1330
|
-
previewDeploy: z.ZodOptional<z.ZodObject<{
|
|
1331
|
-
adminUrl: z.ZodOptional<z.ZodString>;
|
|
1332
|
-
apiHealthUrl: z.ZodOptional<z.ZodString>;
|
|
1333
|
-
headSha: z.ZodOptional<z.ZodString>;
|
|
1334
|
-
localPreviewProof: z.ZodOptional<z.ZodUnknown>;
|
|
1335
|
-
localProofPath: z.ZodOptional<z.ZodString>;
|
|
1336
|
-
proofSource: z.ZodOptional<z.ZodEnum<{
|
|
1337
|
-
"github-actions": "github-actions";
|
|
1338
|
-
"local-self-certified": "local-self-certified";
|
|
1339
|
-
}>>;
|
|
1340
|
-
publicUrl: z.ZodOptional<z.ZodString>;
|
|
1341
|
-
seedStatus: z.ZodEnum<{
|
|
1342
|
-
unknown: "unknown";
|
|
1343
|
-
passed: "passed";
|
|
1344
|
-
failed: "failed";
|
|
1345
|
-
skipped: "skipped";
|
|
1346
|
-
}>;
|
|
1347
|
-
stage: z.ZodOptional<z.ZodString>;
|
|
1348
|
-
timingsMs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNumber>>>;
|
|
1349
|
-
workflowRunUrl: z.ZodOptional<z.ZodString>;
|
|
1350
|
-
}, z.core.$strip>>;
|
|
1351
|
-
previewDeployRequired: z.ZodBoolean;
|
|
1352
1269
|
repairs: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
1353
1270
|
action: z.ZodString;
|
|
1354
1271
|
code: z.ZodEnum<{
|
|
@@ -1455,7 +1372,6 @@ declare const prReadyProofSchema: z.ZodObject<{
|
|
|
1455
1372
|
promptSections: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
1456
1373
|
provenance: z.ZodEnum<{
|
|
1457
1374
|
"prior-review-ledger": "prior-review-ledger";
|
|
1458
|
-
"profile-standing-checklist": "profile-standing-checklist";
|
|
1459
1375
|
"issue-review-focus": "issue-review-focus";
|
|
1460
1376
|
}>;
|
|
1461
1377
|
source: z.ZodString;
|
|
@@ -1531,12 +1447,12 @@ declare const prReadyProofSchema: z.ZodObject<{
|
|
|
1531
1447
|
}, z.core.$strip>>;
|
|
1532
1448
|
}, z.core.$strip>;
|
|
1533
1449
|
schemaVersion: z.ZodLiteral<1>;
|
|
1534
|
-
stackRole: z.ZodEnum<{
|
|
1450
|
+
stackRole: z.ZodOptional<z.ZodEnum<{
|
|
1535
1451
|
single: "single";
|
|
1536
1452
|
slice: "slice";
|
|
1537
1453
|
rollup: "rollup";
|
|
1538
1454
|
"merge-gate prerequisite": "merge-gate prerequisite";
|
|
1539
|
-
}
|
|
1455
|
+
}>>;
|
|
1540
1456
|
verification: z.ZodObject<{
|
|
1541
1457
|
command: z.ZodLiteral<"patronage-factory pr:verify">;
|
|
1542
1458
|
docsOnlyDeltaAccepted: z.ZodOptional<z.ZodBoolean>;
|
package/dist/schemas.js
CHANGED
|
@@ -19,34 +19,28 @@ const DEMAND_KEYS = {
|
|
|
19
19
|
boundaryWave: "boundary-wave",
|
|
20
20
|
/** The PR is still a draft. */
|
|
21
21
|
draft: "draft",
|
|
22
|
-
/** The candidate is not the intended final human review point. */
|
|
23
|
-
finalReviewPoint: "final-review-point",
|
|
24
22
|
/** GitHub's own check rollup for the candidate head. */
|
|
25
23
|
githubChecks: "github-checks",
|
|
26
24
|
/** Local HEAD and the GitHub PR head must be the same commit. */
|
|
27
25
|
headIdentity: "head-identity",
|
|
28
|
-
/**
|
|
26
|
+
/** GitHub's live aggregate review decision is CHANGES_REQUESTED. */
|
|
29
27
|
humanBlocker: "human-blocker",
|
|
30
28
|
/** The repository-wide merge freeze. */
|
|
31
29
|
mergeFreeze: "merge-freeze",
|
|
32
30
|
/** GitHub's mergeability / merge-state rollup. */
|
|
33
31
|
mergeState: "merge-state",
|
|
34
32
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* a
|
|
33
|
+
* Retired readiness demand, retained solely to parse historical v3 proofs
|
|
34
|
+
* and their HQ payloads. No current command emits it: GitHub approval is
|
|
35
|
+
* neither a review-rung authority nor a scheduling requirement.
|
|
38
36
|
*/
|
|
39
37
|
nativeApproval: "native-approval",
|
|
40
|
-
/** The PR body's required rendered sections. */
|
|
41
|
-
prBodySections: "pr-body-sections",
|
|
42
38
|
/** A current, head-bound, passing typed `pr:verify` proof. */
|
|
43
39
|
prVerify: "pr-verify",
|
|
44
40
|
/** The profile-resolved review ladder policy. */
|
|
45
41
|
reviewLadder: "review-ladder",
|
|
46
42
|
/** Unresolved GitHub review threads. */
|
|
47
|
-
reviewThreads: "review-threads"
|
|
48
|
-
/** An explicit trivial waiver that the diff does not support. */
|
|
49
|
-
trivialWaiver: "trivial-waiver"
|
|
43
|
+
reviewThreads: "review-threads"
|
|
50
44
|
};
|
|
51
45
|
/** The families whose instances are named by a resolved value. */
|
|
52
46
|
const QUALIFIED_DEMAND_FAMILIES = [
|
|
@@ -188,29 +182,18 @@ const blockedReasonIssue = (message) => [{
|
|
|
188
182
|
* wire schema so it is one rule rather than two that can drift. It is the
|
|
189
183
|
* producer's state machine, written down:
|
|
190
184
|
*
|
|
191
|
-
* - `ready` refused nothing, so it carries neither projection
|
|
192
|
-
*
|
|
193
|
-
* - `slice-ready/not-final` was held back by exactly one demand — being a
|
|
194
|
-
* slice — and names it;
|
|
195
|
-
* - `blocked` refused something other than being a slice, and says so;
|
|
185
|
+
* - `ready` refused nothing, so it carries neither projection;
|
|
186
|
+
* - `blocked` refused something and says so;
|
|
196
187
|
* - whichever it is, `blockedReasons` names every refusal listed in
|
|
197
188
|
* `blockingReasons`, in the same order, as the bounded form of that sentence.
|
|
198
189
|
*
|
|
199
|
-
* Naming the slice demand and the ledger's `finalReviewPoint` are the same
|
|
200
|
-
* fact, so a proof that says one and not the other is refused.
|
|
201
190
|
*/
|
|
202
191
|
const blockedReasonIssues = (proof) => {
|
|
203
192
|
const named = proof.blockedReasons ?? [];
|
|
204
193
|
const reasons = proof.blockingReasons ?? [];
|
|
205
|
-
const slice = DEMAND_KEYS.finalReviewPoint;
|
|
206
|
-
const namesSlice = named.some((reason) => reason.code === slice);
|
|
207
194
|
if (proof.status === "ready") {
|
|
208
195
|
if (named.length > 0 || reasons.length > 0) return blockedReasonIssue("a ready pr:ready proof must carry no blocking reasons");
|
|
209
|
-
} else if (proof.status === "slice-ready/not-final") {
|
|
210
|
-
if (named.length !== 1 || !namesSlice) return blockedReasonIssue(`a slice-ready/not-final pr:ready proof is held back by exactly one demand, ${slice}`);
|
|
211
196
|
} else if (reasons.length === 0) return blockedReasonIssue("a blocked pr:ready proof must record what blocked it");
|
|
212
|
-
else if (named.length > 0 && !named.some((r) => r.code !== slice)) return blockedReasonIssue(`a blocked pr:ready proof must name a demand other than ${slice}`);
|
|
213
|
-
if (proof.finalReviewPoint !== void 0 && namesSlice === proof.finalReviewPoint) return blockedReasonIssue(`naming ${slice} and the ledger's finalReviewPoint are the same fact; this proof says both`);
|
|
214
197
|
if (named.length !== reasons.length) return blockedReasonIssue(`blockedReasons must name every blocking reason: ${reasons.length} reason(s), ${named.length} named`);
|
|
215
198
|
const drifted = named.findIndex((reason, index) => reason.detail !== blockedReasonDetail(reasons[index]));
|
|
216
199
|
return drifted === -1 ? [] : blockedReasonIssue(`blockedReasons[${drifted}] does not carry blocking reason ${drifted}; the two projections must tell one story`);
|
|
@@ -228,7 +211,7 @@ const demandWaiverSchema = z.object({
|
|
|
228
211
|
operator: z.string().trim().min(1),
|
|
229
212
|
rationale: z.string().trim().min(1),
|
|
230
213
|
recordedAt: z.iso.datetime(),
|
|
231
|
-
session: z.string().trim().min(1)
|
|
214
|
+
session: z.string().trim().min(1).optional()
|
|
232
215
|
});
|
|
233
216
|
z.object({
|
|
234
217
|
command: z.literal("patronage-factory demand:waive"),
|
|
@@ -240,7 +223,7 @@ const waivedDemandSchema = z.object({
|
|
|
240
223
|
operator: z.string().trim().min(1),
|
|
241
224
|
rationale: z.string().trim().min(1),
|
|
242
225
|
recordedAt: z.iso.datetime(),
|
|
243
|
-
session: z.string().trim().min(1),
|
|
226
|
+
session: z.string().trim().min(1).optional(),
|
|
244
227
|
unmetReasons: z.array(z.string().min(1)).min(1)
|
|
245
228
|
});
|
|
246
229
|
const MAX_CLOSEOUT_ROWS = 1e3;
|
|
@@ -523,11 +506,6 @@ const RetroCycleCountersSchema = z.object({
|
|
|
523
506
|
thermoFixRounds: nonNegInt
|
|
524
507
|
}).strict();
|
|
525
508
|
const RetroOutcomeSchema = z.object({
|
|
526
|
-
mergeCheck: z.enum([
|
|
527
|
-
"pass",
|
|
528
|
-
"fail",
|
|
529
|
-
"not-run"
|
|
530
|
-
]).optional(),
|
|
531
509
|
status: z.enum([
|
|
532
510
|
"success",
|
|
533
511
|
"blocked",
|
|
@@ -731,11 +709,7 @@ const PR_REVIEW_SCHEMA_VERSION = 2;
|
|
|
731
709
|
const PR_REVIEW_FINDING_PROVENANCE_VERSION = 1;
|
|
732
710
|
const nonBlankString = z.string().refine((value) => value.trim().length > 0, { message: "must not be blank" });
|
|
733
711
|
const parseableDateString = z.string().refine((value) => Number.isFinite(Date.parse(value)), { message: "must be a parseable date string" });
|
|
734
|
-
const reviewPromptSectionProvenances = [
|
|
735
|
-
"prior-review-ledger",
|
|
736
|
-
"profile-standing-checklist",
|
|
737
|
-
"issue-review-focus"
|
|
738
|
-
];
|
|
712
|
+
const reviewPromptSectionProvenances = ["prior-review-ledger", "issue-review-focus"];
|
|
739
713
|
const reviewPromptSectionSchema = z.object({
|
|
740
714
|
provenance: z.enum(reviewPromptSectionProvenances),
|
|
741
715
|
source: nonBlankString,
|
|
@@ -1009,6 +983,18 @@ const reviewStateSchema = z.object({
|
|
|
1009
983
|
reviewedPatchId: z.string().optional(),
|
|
1010
984
|
status: z.enum(REVIEW_STATUS_VALUES)
|
|
1011
985
|
});
|
|
986
|
+
const historicalPostReadinessCommentSchema = z.object({
|
|
987
|
+
author: z.string().min(1),
|
|
988
|
+
createdAt: z.string().min(1),
|
|
989
|
+
summary: z.string().min(1),
|
|
990
|
+
url: z.string().min(1)
|
|
991
|
+
});
|
|
992
|
+
const historicalHandledHumanCommentSchema = z.object({
|
|
993
|
+
clearedAt: z.string().min(1).optional(),
|
|
994
|
+
sessionId: z.string().min(1).optional(),
|
|
995
|
+
source: z.enum(["check-run", "cli"]),
|
|
996
|
+
url: z.string().min(1)
|
|
997
|
+
});
|
|
1012
998
|
const managedReadinessLedgerSchema = z.object({
|
|
1013
999
|
baseSha: z.string().regex(/^[0-9a-f]{40}$/u),
|
|
1014
1000
|
blockingReasons: z.array(z.string()),
|
|
@@ -1026,9 +1012,8 @@ const managedReadinessLedgerSchema = z.object({
|
|
|
1026
1012
|
"out-of-scope"
|
|
1027
1013
|
])
|
|
1028
1014
|
})).optional(),
|
|
1029
|
-
finalReviewPoint: z.boolean(),
|
|
1015
|
+
finalReviewPoint: z.boolean().optional(),
|
|
1030
1016
|
github: z.object({
|
|
1031
|
-
currentWithBase: z.boolean(),
|
|
1032
1017
|
draft: z.boolean(),
|
|
1033
1018
|
mergeStateStatus: z.string(),
|
|
1034
1019
|
mergeable: z.string(),
|
|
@@ -1039,47 +1024,20 @@ const managedReadinessLedgerSchema = z.object({
|
|
|
1039
1024
|
"none",
|
|
1040
1025
|
"unknown"
|
|
1041
1026
|
]),
|
|
1027
|
+
reviewDecision: z.string().nullable().optional(),
|
|
1042
1028
|
unresolvedReviewThreads: z.number().int().nonnegative()
|
|
1043
1029
|
}),
|
|
1044
1030
|
handledCommentsProducer: z.object({
|
|
1045
1031
|
identity: z.string().min(1),
|
|
1046
1032
|
mode: z.enum(["app", "commit-status"])
|
|
1047
1033
|
}).optional(),
|
|
1048
|
-
handledHumanComments: z.array(
|
|
1049
|
-
clearedAt: z.string().min(1).optional(),
|
|
1050
|
-
sessionId: z.string().min(1).optional(),
|
|
1051
|
-
source: z.enum(["check-run", "cli"]),
|
|
1052
|
-
url: z.string().min(1)
|
|
1053
|
-
})).optional(),
|
|
1034
|
+
handledHumanComments: z.array(historicalHandledHumanCommentSchema).optional(),
|
|
1054
1035
|
headSha: z.string().regex(/^[0-9a-f]{40}$/u),
|
|
1055
1036
|
mergeBaseSha: z.string().regex(/^[0-9a-f]{40}$/u).optional(),
|
|
1056
1037
|
patchId: z.string().regex(/^[0-9a-f]{40,64}$/u),
|
|
1057
|
-
postReadinessHumanComments: z.array(
|
|
1058
|
-
|
|
1059
|
-
createdAt: z.string().min(1),
|
|
1060
|
-
summary: z.string().min(1),
|
|
1061
|
-
url: z.string().min(1)
|
|
1062
|
-
})).optional(),
|
|
1038
|
+
postReadinessHumanComments: z.array(historicalPostReadinessCommentSchema).optional(),
|
|
1039
|
+
postReadinessHumanReviews: z.array(historicalPostReadinessCommentSchema).optional(),
|
|
1063
1040
|
pr: z.number().int().positive(),
|
|
1064
|
-
previewDeploy: z.object({
|
|
1065
|
-
adminUrl: z.string().optional(),
|
|
1066
|
-
apiHealthUrl: z.string().optional(),
|
|
1067
|
-
headSha: z.string().optional(),
|
|
1068
|
-
localPreviewProof: z.unknown().optional(),
|
|
1069
|
-
localProofPath: z.string().optional(),
|
|
1070
|
-
proofSource: z.enum(["github-actions", "local-self-certified"]).optional(),
|
|
1071
|
-
publicUrl: z.string().optional(),
|
|
1072
|
-
seedStatus: z.enum([
|
|
1073
|
-
"passed",
|
|
1074
|
-
"failed",
|
|
1075
|
-
"skipped",
|
|
1076
|
-
"unknown"
|
|
1077
|
-
]),
|
|
1078
|
-
stage: z.string().optional(),
|
|
1079
|
-
timingsMs: z.record(z.string(), z.number().optional()).optional(),
|
|
1080
|
-
workflowRunUrl: z.string().optional()
|
|
1081
|
-
}).optional(),
|
|
1082
|
-
previewDeployRequired: z.boolean(),
|
|
1083
1041
|
repairs: z.array(readinessRepairSchema).default([]),
|
|
1084
1042
|
reviewCycleState: z.object({
|
|
1085
1043
|
autoBlockingFindings: z.number().int().nonnegative(),
|
|
@@ -1152,7 +1110,7 @@ const managedReadinessLedgerSchema = z.object({
|
|
|
1152
1110
|
"slice",
|
|
1153
1111
|
"rollup",
|
|
1154
1112
|
"merge-gate prerequisite"
|
|
1155
|
-
]),
|
|
1113
|
+
]).optional(),
|
|
1156
1114
|
verification: z.object({
|
|
1157
1115
|
command: z.literal("patronage-factory pr:verify"),
|
|
1158
1116
|
docsOnlyDeltaAccepted: z.boolean().optional(),
|
|
@@ -1217,10 +1175,7 @@ const prReadyProofSchema = z.object({
|
|
|
1217
1175
|
});
|
|
1218
1176
|
return;
|
|
1219
1177
|
}
|
|
1220
|
-
for (const issue of blockedReasonIssues({
|
|
1221
|
-
...proof,
|
|
1222
|
-
finalReviewPoint: proof.ledger.finalReviewPoint
|
|
1223
|
-
})) context.addIssue(issue);
|
|
1178
|
+
for (const issue of blockedReasonIssues({ ...proof })) context.addIssue(issue);
|
|
1224
1179
|
});
|
|
1225
1180
|
//#endregion
|
|
1226
1181
|
export { BLOCKED_REASONS_MAX, BLOCKED_REASON_DETAIL_MAX, BOUNDARY_CHECK_SCHEMA_VERSION, BOUNDARY_REVIEW_PROOF_KIND, EVIDENCE_ENVELOPE_SCHEMA_VERSION, PR_READY_SCHEMA_VERSION, PR_REVIEW_SCHEMA_VERSION, RETRO_ENVELOPE_SCHEMA_VERSION, RETRO_ENVELOPE_VALIDATORS, RETRO_ENVELOPE_WIRE_BOUNDS, SUPPORTED_PR_READY_SCHEMA_VERSIONS, SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS, SUPPORTED_RETRO_ENVELOPE_SCHEMA_VERSIONS, blockedReasonSchema, blockedReasonsSchema, boundaryCheckProofSchema, boundaryReviewProofSchema, closeoutArtifactSchema, evidenceEnvelopeSchema, prReadyProofSchema, prReviewProofSchema, prVerifyProofSchema, retroEnvelopeV1Schema, retroEpicReference, waivedDemandSchema };
|