@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.
- package/CONTRIBUTING.md +9 -0
- package/README.md +56 -447
- package/dist/agent.d.ts +5 -11
- package/dist/agent.js +4 -8
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +12 -107
- package/dist/cli.js.map +1 -1
- package/dist/config/deliveryConfig.d.ts +44 -55
- package/dist/config/deliveryConfig.js +85 -88
- package/dist/config/deliveryConfig.js.map +1 -1
- package/dist/config/deliveryConfig.test.js +13 -5
- package/dist/config/deliveryConfig.test.js.map +1 -1
- package/dist/delivery/common.js +7 -2
- package/dist/delivery/common.js.map +1 -1
- package/dist/delivery/delivery.test.js +2 -3
- package/dist/delivery/delivery.test.js.map +1 -1
- package/dist/delivery/index.d.ts +0 -6
- package/dist/delivery/index.js +0 -3
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/legacy.d.ts +8 -0
- package/dist/delivery/legacy.js +5 -0
- package/dist/delivery/legacy.js.map +1 -0
- package/dist/delivery/policy.js +2 -13
- package/dist/delivery/policy.js.map +1 -1
- package/dist/directoryIndependent.test.d.ts +1 -0
- package/dist/directoryIndependent.test.js +262 -0
- package/dist/directoryIndependent.test.js.map +1 -0
- package/dist/dispatch.d.ts +29 -3
- package/dist/dispatch.js +160 -457
- package/dist/dispatch.js.map +1 -1
- package/dist/genericCompatibility.test.js +0 -35
- package/dist/genericCompatibility.test.js.map +1 -1
- package/dist/git.js +10 -3
- package/dist/git.js.map +1 -1
- package/dist/gitProcess.d.ts +6 -0
- package/dist/gitProcess.js +56 -0
- package/dist/gitProcess.js.map +1 -0
- package/dist/github/discovery.d.ts +1 -0
- package/dist/github/discovery.js +1 -1
- package/dist/github/discovery.js.map +1 -1
- package/dist/github/discovery.test.js +25 -20
- package/dist/github/discovery.test.js.map +1 -1
- package/dist/github/nativeIssueMetadata.d.ts +2 -2
- package/dist/github/nativeIssueMetadata.js.map +1 -1
- package/dist/github/projectDelivery.d.ts +1 -1
- package/dist/github/projectDelivery.js.map +1 -1
- package/dist/github/repo.d.ts +7 -1
- package/dist/github/repo.js +58 -2
- package/dist/github/repo.js.map +1 -1
- package/dist/issue.d.ts +11 -6
- package/dist/issue.js +136 -319
- package/dist/issue.js.map +1 -1
- package/dist/issueJournal.d.ts +1 -1
- package/dist/lifecycle.test.js +40 -7371
- package/dist/lifecycle.test.js.map +1 -1
- package/dist/logger.js +4 -4
- package/dist/logger.js.map +1 -1
- package/dist/mcp/tools.d.ts +26 -42
- package/dist/mcp/tools.js +33 -42
- package/dist/mcp/tools.js.map +1 -1
- package/dist/pluginInstaller.d.ts +1 -1
- package/dist/pluginPackaging.test.js +129 -0
- package/dist/pluginPackaging.test.js.map +1 -1
- package/dist/pr.d.ts +66 -114
- package/dist/pr.js +288 -1108
- package/dist/pr.js.map +1 -1
- package/dist/pr.test.js +295 -237
- package/dist/pr.test.js.map +1 -1
- package/dist/releaseReconciliation.test.d.ts +1 -0
- package/dist/releaseReconciliation.test.js +314 -0
- package/dist/releaseReconciliation.test.js.map +1 -0
- package/dist/review.d.ts +37 -7
- package/dist/review.js +106 -45
- package/dist/review.js.map +1 -1
- package/dist/review.test.js +30 -71
- package/dist/review.test.js.map +1 -1
- package/dist/services/agentReadinessService.d.ts +1 -1
- package/dist/services/agentReadinessService.js +2 -0
- package/dist/services/agentReadinessService.js.map +1 -1
- package/dist/services/deliveryAdmission.d.ts +4 -4
- package/dist/services/deliveryAdmission.js.map +1 -1
- package/dist/setup.test.js +10 -5
- package/dist/setup.test.js.map +1 -1
- package/dist/start.test.d.ts +1 -0
- package/dist/start.test.js +72 -0
- package/dist/start.test.js.map +1 -0
- package/dist/stdoutRegression.test.d.ts +1 -0
- package/dist/stdoutRegression.test.js +326 -0
- package/dist/stdoutRegression.test.js.map +1 -0
- package/dist/verification.d.ts +1 -27
- package/dist/verification.js +5 -1332
- package/dist/verification.js.map +1 -1
- package/dist/worktree.d.ts +1 -31
- package/dist/worktree.js +5 -200
- package/dist/worktree.js.map +1 -1
- package/dist/worktreeTransition.d.ts +1 -1
- package/dist/worktreeTransition.js +10 -5
- package/dist/worktreeTransition.js.map +1 -1
- package/dist/worktreeTransition.test.js +2 -3
- package/dist/worktreeTransition.test.js.map +1 -1
- package/package.json +1 -1
- package/plugins/ai-delivery/.claude-plugin/plugin.json +2 -2
- package/plugins/ai-delivery/README.md +3 -3
- package/plugins/ai-delivery/plugin.json +1 -1
- package/plugins/ai-delivery/runtime/dist/cli.js +50 -59
- package/plugins/ai-delivery/runtime/package.json +1 -1
- package/plugins/ai-delivery/skills/intake-create/SKILL.md +1 -1
- package/plugins/ai-delivery/skills/pr-handoff/SKILL.md +14 -21
- package/plugins/ai-delivery/skills/worktree-lifecycle/SKILL.md +12 -23
- package/dist/services/deliveryRecordService.d.ts +0 -47
- package/dist/services/deliveryRecordService.js +0 -199
- package/dist/services/deliveryRecordService.js.map +0 -1
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { Console } from 'node:console';
|
|
4
|
+
import { mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { Octokit } from '@octokit/rest';
|
|
8
|
+
import { afterEach, test, vi } from 'vitest';
|
|
9
|
+
import { parseDeliveryConfig } from './config/deliveryConfig.js';
|
|
10
|
+
import { syntheticDiscoveryConfig } from './fixtures/discovery.js';
|
|
11
|
+
import { replaceParentIssue } from './github/relationships.js';
|
|
12
|
+
import { CLIError, handleCommandError, logDebug, logError, logInfo, logProgress, logSuccess, logWarn, setLogsSuppressed, } from './logger.js';
|
|
13
|
+
import { addWorktreeEntry, removeWorktreeEntry } from './services/worktreeRegistry.js';
|
|
14
|
+
// Project/field metadata is unrelated to stream routing. Keep these provider
|
|
15
|
+
// adapters local while exercising real parent linking, issue start and dispatch.
|
|
16
|
+
vi.mock('./github/nativeIssueMetadata.js', async (importOriginal) => ({
|
|
17
|
+
...(await importOriginal()),
|
|
18
|
+
getConfiguredNativeIssueMetadata: async () => ({ points: 2 }),
|
|
19
|
+
setConfiguredNativeIssueMetadata: async () => ({ points: 2 }),
|
|
20
|
+
clearConfiguredNativeIssuePoints: async () => { },
|
|
21
|
+
}));
|
|
22
|
+
vi.mock('./github/projectDelivery.js', async (importOriginal) => ({
|
|
23
|
+
...(await importOriginal()),
|
|
24
|
+
getIssueProjectStatus: async () => null,
|
|
25
|
+
syncIssueProjectStatus: async () => null,
|
|
26
|
+
}));
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
vi.restoreAllMocks();
|
|
29
|
+
vi.unstubAllEnvs();
|
|
30
|
+
setLogsSuppressed(false);
|
|
31
|
+
});
|
|
32
|
+
function fixture(developmentFails = false) {
|
|
33
|
+
const root = realpathSync(mkdtempSync(join(tmpdir(), 'ai-delivery-stdout-')));
|
|
34
|
+
const git = (...args) => execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim();
|
|
35
|
+
git('init', '-q', '-b', 'main');
|
|
36
|
+
git('config', 'user.name', 'Synthetic Delivery');
|
|
37
|
+
git('config', 'user.email', 'delivery@example.test');
|
|
38
|
+
writeFileSync(join(root, 'artifact.txt'), 'synthetic\n');
|
|
39
|
+
git('add', 'artifact.txt');
|
|
40
|
+
git('commit', '-qm', 'synthetic base');
|
|
41
|
+
git('remote', 'add', 'origin', 'https://github.com/example/widget.git');
|
|
42
|
+
git('update-ref', 'refs/remotes/origin/main', git('rev-parse', 'HEAD'));
|
|
43
|
+
git('symbolic-ref', 'refs/remotes/origin/HEAD', 'refs/remotes/origin/main');
|
|
44
|
+
let parent = null;
|
|
45
|
+
const issue = {
|
|
46
|
+
id: 170,
|
|
47
|
+
number: 17,
|
|
48
|
+
node_id: 'ISSUE-17',
|
|
49
|
+
title: 'Synthetic change',
|
|
50
|
+
body: '## Outcome\nDeliver a verified synthetic change to the local repository.\n\n## Scope\n- `artifact.txt`\n\n## Acceptance Criteria\n- [ ] Change works\n- [ ] Review passes\n\n## Verification\nRun `node --version`.',
|
|
51
|
+
state: 'open',
|
|
52
|
+
html_url: 'https://github.com/example/widget/issues/17',
|
|
53
|
+
labels: [],
|
|
54
|
+
type: { name: 'Task' },
|
|
55
|
+
};
|
|
56
|
+
const rest = new Octokit();
|
|
57
|
+
Object.assign(rest.issues, {
|
|
58
|
+
get: async ({ issue_number }) => ({
|
|
59
|
+
data: issue_number === 17
|
|
60
|
+
? { ...issue, state: developmentFails ? 'closed' : 'open' }
|
|
61
|
+
: { ...issue, number: issue_number, id: issue_number * 10, node_id: `ISSUE-${String(issue_number)}` },
|
|
62
|
+
}),
|
|
63
|
+
create: async () => ({ data: issue }),
|
|
64
|
+
listForRepo: async () => ({ data: [] }),
|
|
65
|
+
update: async () => ({ data: issue }),
|
|
66
|
+
listSubIssues: async () => ({ data: parent === null ? [] : [issue] }),
|
|
67
|
+
addSubIssue: async ({ issue_number }) => {
|
|
68
|
+
parent = issue_number;
|
|
69
|
+
return { data: issue };
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
Object.assign(rest, { paginate: async () => (parent === null ? [] : [issue]) });
|
|
73
|
+
const clients = {
|
|
74
|
+
authSource: 'personal',
|
|
75
|
+
role: 'author',
|
|
76
|
+
rest,
|
|
77
|
+
graphql: (async (query) => {
|
|
78
|
+
const page = { nodes: [], pageInfo: { endCursor: null, hasNextPage: false } };
|
|
79
|
+
if (query.includes('blockedBy(')) {
|
|
80
|
+
return {
|
|
81
|
+
repository: {
|
|
82
|
+
issue: {
|
|
83
|
+
blockedBy: page,
|
|
84
|
+
parent: parent === null
|
|
85
|
+
? null
|
|
86
|
+
: { id: 'ISSUE-5', number: parent, repository: { nameWithOwner: 'example/widget' } },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (query.includes('blocking('))
|
|
92
|
+
return { repository: { issue: { blocking: page } } };
|
|
93
|
+
if (query.includes('subIssues('))
|
|
94
|
+
return { repository: { issue: { subIssues: page } } };
|
|
95
|
+
throw new Error('Unexpected synthetic stdout query.');
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
const config = parseDeliveryConfig({
|
|
99
|
+
...syntheticDiscoveryConfig,
|
|
100
|
+
schemaVersion: 'ai-delivery.config@2',
|
|
101
|
+
policy: { contract: 'RepositoryDeliveryPolicy@1', module: './policy.mjs' },
|
|
102
|
+
roles: {
|
|
103
|
+
author: { identity: 'host-author', authSource: 'personal', credentialEnv: { token: 'AUTHOR_TOKEN' } },
|
|
104
|
+
reviewer: {
|
|
105
|
+
identity: 'synthetic-reviewer',
|
|
106
|
+
credentialEnv: {
|
|
107
|
+
appId: 'REVIEWER_APP_ID',
|
|
108
|
+
installationId: 'REVIEWER_INSTALLATION_ID',
|
|
109
|
+
privateKeyPath: 'REVIEWER_KEY_PATH',
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
commandPolicy: {
|
|
114
|
+
checks: { format: 'REQUIRED', gitClean: 'REQUIRED', lint: 'REQUIRED', test: 'REQUIRED', typecheck: 'REQUIRED' },
|
|
115
|
+
timeoutsMs: { lint: 60000, test: 60000, typecheck: 60000 },
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
return {
|
|
119
|
+
context: { root, repo: { owner: 'example', repo: 'widget' }, clients, config },
|
|
120
|
+
cleanup: () => rmSync(root, { recursive: true, force: true }),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function captureStreams() {
|
|
124
|
+
const output = { stdout: '', stderr: '' };
|
|
125
|
+
const previousConsole = globalThis.console;
|
|
126
|
+
// Vitest intercepts console calls before they reach process streams. Use a
|
|
127
|
+
// native console so the byte-level capture matches an actual CLI process.
|
|
128
|
+
globalThis.console = new Console(process.stdout, process.stderr);
|
|
129
|
+
const out = vi.spyOn(process.stdout, 'write').mockImplementation((value) => {
|
|
130
|
+
output.stdout += String(value);
|
|
131
|
+
return true;
|
|
132
|
+
});
|
|
133
|
+
const err = vi.spyOn(process.stderr, 'write').mockImplementation((value) => {
|
|
134
|
+
output.stderr += String(value);
|
|
135
|
+
return true;
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
output,
|
|
139
|
+
restore: () => {
|
|
140
|
+
out.mockRestore();
|
|
141
|
+
err.mockRestore();
|
|
142
|
+
globalThis.console = previousConsole;
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
test('parent replacement emits its diagnostic on stderr without writing any stdout bytes', async () => {
|
|
147
|
+
const f = fixture();
|
|
148
|
+
const capture = captureStreams();
|
|
149
|
+
try {
|
|
150
|
+
await replaceParentIssue({ ...f.context.clients, repo: f.context.repo, issueNumber: 17, parentIssueNumber: 5 });
|
|
151
|
+
assert.equal(capture.output.stdout, '');
|
|
152
|
+
assert.match(capture.output.stderr, /Linked issue #17 as sub-issue of issue #5\./u);
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
capture.restore();
|
|
156
|
+
f.cleanup();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
test.each(['add', 'remove'])('registry %s emits its diagnostic without writing any stdout bytes', async (operation) => {
|
|
160
|
+
const f = fixture();
|
|
161
|
+
const row = {
|
|
162
|
+
path: join(f.context.root, '.worktrees', 'synthetic'),
|
|
163
|
+
branch: 'issue/17',
|
|
164
|
+
type: 'issue',
|
|
165
|
+
issueNumber: 17,
|
|
166
|
+
identity: 'host-author',
|
|
167
|
+
status: 'active',
|
|
168
|
+
createdAt: '2026-10-08T00:00:00Z',
|
|
169
|
+
updatedAt: '2026-10-08T00:00:00Z',
|
|
170
|
+
};
|
|
171
|
+
const capture = captureStreams();
|
|
172
|
+
try {
|
|
173
|
+
await addWorktreeEntry(row, f.context.root);
|
|
174
|
+
if (operation === 'remove') {
|
|
175
|
+
capture.output.stdout = '';
|
|
176
|
+
capture.output.stderr = '';
|
|
177
|
+
assert.equal(await removeWorktreeEntry(row.path, f.context.root), true);
|
|
178
|
+
}
|
|
179
|
+
assert.equal(capture.output.stdout, '');
|
|
180
|
+
assert.match(capture.output.stderr, operation === 'add' ? /Added to worktree registry:/u : /Removed from worktree registry:/u);
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
capture.restore();
|
|
184
|
+
f.cleanup();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
async function runCli(context, args) {
|
|
188
|
+
vi.resetModules();
|
|
189
|
+
const configuration = await import('./config/deliveryConfig.js');
|
|
190
|
+
const issues = await import('./issue.js');
|
|
191
|
+
const admission = await import('./services/deliveryAdmission.js');
|
|
192
|
+
const prs = await import('./pr.js');
|
|
193
|
+
const dispatch = await import('./dispatch.js');
|
|
194
|
+
vi.spyOn(configuration, 'loadDeliverySettings').mockResolvedValue({
|
|
195
|
+
...context.config,
|
|
196
|
+
configPath: 'synthetic-user.json',
|
|
197
|
+
checkoutRoots: [],
|
|
198
|
+
overrides: { schemaVersion: 'ai-delivery.config@2' },
|
|
199
|
+
sourceDigest: 'synthetic',
|
|
200
|
+
});
|
|
201
|
+
vi.spyOn(issues, 'loadDeliveryContext').mockResolvedValue(context);
|
|
202
|
+
// Synthetic authorization seams: these tests exercise streams, not live access.
|
|
203
|
+
vi.spyOn(admission, 'assertDeliveryRuntimeAdmitted').mockResolvedValue({});
|
|
204
|
+
vi.spyOn(prs, 'preflightReviewRoute').mockResolvedValue({});
|
|
205
|
+
const argv = process.argv;
|
|
206
|
+
const exitCode = process.exitCode;
|
|
207
|
+
const capture = captureStreams();
|
|
208
|
+
let completed = () => { };
|
|
209
|
+
let failed = () => { };
|
|
210
|
+
const resultWritten = new Promise((resolve, reject) => {
|
|
211
|
+
completed = resolve;
|
|
212
|
+
failed = reject;
|
|
213
|
+
});
|
|
214
|
+
const execute = dispatch.executeTool;
|
|
215
|
+
vi.spyOn(dispatch, 'executeTool').mockImplementation(async (...input) => {
|
|
216
|
+
try {
|
|
217
|
+
return await execute(...input);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
failed(error);
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
vi.spyOn(process.stdout, 'write').mockImplementation((value) => {
|
|
225
|
+
capture.output.stdout += String(value);
|
|
226
|
+
// Wait for the result, not the earlier diagnostic chunk that reproduces #74.
|
|
227
|
+
if (String(value).startsWith('{'))
|
|
228
|
+
completed();
|
|
229
|
+
return true;
|
|
230
|
+
});
|
|
231
|
+
try {
|
|
232
|
+
process.exitCode = undefined;
|
|
233
|
+
process.argv = [process.execPath, 'ai-delivery', '--repo-root', context.root, '--identity', 'host-author', ...args];
|
|
234
|
+
await import('./cli.js');
|
|
235
|
+
await resultWritten;
|
|
236
|
+
return { ...capture.output, exitCode: process.exitCode };
|
|
237
|
+
}
|
|
238
|
+
finally {
|
|
239
|
+
capture.restore();
|
|
240
|
+
vi.restoreAllMocks();
|
|
241
|
+
process.argv = argv;
|
|
242
|
+
process.exitCode = exitCode;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
test('parent update through the CLI entry produces one parseable JSON result', async () => {
|
|
246
|
+
const f = fixture();
|
|
247
|
+
try {
|
|
248
|
+
const output = await runCli(f.context, ['update', '--issue', '17', '--parent', '5']);
|
|
249
|
+
const result = JSON.parse(output.stdout);
|
|
250
|
+
assert.equal(result.issueNumber, 17);
|
|
251
|
+
assert.equal(result.parentIssueNumber, 5);
|
|
252
|
+
assert.equal(output.exitCode, undefined);
|
|
253
|
+
assert.match(output.stderr, /Linked issue #17 as sub-issue of issue #5\./u);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
f.cleanup();
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
test('failed remote branch start after parent linking preserves parseable CLI recovery JSON and nonzero exit', async () => {
|
|
260
|
+
const f = fixture(true);
|
|
261
|
+
try {
|
|
262
|
+
const output = await runCli(f.context, [
|
|
263
|
+
'start',
|
|
264
|
+
'--title',
|
|
265
|
+
'Synthetic change',
|
|
266
|
+
'--body',
|
|
267
|
+
'## Outcome\nDeliver a verified synthetic change to the local repository.\n\n## Scope\n- `artifact.txt`\n\n## Acceptance Criteria\n- [ ] Change works\n- [ ] Review passes\n\n## Verification\nRun `node --version`.',
|
|
268
|
+
'--parent',
|
|
269
|
+
'5',
|
|
270
|
+
]);
|
|
271
|
+
const result = JSON.parse(output.stdout);
|
|
272
|
+
assert.equal(result.status, 'created-not-started');
|
|
273
|
+
assert.equal(result.createdIssue.number, 17);
|
|
274
|
+
assert.equal(result.failure.phase, 'branch-or-journal');
|
|
275
|
+
assert.match(result.failure.message, /open GitHub issue/u);
|
|
276
|
+
assert.equal(result.safeResume.arguments.issueNumber, 17);
|
|
277
|
+
assert.equal(result.safeResume.arguments.parentIssueNumber, 5);
|
|
278
|
+
assert.equal(result.safeResume.arguments.resumeCreated, true);
|
|
279
|
+
assert.equal(output.exitCode, 1);
|
|
280
|
+
assert.match(output.stderr, /Linked issue #17 as sub-issue of issue #5\./u);
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
f.cleanup();
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
test('all enabled diagnostics preserve their content on stderr', () => {
|
|
287
|
+
vi.stubEnv('DEBUG', '1');
|
|
288
|
+
const capture = captureStreams();
|
|
289
|
+
try {
|
|
290
|
+
logDebug('debug proof');
|
|
291
|
+
logInfo('info proof');
|
|
292
|
+
logSuccess('success proof');
|
|
293
|
+
logWarn('warning proof');
|
|
294
|
+
logError('error proof');
|
|
295
|
+
logProgress('progress proof');
|
|
296
|
+
handleCommandError(new CLIError('failure proof', { hint: 'retry proof' }));
|
|
297
|
+
assert.equal(capture.output.stdout, '');
|
|
298
|
+
for (const message of ['debug', 'info', 'success', 'warning', 'error', 'progress', 'failure', 'retry']) {
|
|
299
|
+
assert.match(capture.output.stderr, new RegExp(`${message} proof`, 'u'));
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
capture.restore();
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
test('MCP suppression still silences diagnostics while retaining errors and recovery hints on stderr', () => {
|
|
307
|
+
vi.stubEnv('DEBUG', 'true');
|
|
308
|
+
setLogsSuppressed(true);
|
|
309
|
+
const capture = captureStreams();
|
|
310
|
+
try {
|
|
311
|
+
logDebug('hidden');
|
|
312
|
+
logInfo('hidden');
|
|
313
|
+
logSuccess('hidden');
|
|
314
|
+
logWarn('hidden');
|
|
315
|
+
logProgress('hidden');
|
|
316
|
+
handleCommandError(new CLIError('visible error', { hint: 'visible recovery' }));
|
|
317
|
+
assert.equal(capture.output.stdout, '');
|
|
318
|
+
assert.doesNotMatch(capture.output.stderr, /hidden/u);
|
|
319
|
+
assert.match(capture.output.stderr, /visible error/u);
|
|
320
|
+
assert.match(capture.output.stderr, /visible recovery/u);
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
capture.restore();
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
//# sourceMappingURL=stdoutRegression.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdoutRegression.test.js","sourceRoot":"","sources":["../src/stdoutRegression.test.ts"],"names":[],"mappings":"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"}
|
package/dist/verification.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { type
|
|
2
|
+
import { type RepositoryClassificationReceipt, type RepositoryStageAggregate, type RepositoryStageReceipt } from './delivery/legacy.js';
|
|
3
3
|
export interface VerificationRun {
|
|
4
4
|
aggregate: RepositoryStageAggregate;
|
|
5
5
|
classification: RepositoryClassificationReceipt;
|
|
@@ -131,30 +131,6 @@ export declare function runStageCommand(repoRoot: string, argv: readonly string[
|
|
|
131
131
|
failedOutput?(bytes: Buffer): string;
|
|
132
132
|
stdoutOnly?: boolean;
|
|
133
133
|
}): Promise<Buffer>;
|
|
134
|
-
export declare function verifyIssue(input: {
|
|
135
|
-
personalAuth?: boolean;
|
|
136
|
-
admittedResourceClasses?: readonly string[];
|
|
137
|
-
issueNumber: number;
|
|
138
|
-
repoRoot: string;
|
|
139
|
-
resourceBounds?: VerificationResourceBounds;
|
|
140
|
-
signal?: AbortSignal;
|
|
141
|
-
}): Promise<VerificationRun>;
|
|
142
|
-
export declare function createIssuePhaseEvidence(input: {
|
|
143
|
-
personalAuth?: boolean;
|
|
144
|
-
approval?: RepositoryApprovalBinding;
|
|
145
|
-
issueNumber: number;
|
|
146
|
-
mergeReadback?: RepositoryMergeReadback;
|
|
147
|
-
phase: 'verify' | 'publish' | 'merge';
|
|
148
|
-
repoRoot: string;
|
|
149
|
-
}): Promise<RepositoryDeliveryEvidence>;
|
|
150
|
-
export declare function loadVerifiedRun(repoRoot: string, issueNumber: number): VerificationRun;
|
|
151
|
-
/** @internal Preservation-only read; the continuation owner validates custody and terminal lineage. */
|
|
152
|
-
export declare function loadHistoricalMergedRun(repoRoot: string, headSha: string): {
|
|
153
|
-
run: VerificationRun;
|
|
154
|
-
path: string;
|
|
155
|
-
};
|
|
156
|
-
/** Recover an exact merged run after worktree removal interrupted terminal recording. */
|
|
157
|
-
export declare function loadRemovedMergedRun(primaryRepoRoot: string, issueNumber: number): VerificationRun;
|
|
158
134
|
declare const SourceArtifactSchema: z.ZodObject<{
|
|
159
135
|
path: z.ZodString;
|
|
160
136
|
digest: z.ZodString;
|
|
@@ -290,8 +266,6 @@ declare const IssueSourcePhaseReceiptSchema: z.ZodObject<{
|
|
|
290
266
|
}, z.core.$strict>>;
|
|
291
267
|
}, z.core.$strict>;
|
|
292
268
|
export type IssueSourcePhaseReceipt = z.infer<typeof IssueSourcePhaseReceiptSchema>;
|
|
293
|
-
/** Run an authorized, frozen source graph under the registered issue's existing writer fence. */
|
|
294
|
-
export declare function withIssueSourcePhase(supplied: IssueSourcePhaseInput, operation: (context: IssueSourcePhaseContext) => Promise<void>): Promise<IssueSourcePhaseReceipt>;
|
|
295
269
|
/** @internal Runtime setup shares the existing writer, ownership handshake and bounded command runner. */
|
|
296
270
|
export declare function withRuntimeSetupWriter<T>(root: string, operation: (runner: {
|
|
297
271
|
assertQuiescent(): void;
|