@aviaratech/ai-delivery 0.3.23 → 0.3.24

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 (112) hide show
  1. package/CONTRIBUTING.md +9 -0
  2. package/README.md +56 -447
  3. package/dist/agent.d.ts +5 -11
  4. package/dist/agent.js +4 -8
  5. package/dist/agent.js.map +1 -1
  6. package/dist/cli.js +12 -107
  7. package/dist/cli.js.map +1 -1
  8. package/dist/config/deliveryConfig.d.ts +44 -55
  9. package/dist/config/deliveryConfig.js +85 -88
  10. package/dist/config/deliveryConfig.js.map +1 -1
  11. package/dist/config/deliveryConfig.test.js +13 -5
  12. package/dist/config/deliveryConfig.test.js.map +1 -1
  13. package/dist/delivery/common.js +7 -2
  14. package/dist/delivery/common.js.map +1 -1
  15. package/dist/delivery/delivery.test.js +2 -3
  16. package/dist/delivery/delivery.test.js.map +1 -1
  17. package/dist/delivery/index.d.ts +0 -6
  18. package/dist/delivery/index.js +0 -3
  19. package/dist/delivery/index.js.map +1 -1
  20. package/dist/delivery/legacy.d.ts +8 -0
  21. package/dist/delivery/legacy.js +5 -0
  22. package/dist/delivery/legacy.js.map +1 -0
  23. package/dist/delivery/policy.js +2 -13
  24. package/dist/delivery/policy.js.map +1 -1
  25. package/dist/directoryIndependent.test.d.ts +1 -0
  26. package/dist/directoryIndependent.test.js +262 -0
  27. package/dist/directoryIndependent.test.js.map +1 -0
  28. package/dist/dispatch.d.ts +29 -3
  29. package/dist/dispatch.js +160 -457
  30. package/dist/dispatch.js.map +1 -1
  31. package/dist/genericCompatibility.test.js +0 -35
  32. package/dist/genericCompatibility.test.js.map +1 -1
  33. package/dist/git.js +10 -3
  34. package/dist/git.js.map +1 -1
  35. package/dist/gitProcess.d.ts +6 -0
  36. package/dist/gitProcess.js +56 -0
  37. package/dist/gitProcess.js.map +1 -0
  38. package/dist/github/discovery.d.ts +1 -0
  39. package/dist/github/discovery.js +1 -1
  40. package/dist/github/discovery.js.map +1 -1
  41. package/dist/github/discovery.test.js +25 -20
  42. package/dist/github/discovery.test.js.map +1 -1
  43. package/dist/github/nativeIssueMetadata.d.ts +2 -2
  44. package/dist/github/nativeIssueMetadata.js.map +1 -1
  45. package/dist/github/projectDelivery.d.ts +1 -1
  46. package/dist/github/projectDelivery.js.map +1 -1
  47. package/dist/github/repo.d.ts +7 -1
  48. package/dist/github/repo.js +58 -2
  49. package/dist/github/repo.js.map +1 -1
  50. package/dist/issue.d.ts +11 -6
  51. package/dist/issue.js +136 -319
  52. package/dist/issue.js.map +1 -1
  53. package/dist/issueJournal.d.ts +1 -1
  54. package/dist/lifecycle.test.js +40 -7371
  55. package/dist/lifecycle.test.js.map +1 -1
  56. package/dist/logger.js +4 -4
  57. package/dist/logger.js.map +1 -1
  58. package/dist/mcp/tools.d.ts +26 -42
  59. package/dist/mcp/tools.js +33 -42
  60. package/dist/mcp/tools.js.map +1 -1
  61. package/dist/pluginInstaller.d.ts +1 -1
  62. package/dist/pluginPackaging.test.js +129 -0
  63. package/dist/pluginPackaging.test.js.map +1 -1
  64. package/dist/pr.d.ts +66 -114
  65. package/dist/pr.js +288 -1108
  66. package/dist/pr.js.map +1 -1
  67. package/dist/pr.test.js +295 -237
  68. package/dist/pr.test.js.map +1 -1
  69. package/dist/releaseReconciliation.test.d.ts +1 -0
  70. package/dist/releaseReconciliation.test.js +314 -0
  71. package/dist/releaseReconciliation.test.js.map +1 -0
  72. package/dist/review.d.ts +37 -7
  73. package/dist/review.js +106 -45
  74. package/dist/review.js.map +1 -1
  75. package/dist/review.test.js +30 -71
  76. package/dist/review.test.js.map +1 -1
  77. package/dist/services/agentReadinessService.d.ts +1 -1
  78. package/dist/services/agentReadinessService.js +2 -0
  79. package/dist/services/agentReadinessService.js.map +1 -1
  80. package/dist/services/deliveryAdmission.d.ts +4 -4
  81. package/dist/services/deliveryAdmission.js.map +1 -1
  82. package/dist/setup.test.js +10 -5
  83. package/dist/setup.test.js.map +1 -1
  84. package/dist/start.test.d.ts +1 -0
  85. package/dist/start.test.js +72 -0
  86. package/dist/start.test.js.map +1 -0
  87. package/dist/stdoutRegression.test.d.ts +1 -0
  88. package/dist/stdoutRegression.test.js +326 -0
  89. package/dist/stdoutRegression.test.js.map +1 -0
  90. package/dist/verification.d.ts +1 -27
  91. package/dist/verification.js +5 -1332
  92. package/dist/verification.js.map +1 -1
  93. package/dist/worktree.d.ts +1 -31
  94. package/dist/worktree.js +5 -200
  95. package/dist/worktree.js.map +1 -1
  96. package/dist/worktreeTransition.d.ts +1 -1
  97. package/dist/worktreeTransition.js +10 -5
  98. package/dist/worktreeTransition.js.map +1 -1
  99. package/dist/worktreeTransition.test.js +2 -3
  100. package/dist/worktreeTransition.test.js.map +1 -1
  101. package/package.json +1 -1
  102. package/plugins/ai-delivery/.claude-plugin/plugin.json +2 -2
  103. package/plugins/ai-delivery/README.md +3 -3
  104. package/plugins/ai-delivery/plugin.json +1 -1
  105. package/plugins/ai-delivery/runtime/dist/cli.js +50 -59
  106. package/plugins/ai-delivery/runtime/package.json +1 -1
  107. package/plugins/ai-delivery/skills/intake-create/SKILL.md +1 -1
  108. package/plugins/ai-delivery/skills/pr-handoff/SKILL.md +14 -21
  109. package/plugins/ai-delivery/skills/worktree-lifecycle/SKILL.md +12 -23
  110. package/dist/services/deliveryRecordService.d.ts +0 -47
  111. package/dist/services/deliveryRecordService.js +0 -199
  112. package/dist/services/deliveryRecordService.js.map +0 -1
package/dist/pr.test.js CHANGED
@@ -1,255 +1,313 @@
1
1
  import assert from 'node:assert/strict';
2
- import { execFileSync } from 'node:child_process';
3
- import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { test } from 'vitest';
7
- import { digestValue } from './delivery/index.js';
8
- import { mergeWithExactLease, persistMergedResult } from './pr.js';
9
- import { getIssueWorktreeStrict, updateIssueWorktreeDelivery } from './services/worktreeRegistry.js';
10
- import { cleanupMergedIssueWorktree, prepareIssueWorktree } from './worktree.js';
11
- function git(root, ...args) {
12
- return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim();
13
- }
14
- async function fixture() {
15
- const root = mkdtempSync(join(tmpdir(), 'ai-delivery-pr-'));
16
- git(root, 'init', '-q', '-b', 'main');
17
- git(root, 'config', 'user.name', 'Local Test');
18
- git(root, 'config', 'user.email', 'local@example.test');
19
- writeFileSync(join(root, '.gitignore'), '.issue-cli/\n.worktrees/\n');
20
- writeFileSync(join(root, 'initial.txt'), 'base\n');
21
- git(root, 'add', '.');
22
- git(root, 'commit', '-qm', 'base');
23
- const baseSha = git(root, 'rev-parse', 'HEAD');
24
- git(root, 'remote', 'add', 'origin', 'https://github.com/example/widget.git');
25
- git(root, 'update-ref', 'refs/remotes/origin/main', baseSha);
26
- const row = await prepareIssueWorktree({ baseRef: 'main', identity: 'author', issueNumber: 17, repoRoot: root });
27
- writeFileSync(join(row.path, 'feature.txt'), 'feature\n');
28
- git(row.path, 'add', '.');
29
- git(row.path, 'commit', '-qm', 'feature');
30
- return {
31
- root,
32
- path: row.path,
33
- baseSha,
34
- headSha: git(row.path, 'rev-parse', 'HEAD'),
35
- headTree: git(row.path, 'rev-parse', 'HEAD^{tree}'),
2
+ import { describe, it } from 'vitest';
3
+ import { publishPr, mergePr, finishIssue } from './pr.js';
4
+ import { digestValue } from './delivery/common.js';
5
+ const head = 'a'.repeat(40);
6
+ const merge = 'b'.repeat(40);
7
+ function fixture(state = 'clean', option = {}) {
8
+ let merged = false;
9
+ let closes = 0;
10
+ const merges = [];
11
+ const artifactContent = {
12
+ authorIdentity: option.reviewBinding === 'wrong-role' ? 'collaborator' : 'author',
13
+ reviewerIdentity: 'reviewer',
14
+ checks: ['retained checks'],
15
+ diffScopeHash: digestValue([option.reviewBinding === 'wrong-scope' ? 'elsewhere.ts' : 'change.ts']),
16
+ elapsedMs: 1,
17
+ findings: [],
18
+ head: {
19
+ sha: option.reviewBinding === 'stale-head' ? 'e'.repeat(40) : head,
20
+ tree: option.reviewBinding === 'wrong-tree' ? 'f'.repeat(40) : '0'.repeat(40),
21
+ },
22
+ issueNumber: option.reviewBinding === 'wrong-issue' ? 18 : 17,
23
+ prNumber: option.reviewBinding === 'wrong-pr' ? 24 : 23,
24
+ readOnly: true,
25
+ requestedEffort: 'xhigh',
26
+ requestedModel: 'gpt-6-astra',
27
+ effectiveEffort: 'unknown',
28
+ effectiveModel: 'unknown',
29
+ schemaVersion: 'ai-delivery.review-artifact@1',
30
+ summary: 'Independent review.',
31
+ verdict: 'approve',
36
32
  };
37
- }
38
- test('exact-lease merge refuses a cleanly mergeable diverged head before GitHub mutation', async () => {
39
- const state = await fixture();
40
- try {
41
- writeFileSync(join(state.root, 'base-only.txt'), 'base change\n');
42
- git(state.root, 'add', '.');
43
- git(state.root, 'commit', '-qm', 'base change');
44
- const divergedBase = git(state.root, 'rev-parse', 'HEAD');
45
- assert.notEqual(divergedBase, state.baseSha);
46
- assert.equal(git(state.root, 'merge-tree', '--write-tree', divergedBase, state.headSha).length, 40);
47
- let remoteCalls = 0;
48
- const context = {
49
- root: state.root,
50
- clients: {
51
- rest: {
52
- pulls: {
53
- get: () => {
54
- remoteCalls += 1;
33
+ const artifact = {
34
+ ...artifactContent,
35
+ artifactId: option.reviewBinding === 'invalid-digest' ? `sha256:${'d'.repeat(64)}` : digestValue(artifactContent),
36
+ };
37
+ const marker = `<!-- ai-delivery-review-artifact: ${artifact.artifactId} -->`;
38
+ const reviewBody = option.reviewBinding === 'marker-only'
39
+ ? marker
40
+ : `${artifact.summary}\n\n${marker}\n<!-- ai-delivery-review-artifact-data: ${Buffer.from(JSON.stringify(artifact)).toString('base64url')} -->`;
41
+ const pr = () => ({
42
+ number: 23,
43
+ changed_files: 1,
44
+ title: 'Improve widget',
45
+ body: 'Closes #17',
46
+ html_url: 'https://github.com/example/widget/pull/23',
47
+ state: merged ? 'closed' : 'open',
48
+ draft: false,
49
+ merged,
50
+ merge_commit_sha: merged ? merge : null,
51
+ mergeable: state === 'clean',
52
+ mergeable_state: state,
53
+ head: { sha: head, ref: 'issue/17', repo: { full_name: 'example/widget' } },
54
+ base: { sha: 'c'.repeat(40), ref: 'main', repo: { full_name: 'example/widget' } },
55
+ user: { login: 'author' },
56
+ });
57
+ const rest = {
58
+ request: async () => ({ data: [] }),
59
+ repos: { get: async () => ({ data: { default_branch: 'main', full_name: 'example/widget' } }) },
60
+ git: {
61
+ getCommit: async () => ({ data: { sha: head, tree: { sha: '0'.repeat(40) } } }),
62
+ getRef: async ({ ref }) => ({
63
+ data: { object: { sha: ref === 'heads/main' ? (option.baseMoved ? 'e'.repeat(40) : 'c'.repeat(40)) : head } },
64
+ }),
65
+ },
66
+ pulls: {
67
+ get: async () => ({ data: { ...pr(), head: { ...pr().head, sha: option.headMoved ? 'f'.repeat(40) : head } } }),
68
+ list: async () => ({ data: [] }),
69
+ listFiles: async () => ({ data: [{ filename: 'change.ts' }] }),
70
+ create: async (input) => {
71
+ assert.equal(input.body, 'Plain explanation\n\nCloses #17');
72
+ return { data: pr() };
73
+ },
74
+ getReview: async () => ({
75
+ data: {
76
+ id: 99,
77
+ user: { login: 'reviewer[bot]' },
78
+ state: option.reviewMoved ? 'DISMISSED' : 'APPROVED',
79
+ commit_id: head,
80
+ body: reviewBody,
81
+ html_url: 'https://github.com/example/widget/pull/23#pullrequestreview-99',
82
+ },
83
+ }),
84
+ listReviews: async () => ({
85
+ data: [
86
+ {
87
+ id: 99,
88
+ user: { login: 'reviewer[bot]' },
89
+ state: 'APPROVED',
90
+ commit_id: head,
91
+ body: reviewBody,
92
+ },
93
+ ],
94
+ }),
95
+ merge: async (input) => {
96
+ merges.push(input);
97
+ merged = true;
98
+ return { data: { merged: true, sha: merge } };
99
+ },
100
+ },
101
+ issues: {
102
+ get: async () => ({
103
+ data: { number: 17, state: closes ? 'closed' : 'open', node_id: 'ISSUE', title: 'Improve widget', body: '' },
104
+ }),
105
+ update: async (input) => {
106
+ assert.equal(input.state, 'closed');
107
+ if (option.failedClose && closes === 0) {
108
+ closes++;
109
+ throw new Error('Interrupted close');
110
+ }
111
+ closes++;
112
+ return { data: { number: 17, state: 'closed' } };
113
+ },
114
+ },
115
+ };
116
+ const graphql = async (query) => {
117
+ if (query.includes('DeliveryReviewAccess'))
118
+ return {
119
+ repository: {
120
+ pullRequest: {
121
+ reviews: {
122
+ nodes: option.reviewAccessUnknown
123
+ ? []
124
+ : [
125
+ {
126
+ fullDatabaseId: 99,
127
+ author: { login: 'reviewer' },
128
+ authorCanPushToRepository: option.reviewCannotPush !== true,
129
+ commit: { oid: head },
130
+ state: 'APPROVED',
131
+ },
132
+ ],
55
133
  },
56
134
  },
57
135
  },
58
- },
59
- };
60
- await assert.rejects(mergeWithExactLease(context, {
61
- baseBranch: 'main',
62
- baseSha: divergedBase,
63
- headBranch: 'issue/17',
64
- headSha: state.headSha,
65
- headTree: state.headTree,
66
- prNumber: 21,
67
- title: 'feature',
68
- worktreePath: state.path,
69
- }), /ancestor/);
70
- assert.equal(remoteCalls, 0);
71
- assert.equal(git(state.root, 'rev-parse', 'main'), divergedBase);
72
- }
73
- finally {
74
- rmSync(state.root, { recursive: true, force: true });
75
- }
76
- });
77
- test('remote squash recovery persists receipt, repairs registry, and cleans with exact readback', async () => {
78
- const state = await fixture();
79
- try {
80
- await updateIssueWorktreeDelivery({
81
- branch: 'issue/17',
82
- issueNumber: 17,
83
- path: state.path,
84
- prNumber: 21,
85
- projectRoot: state.root,
86
- status: 'pr-published',
87
- });
88
- writeFileSync(join(state.root, 'base-only.txt'), 'base change\n');
89
- git(state.root, 'add', '.');
90
- git(state.root, 'commit', '-qm', 'base change');
91
- const baseSha = git(state.root, 'rev-parse', 'HEAD');
92
- const mergeTree = git(state.root, 'merge-tree', '--write-tree', baseSha, state.headSha);
93
- assert.notEqual(mergeTree, state.headTree);
94
- const mergeSha = git(state.root, 'commit-tree', mergeTree, '-p', baseSha, '-m', 'squash feature');
95
- git(state.root, 'reset', '--hard', mergeSha);
96
- const evidenceId = digestValue('merge evidence');
97
- const reviewReceiptId = digestValue('review receipt');
98
- const content = {
99
- baseBranch: 'main',
100
- baseSha,
101
- evidenceId,
102
- exactBaseHeadLease: false,
103
- headBranch: 'issue/17',
104
- headSha: state.headSha,
105
- headTree: state.headTree,
106
- issueNumber: 17,
107
- prNumber: 21,
108
- reviewReceiptId,
109
- schemaVersion: 'ai-delivery.merge-intent@2',
110
- strategy: 'squash',
111
- };
112
- const intent = { ...content, intentId: digestValue(content) };
113
- let reportedTree = state.headTree;
114
- const mock = {
115
- clients: {
116
- rest: {
117
- pulls: {
118
- get: async () => ({
119
- data: {
120
- state: 'closed',
121
- merged_at: '2026-09-24T00:00:00Z',
122
- merge_commit_sha: mergeSha,
123
- head: { sha: state.headSha, ref: 'issue/17' },
124
- base: { ref: 'main' },
125
- },
126
- }),
136
+ };
137
+ if (query.includes('DeliveryClosingIssues'))
138
+ return {
139
+ repository: {
140
+ pullRequest: {
141
+ closingIssuesReferences: {
142
+ nodes: [{ number: option.wrongClosingIssue ? 18 : 17, repository: { nameWithOwner: 'example/widget' } }],
143
+ pageInfo: { hasNextPage: false, endCursor: null },
144
+ },
127
145
  },
128
- git: {
129
- getRef: async ({ ref }) => {
130
- if (ref !== 'heads/main')
131
- throw Object.assign(new Error('head branch deleted'), { status: 404 });
132
- return { data: { object: { sha: mergeSha } } };
146
+ },
147
+ };
148
+ if (option.deletedAfterMerge && merged && query.includes('DeliveryIssueBranches'))
149
+ return {
150
+ repository: { issue: { linkedBranches: { nodes: [], pageInfo: { hasNextPage: false, endCursor: null } } } },
151
+ };
152
+ if (query.includes('DeliveryIssueBranches'))
153
+ return {
154
+ repository: {
155
+ issue: {
156
+ linkedBranches: {
157
+ nodes: [
158
+ {
159
+ ref: {
160
+ name: option.unrelatedBranch ? 'other/17' : 'issue/17',
161
+ target: { oid: head },
162
+ repository: { nameWithOwner: 'example/widget' },
163
+ },
164
+ },
165
+ ],
166
+ pageInfo: { hasNextPage: false, endCursor: null },
133
167
  },
134
- getCommit: async () => ({
135
- data: { sha: mergeSha, tree: { sha: reportedTree }, parents: [{ sha: baseSha }] },
136
- }),
137
168
  },
138
169
  },
139
- },
140
- };
141
- const path = join(state.root, '.git', 'ai-delivery', 'merges', '17', `${state.headSha}.json`);
142
- const input = { branch: 'issue/17', intent, path, worktreePath: state.path, expectedSha: mergeSha };
143
- await assert.rejects(persistMergedResult({ ...mock, root: state.root }, input), /Remote merge ref, branch or commit readback/u);
144
- assert.equal(existsSync(path), false);
145
- reportedTree = mergeTree;
146
- await assert.rejects(persistMergedResult({ ...mock, root: join(state.root, 'wrong-registry') }, input));
147
- assert.equal(existsSync(path), false);
148
- assert.equal(getIssueWorktreeStrict(17, state.root).status, 'pr-published');
149
- const receipt = await persistMergedResult({ ...mock, root: state.root }, input);
150
- assert.equal(JSON.parse(readFileSync(path, 'utf8')).mergeSha, mergeSha);
151
- assert.equal(getIssueWorktreeStrict(17, state.root).status, 'merged');
152
- assert.equal(receipt.schemaVersion, 'ai-delivery.merge@3');
153
- if (receipt.schemaVersion !== 'ai-delivery.merge@3')
154
- throw new Error('Expected current merge receipt.');
155
- git(state.root, 'update-ref', 'refs/remotes/origin/main', mergeSha);
156
- const attestation = {
157
- baseBranch: receipt.baseBranch,
158
- baseSha: receipt.baseSha,
159
- headBranch: receipt.headBranch,
160
- headSha: receipt.headSha,
161
- mergeSha: receipt.mergeSha,
162
- mergeTree: receipt.mergeTree,
163
- remoteBaseSha: mergeSha,
164
- remoteHeadSha: '0'.repeat(40),
165
- strategy: receipt.strategy,
166
- };
167
- await assert.rejects(cleanupMergedIssueWorktree({ issueNumber: 17, repoRoot: state.root, merge: attestation }), /attestation/);
168
- assert.equal(existsSync(state.path), true);
169
- await cleanupMergedIssueWorktree({
170
- issueNumber: 17,
171
- repoRoot: state.root,
172
- merge: { ...attestation, remoteHeadSha: null },
170
+ };
171
+ if (query.includes('blockedBy'))
172
+ return {
173
+ repository: {
174
+ issue: { blockedBy: { nodes: [], pageInfo: { hasNextPage: false, endCursor: null } }, parent: null },
175
+ },
176
+ };
177
+ return { repository: { pullRequest: { headRefOid: head, reviewDecision: option.reviewDecision ?? 'APPROVED' } } };
178
+ };
179
+ const reviewer = { role: 'reviewer', authSource: 'app', appActorLogin: async () => 'reviewer[bot]', rest, graphql };
180
+ const context = {
181
+ root: '/nonexistent-launch-directory',
182
+ repo: { owner: 'example', repo: 'widget' },
183
+ config: {
184
+ schemaVersion: 'ai-delivery.github@1',
185
+ repository: 'example/widget',
186
+ roles: { author: { authSource: 'personal', identity: 'author' }, reviewer: { identity: 'reviewer' } },
187
+ },
188
+ clients: {
189
+ role: 'author',
190
+ authSource: 'personal',
191
+ authenticatedAuthor: async () => ({ actorLogin: 'author', credentialIdentity: 'user:1' }),
192
+ rest,
193
+ graphql,
194
+ },
195
+ reviewerClients: reviewer,
196
+ };
197
+ return { context, merges, closes: () => closes };
198
+ }
199
+ describe('remote GitHub lifecycle', () => {
200
+ for (const reviewBinding of [
201
+ 'stale-head',
202
+ 'wrong-tree',
203
+ 'wrong-scope',
204
+ 'invalid-digest',
205
+ 'marker-only',
206
+ 'wrong-issue',
207
+ 'wrong-pr',
208
+ 'wrong-role',
209
+ ]) {
210
+ it(`refuses ${reviewBinding} artifact binding despite remapped current API commit and CLEAN approval`, async () => {
211
+ const { context, merges, closes } = fixture('clean', { reviewBinding });
212
+ await assert.rejects(finishIssue(context, { issueNumber: 17, prNumber: 23 }), /artifact|binding|review|scope|tree/u);
213
+ assert.equal(merges.length, 0);
214
+ assert.equal(closes(), 0);
173
215
  });
174
- assert.equal(existsSync(state.path), false);
175
216
  }
176
- finally {
177
- rmSync(state.root, { recursive: true, force: true });
217
+ for (const option of [{ reviewCannotPush: true }, { reviewAccessUnknown: true }]) {
218
+ it(`refuses an unqualified App review despite aggregate human approval: ${JSON.stringify(option)}`, async () => {
219
+ const { context, merges } = fixture('clean', option);
220
+ await assert.rejects(mergePr(context, { issueNumber: 17, prNumber: 23 }), /qualifying|count|eligible/u);
221
+ assert.equal(merges.length, 0);
222
+ });
178
223
  }
179
- });
180
- test('ordinary divergent merge preserves the combined tree through receipt recovery', async () => {
181
- const state = await fixture();
182
- try {
183
- await updateIssueWorktreeDelivery({
184
- branch: 'issue/17',
185
- issueNumber: 17,
186
- path: state.path,
187
- prNumber: 21,
188
- projectRoot: state.root,
189
- status: 'pr-published',
224
+ it('refuses publication of a collaborator PR before promotion', async () => {
225
+ const { context } = fixture();
226
+ context.clients.rest.pulls.list = (async () => ({
227
+ data: [{ number: 23 }],
228
+ }));
229
+ const get = context.clients.rest.pulls.get;
230
+ context.clients.rest.pulls.get = (async (...args) => {
231
+ const response = await get(...args);
232
+ return { ...response, data: { ...response.data, user: { ...response.data.user, login: 'collaborator' } } };
190
233
  });
191
- writeFileSync(join(state.root, 'base-only.txt'), 'base change\n');
192
- git(state.root, 'add', '.');
193
- git(state.root, 'commit', '-qm', 'base change');
194
- const baseSha = git(state.root, 'rev-parse', 'HEAD');
195
- const mergeTree = git(state.root, 'merge-tree', '--write-tree', baseSha, state.headSha);
196
- assert.notEqual(mergeTree, state.headTree);
197
- const mergeSha = git(state.root, 'commit-tree', mergeTree, '-p', baseSha, '-p', state.headSha, '-m', 'merge feature');
198
- git(state.root, 'reset', '--hard', mergeSha);
199
- const content = {
200
- baseBranch: 'main',
201
- baseSha,
202
- evidenceId: digestValue('merge evidence'),
203
- exactBaseHeadLease: false,
204
- headBranch: 'issue/17',
205
- headSha: state.headSha,
206
- headTree: state.headTree,
234
+ await assert.rejects(publishPr(context, { issueNumber: 17, dryRun: true }), /author/u);
235
+ });
236
+ it('refuses a non-default PR base before publication', async () => {
237
+ const { context } = fixture();
238
+ await assert.rejects(publishPr(context, { issueNumber: 17, baseBranch: 'release' }), /default branch/u);
239
+ });
240
+ it('refuses conflicting prior PR metadata during dry-run before promotion', async () => {
241
+ const { context } = fixture();
242
+ context.clients.rest.pulls.list = (async () => ({
243
+ data: [{ number: 23 }],
244
+ }));
245
+ await assert.rejects(publishPr(context, { issueNumber: 17, body: 'Different intent', dryRun: true }), /conflict/u);
246
+ });
247
+ it('reads every PR match page before refusing ambiguous branch publication', async () => {
248
+ const { context } = fixture();
249
+ context.clients.rest.pulls.list = (async (input) => ({
250
+ data: input.page === 2 ? [{ number: 24 }] : Array.from({ length: 100 }, () => ({ number: 23 })),
251
+ }));
252
+ await assert.rejects(publishPr(context, { issueNumber: 17, dryRun: true }), /conflict/u);
253
+ });
254
+ it('creates a PR from its remote issue branch with a plain body and no local evidence', async () => {
255
+ const { context } = fixture();
256
+ const result = await publishPr(context, {
207
257
  issueNumber: 17,
208
- prNumber: 21,
209
- reviewReceiptId: digestValue('review receipt'),
210
- schemaVersion: 'ai-delivery.merge-intent@2',
211
- strategy: 'merge',
212
- };
213
- const intent = { ...content, intentId: digestValue(content) };
214
- const mock = {
215
- clients: {
216
- rest: {
217
- pulls: {
218
- get: async () => ({
219
- data: {
220
- state: 'closed',
221
- merged_at: '2026-09-24T00:00:00Z',
222
- merge_commit_sha: mergeSha,
223
- head: { sha: state.headSha, ref: 'issue/17' },
224
- base: { ref: 'main' },
225
- },
226
- }),
227
- },
228
- git: {
229
- getRef: async ({ ref }) => ({
230
- data: {
231
- object: {
232
- sha: ref === 'heads/main' ? mergeSha : state.headSha,
233
- },
234
- },
235
- }),
236
- getCommit: async () => ({
237
- data: { sha: mergeSha, tree: { sha: mergeTree }, parents: [{ sha: baseSha }, { sha: state.headSha }] },
238
- }),
239
- },
240
- },
241
- },
242
- };
243
- const path = join(state.root, '.git', 'ai-delivery', 'merges', '17', `${state.headSha}.json`);
244
- const input = { branch: 'issue/17', intent, path, worktreePath: state.path, expectedSha: mergeSha };
245
- await assert.rejects(persistMergedResult({ ...mock, root: join(state.root, 'wrong-registry') }, input));
246
- assert.equal(getIssueWorktreeStrict(17, state.root).status, 'pr-published');
247
- const receipt = await persistMergedResult({ ...mock, root: state.root }, input);
248
- assert.equal(receipt.mergeTree, mergeTree);
249
- assert.equal(getIssueWorktreeStrict(17, state.root).status, 'merged');
258
+ title: 'Improve widget',
259
+ body: 'Plain explanation',
260
+ draft: false,
261
+ });
262
+ assert.equal(result.prNumber, 23);
263
+ });
264
+ for (const state of ['blocked', 'behind', 'dirty', 'unstable', null]) {
265
+ it(`refuses GitHub merge eligibility ${String(state)} without a local receipt fallback`, async () => {
266
+ const { context, merges } = fixture(state);
267
+ await assert.rejects(mergePr(context, { issueNumber: 17, prNumber: 23 }), /GitHub|mergeable|clean|CLEAN/u);
268
+ assert.equal(merges.length, 0);
269
+ });
250
270
  }
251
- finally {
252
- rmSync(state.root, { recursive: true, force: true });
271
+ it('uses the independent reviewed SHA as the server merge precondition', async () => {
272
+ const { context, merges } = fixture();
273
+ await mergePr(context, { issueNumber: 17, prNumber: 23 });
274
+ assert.equal(merges.length, 1);
275
+ assert.equal(merges[0]?.sha, head);
276
+ });
277
+ it('finishes remotely and reuses the merged PR on an interrupted close retry', async () => {
278
+ const { context, merges, closes } = fixture();
279
+ await finishIssue(context, { issueNumber: 17, prNumber: 23 });
280
+ await finishIssue(context, { issueNumber: 17, prNumber: 23 });
281
+ assert.equal(merges.length, 1);
282
+ assert.equal(closes(), 1);
283
+ });
284
+ for (const [name, option] of [
285
+ ['moved base', { baseMoved: true }],
286
+ ['dismissed review readback', { reviewMoved: true }],
287
+ ['moved reviewed head', { headMoved: true }],
288
+ ['unknown decision', { reviewDecision: 'UNKNOWN' }],
289
+ ['required review', { reviewDecision: 'REVIEW_REQUIRED' }],
290
+ ['unrelated linked branch', { unrelatedBranch: true }],
291
+ ]) {
292
+ it(`refuses ${name} without merge or issue closure`, async () => {
293
+ const { context, merges, closes } = fixture('clean', option);
294
+ await assert.rejects(finishIssue(context, { issueNumber: 17, prNumber: 23 }));
295
+ assert.equal(merges.length, 0);
296
+ assert.equal(closes(), 0);
297
+ });
253
298
  }
299
+ it('finishes a merged PR after its issue branch was deleted', async () => {
300
+ const { context, merges, closes } = fixture('clean', { deletedAfterMerge: true });
301
+ await finishIssue(context, { issueNumber: 17, prNumber: 23 });
302
+ await finishIssue(context, { issueNumber: 17, prNumber: 23 });
303
+ assert.equal(merges.length, 1);
304
+ assert.equal(closes(), 1);
305
+ });
306
+ it('never closes another issue after merged-PR association readback disagrees', async () => {
307
+ const { context, closes, merges } = fixture('clean', { wrongClosingIssue: true });
308
+ await assert.rejects(finishIssue(context, { issueNumber: 17, prNumber: 23 }));
309
+ assert.equal(merges.length, 0);
310
+ assert.equal(closes(), 0);
311
+ });
254
312
  });
255
313
  //# sourceMappingURL=pr.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pr.test.js","sourceRoot":"","sources":["../src/pr.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACrG,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEjF,SAAS,GAAG,CAAC,IAAY,EAAE,GAAG,IAAc;IAC1C,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACxD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACtE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACtB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,uCAAuC,CAAC,CAAC;IAC9E,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjH,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO;QACP,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC;QAC3C,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;IACpG,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpG,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,KAAK,EAAE;wBACL,GAAG,EAAE,GAAG,EAAE;4BACR,WAAW,IAAI,CAAC,CAAC;wBACnB,CAAC;qBACF;iBACF;aACF;SAC4B,CAAC;QAChC,MAAM,MAAM,CAAC,OAAO,CAClB,mBAAmB,CAAC,OAAO,EAAE;YAC3B,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,KAAK,CAAC,IAAI;SACzB,CAAC,EACF,UAAU,CACX,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;IAC3G,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,2BAA2B,CAAC;YAChC,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACxF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAClG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,MAAM;YAClB,OAAO;YACP,UAAU;YACV,kBAAkB,EAAE,KAAK;YACzB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe;YACf,aAAa,EAAE,4BAAqC;YACpD,QAAQ,EAAE,QAAiB;SAC5B,CAAC;QACF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,IAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;QAClC,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,KAAK,EAAE;wBACL,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BAChB,IAAI,EAAE;gCACJ,KAAK,EAAE,QAAQ;gCACf,SAAS,EAAE,sBAAsB;gCACjC,gBAAgB,EAAE,QAAQ;gCAC1B,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE;gCAC7C,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;6BACtB;yBACF,CAAC;qBACH;oBACD,GAAG,EAAE;wBACH,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAmB,EAAE,EAAE;4BACzC,IAAI,GAAG,KAAK,YAAY;gCAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;4BACjG,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;wBACjD,CAAC;wBACD,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BACtB,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;yBAClF,CAAC;qBACH;iBACF;aACF;SACF,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACpG,MAAM,MAAM,CAAC,OAAO,CAClB,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAgC,EAAE,KAAK,CAAC,EACvF,8CAA8C,CAC/C,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,YAAY,GAAG,SAAS,CAAC;QACzB,MAAM,MAAM,CAAC,OAAO,CAClB,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAgC,EAAE,KAAK,CAAC,CAChH,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAgC,EAAE,KAAK,CAAC,CAAC;QAC9G,MAAM,CAAC,KAAK,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAW,CAA0B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAqB;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACxG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,QAAQ;YACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;QACF,MAAM,MAAM,CAAC,OAAO,CAClB,0BAA0B,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EACzF,aAAa,CACd,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,0BAA0B,CAAC;YAC/B,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,KAAK,EAAE,EAAE,GAAG,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE;SAC/C,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;IAC/F,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,2BAA2B,CAAC;YAChC,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,EAAE;YACf,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;QAClE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACxF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAClB,KAAK,CAAC,IAAI,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,KAAK,CAAC,OAAO,EACb,IAAI,EACJ,eAAe,CAChB,CAAC;QACF,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,MAAM;YAClB,OAAO;YACP,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC;YACzC,kBAAkB,EAAE,KAAK;YACzB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC;YAC9C,aAAa,EAAE,4BAAqC;YACpD,QAAQ,EAAE,OAAgB;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,IAAI,EAAE;oBACJ,KAAK,EAAE;wBACL,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BAChB,IAAI,EAAE;gCACJ,KAAK,EAAE,QAAQ;gCACf,SAAS,EAAE,sBAAsB;gCACjC,gBAAgB,EAAE,QAAQ;gCAC1B,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE;gCAC7C,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;6BACtB;yBACF,CAAC;qBACH;oBACD,GAAG,EAAE;wBACH,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAmB,EAAE,EAAE,CAAC,CAAC;4BAC3C,IAAI,EAAE;gCACJ,MAAM,EAAE;oCACN,GAAG,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;iCACrD;6BACF;yBACF,CAAC;wBACF,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;4BACtB,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;yBACvG,CAAC;qBACH;iBACF;aACF;SACF,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACpG,MAAM,MAAM,CAAC,OAAO,CAClB,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAgC,EAAE,KAAK,CAAC,CAChH,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAgC,EAAE,KAAK,CAAC,CAAC;QAC9G,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"pr.test.js","sourceRoot":"","sources":["../src/pr.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};