@aviaratech/ai-delivery 0.3.22 → 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 (131) hide show
  1. package/CONTRIBUTING.md +9 -0
  2. package/README.md +77 -442
  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 +59 -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.d.ts +4 -1
  14. package/dist/delivery/common.js +56 -8
  15. package/dist/delivery/common.js.map +1 -1
  16. package/dist/delivery/delivery.test.js +2 -3
  17. package/dist/delivery/delivery.test.js.map +1 -1
  18. package/dist/delivery/index.d.ts +0 -6
  19. package/dist/delivery/index.js +0 -3
  20. package/dist/delivery/index.js.map +1 -1
  21. package/dist/delivery/legacy.d.ts +8 -0
  22. package/dist/delivery/legacy.js +5 -0
  23. package/dist/delivery/legacy.js.map +1 -0
  24. package/dist/delivery/policy.js +2 -13
  25. package/dist/delivery/policy.js.map +1 -1
  26. package/dist/delivery/stage.d.ts +6 -0
  27. package/dist/delivery/stage.js +11 -2
  28. package/dist/delivery/stage.js.map +1 -1
  29. package/dist/directoryIndependent.test.d.ts +1 -0
  30. package/dist/directoryIndependent.test.js +262 -0
  31. package/dist/directoryIndependent.test.js.map +1 -0
  32. package/dist/dispatch.d.ts +29 -3
  33. package/dist/dispatch.js +160 -457
  34. package/dist/dispatch.js.map +1 -1
  35. package/dist/genericCompatibility.test.js +0 -35
  36. package/dist/genericCompatibility.test.js.map +1 -1
  37. package/dist/git.js +10 -3
  38. package/dist/git.js.map +1 -1
  39. package/dist/gitProcess.d.ts +6 -0
  40. package/dist/gitProcess.js +56 -0
  41. package/dist/gitProcess.js.map +1 -0
  42. package/dist/github/discovery.d.ts +1 -0
  43. package/dist/github/discovery.js +1 -1
  44. package/dist/github/discovery.js.map +1 -1
  45. package/dist/github/discovery.test.js +25 -20
  46. package/dist/github/discovery.test.js.map +1 -1
  47. package/dist/github/nativeIssueMetadata.d.ts +2 -2
  48. package/dist/github/nativeIssueMetadata.js.map +1 -1
  49. package/dist/github/projectDelivery.d.ts +1 -1
  50. package/dist/github/projectDelivery.js.map +1 -1
  51. package/dist/github/repo.d.ts +7 -1
  52. package/dist/github/repo.js +58 -2
  53. package/dist/github/repo.js.map +1 -1
  54. package/dist/issue.d.ts +11 -6
  55. package/dist/issue.js +136 -319
  56. package/dist/issue.js.map +1 -1
  57. package/dist/issueJournal.d.ts +1 -1
  58. package/dist/lifecycle.test.js +40 -7371
  59. package/dist/lifecycle.test.js.map +1 -1
  60. package/dist/logger.js +4 -4
  61. package/dist/logger.js.map +1 -1
  62. package/dist/mcp/index.js +2 -1
  63. package/dist/mcp/index.js.map +1 -1
  64. package/dist/mcp/tools.d.ts +27 -42
  65. package/dist/mcp/tools.js +34 -42
  66. package/dist/mcp/tools.js.map +1 -1
  67. package/dist/pluginInstaller.d.ts +51 -0
  68. package/dist/pluginInstaller.js +774 -0
  69. package/dist/pluginInstaller.js.map +1 -0
  70. package/dist/pluginInstaller.test.d.ts +1 -0
  71. package/dist/pluginInstaller.test.js +543 -0
  72. package/dist/pluginInstaller.test.js.map +1 -0
  73. package/dist/pluginPackaging.test.d.ts +1 -0
  74. package/dist/pluginPackaging.test.js +245 -0
  75. package/dist/pluginPackaging.test.js.map +1 -0
  76. package/dist/pr.d.ts +66 -114
  77. package/dist/pr.js +288 -1108
  78. package/dist/pr.js.map +1 -1
  79. package/dist/pr.test.js +295 -237
  80. package/dist/pr.test.js.map +1 -1
  81. package/dist/releaseReconciliation.test.d.ts +1 -0
  82. package/dist/releaseReconciliation.test.js +314 -0
  83. package/dist/releaseReconciliation.test.js.map +1 -0
  84. package/dist/review.d.ts +37 -7
  85. package/dist/review.js +106 -45
  86. package/dist/review.js.map +1 -1
  87. package/dist/review.test.js +30 -71
  88. package/dist/review.test.js.map +1 -1
  89. package/dist/services/agentReadinessService.d.ts +1 -1
  90. package/dist/services/agentReadinessService.js +2 -0
  91. package/dist/services/agentReadinessService.js.map +1 -1
  92. package/dist/services/deliveryAdmission.d.ts +4 -4
  93. package/dist/services/deliveryAdmission.js.map +1 -1
  94. package/dist/setup.d.ts +1 -0
  95. package/dist/setup.js +71 -10
  96. package/dist/setup.js.map +1 -1
  97. package/dist/setup.test.js +594 -204
  98. package/dist/setup.test.js.map +1 -1
  99. package/dist/start.test.d.ts +1 -0
  100. package/dist/start.test.js +72 -0
  101. package/dist/start.test.js.map +1 -0
  102. package/dist/stdoutRegression.test.d.ts +1 -0
  103. package/dist/stdoutRegression.test.js +326 -0
  104. package/dist/stdoutRegression.test.js.map +1 -0
  105. package/dist/verification.d.ts +62 -27
  106. package/dist/verification.js +172 -1337
  107. package/dist/verification.js.map +1 -1
  108. package/dist/worktree.d.ts +1 -31
  109. package/dist/worktree.js +5 -200
  110. package/dist/worktree.js.map +1 -1
  111. package/dist/worktreeTransition.d.ts +1 -1
  112. package/dist/worktreeTransition.js +10 -5
  113. package/dist/worktreeTransition.js.map +1 -1
  114. package/dist/worktreeTransition.test.js +2 -3
  115. package/dist/worktreeTransition.test.js.map +1 -1
  116. package/package.json +4 -4
  117. package/plugins/ai-delivery/.claude-plugin/plugin.json +6 -1
  118. package/plugins/ai-delivery/LICENSE +21 -0
  119. package/plugins/ai-delivery/README.md +4 -2
  120. package/plugins/ai-delivery/dist/mcp-launcher.js +19 -8
  121. package/plugins/ai-delivery/mcp.json +10 -0
  122. package/plugins/ai-delivery/plugin.json +10 -0
  123. package/plugins/ai-delivery/runtime/dist/THIRD-PARTY-NOTICES.md +1010 -0
  124. package/plugins/ai-delivery/runtime/dist/cli.js +276 -0
  125. package/plugins/ai-delivery/runtime/package.json +13 -0
  126. package/plugins/ai-delivery/skills/intake-create/SKILL.md +1 -1
  127. package/plugins/ai-delivery/skills/pr-handoff/SKILL.md +14 -21
  128. package/plugins/ai-delivery/skills/worktree-lifecycle/SKILL.md +12 -23
  129. package/dist/services/deliveryRecordService.d.ts +0 -47
  130. package/dist/services/deliveryRecordService.js +0 -199
  131. 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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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { type RepositoryApprovalBinding, type RepositoryClassificationReceipt, type RepositoryDeliveryEvidence, type RepositoryMergeReadback, type RepositoryStageAggregate, type RepositoryStageReceipt } from './delivery/index.js';
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;
@@ -35,8 +35,58 @@ declare const ResourceSummarySchema: z.ZodObject<{
35
35
  sampleCount: z.ZodNumber;
36
36
  }, z.core.$strict>;
37
37
  export type VerificationResourceSummary = z.infer<typeof ResourceSummarySchema>;
38
+ interface ResourceSample {
39
+ aggregateRssBytes: number;
40
+ freeDiskBytes: number;
41
+ newOutputBytes?: number;
42
+ ownedProcessCount: number;
43
+ }
44
+ declare const OutputGateSchema: z.ZodObject<{
45
+ directory: z.ZodString;
46
+ id: z.ZodUUID;
47
+ owner: z.ZodObject<{
48
+ pid: z.ZodNumber;
49
+ identity: z.ZodString;
50
+ }, z.core.$strict>;
51
+ }, z.core.$strict>;
52
+ type OutputGate = z.infer<typeof OutputGateSchema>;
38
53
  /** Run a real filesystem-negative fixture between strict scans; the callback must clean it up before returning. */
39
54
  export declare function withVerificationFilesystemFixture<T>(operation: () => T | Promise<T>): Promise<T>;
55
+ interface OutputBaseline {
56
+ gate?: OutputGate;
57
+ baselineId: string;
58
+ files: Map<string, number>;
59
+ links: Map<string, {
60
+ identity: string;
61
+ target: string;
62
+ missing: boolean;
63
+ }>;
64
+ roots: string[];
65
+ }
66
+ interface ObservedProcess {
67
+ identity: string;
68
+ pgid: number;
69
+ pid: number;
70
+ ppid: number;
71
+ rssBytes: number;
72
+ status: string;
73
+ }
74
+ export interface OwnedProcessState {
75
+ rootIdentity?: string;
76
+ rootPid: number;
77
+ sampled: boolean;
78
+ tracked: Map<number, ObservedProcess>;
79
+ }
80
+ export declare function processSnapshot(): Map<number, ObservedProcess>;
81
+ export declare function confirmOwnedCleanup(state: OwnedProcessState): Promise<void>;
82
+ /** Signal only birth identities established by this command, including observed detached children. */
83
+ export declare function terminateOwnedProcesses(state: OwnedProcessState): void;
84
+ interface VerificationWriter {
85
+ starting(): void;
86
+ observed(state: OwnedProcessState): void;
87
+ idle(): void;
88
+ assertQuiescent(): void;
89
+ }
40
90
  /** @internal Durable transition evidence must precede changes to the existing writer slot. */
41
91
  export interface WorktreeTransitionWriterLeaseInput {
42
92
  repoRoot: string;
@@ -71,30 +121,16 @@ export declare function retainedWorktreeTransitionDependencyManifests(distDirect
71
121
  }[];
72
122
  /** @internal Original manifests validate as history and cannot authorize current verification. */
73
123
  export declare function readWorktreeTransitionRun(bytes: Buffer): VerificationRun;
74
- export declare function verifyIssue(input: {
75
- personalAuth?: boolean;
76
- admittedResourceClasses?: readonly string[];
77
- issueNumber: number;
78
- repoRoot: string;
79
- resourceBounds?: VerificationResourceBounds;
80
- signal?: AbortSignal;
81
- }): Promise<VerificationRun>;
82
- export declare function createIssuePhaseEvidence(input: {
83
- personalAuth?: boolean;
84
- approval?: RepositoryApprovalBinding;
85
- issueNumber: number;
86
- mergeReadback?: RepositoryMergeReadback;
87
- phase: 'verify' | 'publish' | 'merge';
88
- repoRoot: string;
89
- }): Promise<RepositoryDeliveryEvidence>;
90
- export declare function loadVerifiedRun(repoRoot: string, issueNumber: number): VerificationRun;
91
- /** @internal Preservation-only read; the continuation owner validates custody and terminal lineage. */
92
- export declare function loadHistoricalMergedRun(repoRoot: string, headSha: string): {
93
- run: VerificationRun;
94
- path: string;
95
- };
96
- /** Recover an exact merged run after worktree removal interrupted terminal recording. */
97
- export declare function loadRemovedMergedRun(primaryRepoRoot: string, issueNumber: number): VerificationRun;
124
+ export declare function runStageCommand(repoRoot: string, argv: readonly string[], abortSignal?: AbortSignal, onRunning?: (capturedOutputBytes: number, resource?: ResourceSample, reason?: string) => void, resourceBounds?: VerificationResourceBounds, baseline?: OutputBaseline, onResourceSample?: (sample: ResourceSample) => void, writer?: VerificationWriter, execution?: {
125
+ environment: NodeJS.ProcessEnv;
126
+ cwd?: string;
127
+ maxCapturedOutputBytes?: number;
128
+ includeControllerTree?: boolean;
129
+ onCaptured?(bytes: number): void;
130
+ onCleanupFailure?(reason: string): void;
131
+ failedOutput?(bytes: Buffer): string;
132
+ stdoutOnly?: boolean;
133
+ }): Promise<Buffer>;
98
134
  declare const SourceArtifactSchema: z.ZodObject<{
99
135
  path: z.ZodString;
100
136
  digest: z.ZodString;
@@ -230,11 +266,10 @@ declare const IssueSourcePhaseReceiptSchema: z.ZodObject<{
230
266
  }, z.core.$strict>>;
231
267
  }, z.core.$strict>;
232
268
  export type IssueSourcePhaseReceipt = z.infer<typeof IssueSourcePhaseReceiptSchema>;
233
- /** Run an authorized, frozen source graph under the registered issue's existing writer fence. */
234
- export declare function withIssueSourcePhase(supplied: IssueSourcePhaseInput, operation: (context: IssueSourcePhaseContext) => Promise<void>): Promise<IssueSourcePhaseReceipt>;
235
269
  /** @internal Runtime setup shares the existing writer, ownership handshake and bounded command runner. */
236
270
  export declare function withRuntimeSetupWriter<T>(root: string, operation: (runner: {
237
271
  assertQuiescent(): void;
272
+ bindCapturedOutput(stageId: string): void;
238
273
  checkResources: () => Promise<void>;
239
274
  signal: AbortSignal;
240
275
  run(argv: readonly string[], bounds: VerificationResourceBounds, signal?: AbortSignal, environment?: NodeJS.ProcessEnv, cwd?: string): Promise<Buffer>;