@on-par/factory-cli 0.9.28-next.8 → 0.9.28

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 (131) hide show
  1. package/dist/cli/config-override-option.d.ts +11 -0
  2. package/dist/cli/config-override-option.d.ts.map +1 -0
  3. package/dist/cli/config-override-option.js +37 -0
  4. package/dist/cli/config-override-option.js.map +1 -0
  5. package/dist/cli/doctor-config-sources.d.ts +23 -0
  6. package/dist/cli/doctor-config-sources.d.ts.map +1 -0
  7. package/dist/cli/doctor-config-sources.js +44 -0
  8. package/dist/cli/doctor-config-sources.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.map +1 -1
  14. package/dist/cli/doctor.js +8 -3
  15. package/dist/cli/doctor.js.map +1 -1
  16. package/dist/cli/help-groups.d.ts.map +1 -1
  17. package/dist/cli/help-groups.js +1 -0
  18. package/dist/cli/help-groups.js.map +1 -1
  19. package/dist/cli/index.d.ts +49 -45
  20. package/dist/cli/index.d.ts.map +1 -1
  21. package/dist/cli/index.js +71 -15
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/land-find-pr.d.ts +5 -0
  24. package/dist/cli/land-find-pr.d.ts.map +1 -0
  25. package/dist/cli/land-find-pr.js +27 -0
  26. package/dist/cli/land-find-pr.js.map +1 -0
  27. package/dist/cli/land-merge.d.ts.map +1 -1
  28. package/dist/cli/land-merge.js +5 -0
  29. package/dist/cli/land-merge.js.map +1 -1
  30. package/dist/cli/land-pr.d.ts +5 -1
  31. package/dist/cli/land-pr.d.ts.map +1 -1
  32. package/dist/cli/land-pr.js +5 -1
  33. package/dist/cli/land-pr.js.map +1 -1
  34. package/dist/cli/land.d.ts +11 -3
  35. package/dist/cli/land.d.ts.map +1 -1
  36. package/dist/cli/land.js +27 -34
  37. package/dist/cli/land.js.map +1 -1
  38. package/dist/cli/program-observe.js +1 -1
  39. package/dist/cli/program-observe.js.map +1 -1
  40. package/dist/cli/program-run-work.d.ts.map +1 -1
  41. package/dist/cli/program-run-work.js +14 -0
  42. package/dist/cli/program-run-work.js.map +1 -1
  43. package/dist/cli/program.d.ts.map +1 -1
  44. package/dist/cli/program.js +11 -1
  45. package/dist/cli/program.js.map +1 -1
  46. package/dist/cli/queue-backend-select.d.ts +15 -0
  47. package/dist/cli/queue-backend-select.d.ts.map +1 -0
  48. package/dist/cli/queue-backend-select.js +30 -0
  49. package/dist/cli/queue-backend-select.js.map +1 -0
  50. package/dist/cli/queue-preflight-prerequisite-stack.d.ts +11 -0
  51. package/dist/cli/queue-preflight-prerequisite-stack.d.ts.map +1 -0
  52. package/dist/cli/queue-preflight-prerequisite-stack.js +75 -0
  53. package/dist/cli/queue-preflight-prerequisite-stack.js.map +1 -0
  54. package/dist/cli/queue-preflight.d.ts +4 -0
  55. package/dist/cli/queue-preflight.d.ts.map +1 -1
  56. package/dist/cli/queue-preflight.js +16 -64
  57. package/dist/cli/queue-preflight.js.map +1 -1
  58. package/dist/cli/queue-prerequisite-state.d.ts +8 -0
  59. package/dist/cli/queue-prerequisite-state.d.ts.map +1 -0
  60. package/dist/cli/queue-prerequisite-state.js +66 -0
  61. package/dist/cli/queue-prerequisite-state.js.map +1 -0
  62. package/dist/cli/respond-command.d.ts +42 -0
  63. package/dist/cli/respond-command.d.ts.map +1 -0
  64. package/dist/cli/respond-command.js +76 -0
  65. package/dist/cli/respond-command.js.map +1 -0
  66. package/dist/cli/run-branch.d.ts.map +1 -1
  67. package/dist/cli/run-branch.js +2 -2
  68. package/dist/cli/run-branch.js.map +1 -1
  69. package/dist/cli/run-brief.d.ts +10 -0
  70. package/dist/cli/run-brief.d.ts.map +1 -1
  71. package/dist/cli/run-brief.js +41 -5
  72. package/dist/cli/run-brief.js.map +1 -1
  73. package/dist/cli/run-issue-merge.d.ts +54 -0
  74. package/dist/cli/run-issue-merge.d.ts.map +1 -0
  75. package/dist/cli/run-issue-merge.js +155 -0
  76. package/dist/cli/run-issue-merge.js.map +1 -0
  77. package/dist/cli/run-lane-deps.d.ts +6 -1
  78. package/dist/cli/run-lane-deps.d.ts.map +1 -1
  79. package/dist/cli/run-lane-discovery.d.ts +35 -0
  80. package/dist/cli/run-lane-discovery.d.ts.map +1 -0
  81. package/dist/cli/run-lane-discovery.js +93 -0
  82. package/dist/cli/run-lane-discovery.js.map +1 -0
  83. package/dist/cli/run-lane-restack.d.ts +6 -1
  84. package/dist/cli/run-lane-restack.d.ts.map +1 -1
  85. package/dist/cli/run-lane-restack.js +16 -0
  86. package/dist/cli/run-lane-restack.js.map +1 -1
  87. package/dist/cli/run-lane.d.ts.map +1 -1
  88. package/dist/cli/run-lane.js +37 -3
  89. package/dist/cli/run-lane.js.map +1 -1
  90. package/dist/cli/run-queue.d.ts +19 -0
  91. package/dist/cli/run-queue.d.ts.map +1 -0
  92. package/dist/cli/run-queue.js +66 -0
  93. package/dist/cli/run-queue.js.map +1 -0
  94. package/dist/cli/run-rework-poll.d.ts +15 -0
  95. package/dist/cli/run-rework-poll.d.ts.map +1 -0
  96. package/dist/cli/run-rework-poll.js +79 -0
  97. package/dist/cli/run-rework-poll.js.map +1 -0
  98. package/dist/cli/run.d.ts.map +1 -1
  99. package/dist/cli/run.js +51 -102
  100. package/dist/cli/run.js.map +1 -1
  101. package/dist/cli/ship-options.d.ts +25 -1
  102. package/dist/cli/ship-options.d.ts.map +1 -1
  103. package/dist/cli/ship-options.js +39 -0
  104. package/dist/cli/ship-options.js.map +1 -1
  105. package/dist/cli/ship-pr-state.d.ts +58 -0
  106. package/dist/cli/ship-pr-state.d.ts.map +1 -0
  107. package/dist/cli/ship-pr-state.js +169 -0
  108. package/dist/cli/ship-pr-state.js.map +1 -0
  109. package/dist/cli/ship-review-rework.d.ts +6 -0
  110. package/dist/cli/ship-review-rework.d.ts.map +1 -1
  111. package/dist/cli/ship-review-rework.js +11 -2
  112. package/dist/cli/ship-review-rework.js.map +1 -1
  113. package/dist/cli/ship-steps.d.ts +5 -2
  114. package/dist/cli/ship-steps.d.ts.map +1 -1
  115. package/dist/cli/ship-steps.js +15 -2
  116. package/dist/cli/ship-steps.js.map +1 -1
  117. package/dist/cli/ship.d.ts +3 -0
  118. package/dist/cli/ship.d.ts.map +1 -1
  119. package/dist/cli/ship.js +26 -20
  120. package/dist/cli/ship.js.map +1 -1
  121. package/dist/cli/shutdown.d.ts +26 -0
  122. package/dist/cli/shutdown.d.ts.map +1 -0
  123. package/dist/cli/shutdown.js +82 -0
  124. package/dist/cli/shutdown.js.map +1 -0
  125. package/dist/cli/status.d.ts.map +1 -1
  126. package/dist/cli/status.js +57 -27
  127. package/dist/cli/status.js.map +1 -1
  128. package/dist/cli/supervise.d.ts.map +1 -1
  129. package/dist/cli/supervise.js +11 -6
  130. package/dist/cli/supervise.js.map +1 -1
  131. package/package.json +4 -4
@@ -0,0 +1,76 @@
1
+ // packages/cli/src/cli/respond-command.ts — `factory respond <pr>`: run a feedback round on a factory PR (#3910)
2
+ import { getFactoryPaths, workKeyFromIssue } from '@on-par/factory-core';
3
+ import { countReviewReworkRuns, createFileReviewReworkStore, createOctokitQueueClient, factoryBranchIssue, LANE_LABEL_PREFIX, parkAtReviewReworkCap, publishParkComment, resolveBranchPrefix, resolveMaxReviewReworkRuns, } from '@on-par/factory-core/internal';
4
+ import { CliExitError } from './errors.js';
5
+ import { withRepoRunLock } from './repo-run-lock.js';
6
+ import { shipRuntime } from './ship-runtime.js';
7
+ import { shipIssue } from './ship.js';
8
+ /** The production deps, wired from the ship runtime. */
9
+ export function respondDepsFrom(runtime) {
10
+ const shell = runtime.resolveShellOps({});
11
+ return {
12
+ getRepoRoot: () => runtime.getRepoRoot(shell),
13
+ getGitHubRepo: () => runtime.getGitHubRepo(shell),
14
+ getOctokit: () => runtime.getOctokit(shell),
15
+ loadConfig: (configPath) => runtime.resolveConfigLoaders({}).loadFactoryConfigForRepo(configPath),
16
+ shipIssue,
17
+ parkAtCap: parkAtReviewReworkCap,
18
+ publishParkComment,
19
+ now: () => new Date(),
20
+ out: console.log,
21
+ };
22
+ }
23
+ /** Run a feedback round on the factory PR `pr`: triage new trusted feedback, re-plan or rework, push, reply, resolve and re-request review. */
24
+ export async function cmdRespond(pr, opts, deps = respondDepsFrom(shipRuntime())) {
25
+ if (!/^#?\d+$/.test(pr.trim()))
26
+ throw new CliExitError(`factory respond: '${pr}' is not a pull request number`, 2);
27
+ const prNumber = Number(pr.trim().replace('#', ''));
28
+ const repoRoot = await deps.getRepoRoot();
29
+ const ghRepo = await deps.getGitHubRepo();
30
+ const [owner = '', repo = ''] = ghRepo.split('/');
31
+ const paths = getFactoryPaths(repoRoot);
32
+ const config = deps.loadConfig(paths.config);
33
+ const prefix = resolveBranchPrefix(config);
34
+ const octokit = deps.getOctokit();
35
+ const { data: pull } = await octokit.rest.pulls.get({ owner, repo, pull_number: prNumber });
36
+ if (pull.state !== 'open') {
37
+ throw new CliExitError(`factory respond: PR #${prNumber} is ${pull.state}; only an open factory PR takes a round`, 1);
38
+ }
39
+ const issue = factoryBranchIssue(pull.head.ref, prefix);
40
+ if (issue === null || pull.head.repo?.full_name !== ghRepo) {
41
+ throw new CliExitError(`factory respond: PR #${prNumber} (${pull.head.ref}) is not a factory PR of ${ghRepo}`, 1);
42
+ }
43
+ const store = createFileReviewReworkStore(paths.reviewRework);
44
+ const key = workKeyFromIssue(issue);
45
+ const cap = resolveMaxReviewReworkRuns(config);
46
+ const count = countReviewReworkRuns(store, key);
47
+ const earlier = store.list().filter((r) => r.source === 'feedback' && r.issue === issue).length;
48
+ const reviewId = prNumber * 10_000 + earlier + 1;
49
+ const queue = createOctokitQueueClient(octokit);
50
+ const labels = await queue.getIssueLabels({ owner, repo, issue_number: issue });
51
+ const lane = labels.find((l) => l.startsWith(LANE_LABEL_PREFIX))?.slice(LANE_LABEL_PREFIX.length) ?? '';
52
+ const at = deps.now().toISOString();
53
+ if (count >= cap) {
54
+ await deps.parkAtCap({
55
+ queue,
56
+ owner,
57
+ repo,
58
+ issue: key,
59
+ pr: prNumber,
60
+ lane,
61
+ branch: pull.head.ref,
62
+ cap,
63
+ count,
64
+ reviewIds: [reviewId],
65
+ source: 'feedback',
66
+ publishComment: (input) => deps.publishParkComment({ octokit, repo: ghRepo, input }),
67
+ });
68
+ throw new CliExitError(`factory respond: #${issue} is parked at the review-rework cap (${count} of ${cap}); resolve by hand, then run \`factory unpark ${issue}\``, 1);
69
+ }
70
+ store.record({ reviewId, source: 'feedback', pr: prNumber, issue, lane, reviewer: '', queuedAt: at, startedAt: at });
71
+ const result = await withRepoRunLock(paths, 'factory respond', () => deps.shipIssue(issue, { branchPrefix: prefix, autoRework: true, interactive: false }, { repoRoot, ghRepo, feedbackRound: { prNumber } }));
72
+ deps.out(opts.json
73
+ ? JSON.stringify({ pr: prNumber, issue, result })
74
+ : `feedback round on PR #${prNumber} (issue #${issue}): ${result}`);
75
+ }
76
+ //# sourceMappingURL=respond-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond-command.js","sourceRoot":"","sources":["../../src/cli/respond-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-branch.d.ts","sourceRoot":"","sources":["../../src/cli/run-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAI7G;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAC;QAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACnH,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDlB"}
1
+ {"version":3,"file":"run-branch.d.ts","sourceRoot":"","sources":["../../src/cli/run-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAIvC;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,CAAC;QAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACnH,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDlB"}
@@ -1,5 +1,5 @@
1
1
  import { GITHUB_ISSUE_SOURCE, workKeyFromIssue, } from '@on-par/factory-core';
2
- import { branchFor, findAdoptablePr, logEvent } from '@on-par/factory-core/internal';
2
+ import { branchFor, findAdoptablePr, logEvent, ticketKeyOf, } from '@on-par/factory-core/internal';
3
3
  import { findSliceIndex } from './ship-steps.js';
4
4
  import { shipRuntime } from './ship-runtime.js';
5
5
  /**
@@ -17,7 +17,7 @@ export async function resolveRunBranch(opts) {
17
17
  : await findSliceIndex({ sizeGateMode, ctx, work, octokit, ghRepo, issueNum });
18
18
  if (ctx?.resumeFrom)
19
19
  return ctx.resumeFrom.branch;
20
- const fresh = branchFor(workKeyFromIssue(issueNum), issueTitle, branchPrefix, sliceIndex);
20
+ const fresh = branchFor(ticketKeyOf(work) ?? workKeyFromIssue(issueNum), issueTitle, branchPrefix, sliceIndex);
21
21
  if (ctx?.localOnly ||
22
22
  noPr ||
23
23
  baseBranch !== undefined ||
@@ -1 +1 @@
1
- {"version":3,"file":"run-branch.js","sourceRoot":"","sources":["../../src/cli/run-branch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-branch.js","sourceRoot":"","sources":["../../src/cli/run-branch.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -1,5 +1,5 @@
1
1
  import type { getFactoryPaths, ParkReason, ProviderBreaker, RunOutcome } from '@on-par/factory-core';
2
- import type { AwaitingCiRecord, logEvent, DiskGuardDecision, LoadGuardDecision, QueueClaim, QueueReleaseOutcome, StackRestackOutcome } from '@on-par/factory-core/internal';
2
+ import type { AwaitingCiRecord, logEvent, DiskGuardDecision, LoadGuardDecision, QueueClaim, QueueReleaseOutcome, PrerequisiteRestackDecision, PrerequisiteRestackOutcome, PrerequisiteStackTarget, StackRestackOutcome } from '@on-par/factory-core/internal';
3
3
  import type { Octokit } from '@octokit/rest';
4
4
  import type { AwaitingCiLaneOps } from './awaiting-ci-recheck.js';
5
5
  import type { BaseHoldDecision } from './base-hold.js';
@@ -24,6 +24,9 @@ export type RunLaneDeps = {
24
24
  autoRework?: boolean;
25
25
  interactive?: boolean;
26
26
  approvePlan?: boolean;
27
+ /** #3916: build on this open prerequisite PR's branch and open the PR against it. */
28
+ baseBranch?: string;
29
+ prerequisiteStack?: PrerequisiteStackTarget;
27
30
  }, ctx?: {
28
31
  repoRoot: string;
29
32
  ghRepo: string;
@@ -47,6 +50,8 @@ export type RunLaneDeps = {
47
50
  index: number;
48
51
  prNumber: number;
49
52
  }) => Promise<StackRestackOutcome>;
53
+ /** #3916: rebases a PR stacked on a prerequisite onto main (prerequisite merged) or its new head, model-free. Defaults to a park. */
54
+ restackPrerequisite?: (decision: PrerequisiteRestackDecision) => Promise<PrerequisiteRestackOutcome>;
50
55
  pathExists?: (path: string) => boolean;
51
56
  emitEvent?: typeof logEvent;
52
57
  claimNext?: () => Promise<QueueClaim | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"run-lane-deps.d.ts","sourceRoot":"","sources":["../../src/cli/run-lane-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-lane-deps.d.ts","sourceRoot":"","sources":["../../src/cli/run-lane-deps.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"}