@idea1/cli 1.7.1 → 1.7.3

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 (62) hide show
  1. package/README.md +77 -16
  2. package/dist/cli/parser.d.ts.map +1 -1
  3. package/dist/cli/parser.js +3 -2
  4. package/dist/cli/parser.js.map +1 -1
  5. package/dist/commands/approve-pr.js +1 -1
  6. package/dist/commands/approve-pr.js.map +1 -1
  7. package/dist/commands/help.d.ts.map +1 -1
  8. package/dist/commands/help.js +35 -4
  9. package/dist/commands/help.js.map +1 -1
  10. package/dist/commands/index.d.ts +2 -1
  11. package/dist/commands/index.d.ts.map +1 -1
  12. package/dist/commands/index.js +3 -1
  13. package/dist/commands/index.js.map +1 -1
  14. package/dist/commands/integrate.d.ts +13 -0
  15. package/dist/commands/integrate.d.ts.map +1 -0
  16. package/dist/commands/integrate.js +128 -0
  17. package/dist/commands/integrate.js.map +1 -0
  18. package/dist/commands/ready-for-approval.js +1 -1
  19. package/dist/commands/ready-for-approval.js.map +1 -1
  20. package/dist/commands/release.d.ts +7 -0
  21. package/dist/commands/release.d.ts.map +1 -1
  22. package/dist/commands/release.js +32 -188
  23. package/dist/commands/release.js.map +1 -1
  24. package/dist/lib/claude-options.d.ts +10 -0
  25. package/dist/lib/claude-options.d.ts.map +1 -1
  26. package/dist/lib/claude-options.js +36 -1
  27. package/dist/lib/claude-options.js.map +1 -1
  28. package/dist/lib/shell.d.ts +8 -0
  29. package/dist/lib/shell.d.ts.map +1 -1
  30. package/dist/lib/shell.js +6 -3
  31. package/dist/lib/shell.js.map +1 -1
  32. package/dist/services/claude.d.ts +2 -2
  33. package/dist/services/claude.d.ts.map +1 -1
  34. package/dist/services/claude.js +2 -3
  35. package/dist/services/claude.js.map +1 -1
  36. package/dist/services/github.d.ts +69 -28
  37. package/dist/services/github.d.ts.map +1 -1
  38. package/dist/services/github.js +148 -74
  39. package/dist/services/github.js.map +1 -1
  40. package/dist/services/release-flow.d.ts +83 -0
  41. package/dist/services/release-flow.d.ts.map +1 -0
  42. package/dist/services/release-flow.js +338 -0
  43. package/dist/services/release-flow.js.map +1 -0
  44. package/dist/services/setup.js +2 -2
  45. package/dist/services/workflow-handlers/agent-implementation.d.ts.map +1 -1
  46. package/dist/services/workflow-handlers/agent-implementation.js +5 -4
  47. package/dist/services/workflow-handlers/agent-implementation.js.map +1 -1
  48. package/dist/services/workflow-handlers/approve-pr.d.ts +6 -3
  49. package/dist/services/workflow-handlers/approve-pr.d.ts.map +1 -1
  50. package/dist/services/workflow-handlers/approve-pr.js +24 -64
  51. package/dist/services/workflow-handlers/approve-pr.js.map +1 -1
  52. package/dist/services/workflow-handlers/ready-for-approval.d.ts +5 -3
  53. package/dist/services/workflow-handlers/ready-for-approval.d.ts.map +1 -1
  54. package/dist/services/workflow-handlers/ready-for-approval.js +10 -11
  55. package/dist/services/workflow-handlers/ready-for-approval.js.map +1 -1
  56. package/dist/services/worktree.d.ts +2 -0
  57. package/dist/services/worktree.d.ts.map +1 -1
  58. package/dist/services/worktree.js +4 -4
  59. package/dist/services/worktree.js.map +1 -1
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +3 -2
@@ -21,12 +21,14 @@ export declare function createPrIfNeeded(branchName: string, baseBranchName: str
21
21
  export declare function getPrInfo(branchName: string): Promise<PrInfo | null>;
22
22
  /**
23
23
  * Request review from one or more users on a PR.
24
- * No-op when the list is empty.
24
+ *
25
+ * Requested reviewers are optional: the approver of record is the assignee, not a reviewer
26
+ * (change-management-policy.md clause 2). No-op when the list is empty.
25
27
  */
26
28
  export declare function assignReviewers(branchName: string, reviewers: string[]): Promise<void>;
27
29
  /**
28
- * Assign a user as an assignee on a PR.
29
- * No-op when no assignee is provided.
30
+ * Set the PR's assignee - the person who approves the change by merging it with
31
+ * `idea1 approve-pr`.
30
32
  */
31
33
  export declare function assignAssignee(branchName: string, assignee: string): Promise<void>;
32
34
  /**
@@ -34,10 +36,6 @@ export declare function assignAssignee(branchName: string, assignee: string): Pr
34
36
  * These repo collaborators are also the valid set of reviewers.
35
37
  */
36
38
  export declare function listAssignableUsers(): Promise<string[]>;
37
- /**
38
- * Approve a PR
39
- */
40
- export declare function approvePr(branchName: string, comment?: string): Promise<boolean>;
41
39
  export interface MergeResult {
42
40
  success: boolean;
43
41
  error?: string;
@@ -54,10 +52,6 @@ export declare function mergePrWithAdminOverride(branchName: string): Promise<Me
54
52
  * Delete a remote branch
55
53
  */
56
54
  export declare function deleteRemoteBranch(branchName: string): Promise<boolean>;
57
- /**
58
- * Check if a PR is approved
59
- */
60
- export declare function isPrApproved(branchName: string): Promise<boolean>;
61
55
  /**
62
56
  * Resolve the head branch and base branch from a GitHub PR URL.
63
57
  * Accepts any URL of the form https://github.com/<owner>/<repo>/pull/<number>.
@@ -67,28 +61,75 @@ export declare function getBranchFromPrUrl(prUrl: string): Promise<{
67
61
  baseBranch: string;
68
62
  } | null>;
69
63
  /**
70
- * Get the current authenticated GitHub user
64
+ * Wait for a PR's checks to finish, returning whether they all passed.
65
+ *
66
+ * The required CI/CD checks are the automated gate no individual may wave through
67
+ * (change-management-policy.md clause 3), so a merge has to wait for them rather than outrun them.
68
+ * `gh pr checks --watch` blocks until every check reaches a conclusion and exits non-zero when any
69
+ * failed (exit code 8 means checks were still pending when it stopped).
70
+ *
71
+ * Two ways of "not finished" are failures here, never successes: a watch that hits the timeout is
72
+ * killed by a signal and has no exit code, and a PR whose checks never appear at all - GitHub can
73
+ * take a moment to report the first check on a just-opened PR, so that case is polled for a short
74
+ * grace period before it is called a failure.
75
+ */
76
+ export declare function waitForPrChecks(branchName: string, timeoutMinutes?: number): Promise<{
77
+ passed: boolean;
78
+ summary: string;
79
+ }>;
80
+ /**
81
+ * Post a comment on a PR. This is how an admin override is recorded on the PR itself, so the
82
+ * exception lives with the change rather than only in a terminal session. Throws when the comment
83
+ * cannot be posted: an override with no record is not permitted, so the caller must not merge.
84
+ */
85
+ export declare function addPrComment(branchName: string, body: string): Promise<void>;
86
+ /**
87
+ * The GitHub login `gh` is authenticated as - the person running the command.
88
+ */
89
+ export declare function getCurrentLogin(): Promise<string>;
90
+ export interface CreatePrOptions {
91
+ sourceBranch: string;
92
+ targetBranch: string;
93
+ title: string;
94
+ body: string;
95
+ /** The PR's approver of record: the person who will merge it. */
96
+ assignee: string;
97
+ }
98
+ /**
99
+ * Create a PR with its body and assignee set at creation, returning its URL.
71
100
  */
72
- export declare function getCurrentUser(): Promise<string | null>;
73
- export interface PrReviewInfo {
74
- requestedReviewers: string[];
75
- reviews: Array<{
76
- author: string;
77
- state: string;
78
- }>;
101
+ export declare function createPr(options: CreatePrOptions): Promise<string>;
102
+ /**
103
+ * Read who a PR's assignee is. The assignee is its approver, so `idea1 approve-pr` reports it
104
+ * before merging.
105
+ */
106
+ export declare function getPrAssignees(branchName: string): Promise<string[]>;
107
+ /**
108
+ * What one merged PR contributes to an approval chain: who wrote it, and who approved it by
109
+ * merging it.
110
+ */
111
+ export interface MergedPrRecord {
112
+ number: number;
113
+ title: string;
114
+ author: string;
115
+ mergedAt: string;
116
+ mergedBy: string;
79
117
  }
80
118
  /**
81
- * Get review information for a PR including requested reviewers and existing reviews
119
+ * Every PR merged into a branch, most recent first, with its merge record. The approval chain of
120
+ * a release or integration is assembled from this list: each PR's approval is its merge, performed
121
+ * by its assignee, so a PR that lists them is self-contained evidence of who approved what.
82
122
  */
83
- export declare function getPrReviewInfo(branchName: string): Promise<PrReviewInfo | null>;
84
- export interface UserApprovalStatus {
85
- isRequestedReviewer: boolean;
86
- hasAlreadyApproved: boolean;
87
- canApprove: boolean;
123
+ export declare function listMergedPrsInto(baseBranch: string): Promise<MergedPrRecord[]>;
124
+ export interface CommitPullRequest {
125
+ number: number;
126
+ baseBranch: string;
127
+ merged: boolean;
88
128
  }
89
129
  /**
90
- * Check if the current user can and should approve the PR
91
- * Returns whether user is a reviewer and hasn't already approved
130
+ * The PRs GitHub associates with a commit. This is how a commit on a branch is traced back to
131
+ * the PR that brought it there regardless of merge strategy - a squash or rebase merge leaves no
132
+ * "Merge pull request" subject to parse, but GitHub still knows which PR the commit came from.
92
133
  */
93
- export declare function getUserApprovalStatus(branchName: string): Promise<UserApprovalStatus | null>;
134
+ export declare function getPullRequestsForCommit(sha: string): Promise<CommitPullRequest[]>;
94
135
  //# sourceMappingURL=github.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBtG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAchF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,UAAQ,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuCxB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB1E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5F;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAexF;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBtF;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgBtE;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiBvF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB7E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcvE;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkBlH;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa7D;AAED,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkBtF;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAqBlG"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"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"}
@@ -110,7 +110,9 @@ export async function getPrInfo(branchName) {
110
110
  }
111
111
  /**
112
112
  * Request review from one or more users on a PR.
113
- * No-op when the list is empty.
113
+ *
114
+ * Requested reviewers are optional: the approver of record is the assignee, not a reviewer
115
+ * (change-management-policy.md clause 2). No-op when the list is empty.
114
116
  */
115
117
  export async function assignReviewers(branchName, reviewers) {
116
118
  if (reviewers.length === 0) {
@@ -127,13 +129,10 @@ export async function assignReviewers(branchName, reviewers) {
127
129
  logger.success(`Review requested from ${list}`);
128
130
  }
129
131
  /**
130
- * Assign a user as an assignee on a PR.
131
- * No-op when no assignee is provided.
132
+ * Set the PR's assignee - the person who approves the change by merging it with
133
+ * `idea1 approve-pr`.
132
134
  */
133
135
  export async function assignAssignee(branchName, assignee) {
134
- if (!assignee) {
135
- return;
136
- }
137
136
  await ensureGitHubCli();
138
137
  logger.step(`Assigning ${assignee} to PR for branch ${branchName}...`);
139
138
  await execOrThrow('gh', [
@@ -160,24 +159,6 @@ export async function listAssignableUsers() {
160
159
  .map(login => login.trim())
161
160
  .filter(login => login.length > 0);
162
161
  }
163
- /**
164
- * Approve a PR
165
- */
166
- export async function approvePr(branchName, comment) {
167
- await ensureGitHubCli();
168
- const approvalComment = comment ?? 'Approved via idea1 CLI workflow';
169
- logger.step(`Approving PR for branch ${branchName}...`);
170
- const result = await exec('gh', [
171
- 'pr', 'review', branchName,
172
- '--approve',
173
- '--body', approvalComment
174
- ]);
175
- if (result.exitCode === 0) {
176
- logger.success('PR approved successfully');
177
- return true;
178
- }
179
- return false;
180
- }
181
162
  /**
182
163
  * Merge a PR
183
164
  */
@@ -229,21 +210,6 @@ export async function deleteRemoteBranch(branchName) {
229
210
  logger.dim(`Note: Remote branch ${branchName} may already be deleted`);
230
211
  return false;
231
212
  }
232
- /**
233
- * Check if a PR is approved
234
- */
235
- export async function isPrApproved(branchName) {
236
- await ensureGitHubCli();
237
- const result = await exec('gh', [
238
- 'pr', 'view', branchName,
239
- '--json', 'reviewDecision',
240
- '-q', '.reviewDecision'
241
- ]);
242
- if (result.exitCode === 0 && result.stdout.trim() === 'APPROVED') {
243
- return true;
244
- }
245
- return false;
246
- }
247
213
  /**
248
214
  * Resolve the head branch and base branch from a GitHub PR URL.
249
215
  * Accepts any URL of the form https://github.com/<owner>/<repo>/pull/<number>.
@@ -265,59 +231,167 @@ export async function getBranchFromPrUrl(prUrl) {
265
231
  }
266
232
  return null;
267
233
  }
234
+ /** How long a freshly opened PR is given for GitHub to report its first check. */
235
+ const CHECKS_APPEAR_GRACE_MS = 3 * 60 * 1000;
236
+ const CHECKS_APPEAR_POLL_MS = 15 * 1000;
237
+ function sleep(ms) {
238
+ return new Promise(resolve => setTimeout(resolve, ms));
239
+ }
240
+ function noChecksReported(result) {
241
+ return /no checks reported/i.test(`${result.stdout}\n${result.stderr}`);
242
+ }
243
+ /**
244
+ * Wait for a PR's checks to finish, returning whether they all passed.
245
+ *
246
+ * The required CI/CD checks are the automated gate no individual may wave through
247
+ * (change-management-policy.md clause 3), so a merge has to wait for them rather than outrun them.
248
+ * `gh pr checks --watch` blocks until every check reaches a conclusion and exits non-zero when any
249
+ * failed (exit code 8 means checks were still pending when it stopped).
250
+ *
251
+ * Two ways of "not finished" are failures here, never successes: a watch that hits the timeout is
252
+ * killed by a signal and has no exit code, and a PR whose checks never appear at all - GitHub can
253
+ * take a moment to report the first check on a just-opened PR, so that case is polled for a short
254
+ * grace period before it is called a failure.
255
+ */
256
+ export async function waitForPrChecks(branchName, timeoutMinutes = 60) {
257
+ await ensureGitHubCli();
258
+ logger.step(`Waiting for required checks on the PR for ${branchName} (timeout ${timeoutMinutes}m)...`);
259
+ const deadline = Date.now() + timeoutMinutes * 60 * 1000;
260
+ const graceDeadline = Date.now() + CHECKS_APPEAR_GRACE_MS;
261
+ while (noChecksReported(await exec('gh', ['pr', 'checks', branchName]))) {
262
+ if (Date.now() >= graceDeadline) {
263
+ logger.warning('No checks were reported on the PR');
264
+ return {
265
+ passed: false,
266
+ summary: `No checks were reported on the PR for ${branchName} within ${CHECKS_APPEAR_GRACE_MS / 60000} minutes of waiting.`
267
+ };
268
+ }
269
+ logger.dim('No checks reported yet - waiting for the suite to start...');
270
+ await sleep(CHECKS_APPEAR_POLL_MS);
271
+ }
272
+ const watch = await exec('gh', [
273
+ 'pr', 'checks', branchName,
274
+ '--watch',
275
+ '--interval', '30',
276
+ '--fail-fast'
277
+ ], { timeout: Math.max(deadline - Date.now(), 1) });
278
+ const summary = await exec('gh', ['pr', 'checks', branchName]);
279
+ const summaryText = summary.stdout.trim() || watch.stdout.trim();
280
+ if (watch.timedOut) {
281
+ logger.warning(`Checks did not finish within ${timeoutMinutes} minutes`);
282
+ return {
283
+ passed: false,
284
+ summary: `Timed out after ${timeoutMinutes} minutes with checks still running.\n${summaryText}`
285
+ };
286
+ }
287
+ if (watch.exitCode === 0) {
288
+ logger.success('All checks passed');
289
+ return { passed: true, summary: summaryText };
290
+ }
291
+ logger.warning(`Checks did not pass (gh exit code ${watch.exitCode})`);
292
+ return { passed: false, summary: summaryText };
293
+ }
294
+ /**
295
+ * Post a comment on a PR. This is how an admin override is recorded on the PR itself, so the
296
+ * exception lives with the change rather than only in a terminal session. Throws when the comment
297
+ * cannot be posted: an override with no record is not permitted, so the caller must not merge.
298
+ */
299
+ export async function addPrComment(branchName, body) {
300
+ await ensureGitHubCli();
301
+ const result = await exec('gh', ['pr', 'comment', branchName, '--body', body]);
302
+ if (result.exitCode !== 0) {
303
+ throw new Error(`Could not record the comment on the PR for ${branchName}: ${result.stderr}`);
304
+ }
305
+ }
306
+ /**
307
+ * The GitHub login `gh` is authenticated as - the person running the command.
308
+ */
309
+ export async function getCurrentLogin() {
310
+ await ensureGitHubCli();
311
+ const login = (await execOrThrow('gh', ['api', 'user', '--jq', '.login'])).trim();
312
+ if (!login) {
313
+ throw new Error('Could not determine the current GitHub login (gh api user returned nothing)');
314
+ }
315
+ return login;
316
+ }
268
317
  /**
269
- * Get the current authenticated GitHub user
318
+ * Create a PR with its body and assignee set at creation, returning its URL.
270
319
  */
271
- export async function getCurrentUser() {
320
+ export async function createPr(options) {
272
321
  await ensureGitHubCli();
273
322
  const result = await exec('gh', [
274
- 'api', 'user',
275
- '-q', '.login'
323
+ 'pr', 'create',
324
+ '--base', options.targetBranch,
325
+ '--head', options.sourceBranch,
326
+ '--title', options.title,
327
+ '--body', options.body,
328
+ '--assignee', options.assignee
276
329
  ]);
277
- if (result.exitCode === 0 && result.stdout.trim()) {
278
- return result.stdout.trim();
330
+ if (result.exitCode !== 0) {
331
+ throw new Error(`Failed to create PR: ${result.stderr}`);
279
332
  }
280
- return null;
333
+ return result.stdout.trim();
281
334
  }
282
335
  /**
283
- * Get review information for a PR including requested reviewers and existing reviews
336
+ * Read who a PR's assignee is. The assignee is its approver, so `idea1 approve-pr` reports it
337
+ * before merging.
284
338
  */
285
- export async function getPrReviewInfo(branchName) {
339
+ export async function getPrAssignees(branchName) {
286
340
  await ensureGitHubCli();
287
341
  const result = await exec('gh', [
288
342
  'pr', 'view', branchName,
289
- '--json', 'reviewRequests,reviews',
290
- '-q', '{ requestedReviewers: [.reviewRequests[].login], reviews: [.reviews[] | { author: .author.login, state: .state }] }'
343
+ '--json', 'assignees',
344
+ '-q', '[.assignees[].login] | join(",")'
291
345
  ]);
292
- if (result.exitCode === 0 && result.stdout.trim()) {
293
- try {
294
- return JSON.parse(result.stdout.trim());
295
- }
296
- catch {
297
- return null;
298
- }
346
+ if (result.exitCode !== 0) {
347
+ return [];
299
348
  }
300
- return null;
349
+ return result.stdout
350
+ .trim()
351
+ .split(',')
352
+ .map(login => login.trim())
353
+ .filter(login => login.length > 0);
301
354
  }
302
355
  /**
303
- * Check if the current user can and should approve the PR
304
- * Returns whether user is a reviewer and hasn't already approved
356
+ * Every PR merged into a branch, most recent first, with its merge record. The approval chain of
357
+ * a release or integration is assembled from this list: each PR's approval is its merge, performed
358
+ * by its assignee, so a PR that lists them is self-contained evidence of who approved what.
305
359
  */
306
- export async function getUserApprovalStatus(branchName) {
307
- const currentUser = await getCurrentUser();
308
- if (!currentUser) {
309
- return null;
360
+ export async function listMergedPrsInto(baseBranch) {
361
+ await ensureGitHubCli();
362
+ const result = await exec('gh', [
363
+ 'pr', 'list',
364
+ '--base', baseBranch,
365
+ '--state', 'merged',
366
+ '--limit', '500',
367
+ '--json', 'number,title,author,mergedAt,mergedBy'
368
+ ]);
369
+ if (result.exitCode !== 0) {
370
+ throw new Error(`Could not list merged PRs into ${baseBranch}: ${result.stderr}`);
310
371
  }
311
- const reviewInfo = await getPrReviewInfo(branchName);
312
- if (!reviewInfo) {
313
- return null;
372
+ const prs = JSON.parse(result.stdout);
373
+ return prs.map(pr => ({
374
+ number: pr.number,
375
+ title: pr.title,
376
+ author: pr.author?.login ?? 'unknown',
377
+ mergedAt: pr.mergedAt ?? '',
378
+ mergedBy: pr.mergedBy?.login ?? 'unknown'
379
+ }));
380
+ }
381
+ /**
382
+ * The PRs GitHub associates with a commit. This is how a commit on a branch is traced back to
383
+ * the PR that brought it there regardless of merge strategy - a squash or rebase merge leaves no
384
+ * "Merge pull request" subject to parse, but GitHub still knows which PR the commit came from.
385
+ */
386
+ export async function getPullRequestsForCommit(sha) {
387
+ await ensureGitHubCli();
388
+ const result = await exec('gh', [
389
+ 'api', `repos/{owner}/{repo}/commits/${sha}/pulls`,
390
+ '--jq', '[.[] | { number: .number, baseBranch: .base.ref, merged: (.merged_at != null) }]'
391
+ ]);
392
+ if (result.exitCode !== 0) {
393
+ throw new Error(`Could not read the pull requests for commit ${sha}: ${result.stderr}`);
314
394
  }
315
- const isRequestedReviewer = reviewInfo.requestedReviewers.includes(currentUser);
316
- const hasAlreadyApproved = reviewInfo.reviews.some(review => review.author === currentUser && review.state === 'APPROVED');
317
- return {
318
- isRequestedReviewer,
319
- hasAlreadyApproved,
320
- canApprove: isRequestedReviewer && !hasAlreadyApproved
321
- };
395
+ return JSON.parse(result.stdout);
322
396
  }
323
397
  //# sourceMappingURL=github.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { CommandOption } from '../types/index.js';
2
+ /**
3
+ * The gated-merge sequence shared by `idea1 release` (release branch -> main) and
4
+ * `idea1 integrate` (integration branch -> release branch). Both open a PR whose body is the
5
+ * approval chain of the changes it carries, both assign it to its approver, and both merge it only
6
+ * once the required CI/CD checks have passed - with the one sanctioned admin override
7
+ * (change-management-policy.md clause 3) recorded on the PR before any merge happens.
8
+ */
9
+ /** Which command is running the sequence; shapes the PR body and the override record. */
10
+ export interface GatedPrKind {
11
+ /** The command as recorded on the PR, e.g. `idea1 release`. */
12
+ commandName: string;
13
+ /** Noun for the PR, e.g. `Release` / `Integration`. */
14
+ label: string;
15
+ }
16
+ export declare const RELEASE_KIND: GatedPrKind;
17
+ export declare const INTEGRATION_KIND: GatedPrKind;
18
+ export type PrMode = 'create' | 'merge';
19
+ /**
20
+ * The `--pr-mode` option both commands share. `create` is the default: the PR is opened and the
21
+ * approver merges it in GitHub once the required checks are green - that merge is the approval of
22
+ * record, exactly as in `merge` mode, where the CLI waits for the checks and merges here.
23
+ */
24
+ export declare const PR_MODE_OPTION: CommandOption;
25
+ /** The first line of the comment that records an admin override; the evidence script keys on it. */
26
+ export declare const OVERRIDE_COMMENT_MARKER = "**Change-management exception: merged with admin override.**";
27
+ /**
28
+ * The local checkout must be the source branch, clean, fully pushed and level with origin, so the
29
+ * PR carries exactly what the person running the command is looking at.
30
+ */
31
+ export declare function validateSourceBranch(sourceBranch: string): Promise<void>;
32
+ /**
33
+ * The PR body, written as the approval record for everything the PR carries.
34
+ *
35
+ * SOC2 change management asks who approved a change and when. Each change on the source branch
36
+ * was already approved by its assignee, who merged its PR into that branch. Listing those merges
37
+ * here makes this PR self-contained evidence: the whole chain is readable from the one PR an
38
+ * auditor lands on. Commits are attributed to PRs through GitHub's own association, so squash and
39
+ * rebase merges are covered, and a commit with no PR is shown rather than silently dropped.
40
+ */
41
+ export declare function buildApprovalChainBody(sourceBranch: string, targetBranch: string, kind: GatedPrKind): Promise<string>;
42
+ export interface CreateGatedPrOptions {
43
+ sourceBranch: string;
44
+ targetBranch: string;
45
+ title: string;
46
+ /** The approver of record - the person who will merge the PR. */
47
+ assignee: string;
48
+ kind: GatedPrKind;
49
+ }
50
+ /**
51
+ * Open the PR with its approval-chain body and its approver as assignee. Returns the PR URL.
52
+ */
53
+ export declare function createGatedPr(options: CreateGatedPrOptions): Promise<string>;
54
+ /**
55
+ * The PR's assignee is its approver of record, and GitHub records whoever merges as `merged_by`.
56
+ * The two must be the same person for the record to name the right approver: no assignee means
57
+ * no approver, and a different merger is an exception the evidence report calls out - so it
58
+ * takes an explicit, eyes-open confirmation.
59
+ */
60
+ export declare function confirmApproverIdentity(branchName: string): Promise<void>;
61
+ /**
62
+ * Merge the PR once the required checks pass. Checks that fail, never start or never finish stop
63
+ * the merge. The one sanctioned admin override remains: it needs an explicit confirmation, a
64
+ * stated reason, and the exception must be recorded as a comment on the PR *before* the merge -
65
+ * if the comment cannot be posted, nothing is merged.
66
+ */
67
+ export declare function mergeWithCheckGate(branchName: string, kind: GatedPrKind): Promise<void>;
68
+ export interface RunPrModeOptions {
69
+ mode: PrMode;
70
+ sourceBranch: string;
71
+ targetBranch: string;
72
+ prUrl: string;
73
+ kind: GatedPrKind;
74
+ /** Open the Actions page after the merge - the merge to main triggers the production deploy. */
75
+ openActionsAfterMerge: boolean;
76
+ }
77
+ /**
78
+ * Finish the sequence in the chosen mode. Either way the merge is the approval of record: in
79
+ * `create` mode the approver performs it in GitHub once the checks are green; in `merge` mode the
80
+ * CLI waits for the checks and performs it here, as the approver.
81
+ */
82
+ export declare function runPrMode(options: RunPrModeOptions): Promise<void>;
83
+ //# sourceMappingURL=release-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-flow.d.ts","sourceRoot":"","sources":["../../src/services/release-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD;;;;;;GAMG;AAEH,yFAAyF;AACzF,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,EAAE,WAAgE,CAAC;AAC5F,eAAO,MAAM,gBAAgB,EAAE,WAAsE,CAAC;AAEtG,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAU5B,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,iEAAiE,CAAC;AAEtG;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C9E;AAwCD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CAyFjB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlF;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/E;AAsBD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC7F;AA+BD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,gGAAgG;IAChG,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCxE"}