@on-par/factory-cli 0.9.28-next.2 → 0.9.28-next.21

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 (94) hide show
  1. package/dist/cli/doctor-config.d.ts +1 -0
  2. package/dist/cli/doctor-config.d.ts.map +1 -1
  3. package/dist/cli/doctor-config.js +1 -0
  4. package/dist/cli/doctor-config.js.map +1 -1
  5. package/dist/cli/doctor-linear.d.ts +6 -0
  6. package/dist/cli/doctor-linear.d.ts.map +1 -0
  7. package/dist/cli/doctor-linear.js +72 -0
  8. package/dist/cli/doctor-linear.js.map +1 -0
  9. package/dist/cli/doctor-verify.d.ts +5 -0
  10. package/dist/cli/doctor-verify.d.ts.map +1 -1
  11. package/dist/cli/doctor-verify.js +21 -4
  12. package/dist/cli/doctor-verify.js.map +1 -1
  13. package/dist/cli/doctor.d.ts +1 -1
  14. package/dist/cli/doctor.d.ts.map +1 -1
  15. package/dist/cli/doctor.js +3 -1
  16. package/dist/cli/doctor.js.map +1 -1
  17. package/dist/cli/index.d.ts +46 -45
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +69 -15
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/cli/land-find-pr.d.ts +5 -0
  22. package/dist/cli/land-find-pr.d.ts.map +1 -0
  23. package/dist/cli/land-find-pr.js +27 -0
  24. package/dist/cli/land-find-pr.js.map +1 -0
  25. package/dist/cli/land-pr.d.ts +5 -1
  26. package/dist/cli/land-pr.d.ts.map +1 -1
  27. package/dist/cli/land-pr.js +5 -1
  28. package/dist/cli/land-pr.js.map +1 -1
  29. package/dist/cli/land.d.ts +9 -3
  30. package/dist/cli/land.d.ts.map +1 -1
  31. package/dist/cli/land.js +27 -34
  32. package/dist/cli/land.js.map +1 -1
  33. package/dist/cli/program-observe.js +1 -1
  34. package/dist/cli/program-observe.js.map +1 -1
  35. package/dist/cli/program-run-work.d.ts.map +1 -1
  36. package/dist/cli/program-run-work.js +7 -0
  37. package/dist/cli/program-run-work.js.map +1 -1
  38. package/dist/cli/queue-backend-select.d.ts +15 -0
  39. package/dist/cli/queue-backend-select.d.ts.map +1 -0
  40. package/dist/cli/queue-backend-select.js +30 -0
  41. package/dist/cli/queue-backend-select.js.map +1 -0
  42. package/dist/cli/run-brief.d.ts +10 -0
  43. package/dist/cli/run-brief.d.ts.map +1 -1
  44. package/dist/cli/run-brief.js +41 -5
  45. package/dist/cli/run-brief.js.map +1 -1
  46. package/dist/cli/run-issue-merge.d.ts +54 -0
  47. package/dist/cli/run-issue-merge.d.ts.map +1 -0
  48. package/dist/cli/run-issue-merge.js +155 -0
  49. package/dist/cli/run-issue-merge.js.map +1 -0
  50. package/dist/cli/run-lane-discovery.d.ts +35 -0
  51. package/dist/cli/run-lane-discovery.d.ts.map +1 -0
  52. package/dist/cli/run-lane-discovery.js +93 -0
  53. package/dist/cli/run-lane-discovery.js.map +1 -0
  54. package/dist/cli/run-queue.d.ts +19 -0
  55. package/dist/cli/run-queue.d.ts.map +1 -0
  56. package/dist/cli/run-queue.js +65 -0
  57. package/dist/cli/run-queue.js.map +1 -0
  58. package/dist/cli/run-rework-poll.d.ts +15 -0
  59. package/dist/cli/run-rework-poll.d.ts.map +1 -0
  60. package/dist/cli/run-rework-poll.js +79 -0
  61. package/dist/cli/run-rework-poll.js.map +1 -0
  62. package/dist/cli/run.d.ts.map +1 -1
  63. package/dist/cli/run.js +41 -102
  64. package/dist/cli/run.js.map +1 -1
  65. package/dist/cli/ship-options.d.ts +19 -1
  66. package/dist/cli/ship-options.d.ts.map +1 -1
  67. package/dist/cli/ship-options.js +34 -0
  68. package/dist/cli/ship-options.js.map +1 -1
  69. package/dist/cli/ship-pr-state.d.ts +58 -0
  70. package/dist/cli/ship-pr-state.d.ts.map +1 -0
  71. package/dist/cli/ship-pr-state.js +169 -0
  72. package/dist/cli/ship-pr-state.js.map +1 -0
  73. package/dist/cli/ship-review-rework.d.ts +2 -0
  74. package/dist/cli/ship-review-rework.d.ts.map +1 -1
  75. package/dist/cli/ship-review-rework.js +10 -2
  76. package/dist/cli/ship-review-rework.js.map +1 -1
  77. package/dist/cli/ship-steps.d.ts +3 -1
  78. package/dist/cli/ship-steps.d.ts.map +1 -1
  79. package/dist/cli/ship-steps.js +14 -2
  80. package/dist/cli/ship-steps.js.map +1 -1
  81. package/dist/cli/ship.d.ts.map +1 -1
  82. package/dist/cli/ship.js +20 -19
  83. package/dist/cli/ship.js.map +1 -1
  84. package/dist/cli/shutdown.d.ts +26 -0
  85. package/dist/cli/shutdown.d.ts.map +1 -0
  86. package/dist/cli/shutdown.js +82 -0
  87. package/dist/cli/shutdown.js.map +1 -0
  88. package/dist/cli/status.d.ts.map +1 -1
  89. package/dist/cli/status.js +57 -27
  90. package/dist/cli/status.js.map +1 -1
  91. package/dist/cli/supervise.d.ts.map +1 -1
  92. package/dist/cli/supervise.js +11 -6
  93. package/dist/cli/supervise.js.map +1 -1
  94. package/package.json +4 -4
@@ -1,4 +1,6 @@
1
1
  import type { Octokit } from '@octokit/rest';
2
+ import { shipIssue } from './ship.js';
3
+ import { driveToMerge } from './run-issue-merge.js';
2
4
  /** index.ts bindings the handler needs; index.ts passes them so this module never imports it at runtime. */
3
5
  export interface RunBriefRuntime {
4
6
  isCommandAvailable: (cmd: string) => boolean;
@@ -7,6 +9,10 @@ export interface RunBriefRuntime {
7
9
  getOctokit: () => Octokit;
8
10
  branchPrefixOrExit: (raw: string | undefined, configPath: string) => string;
9
11
  errorDetail: (err: unknown) => string;
12
+ /** Test seam for `--merge`; defaults to the real driveToMerge. */
13
+ driveToMerge?: typeof driveToMerge;
14
+ /** Test seam: the pipeline entry point; defaults to the real shipIssue. */
15
+ shipIssue?: typeof shipIssue;
10
16
  }
11
17
  export interface RunBriefOptions {
12
18
  product?: string;
@@ -23,6 +29,10 @@ export interface RunBriefOptions {
23
29
  draftPr?: boolean;
24
30
  /** --stack (#3763): brief N+1 bases on brief N's PR head branch; stops at the first failure or missing PR. */
25
31
  stack?: boolean;
32
+ /** `--merge` (#3905): land each brief's PR through the run merge gates and exit with a distinct code. */
33
+ merge?: boolean;
34
+ mergeTimeout?: string;
35
+ admin?: boolean;
26
36
  }
27
37
  /** Runs each brief through the one-shot pipeline in argv order with the same flags. The checks that
28
38
  * hold for every brief (agent CLI, init, flags, GitHub remote) run once up front and abort the whole
@@ -1 +1 @@
1
- {"version":3,"file":"run-brief.d.ts","sourceRoot":"","sources":["../../src/cli/run-brief.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8B7C,4GAA4G;AAC5G,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CACvC;AAQD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8GAA8G;IAC9G,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;uDAIuD;AACvD,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CrH"}
1
+ {"version":3,"file":"run-brief.d.ts","sourceRoot":"","sources":["../../src/cli/run-brief.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAgC7C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,YAAY,EAKb,MAAM,sBAAsB,CAAC;AAG9B,4GAA4G;AAC5G,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;CAC9B;AAQD,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8GAA8G;IAC9G,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;uDAIuD;AACvD,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDrH"}
@@ -2,14 +2,15 @@
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { styleText } from 'node:util';
5
- import { createDefaultWorkSourceRegistry, getFactoryPaths, hasUnresolvedPark, InvalidArtifactsDirError, InvalidWorkRequestInputError, InvalidWorkspaceError, LOCAL_BRIEF_SOURCE, readEvents, resolveArtifactsDir, resolveLocalOnlyPolicy, runStack, workKeyFromIssue, } from '@on-par/factory-core';
6
- import { fileSlicePlanStore, logEvent } from '@on-par/factory-core/internal';
5
+ import { createDefaultWorkSourceRegistry, getFactoryPaths, hasUnresolvedPark, InvalidArtifactsDirError, InvalidWorkRequestInputError, InvalidWorkspaceError, loadFactoryConfigForRepo, LOCAL_BRIEF_SOURCE, readEvents, resolveArtifactsDir, resolveLocalOnlyPolicy, runStack, workKeyFromIssue, } from '@on-par/factory-core';
6
+ import { fileSlicePlanStore, logEvent, resolveAwaitingCiCapMs, } from '@on-par/factory-core/internal';
7
7
  import { CliExitError } from './errors.js';
8
8
  import { availableAgentClis, missingAgentCliMessage, notInitializedMessage } from './first-run.js';
9
9
  import { withRepoRunLock } from './repo-run-lock.js';
10
10
  import { recordDraftPrFlag } from './run-flags.js';
11
11
  import { shipIssue } from './ship.js';
12
12
  import { baseBranchConflict, baseBranchOrExit } from './ship-options.js';
13
+ import { driveToMerge, exitForMerge, parseMergeTimeout, shouldDriveAfterShipFailure, validateMergeFlags, } from './run-issue-merge.js';
13
14
  import { consoleStackLog, printStackResult, runSliceStack } from './stack-run.js';
14
15
  /** Deterministic run number for a brief, derived from its content digest.
15
16
  * Reserved 9,000,000+ range keeps brief branches/worktrees clear of real issue numbers. */
@@ -28,6 +29,7 @@ export async function cmdRunBrief(files, opts, rt) {
28
29
  if (files.length > 1 && opts.artifacts !== undefined) {
29
30
  throw new CliExitError('factory: --artifacts takes exactly one brief (each run writes the same manifest files) — run the briefs one at a time', 2);
30
31
  }
32
+ checkMergeFlags(opts);
31
33
  const env = await prepareRunBrief(opts, rt);
32
34
  if (files.length === 1 && opts.stack) {
33
35
  await runStackedBrief(files[0], opts, env, rt);
@@ -37,6 +39,7 @@ export async function cmdRunBrief(files, opts, rt) {
37
39
  await runOneBrief(files[0], opts, env, rt);
38
40
  return;
39
41
  }
42
+ let firstFailureCode;
40
43
  console.log(styleText('cyan', `run-brief: ${files.length} briefs — running them in order`));
41
44
  if (opts.stack) {
42
45
  console.log(styleText('cyan', "run-brief: --stack — each brief bases on the previous brief's PR head"));
@@ -44,11 +47,27 @@ export async function cmdRunBrief(files, opts, rt) {
44
47
  const result = await runStack(files.map((file) => ({
45
48
  title: file,
46
49
  run: async (base) => {
47
- const o = await runOneBrief(file, opts.stack ? { ...opts, baseBranch: base, sizeGate: 'off' } : opts, env, rt);
50
+ const o = await runOneBrief(file, opts.stack ? { ...opts, baseBranch: base, sizeGate: 'off' } : opts, env, rt).catch((err) => {
51
+ if (firstFailureCode === undefined && err instanceof CliExitError)
52
+ firstFailureCode = err.code;
53
+ throw err;
54
+ });
48
55
  return (o && { prNumber: 'prNumber' in o ? o.prNumber : undefined, branch: 'branch' in o ? o.branch : undefined });
49
56
  },
50
57
  })), { base: opts.baseBranch, chain: opts.stack === true, prefix: 'run-brief', noun: 'brief', log: consoleStackLog });
51
- printStackResult(result, 'Run failed for one or more briefs (listed above)');
58
+ try {
59
+ printStackResult(result, 'Run failed for one or more briefs (listed above)');
60
+ }
61
+ catch (err) {
62
+ if (opts.merge && firstFailureCode !== undefined && err instanceof CliExitError) {
63
+ throw new CliExitError(err.message, firstFailureCode);
64
+ }
65
+ throw err;
66
+ }
67
+ }
68
+ /** The `--merge` flag conflicts that hold for every brief (#3905); each exits 2 before any run starts. */
69
+ function checkMergeFlags(opts) {
70
+ validateMergeFlags(opts, 'brief');
52
71
  }
53
72
  /** The run-brief pre-flight shared by every brief in one invocation; any failure here exits 2. */
54
73
  async function prepareRunBrief(opts, rt) {
@@ -154,8 +173,21 @@ async function runOneBrief(briefPath, opts, env, rt, extra) {
154
173
  actor: process.env.FACTORY_ACTOR ?? process.env.USER ?? 'unknown',
155
174
  });
156
175
  }
176
+ const merge = async () => {
177
+ const result = await (rt.driveToMerge ?? driveToMerge)({
178
+ issue: runNum,
179
+ outcome,
180
+ repoRoot,
181
+ ghRepo,
182
+ paths,
183
+ timeoutMs: parseMergeTimeout(opts.mergeTimeout) ?? resolveAwaitingCiCapMs(loadFactoryConfigForRepo(paths.config)),
184
+ ...(opts.admin ? { admin: true } : {}),
185
+ issueless: true,
186
+ });
187
+ exitForMerge(result, `brief ${briefPath}`);
188
+ };
157
189
  try {
158
- await shipIssue(runNum, { ...opts, branchPrefix }, {
190
+ await (rt.shipIssue ?? shipIssue)(runNum, { ...opts, branchPrefix }, {
159
191
  repoRoot,
160
192
  ghRepo,
161
193
  workRequest: work,
@@ -169,8 +201,12 @@ async function runOneBrief(briefPath, opts, env, rt, extra) {
169
201
  });
170
202
  }
171
203
  catch (err) {
204
+ if (opts.merge && shouldDriveAfterShipFailure(outcome))
205
+ await merge();
172
206
  throw new CliExitError(`Run failed for brief ${briefPath}: ${err.message}`, 1);
173
207
  }
208
+ if (opts.merge)
209
+ await merge();
174
210
  }, { scope: { kind: 'issue', key: workKeyFromIssue(runNum) } });
175
211
  return outcome;
176
212
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-brief.js","sourceRoot":"","sources":["../../src/cli/run-brief.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-brief.js","sourceRoot":"","sources":["../../src/cli/run-brief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { getFactoryPaths, RunOutcome } from '@on-par/factory-core';
2
+ import { waitForMerge } from './land.js';
3
+ export declare const MERGE_EXIT: {
4
+ readonly merged: 0;
5
+ readonly failedBeforePr: 1;
6
+ readonly held: 10;
7
+ readonly ciFailed: 11;
8
+ readonly timedOut: 12;
9
+ readonly landFailed: 13;
10
+ };
11
+ export type MergeResultKind = 'merged' | 'held' | 'ci-failed' | 'timed-out' | 'failed-before-pr' | 'land-failed';
12
+ export interface MergeResult {
13
+ kind: MergeResultKind;
14
+ prNumber?: number;
15
+ gate?: string;
16
+ detail: string;
17
+ }
18
+ export interface DriveToMergeInput {
19
+ issue: number;
20
+ outcome: RunOutcome | undefined;
21
+ repoRoot: string;
22
+ ghRepo: string;
23
+ paths: ReturnType<typeof getFactoryPaths>;
24
+ timeoutMs: number;
25
+ admin?: boolean;
26
+ issueless?: boolean;
27
+ }
28
+ export interface DriveToMergeDeps {
29
+ waitMerge?: typeof waitForMerge;
30
+ now?: () => number;
31
+ sleep?: (ms: number) => Promise<void>;
32
+ pollMs?: number;
33
+ }
34
+ /** `30m`, `2h`, `90s` → ms; undefined stays undefined; anything else is a usage error. */
35
+ export declare function parseMergeTimeout(raw: string | undefined): number | undefined;
36
+ /** A run that parked on CI still has a PR worth driving to its CI verdict under --merge. */
37
+ export declare function shouldDriveAfterShipFailure(outcome: RunOutcome | undefined): boolean;
38
+ export interface MergeFlagOptions {
39
+ merge?: boolean | undefined;
40
+ mergeTimeout?: string | undefined;
41
+ admin?: boolean | undefined;
42
+ /** `--no-pr` sets false. */
43
+ pr?: boolean | undefined;
44
+ /** `--stack` (or `--size-gate stack`). */
45
+ stack?: boolean | undefined;
46
+ /** `--workspace` runs stay local, so they never merge (run-brief only). */
47
+ workspace?: unknown;
48
+ }
49
+ /** The `--merge` flag conflicts shared by run-issue and run-brief; each exits 2 before any run starts. Returns the timeout in ms. */
50
+ export declare function validateMergeFlags(opts: MergeFlagOptions, unit: 'issue' | 'brief'): number | undefined;
51
+ export declare function driveToMerge(input: DriveToMergeInput, deps?: DriveToMergeDeps): Promise<MergeResult>;
52
+ /** Print the merge or throw a CliExitError carrying the distinct MERGE_EXIT code. */
53
+ export declare function exitForMerge(result: MergeResult, label: string): void;
54
+ //# sourceMappingURL=run-issue-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-issue-merge.d.ts","sourceRoot":"","sources":["../../src/cli/run-issue-merge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAYzC,eAAO,MAAM,UAAU;aACrB,MAAM,EAAE,CAAC;aACT,cAAc,EAAE,CAAC;aACjB,IAAI,EAAE,EAAE;aACR,QAAQ,EAAE,EAAE;aACZ,QAAQ,EAAE,EAAE;aACZ,UAAU,EAAE,EAAE;CACN,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAEjH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,YAAY,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM7E;AAID,4FAA4F;AAC5F,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAEpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,4BAA4B;IAC5B,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qIAAqI;AACrI,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAatG;AA8CD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAyC9G;AAUD,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAWrE"}
@@ -0,0 +1,155 @@
1
+ // packages/cli/src/cli/run-issue-merge.ts — `run-issue --merge`: drive one PR through the run merge gates to a merge (#3905)
2
+ import { styleText } from 'node:util';
3
+ import { CliExitError } from './errors.js';
4
+ import { waitForMerge } from './land.js';
5
+ import { AwaitingCiError, AwaitingReviewError, CiFailedError, CiUnverifiedError, LandConflictError, MergeGatedError, } from './land-pr.js';
6
+ import { landRuntime } from './land-runtime.js';
7
+ import { BaseCiPendingError } from './merge-base-gate.js';
8
+ export const MERGE_EXIT = {
9
+ merged: 0,
10
+ failedBeforePr: 1,
11
+ held: 10,
12
+ ciFailed: 11,
13
+ timedOut: 12,
14
+ landFailed: 13,
15
+ };
16
+ const UNITS = { s: 1000, m: 60_000, h: 3_600_000 };
17
+ /** `30m`, `2h`, `90s` → ms; undefined stays undefined; anything else is a usage error. */
18
+ export function parseMergeTimeout(raw) {
19
+ if (raw === undefined)
20
+ return undefined;
21
+ const m = /^(\d+)(s|m|h)$/.exec(raw);
22
+ const ms = m ? Number(m[1]) * UNITS[m[2]] : 0;
23
+ if (ms > 0)
24
+ return ms;
25
+ throw new CliExitError('factory: --merge-timeout must be a positive duration like 30m or 2h', 2);
26
+ }
27
+ const CI_PARKS = new Set(['ci-failed', 'ci-infra']);
28
+ /** A run that parked on CI still has a PR worth driving to its CI verdict under --merge. */
29
+ export function shouldDriveAfterShipFailure(outcome) {
30
+ return outcome?.state === 'parked' && CI_PARKS.has(outcome.reason);
31
+ }
32
+ /** The `--merge` flag conflicts shared by run-issue and run-brief; each exits 2 before any run starts. Returns the timeout in ms. */
33
+ export function validateMergeFlags(opts, unit) {
34
+ if ((opts.mergeTimeout !== undefined || opts.admin) && !opts.merge) {
35
+ throw new CliExitError('factory: --merge-timeout/--admin need --merge', 2);
36
+ }
37
+ if (!opts.merge)
38
+ return undefined;
39
+ if (opts.pr === false)
40
+ throw new CliExitError('factory: --merge needs a PR — drop --no-pr', 2);
41
+ if (opts.workspace !== undefined) {
42
+ throw new CliExitError('factory: --merge needs a PR — local-only (--workspace) runs never merge', 2);
43
+ }
44
+ if (opts.stack) {
45
+ throw new CliExitError(`factory: --merge lands one PR${unit === 'brief' ? ' per brief' : ''} — drop --stack`, 2);
46
+ }
47
+ return parseMergeTimeout(opts.mergeTimeout);
48
+ }
49
+ function preMergeResult(outcome) {
50
+ const early = (result) => ({ early: result });
51
+ if (!outcome)
52
+ return early({ kind: 'failed-before-pr', detail: 'the run produced no outcome' });
53
+ if (outcome.state === 'parked') {
54
+ if (CI_PARKS.has(outcome.reason)) {
55
+ return early({
56
+ kind: 'ci-failed',
57
+ ...(outcome.prNumber ? { prNumber: outcome.prNumber } : {}),
58
+ detail: `parked: ${outcome.reason}`,
59
+ });
60
+ }
61
+ return early({
62
+ kind: 'failed-before-pr',
63
+ ...(outcome.prNumber ? { prNumber: outcome.prNumber } : {}),
64
+ detail: `parked: ${outcome.reason}`,
65
+ });
66
+ }
67
+ if (outcome.state === 'released' || outcome.state === 'escalated') {
68
+ return early({ kind: 'failed-before-pr', detail: `run ${outcome.state}: ${outcome.reason}` });
69
+ }
70
+ const prNumber = outcome.prNumber;
71
+ const pr = prNumber === undefined ? {} : { prNumber };
72
+ if (outcome.state === 'ready' && outcome.draft) {
73
+ return early({ kind: 'held', gate: 'draft', ...pr, detail: 'the PR was left as a draft' });
74
+ }
75
+ if (outcome.state === 'ready' && outcome.slice && outcome.slice.index < outcome.slice.count) {
76
+ return early({
77
+ kind: 'held',
78
+ gate: 'stack-slice',
79
+ ...pr,
80
+ detail: `slice ${outcome.slice.index} of ${outcome.slice.count}; later slices still to land`,
81
+ });
82
+ }
83
+ if (!outcome.branch)
84
+ return early({ kind: 'failed-before-pr', detail: 'the run produced no branch' });
85
+ return { mergeable: outcome };
86
+ }
87
+ function isTimeout(err, signal) {
88
+ const name = err?.name;
89
+ return signal.aborted || name === 'TimeoutError' || name === 'AbortError';
90
+ }
91
+ export async function driveToMerge(input, deps = {}) {
92
+ const pre = preMergeResult(input.outcome);
93
+ if ('early' in pre)
94
+ return pre.early;
95
+ const outcome = pre.mergeable;
96
+ const branch = outcome.branch;
97
+ const prNumber = outcome.prNumber;
98
+ const pr = prNumber === undefined ? {} : { prNumber };
99
+ const { waitMerge = waitForMerge, now = () => Date.now(), sleep, pollMs = 60_000 } = deps;
100
+ const doSleep = sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
101
+ const deadline = now() + input.timeoutMs;
102
+ for (;;) {
103
+ const signal = AbortSignal.timeout(Math.max(1, deadline - now()));
104
+ try {
105
+ await waitMerge(input.issue, branch, input.repoRoot, input.ghRepo, input.paths, {
106
+ landBranch: branch,
107
+ holdWhenGated: true,
108
+ mergeOverrides: { auto: true, ...(input.admin ? { admin: true } : {}) },
109
+ ...(input.issueless ? { issueless: true } : {}),
110
+ signal,
111
+ });
112
+ return { kind: 'merged', ...pr, detail: 'merged' };
113
+ }
114
+ catch (err) {
115
+ const detail = landRuntime().errorDetail(err);
116
+ if (err instanceof MergeGatedError) {
117
+ return { kind: 'held', gate: err.label, prNumber: err.prNumber || prNumber, detail };
118
+ }
119
+ if (err instanceof AwaitingReviewError)
120
+ return { kind: 'held', gate: err.gate, prNumber: err.prNumber, detail };
121
+ if (err instanceof LandConflictError)
122
+ return { kind: 'land-failed', ...pr, detail };
123
+ if (err instanceof CiUnverifiedError || err instanceof AwaitingCiError || err instanceof BaseCiPendingError) {
124
+ if (now() < deadline) {
125
+ await doSleep(pollMs);
126
+ continue;
127
+ }
128
+ return { kind: 'timed-out', ...pr, detail };
129
+ }
130
+ if (err instanceof CiFailedError)
131
+ return { kind: 'ci-failed', ...pr, detail };
132
+ if (isTimeout(err, signal))
133
+ return { kind: 'timed-out', ...pr, detail };
134
+ return { kind: 'land-failed', ...pr, detail };
135
+ }
136
+ }
137
+ }
138
+ const EXIT_BY_KIND = {
139
+ 'failed-before-pr': MERGE_EXIT.failedBeforePr,
140
+ held: MERGE_EXIT.held,
141
+ 'ci-failed': MERGE_EXIT.ciFailed,
142
+ 'timed-out': MERGE_EXIT.timedOut,
143
+ 'land-failed': MERGE_EXIT.landFailed,
144
+ };
145
+ /** Print the merge or throw a CliExitError carrying the distinct MERGE_EXIT code. */
146
+ export function exitForMerge(result, label) {
147
+ if (result.kind === 'merged') {
148
+ console.log(styleText('green', `✅ merged PR #${result.prNumber ?? '?'} for ${label}`));
149
+ return;
150
+ }
151
+ const gate = result.gate ? ` held by ${result.gate}` : '';
152
+ const pr = result.prNumber ? ` (PR #${result.prNumber})` : '';
153
+ throw new CliExitError(`factory: ${label} not merged (${result.kind})${gate}${pr}: ${result.detail}`, EXIT_BY_KIND[result.kind]);
154
+ }
155
+ //# sourceMappingURL=run-issue-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-issue-merge.js","sourceRoot":"","sources":["../../src/cli/run-issue-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { WorkKey } from '@on-par/factory-core';
2
+ import type { QueueBackend } from '@on-par/factory-core/internal';
3
+ import type { PlannedLane, planRunLanes } from './index.js';
4
+ export interface DiscoveredLane {
5
+ planned: PlannedLane;
6
+ /** Work keys currently queued in the lane; a key not seen before restarts a finished lane. */
7
+ keys: string[];
8
+ }
9
+ export interface LaneDiscoveryDeps {
10
+ intervalMs: number;
11
+ startLane: (planned: PlannedLane) => Promise<void>;
12
+ discover: () => Promise<DiscoveredLane[]>;
13
+ stopRequested: () => boolean;
14
+ reapExpiredClaims?: () => Promise<void>;
15
+ log: (type: 'lane-start' | 'stopped' | 'warn', message: string, lane?: string) => void;
16
+ /** Resolves after ms, or early when signal aborts. Default: node:timers/promises setTimeout with signal. */
17
+ sleep?: (ms: number, signal: AbortSignal) => Promise<void>;
18
+ }
19
+ /**
20
+ * Starts the initial lanes, then every `intervalMs` (or as soon as all lanes settle) reaps expired claims and
21
+ * starts lanes for work queued since. A lane never runs twice at once. Returns when nothing runs and nothing
22
+ * new was found, or after a stop request once running lanes settle (#3920).
23
+ */
24
+ export declare function superviseLanes(initial: DiscoveredLane[], deps: LaneDiscoveryDeps): Promise<{
25
+ started: string[];
26
+ }>;
27
+ /** Re-plans lanes from the queue and attaches each lane's current work keys (#3920). */
28
+ export declare function discoverQueuedLanes(input: {
29
+ localQueue: boolean;
30
+ readLocalQueue: () => string | null;
31
+ queue: () => QueueBackend;
32
+ onUnshippable?: (key: WorkKey) => void;
33
+ planRunLanes: typeof planRunLanes;
34
+ }): Promise<DiscoveredLane[]>;
35
+ //# sourceMappingURL=run-lane-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-lane-discovery.d.ts","sourceRoot":"","sources":["../../src/cli/run-lane-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,CAAC;IACrB,8FAA8F;IAC9F,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1C,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,GAAG,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvF,4GAA4G;IAC5G,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EAAE,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmEhC;AAED,wFAAwF;AACxF,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,YAAY,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAa5B"}
@@ -0,0 +1,93 @@
1
+ // packages/cli/src/cli/run-lane-discovery.ts — lane discovery inside a running `factory run` (#3920).
2
+ import { setTimeout as delay } from 'node:timers/promises';
3
+ const errorMessage = (e) => (e instanceof Error ? e.message : String(e));
4
+ const defaultSleep = (ms, signal) => delay(ms, undefined, { signal });
5
+ /**
6
+ * Starts the initial lanes, then every `intervalMs` (or as soon as all lanes settle) reaps expired claims and
7
+ * starts lanes for work queued since. A lane never runs twice at once. Returns when nothing runs and nothing
8
+ * new was found, or after a stop request once running lanes settle (#3920).
9
+ */
10
+ export async function superviseLanes(initial, deps) {
11
+ const running = new Map();
12
+ const seen = new Map();
13
+ const started = [];
14
+ const sleep = deps.sleep ?? defaultSleep;
15
+ const start = (d) => {
16
+ const lane = d.planned.lane;
17
+ const keys = seen.get(lane) ?? new Set();
18
+ for (const k of d.keys)
19
+ keys.add(k);
20
+ seen.set(lane, keys);
21
+ const count = d.planned.issues.length;
22
+ deps.log('lane-start', `lane '${lane}' started${count ? ` (${count} issues)` : ''}`, lane);
23
+ const p = deps
24
+ .startLane(d.planned)
25
+ .catch((e) => deps.log('warn', `lane '${lane}' failed: ${errorMessage(e)}`, lane))
26
+ .finally(() => running.delete(lane));
27
+ running.set(lane, p);
28
+ started.push(lane);
29
+ };
30
+ for (const d of initial) {
31
+ if (!running.has(d.planned.lane))
32
+ start(d);
33
+ }
34
+ for (;;) {
35
+ const ac = new AbortController();
36
+ try {
37
+ await Promise.race([sleep(deps.intervalMs, ac.signal), Promise.allSettled(running.values())]);
38
+ }
39
+ catch {
40
+ // an aborted sleep is the expected way for the timer to end
41
+ }
42
+ finally {
43
+ ac.abort();
44
+ }
45
+ if (deps.stopRequested()) {
46
+ deps.log('stopped', 'lane discovery: stop requested — no new lanes start');
47
+ await Promise.allSettled(running.values());
48
+ break;
49
+ }
50
+ try {
51
+ await deps.reapExpiredClaims?.();
52
+ }
53
+ catch (e) {
54
+ deps.log('warn', `lane discovery: claim reap failed: ${errorMessage(e)}`);
55
+ }
56
+ let found = [];
57
+ try {
58
+ found = await deps.discover();
59
+ }
60
+ catch (e) {
61
+ deps.log('warn', `lane discovery failed: ${errorMessage(e)}`);
62
+ }
63
+ for (const d of found) {
64
+ const lane = d.planned.lane;
65
+ if (running.has(lane))
66
+ continue;
67
+ const known = seen.get(lane);
68
+ if (!d.keys.some((k) => !known?.has(k)))
69
+ continue;
70
+ const issues = d.planned.issues.filter((issue) => !known?.has(String(issue)));
71
+ start({ planned: { ...d.planned, issues }, keys: d.keys });
72
+ }
73
+ if (running.size === 0)
74
+ break;
75
+ }
76
+ return { started };
77
+ }
78
+ /** Re-plans lanes from the queue and attaches each lane's current work keys (#3920). */
79
+ export async function discoverQueuedLanes(input) {
80
+ const { lanes } = await input.planRunLanes({
81
+ localQueue: input.localQueue,
82
+ readLocalQueue: input.readLocalQueue,
83
+ queue: input.queue,
84
+ onUnshippable: input.onUnshippable,
85
+ });
86
+ const found = [];
87
+ for (const planned of lanes) {
88
+ const keys = input.localQueue ? planned.issues.map(String) : (await input.queue().list(planned.lane)).map(String);
89
+ found.push({ planned, keys });
90
+ }
91
+ return found;
92
+ }
93
+ //# sourceMappingURL=run-lane-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-lane-discovery.js","sourceRoot":"","sources":["../../src/cli/run-lane-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type FactoryConfig, type WorkKey } from '@on-par/factory-core';
2
+ import { type QueueBackend } from '@on-par/factory-core/internal';
3
+ import type { getFactoryPaths } from '@on-par/factory-core';
4
+ import type { createDeferralTracker } from './queue-startup.js';
5
+ import type { RunRuntime } from './run.js';
6
+ export declare function createRunQueue(input: {
7
+ rt: Pick<RunRuntime, 'getOctokit' | 'preflightQueuedIssue' | 'createQueuePreflightOps'>;
8
+ paths: ReturnType<typeof getFactoryPaths>;
9
+ ghRepo: string;
10
+ factoryConfig: FactoryConfig;
11
+ autoMerge: boolean | undefined;
12
+ deferrals: ReturnType<typeof createDeferralTracker>;
13
+ }): {
14
+ queue: () => QueueBackend;
15
+ /** Linear mode only: releases claims whose lease expired, in place of the GitHub reap. */
16
+ startupLinearReap: () => Promise<void>;
17
+ onUnshippable: (key: WorkKey) => void;
18
+ };
19
+ //# sourceMappingURL=run-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-queue.d.ts","sourceRoot":"","sources":["../../src/cli/run-queue.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2C,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,sBAAsB,GAAG,yBAAyB,CAAC,CAAC;IACxF,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACrD,GAAG;IACF,KAAK,EAAE,MAAM,YAAY,CAAC;IAC1B,0FAA0F;IAC1F,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAmEA"}