@patronage/software-factory 1.0.0-alpha.36 → 1.0.0-alpha.38

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.
@@ -1,4 +1,4 @@
1
- import { i as buildJevRequests, l as noul, n as spawnJevBridge, o as defaultJevCacheDirectory } from "./bridge-B4Sx95ZO.js";
1
+ import { i as buildJevRequests, l as noul, n as spawnJevBridge, o as defaultJevCacheDirectory } from "./bridge-PMzq2gZh.js";
2
2
  import path from "node:path";
3
3
  import { mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
4
4
  import { createHash } from "node:crypto";
@@ -1,4 +1,4 @@
1
- import { a as resolveJevGateway, r as runJevFiles, s as openJevCache, t as allUnavailable } from "./bridge-B4Sx95ZO.js";
1
+ import { a as resolveJevGateway, r as runJevFiles, s as openJevCache, t as allUnavailable } from "./bridge-PMzq2gZh.js";
2
2
  import { readFileSync } from "node:fs";
3
3
  //#region src/oxlint-jev/worker.ts
4
4
  /**
package/dist/schemas.d.ts CHANGED
@@ -860,11 +860,13 @@ interface PrReadyProof {
860
860
  schemaVersion: 3;
861
861
  /**
862
862
  * What GitHub actually did when this run armed native auto-merge (#477).
863
- * Present exactly when a ready wave authorizes machine merge and arming ran;
864
- * read back from the PR rather than inferred from the invocation, because `gh pr merge
865
- * --auto` arms, merges, or does nothing with the same exit code and the same
866
- * empty output. `not-armed` means the candidate is admitted but nothing will
867
- * merge it, and `followUp` carries the re-dispatch.
863
+ * Present exactly when a ready run called the arming module (#1299): not
864
+ * for an `autoMerge: false` wave, and not when a notice names why the run
865
+ * did not arm. Read back from the PR rather than inferred from the
866
+ * invocation, because `gh pr merge --auto` arms, merges, or does nothing
867
+ * with the same exit code and the same empty output. `not-armed` means the
868
+ * candidate is admitted but nothing will merge it, and `followUp` carries
869
+ * the re-dispatch.
868
870
  */
869
871
  arming?: {
870
872
  detail?: string;
@@ -998,8 +1000,8 @@ declare const closeoutArtifactSchema: z.ZodObject<{
998
1000
  }, z.core.$strict>;
999
1001
  unit: z.ZodEnum<{
1000
1002
  boolean: "boolean";
1001
- count: "count";
1002
1003
  text: "text";
1004
+ count: "count";
1003
1005
  tokens: "tokens";
1004
1006
  usd: "usd";
1005
1007
  }>;
@@ -1010,6 +1012,28 @@ declare const closeoutArtifactSchema: z.ZodObject<{
1010
1012
  }, z.core.$strict>;
1011
1013
  type CloseoutArtifact = z.infer<typeof closeoutArtifactSchema>;
1012
1014
  //#endregion
1015
+ //#region src/gate-timing-record.d.ts
1016
+ declare const gateTimingRecordSchema: z.ZodObject<{
1017
+ agentRunId: z.ZodString;
1018
+ cycle: z.ZodNumber;
1019
+ durationMs: z.ZodNumber;
1020
+ gate: z.ZodEnum<{
1021
+ "boundary:check": "boundary:check";
1022
+ "factory:closeout": "factory:closeout";
1023
+ "pr:ready": "pr:ready";
1024
+ "pr:review": "pr:review";
1025
+ "pr:verify": "pr:verify";
1026
+ }>;
1027
+ outcome: z.ZodEnum<{
1028
+ pass: "pass";
1029
+ fail: "fail";
1030
+ }>;
1031
+ schemaVersion: z.ZodLiteral<1>;
1032
+ startOffsetMs: z.ZodNumber;
1033
+ startedAt: z.ZodISODateTime;
1034
+ }, z.core.$strict>;
1035
+ type GateTimingRecord = z.infer<typeof gateTimingRecordSchema>;
1036
+ //#endregion
1013
1037
  //#region src/schemas.d.ts
1014
1038
  declare const EVIDENCE_ENVELOPE_SCHEMA_VERSION = 1;
1015
1039
  declare const evidenceEnvelopeSchema: z.ZodObject<{
@@ -1406,4 +1430,4 @@ declare const prReadyProofSchema: z.ZodObject<{
1406
1430
  waivedDemands: z.ZodOptional<z.ZodArray<z.ZodType<WaivedDemand, unknown, z.core.$ZodTypeInternals<WaivedDemand, unknown>>>>;
1407
1431
  }, z.core.$strip>;
1408
1432
  //#endregion
1409
- export { BLOCKED_REASONS_MAX, BLOCKED_REASON_DETAIL_MAX, BOUNDARY_CHECK_SCHEMA_VERSION, BOUNDARY_REVIEW_PROOF_KIND, type BlockedReason, BoundaryCheckProofRecord, type BoundaryReviewProof, type CloseoutArtifact, EVIDENCE_ENVELOPE_SCHEMA_VERSION, type EvidenceEnvelope, PR_READY_SCHEMA_VERSION, PR_REVIEW_SCHEMA_VERSION, type PrReadyProof, type PrReviewProof, type PrVerifyProof, type ReviewPromptSection, type ReviewPromptSectionProvenance, SUPPORTED_CLOSEOUT_SCHEMA_VERSIONS, SUPPORTED_PR_READY_SCHEMA_VERSIONS, SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS, type WaivedDemand, blockedReasonSchema, blockedReasonsSchema, boundaryCheckProofSchema, boundaryReviewProofSchema, closeoutArtifactSchema, evidenceEnvelopeSchema, prReadyProofSchema, prReviewFindingSchema, prReviewProofSchema, prReviewResultSchema, prVerifyProofSchema, reviewPromptSectionSchema, reviewPromptSectionsSchema, waivedDemandSchema };
1433
+ export { BLOCKED_REASONS_MAX, BLOCKED_REASON_DETAIL_MAX, BOUNDARY_CHECK_SCHEMA_VERSION, BOUNDARY_REVIEW_PROOF_KIND, type BlockedReason, BoundaryCheckProofRecord, type BoundaryReviewProof, type CloseoutArtifact, EVIDENCE_ENVELOPE_SCHEMA_VERSION, type EvidenceEnvelope, type GateTimingRecord, PR_READY_SCHEMA_VERSION, PR_REVIEW_SCHEMA_VERSION, type PrReadyProof, type PrReviewProof, type PrVerifyProof, type ReviewPromptSection, type ReviewPromptSectionProvenance, SUPPORTED_CLOSEOUT_SCHEMA_VERSIONS, SUPPORTED_PR_READY_SCHEMA_VERSIONS, SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS, type WaivedDemand, blockedReasonSchema, blockedReasonsSchema, boundaryCheckProofSchema, boundaryReviewProofSchema, closeoutArtifactSchema, evidenceEnvelopeSchema, gateTimingRecordSchema, prReadyProofSchema, prReviewFindingSchema, prReviewProofSchema, prReviewResultSchema, prVerifyProofSchema, reviewPromptSectionSchema, reviewPromptSectionsSchema, waivedDemandSchema };
package/dist/schemas.js CHANGED
@@ -14,9 +14,10 @@ Object.fromEntries(EVIDENCE_REVIEW_RUNGS.map((rung, index) => [rung, index]));
14
14
  const DEMAND_KEYS = {
15
15
  /**
16
16
  * The boundary wave that authorizes this candidate's merge schedule (#477).
17
- * In force exactly when GitHub already has auto-merge enabled: a live
18
- * schedule with no wave demand resolved is an unauthorized merge waiting to
19
- * happen.
17
+ * In force exactly when GitHub already has auto-merge enabled on a candidate
18
+ * that the standalone default does not authorize (#1299): a live schedule on
19
+ * an epic member with no wave demand resolved is an unauthorized merge
20
+ * waiting to happen.
20
21
  */
21
22
  boundaryWave: "boundary-wave",
22
23
  /**
@@ -55,6 +56,15 @@ const DEMAND_KEYS = {
55
56
  prVerify: "pr-verify",
56
57
  /** The profile-resolved review ladder policy. */
57
58
  reviewLadder: "review-ladder",
59
+ /**
60
+ * A review round past the second on one pull request (#1280). A round is
61
+ * every review recorded at one patch, so a pair of clean sessions at one
62
+ * head is one round. Only an operator waiver clears it: `pr:review
63
+ * --assemble` refuses to start a third round without one, and `pr:ready`
64
+ * refuses a ladder that holds more than two. The waiver rationale carries
65
+ * the operator's disposition.
66
+ */
67
+ reviewRoundLimit: "review-round-limit",
58
68
  /** Unresolved GitHub review threads. */
59
69
  reviewThreads: "review-threads"
60
70
  };
@@ -1274,6 +1284,31 @@ const closeoutArtifactSchema = z.object({
1274
1284
  repo: RepoSchema,
1275
1285
  schemaVersion: z.literal(5)
1276
1286
  }).strict();
1287
+ /** The self-timed gate commands. */
1288
+ const FACTORY_GATE_NAMES = [
1289
+ "boundary:check",
1290
+ "factory:closeout",
1291
+ "pr:ready",
1292
+ "pr:review",
1293
+ "pr:verify"
1294
+ ];
1295
+ const nonNegativeInteger = z.number().int().nonnegative();
1296
+ const gateTimingRecordSchema = z.object({
1297
+ /** The lane run identity the ledger is keyed by. */
1298
+ agentRunId: z.string().min(1),
1299
+ cycle: z.number().int().positive(),
1300
+ durationMs: nonNegativeInteger,
1301
+ gate: z.enum(FACTORY_GATE_NAMES),
1302
+ outcome: z.enum(["fail", "pass"]),
1303
+ schemaVersion: z.literal(1),
1304
+ /**
1305
+ * Milliseconds from the lane run's origin (the first record's start) to
1306
+ * this record's start. The first record is offset 0.
1307
+ */
1308
+ startOffsetMs: nonNegativeInteger,
1309
+ /** Wall-clock start of this gate invocation (ISO 8601). */
1310
+ startedAt: z.iso.datetime()
1311
+ }).strict();
1277
1312
  //#endregion
1278
1313
  //#region src/schemas.ts
1279
1314
  const evidenceCheckTypeSchema = z.enum(EVIDENCE_CHECK_TYPES);
@@ -1616,4 +1651,4 @@ const prReadyProofSchema = z.object({
1616
1651
  for (const issue of blockedReasonIssues({ ...proof })) context.addIssue(issue);
1617
1652
  });
1618
1653
  //#endregion
1619
- 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, SUPPORTED_CLOSEOUT_SCHEMA_VERSIONS, SUPPORTED_PR_READY_SCHEMA_VERSIONS, SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS, blockedReasonSchema, blockedReasonsSchema, boundaryCheckProofSchema, boundaryReviewProofSchema, closeoutArtifactSchema, evidenceEnvelopeSchema, prReadyProofSchema, prReviewFindingSchema, prReviewProofSchema, prReviewResultSchema, prVerifyProofSchema, reviewPromptSectionSchema, reviewPromptSectionsSchema, waivedDemandSchema };
1654
+ 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, SUPPORTED_CLOSEOUT_SCHEMA_VERSIONS, SUPPORTED_PR_READY_SCHEMA_VERSIONS, SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS, blockedReasonSchema, blockedReasonsSchema, boundaryCheckProofSchema, boundaryReviewProofSchema, closeoutArtifactSchema, evidenceEnvelopeSchema, gateTimingRecordSchema, prReadyProofSchema, prReviewFindingSchema, prReviewProofSchema, prReviewResultSchema, prVerifyProofSchema, reviewPromptSectionSchema, reviewPromptSectionsSchema, waivedDemandSchema };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patronage/software-factory",
3
- "version": "1.0.0-alpha.36",
3
+ "version": "1.0.0-alpha.38",
4
4
  "description": "Shared Patronage software factory CLI and project-profile validation tools",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,7 +42,7 @@
42
42
  "picomatch": "^4.0.5",
43
43
  "yaml": "^2.9.0",
44
44
  "zod": "4.4.3",
45
- "@patronage/factory-ci": "1.0.0-alpha.36"
45
+ "@patronage/factory-ci": "1.0.0-alpha.38"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@oxlint/plugins": "1.76.0",