@aviaratech/ai-delivery 0.3.20 → 0.3.21
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/README.md +77 -1
- package/dist/agent.d.ts +4 -1
- package/dist/agent.js +2 -1
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/cliResult.test.js +28 -0
- package/dist/cliResult.test.js.map +1 -1
- package/dist/dispatch.js +16 -6
- package/dist/dispatch.js.map +1 -1
- package/dist/issue.d.ts +15 -0
- package/dist/issue.js +82 -1
- package/dist/issue.js.map +1 -1
- package/dist/issueJournal.d.ts +104 -0
- package/dist/issueJournal.js +145 -0
- package/dist/issueJournal.js.map +1 -0
- package/dist/issueJournal.test.d.ts +1 -0
- package/dist/issueJournal.test.js +223 -0
- package/dist/issueJournal.test.js.map +1 -0
- package/dist/lifecycle.test.js +66 -6
- package/dist/lifecycle.test.js.map +1 -1
- package/dist/mcp/tools.d.ts +34 -0
- package/dist/mcp/tools.js +7 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/pr.d.ts +1 -1
- package/dist/pr.js +23 -0
- package/dist/pr.js.map +1 -1
- package/dist/setup.test.js +4 -2
- package/dist/setup.test.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
- package/plugins/ai-delivery/.claude-plugin/plugin.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issueJournal.test.js","sourceRoot":"","sources":["../src/issueJournal.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lifecycle.test.js
CHANGED
|
@@ -4299,7 +4299,7 @@ exec "${realGit}" "$@"
|
|
|
4299
4299
|
process.env.PATH = originalPath;
|
|
4300
4300
|
rmSync(root, { recursive: true, force: true });
|
|
4301
4301
|
}
|
|
4302
|
-
},
|
|
4302
|
+
}, 0);
|
|
4303
4303
|
test.each(['runtime', 'primary-policy', 'witness', 'sibling', 'foreign-repository', 'missing-source'])('source-bound dispatch rejects invalid %s before running candidate stages', async (invalid) => {
|
|
4304
4304
|
const { root, runtimeEntryPath, counter } = await fixture();
|
|
4305
4305
|
let foreignRoot;
|
|
@@ -4626,6 +4626,7 @@ test.each([
|
|
|
4626
4626
|
});
|
|
4627
4627
|
test('MCP exposes one implementation surface for native lifecycle commands', () => {
|
|
4628
4628
|
assert.deepEqual(AI_DELIVERY_MCP_TOOLS.map((tool) => tool.name), [
|
|
4629
|
+
'issue_comment',
|
|
4629
4630
|
'runtime_stage',
|
|
4630
4631
|
'runtime_admit',
|
|
4631
4632
|
'issue_create',
|
|
@@ -4645,6 +4646,17 @@ test('MCP exposes one implementation surface for native lifecycle commands', ()
|
|
|
4645
4646
|
'issue_worktree_transition_apply',
|
|
4646
4647
|
]);
|
|
4647
4648
|
const validInputs = {
|
|
4649
|
+
issue_comment: {
|
|
4650
|
+
issueNumber: 17,
|
|
4651
|
+
kind: 'start',
|
|
4652
|
+
summary: 'Implementation started.',
|
|
4653
|
+
status: 'In progress',
|
|
4654
|
+
outcome: 'Deliver validation',
|
|
4655
|
+
keyNumbers: [],
|
|
4656
|
+
evidence: [],
|
|
4657
|
+
nextStep: 'Run checks',
|
|
4658
|
+
nextDate: '2026-10-09',
|
|
4659
|
+
},
|
|
4648
4660
|
issue_create: { title: 'Synthetic tracking parent' },
|
|
4649
4661
|
issue_update: { issueNumber: 17, park: true },
|
|
4650
4662
|
issue_ready_check: { issueNumber: 17 },
|
|
@@ -4725,6 +4737,7 @@ async function syntheticLifecycle(routing) {
|
|
|
4725
4737
|
body: `## Outcome\nDeliver a verified synthetic change to the local repository.\n\n## Scope\n- \`artifact.txt\`\n\n## Acceptance Criteria\n- [ ] Change is verified\n- [ ] Review and merge are recorded\n\n## Verification\nRun \`node --version\`.`,
|
|
4726
4738
|
state: 'open',
|
|
4727
4739
|
html_url: 'https://example.test/issues/17',
|
|
4740
|
+
created_at: '2026-10-01T00:00:00Z',
|
|
4728
4741
|
type: { name: 'Task' },
|
|
4729
4742
|
};
|
|
4730
4743
|
let issuePoints;
|
|
@@ -4762,7 +4775,9 @@ async function syntheticLifecycle(routing) {
|
|
|
4762
4775
|
let nativeTimelineCalls = 0;
|
|
4763
4776
|
let nativePrRepository;
|
|
4764
4777
|
const continuationComments = [];
|
|
4778
|
+
const journalComments = [];
|
|
4765
4779
|
const createPayloads = [];
|
|
4780
|
+
let loseNextJournalResponse = false;
|
|
4766
4781
|
const statuses = { Queued: 'STATUS-0', Active: 'STATUS-1', Waiting: 'STATUS-2', Shipped: 'STATUS-3' };
|
|
4767
4782
|
const statusName = (option) => Object.entries(statuses).find(([, id]) => id === option)?.[0];
|
|
4768
4783
|
const pageInfo = { endCursor: null, hasNextPage: false };
|
|
@@ -5044,9 +5059,24 @@ async function syntheticLifecycle(routing) {
|
|
|
5044
5059
|
data: nativeTimelinePages?.[input.page - 1] ?? (input.page === 1 ? [nativeReference()] : []),
|
|
5045
5060
|
};
|
|
5046
5061
|
},
|
|
5047
|
-
listComments: async () => ({ data: continuationComments }),
|
|
5062
|
+
listComments: async () => ({ data: [...continuationComments, ...journalComments] }),
|
|
5063
|
+
createComment: async (input) => {
|
|
5064
|
+
const data = {
|
|
5065
|
+
id: 1000 + journalComments.length,
|
|
5066
|
+
body: input.body,
|
|
5067
|
+
html_url: `https://example.test/issues/17#issuecomment-${String(1000 + journalComments.length)}`,
|
|
5068
|
+
issue_url: 'https://api.example.test/repos/example/widget/issues/17',
|
|
5069
|
+
user: { login: authenticatedAuthor },
|
|
5070
|
+
};
|
|
5071
|
+
journalComments.push(data);
|
|
5072
|
+
if (loseNextJournalResponse) {
|
|
5073
|
+
loseNextJournalResponse = false;
|
|
5074
|
+
throw new Error('Synthetic journal response lost');
|
|
5075
|
+
}
|
|
5076
|
+
return { data };
|
|
5077
|
+
},
|
|
5048
5078
|
getComment: async (input) => ({
|
|
5049
|
-
data: continuationComments.find((comment) => comment.id === input.comment_id),
|
|
5079
|
+
data: [...continuationComments, ...journalComments].find((comment) => comment.id === input.comment_id),
|
|
5050
5080
|
}),
|
|
5051
5081
|
create: async (input) => {
|
|
5052
5082
|
calls.push('issue:create');
|
|
@@ -5314,7 +5344,7 @@ async function syntheticLifecycle(routing) {
|
|
|
5314
5344
|
parentIssueNumber = null;
|
|
5315
5345
|
projectStatus = null;
|
|
5316
5346
|
calls.length = 0;
|
|
5317
|
-
await assert.rejects(startTrackedIssue(context, { issueNumber, resumeCreated: true }), /requires issueNumber and develop
|
|
5347
|
+
await assert.rejects(startTrackedIssue(context, { issueNumber, resumeCreated: true }), /requires issueNumber and an explicit develop boolean/u);
|
|
5318
5348
|
await assert.rejects(createIssue(context, {
|
|
5319
5349
|
body: issue.body,
|
|
5320
5350
|
blockedBy: [9],
|
|
@@ -5351,14 +5381,19 @@ async function syntheticLifecycle(routing) {
|
|
|
5351
5381
|
trackingParent = false;
|
|
5352
5382
|
issue.state = 'closed';
|
|
5353
5383
|
await assert.rejects(developIssue(context, issueNumber), /closed/u);
|
|
5384
|
+
assert.equal(journalComments.length, 0, 'failed readiness must not publish a start journal');
|
|
5354
5385
|
issue.state = 'open';
|
|
5355
5386
|
assert.equal((await readyCheck(context, issueNumber)).ready, true);
|
|
5356
5387
|
if (routing.committedDescendantContinuation)
|
|
5357
5388
|
await prepareIssueWorktree({ identity: 'synthetic-preparer', issueNumber, repoRoot: root });
|
|
5389
|
+
loseNextJournalResponse = true;
|
|
5390
|
+
await assert.rejects(startTrackedIssue(context, { issueNumber }), /journal response lost/u);
|
|
5358
5391
|
const started = await startTrackedIssue(context, { issueNumber });
|
|
5359
5392
|
assert.equal(started.mode, 'existing-issue');
|
|
5360
5393
|
assert.equal(started.issueNumber, issueNumber);
|
|
5361
5394
|
assert.equal(started.title, issue.title);
|
|
5395
|
+
assert.equal(journalComments.length, 1, 'successful start publishes one journal');
|
|
5396
|
+
assert.match(journalComments[0].body, /\*\*Kind:\*\* start/u);
|
|
5362
5397
|
const row = started;
|
|
5363
5398
|
assert.equal(projectStatus, 'Active');
|
|
5364
5399
|
const parked = await updateIssue(context, { issueNumber, park: true });
|
|
@@ -5366,6 +5401,7 @@ async function syntheticLifecycle(routing) {
|
|
|
5366
5401
|
assert.equal(existsSync(row.path), true);
|
|
5367
5402
|
assert.equal((await updateIssue(context, { issueNumber, title: issue.title })).projectStatus, 'Todo');
|
|
5368
5403
|
await developIssue(context, issueNumber);
|
|
5404
|
+
assert.equal(journalComments.length, 1, 'repeat develop reuses the start journal');
|
|
5369
5405
|
assert.equal(projectStatus, 'Active');
|
|
5370
5406
|
const blockedUpdate = await updateIssue(context, { issueNumber, blockedBy: [9] });
|
|
5371
5407
|
assert.deepEqual(blockedUpdate.blockedBy, [9]);
|
|
@@ -6346,15 +6382,23 @@ exec "${realGit}" "$@"
|
|
|
6346
6382
|
const blockedRecordPath = join(gitCommonDir(root), 'ai-delivery', 'deliveries.json');
|
|
6347
6383
|
mkdirSync(blockedRecordPath);
|
|
6348
6384
|
await assert.rejects(finishIssue(context, { issueNumber, prNumber, strategy: 'merge' }), /Delivery record store is invalid/u);
|
|
6385
|
+
assert.equal(journalComments.filter((comment) => comment.body.includes('**Kind:** closeout')).length, 0, 'failed finish must not claim closeout');
|
|
6349
6386
|
assert.equal(existsSync(row.path), false);
|
|
6350
6387
|
rmSync(blockedRecordPath, { recursive: true });
|
|
6351
6388
|
const dispatchClient = enableDispatch();
|
|
6352
6389
|
execution.runtimeEntryPath = runtimeEntryPath;
|
|
6353
6390
|
const terminalMerge = (await executeTool('issue_pr_merge', { issueNumber, prNumber, strategy: 'merge' }, execution));
|
|
6354
6391
|
assert.equal(terminalMerge.mergeSha, git(remote, 'rev-parse', 'refs/heads/main'));
|
|
6392
|
+
loseNextJournalResponse = true;
|
|
6393
|
+
await assert.rejects(executeTool('issue_finish', { issueNumber, prNumber, strategy: 'merge' }, execution), /journal response lost/u);
|
|
6355
6394
|
const finished = (await executeTool('issue_finish', { issueNumber, prNumber, strategy: 'merge' }, execution));
|
|
6356
6395
|
assert.equal(finished.issueClosed, true);
|
|
6357
6396
|
assert.equal(finished.cleaned, true);
|
|
6397
|
+
const closeouts = journalComments.filter((comment) => comment.body.includes('**Kind:** closeout'));
|
|
6398
|
+
assert.equal(closeouts.length, 1);
|
|
6399
|
+
assert.match(closeouts[0].body, /Change is verified/u);
|
|
6400
|
+
assert.match(closeouts[0].body, /Review and merge are recorded/u);
|
|
6401
|
+
assert.match(closeouts[0].body, /https:\/\/example.test\/pulls\/23/u);
|
|
6358
6402
|
assert.equal(projectStatus, 'Shipped');
|
|
6359
6403
|
assert.equal(git(remote, 'rev-parse', 'refs/heads/main'), finished.mergeSha);
|
|
6360
6404
|
assert.equal(existsSync(row.path), false);
|
|
@@ -6362,15 +6406,31 @@ exec "${realGit}" "$@"
|
|
|
6362
6406
|
assert.equal(getDeliveryRecords(root)[0]?.points, 4);
|
|
6363
6407
|
assert.deepEqual(calls, ['issue:create', 'review:create', 'git:createCommit']);
|
|
6364
6408
|
assert.deepEqual(await executeTool('issue_finish', { issueNumber, prNumber, strategy: 'merge' }, execution), finished);
|
|
6409
|
+
assert.equal(journalComments.filter((comment) => comment.body.includes('**Kind:** closeout')).length, 1, 'repeated finish reuses closeout');
|
|
6365
6410
|
await assert.rejects(executeTool('issue_finish', { issueNumber, prNumber: 24 }, execution), /exact terminal merge receipts/u);
|
|
6366
6411
|
dispatchClient.mockRestore();
|
|
6367
6412
|
assert.equal(getDeliveryRecords(root).length, 1);
|
|
6368
6413
|
await assert.rejects(finishIssue(context, { issueNumber, prNumber: 24 }), /exact terminal merge receipts/u);
|
|
6369
|
-
const
|
|
6414
|
+
const readyBody = issue.body;
|
|
6415
|
+
issue.created_at = '2026-10-08T00:00:00Z';
|
|
6416
|
+
issue.state = 'open';
|
|
6417
|
+
const beforeCreationOnly = calls.filter((call) => call === 'issue:create').length;
|
|
6418
|
+
const beforeCreationJournal = journalComments.length;
|
|
6419
|
+
loseNextJournalResponse = true;
|
|
6420
|
+
const creationOnlyFailure = (await startTrackedIssue(context, { request: 'New synthetic task' }));
|
|
6421
|
+
assert.equal(creationOnlyFailure.status, 'created-not-started');
|
|
6422
|
+
assert.equal(creationOnlyFailure.createdIssue.number, issueNumber);
|
|
6423
|
+
assert.equal(creationOnlyFailure.failure.phase, 'journal');
|
|
6424
|
+
assert.equal(creationOnlyFailure.safeResume.arguments.develop, false);
|
|
6425
|
+
const newlyStarted = await startTrackedIssue(context, creationOnlyFailure.safeResume.arguments);
|
|
6370
6426
|
assert.equal(newlyStarted.mode, 'created-issue');
|
|
6371
6427
|
assert.equal(newlyStarted.issueNumber, issueNumber);
|
|
6428
|
+
assert.equal(calls.filter((call) => call === 'issue:create').length, beforeCreationOnly + 1);
|
|
6429
|
+
assert.equal(journalComments.length, beforeCreationJournal + 1);
|
|
6430
|
+
assert.equal(existsSync(row.path), false, 'creation-only journal recovery must not develop the issue');
|
|
6372
6431
|
assert.equal(createPayloads.at(-1)?.body, 'New synthetic task');
|
|
6373
6432
|
assert.equal(issuePoints, 2);
|
|
6433
|
+
issue.body = readyBody;
|
|
6374
6434
|
issue.state = 'closed';
|
|
6375
6435
|
const beforeDevelopment = calls.filter((call) => call === 'issue:create').length;
|
|
6376
6436
|
const developmentFailure = (await startTrackedIssue(context, {
|
|
@@ -6413,7 +6473,7 @@ test.each([
|
|
|
6413
6473
|
{ remote: 'origin', divergentOrigin: false },
|
|
6414
6474
|
{ remote: 'upstream', divergentOrigin: false },
|
|
6415
6475
|
{ remote: 'upstream', divergentOrigin: true },
|
|
6416
|
-
])('synthetic lifecycle finishes with remote $remote and divergent origin $divergentOrigin', syntheticLifecycle,
|
|
6476
|
+
])('synthetic lifecycle finishes with remote $remote and divergent origin $divergentOrigin', syntheticLifecycle, 0);
|
|
6417
6477
|
test('supported develop resumes an open merged issue under the same owner and preserves prior receipts', { timeout: 0 }, async () => syntheticLifecycle({ remote: 'origin', divergentOrigin: false, mergedContinuation: true }));
|
|
6418
6478
|
test('supported develop reconciles authenticated host custody for an already committed descendant', { timeout: 0 }, async () => {
|
|
6419
6479
|
const input = { remote: 'origin', divergentOrigin: false, committedDescendantContinuation: true };
|