hungry-ghost-hive 0.47.2 → 0.47.4

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 (41) hide show
  1. package/dist/cli/commands/auth.js +4 -4
  2. package/dist/cli/commands/auth.js.map +1 -1
  3. package/dist/cli/commands/auth.test.js +42 -0
  4. package/dist/cli/commands/auth.test.js.map +1 -1
  5. package/dist/cli/commands/pr.d.ts.map +1 -1
  6. package/dist/cli/commands/pr.js +0 -22
  7. package/dist/cli/commands/pr.js.map +1 -1
  8. package/dist/cli/commands/pr.test.js +28 -0
  9. package/dist/cli/commands/pr.test.js.map +1 -1
  10. package/dist/cli/wizard/init-wizard.js +17 -2
  11. package/dist/cli/wizard/init-wizard.js.map +1 -1
  12. package/dist/cli/wizard/init-wizard.test.js +10 -4
  13. package/dist/cli/wizard/init-wizard.test.js.map +1 -1
  14. package/dist/config/schema.d.ts +19 -0
  15. package/dist/config/schema.d.ts.map +1 -1
  16. package/dist/config/schema.js +4 -0
  17. package/dist/config/schema.js.map +1 -1
  18. package/dist/context-files/index.test.js +1 -1
  19. package/dist/context-files/index.test.js.map +1 -1
  20. package/dist/test-validation.test.d.ts +2 -0
  21. package/dist/test-validation.test.d.ts.map +1 -0
  22. package/dist/test-validation.test.js +20 -0
  23. package/dist/test-validation.test.js.map +1 -0
  24. package/dist/utils/auto-merge.d.ts +8 -0
  25. package/dist/utils/auto-merge.d.ts.map +1 -1
  26. package/dist/utils/auto-merge.js +138 -0
  27. package/dist/utils/auto-merge.js.map +1 -1
  28. package/dist/utils/auto-merge.test.js +145 -1
  29. package/dist/utils/auto-merge.test.js.map +1 -1
  30. package/package.json +1 -1
  31. package/src/cli/commands/auth.test.ts +51 -0
  32. package/src/cli/commands/auth.ts +4 -4
  33. package/src/cli/commands/pr.test.ts +48 -0
  34. package/src/cli/commands/pr.ts +0 -30
  35. package/src/cli/wizard/init-wizard.test.ts +10 -4
  36. package/src/cli/wizard/init-wizard.ts +17 -2
  37. package/src/config/schema.ts +4 -0
  38. package/src/context-files/index.test.ts +1 -1
  39. package/src/test-validation.test.ts +24 -0
  40. package/src/utils/auto-merge.test.ts +213 -1
  41. package/src/utils/auto-merge.ts +179 -0
@@ -16,7 +16,7 @@ vi.mock('../connectors/project-management/operations.js', () => ({
16
16
  syncStatusForStory: vi.fn(),
17
17
  }));
18
18
  import { loadConfig } from '../config/loader.js';
19
- import { autoMergeApprovedPRs } from './auto-merge.js';
19
+ import { autoMergeApprovedPRs, checkPreexistingCIFailures } from './auto-merge.js';
20
20
  const mockLoadConfig = vi.mocked(loadConfig);
21
21
  describe('auto-merge functionality', () => {
22
22
  let db;
@@ -304,6 +304,150 @@ describe('auto-merge functionality', () => {
304
304
  expect(result).toBe(0);
305
305
  expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
306
306
  });
307
+ it('should bypass BLOCKED status when all CI failures are pre-existing on base branch', async () => {
308
+ const pr = createPullRequest(db, {
309
+ storyId,
310
+ teamId,
311
+ branchName: 'feature/preexisting-ci',
312
+ githubPrNumber: 555,
313
+ });
314
+ updatePullRequest(db, pr.id, { status: 'approved' });
315
+ mockLoadConfig.mockReturnValue({
316
+ integrations: {
317
+ autonomy: { level: 'full', allow_preexisting_ci_failures: true },
318
+ source_control: { provider: 'github' },
319
+ project_management: { provider: 'none' },
320
+ },
321
+ });
322
+ const mockExecSync = vi.fn();
323
+ // 1. gh pr view → BLOCKED but MERGEABLE
324
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
325
+ // 2. gh pr checks → one failing check
326
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
327
+ { name: 'build', state: 'SUCCESS' },
328
+ { name: 'lint', state: 'FAIL' },
329
+ ]));
330
+ // 3. gh pr view baseRefName
331
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
332
+ // 4. gh api base branch check-runs → same check failing
333
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
334
+ { name: 'build', conclusion: 'success' },
335
+ { name: 'lint', conclusion: 'failure' },
336
+ ]));
337
+ // 5. gh pr merge --admin → success
338
+ mockExecSync.mockReturnValueOnce(undefined);
339
+ vi.doMock('child_process', () => ({ execSync: mockExecSync }));
340
+ const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
341
+ const result = await autoMergeApprovedPRs('/mock/root', dbClient);
342
+ expect(result).toBe(1);
343
+ expect(getPullRequestById(db, pr.id)?.status).toBe('merged');
344
+ });
345
+ it('should not bypass BLOCKED status when PR has new CI failures not on base branch', async () => {
346
+ const pr = createPullRequest(db, {
347
+ storyId,
348
+ teamId,
349
+ branchName: 'feature/new-ci-failure',
350
+ githubPrNumber: 556,
351
+ });
352
+ updatePullRequest(db, pr.id, { status: 'approved' });
353
+ mockLoadConfig.mockReturnValue({
354
+ integrations: {
355
+ autonomy: { level: 'full', allow_preexisting_ci_failures: true },
356
+ source_control: { provider: 'github' },
357
+ project_management: { provider: 'none' },
358
+ },
359
+ });
360
+ const mockExecSync = vi.fn();
361
+ // 1. gh pr view → BLOCKED but MERGEABLE
362
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
363
+ // 2. gh pr checks → two failing checks
364
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
365
+ { name: 'build', state: 'FAIL' },
366
+ { name: 'lint', state: 'FAIL' },
367
+ ]));
368
+ // 3. gh pr view baseRefName
369
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
370
+ // 4. gh api base branch check-runs → only lint fails on base
371
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
372
+ { name: 'build', conclusion: 'success' },
373
+ { name: 'lint', conclusion: 'failure' },
374
+ ]));
375
+ vi.doMock('child_process', () => ({ execSync: mockExecSync }));
376
+ const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
377
+ const result = await autoMergeApprovedPRs('/mock/root', dbClient);
378
+ // Should not merge — 'build' is a new failure
379
+ expect(result).toBe(0);
380
+ // PR should be reset to approved (ci_blocked outcome)
381
+ expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
382
+ });
383
+ it('should skip BLOCKED PR when allow_preexisting_ci_failures is false', async () => {
384
+ const pr = createPullRequest(db, {
385
+ storyId,
386
+ teamId,
387
+ branchName: 'feature/ci-blocked-no-bypass',
388
+ githubPrNumber: 557,
389
+ });
390
+ updatePullRequest(db, pr.id, { status: 'approved' });
391
+ mockLoadConfig.mockReturnValue({
392
+ integrations: {
393
+ autonomy: { level: 'full', allow_preexisting_ci_failures: false },
394
+ source_control: { provider: 'github' },
395
+ project_management: { provider: 'none' },
396
+ },
397
+ });
398
+ const mockExecSync = vi.fn();
399
+ // gh pr view → BLOCKED but MERGEABLE
400
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
401
+ vi.doMock('child_process', () => ({ execSync: mockExecSync }));
402
+ const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
403
+ const result = await autoMergeApprovedPRs('/mock/root', dbClient);
404
+ expect(result).toBe(0);
405
+ expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
406
+ });
407
+ });
408
+ describe('checkPreexistingCIFailures', () => {
409
+ it('should return bypassed=true when all PR failures exist on base branch', () => {
410
+ const mockExecSync = vi.fn();
411
+ // gh pr checks
412
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
413
+ { name: 'build', state: 'SUCCESS' },
414
+ { name: 'lint', state: 'FAIL' },
415
+ { name: 'test', state: 'FAIL' },
416
+ ]));
417
+ // gh pr view baseRefName
418
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
419
+ // gh api check-runs
420
+ mockExecSync.mockReturnValueOnce(JSON.stringify([
421
+ { name: 'build', conclusion: 'success' },
422
+ { name: 'lint', conclusion: 'failure' },
423
+ { name: 'test', conclusion: 'failure' },
424
+ ]));
425
+ const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
426
+ expect(result.bypassed).toBe(true);
427
+ expect(result.bypassedChecks).toEqual(expect.arrayContaining(['lint', 'test']));
428
+ });
429
+ it('should return bypassed=false when PR has unique failures', () => {
430
+ const mockExecSync = vi.fn();
431
+ mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', state: 'FAIL' }]));
432
+ mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
433
+ mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', conclusion: 'success' }]));
434
+ const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
435
+ expect(result.bypassed).toBe(false);
436
+ });
437
+ it('should return bypassed=false when no PR checks are failing', () => {
438
+ const mockExecSync = vi.fn();
439
+ mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', state: 'SUCCESS' }]));
440
+ const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
441
+ expect(result.bypassed).toBe(false);
442
+ expect(result.bypassedChecks).toEqual([]);
443
+ });
444
+ it('should return bypassed=false when execSync throws', () => {
445
+ const mockExecSync = vi.fn().mockImplementation(() => {
446
+ throw new Error('gh not found');
447
+ });
448
+ const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
449
+ expect(result.bypassed).toBe(false);
450
+ });
307
451
  });
308
452
  });
309
453
  //# sourceMappingURL=auto-merge.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-merge.test.js","sourceRoot":"","sources":["../../src/utils/auto-merge.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-merge.test.js","sourceRoot":"","sources":["../../src/utils/auto-merge.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hungry-ghost-hive",
3
- "version": "0.47.2",
3
+ "version": "0.47.4",
4
4
  "description": "AI Agent Orchestrator - Manages agile software development teams of AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,6 +20,24 @@ vi.mock('../../auth/token-store.js', () => ({
20
20
  })),
21
21
  }));
22
22
 
23
+ vi.mock('../../auth/env-store.js', async () => {
24
+ const actual =
25
+ await vi.importActual<typeof import('../../auth/env-store.js')>('../../auth/env-store.js');
26
+ return {
27
+ ...actual,
28
+ loadEnvIntoProcess: vi.fn(),
29
+ writeEnvEntries: vi.fn(),
30
+ };
31
+ });
32
+
33
+ vi.mock('@inquirer/prompts', () => ({
34
+ input: vi.fn().mockResolvedValue('mock-value'),
35
+ }));
36
+
37
+ vi.mock('../../utils/open-browser.js', () => ({
38
+ openBrowser: vi.fn().mockResolvedValue(undefined),
39
+ }));
40
+
23
41
  let mockHiveRoot: string | null = null;
24
42
 
25
43
  vi.mock('../../utils/with-hive-context.js', () => ({
@@ -98,6 +116,39 @@ describe('auth command', () => {
98
116
  }
99
117
  }
100
118
  });
119
+
120
+ it('should construct TokenStore with root/.hive/.env (not root/.hive/.hive/.env)', async () => {
121
+ const { startJiraOAuthFlow, storeJiraTokens } = await import('../../auth/jira-oauth.js');
122
+ const { TokenStore } = await import('../../auth/token-store.js');
123
+
124
+ vi.mocked(startJiraOAuthFlow).mockResolvedValue({
125
+ accessToken: 'access',
126
+ refreshToken: 'refresh',
127
+ cloudId: 'cloud-id',
128
+ siteUrl: 'https://example.atlassian.net',
129
+ expiresIn: 3600,
130
+ });
131
+ vi.mocked(storeJiraTokens).mockResolvedValue(undefined);
132
+
133
+ process.env.JIRA_OAUTH_CLIENT_ID = 'test-client-id';
134
+ process.env.JIRA_OAUTH_CLIENT_SECRET = 'test-client-secret';
135
+
136
+ const jiraCmd = authCommand.commands.find(cmd => cmd.name() === 'jira');
137
+ expect(jiraCmd).toBeDefined();
138
+
139
+ try {
140
+ await jiraCmd!.parseAsync([], { from: 'user' });
141
+ } catch {
142
+ // command may exit; we only care about the TokenStore constructor call
143
+ }
144
+
145
+ const TokenStoreMock = vi.mocked(TokenStore);
146
+ expect(TokenStoreMock).toHaveBeenCalled();
147
+ const envPathArg = TokenStoreMock.mock.calls[0][0] as string;
148
+ // Must end with .hive/.env, never .hive/.hive/.env
149
+ expect(envPathArg).toMatch(/\.hive[/\\]\.env$/);
150
+ expect(envPathArg).not.toMatch(/\.hive[/\\]\.hive/);
151
+ });
101
152
  });
102
153
 
103
154
  describe('auth command structure', () => {
@@ -129,7 +129,7 @@ authCommand
129
129
  .description('Re-run GitHub OAuth Device Flow to update authentication token')
130
130
  .action(async () => {
131
131
  try {
132
- const { paths } = withHiveRoot(ctx => ctx);
132
+ const { root } = withHiveRoot(ctx => ctx);
133
133
  const clientId = process.env.GITHUB_OAUTH_CLIENT_ID;
134
134
  if (!clientId) {
135
135
  console.error(chalk.red('Error: GITHUB_OAUTH_CLIENT_ID environment variable is not set.'));
@@ -142,7 +142,7 @@ authCommand
142
142
 
143
143
  const result = await runGitHubDeviceFlow({
144
144
  clientId,
145
- rootDir: paths.hiveDir,
145
+ rootDir: root,
146
146
  });
147
147
 
148
148
  console.log();
@@ -166,7 +166,7 @@ authCommand
166
166
  .description('Re-run Jira OAuth 2.0 (3LO) to update authentication tokens')
167
167
  .action(async () => {
168
168
  try {
169
- const { root, paths } = withHiveRoot(ctx => ctx);
169
+ const { root } = withHiveRoot(ctx => ctx);
170
170
 
171
171
  // Load stored credentials from .hive/.env, then check env vars, then prompt
172
172
  loadEnvIntoProcess(root);
@@ -198,7 +198,7 @@ authCommand
198
198
  });
199
199
 
200
200
  // Store tokens using TokenStore
201
- const envPath = getEnvFilePath(paths.hiveDir);
201
+ const envPath = getEnvFilePath(root);
202
202
  const tokenStore = new TokenStore(envPath);
203
203
  await tokenStore.loadFromEnv(envPath);
204
204
  await storeJiraTokens(tokenStore, result);
@@ -1,6 +1,7 @@
1
1
  // Licensed under the Hungry Ghost Hive License. See LICENSE.
2
2
 
3
3
  import type { Command } from 'commander';
4
+ import { execa } from 'execa';
4
5
  import { beforeEach, describe, expect, it, vi } from 'vitest';
5
6
  import {
6
7
  getOpenPullRequestsByStory,
@@ -10,6 +11,10 @@ import {
10
11
  import { autoMergeApprovedPRs } from '../../utils/auto-merge.js';
11
12
 
12
13
  // Mock dependencies
14
+ vi.mock('execa', () => ({
15
+ execa: vi.fn(),
16
+ }));
17
+
13
18
  vi.mock('../../cluster/runtime.js', () => ({
14
19
  fetchLocalClusterStatus: vi.fn(),
15
20
  }));
@@ -261,6 +266,49 @@ describe('pr command', () => {
261
266
  expect(getOpenPullRequestsByStory).toHaveBeenCalledWith(expect.anything(), 'STORY-TEST-1');
262
267
  });
263
268
 
269
+ it('should not close GitHub PR when auto-closing duplicate internal PR records', async () => {
270
+ vi.mocked(getOpenPullRequestsByStory).mockReturnValue([
271
+ {
272
+ id: 'old-pr-1',
273
+ story_id: 'TEST-1',
274
+ team_id: 'team-1',
275
+ branch_name: 'feature/old-branch',
276
+ github_pr_number: 42,
277
+ github_pr_url: 'https://github.com/test/repo/pull/42',
278
+ submitted_by: null,
279
+ reviewed_by: null,
280
+ status: 'queued',
281
+ review_notes: null,
282
+ created_at: '2026-01-01T00:00:00.000Z',
283
+ updated_at: '2026-01-01T00:00:00.000Z',
284
+ reviewed_at: null,
285
+ },
286
+ ]);
287
+
288
+ await run(
289
+ 'submit',
290
+ '--branch',
291
+ 'feature/new-branch',
292
+ '--story',
293
+ 'TEST-1',
294
+ '--pr-number',
295
+ '99'
296
+ );
297
+
298
+ // Internal DB record should be closed
299
+ expect(updatePullRequest).toHaveBeenCalledWith(
300
+ expect.anything(),
301
+ 'old-pr-1',
302
+ expect.objectContaining({ status: 'closed' })
303
+ );
304
+ // GitHub PR must NOT be closed via gh CLI
305
+ expect(execa).not.toHaveBeenCalledWith(
306
+ 'gh',
307
+ expect.arrayContaining(['pr', 'close']),
308
+ expect.anything()
309
+ );
310
+ });
311
+
264
312
  it('should skip auto-close when resubmitting same github PR number', async () => {
265
313
  vi.mocked(getOpenPullRequestsByStory).mockReturnValue([
266
314
  {
@@ -2,7 +2,6 @@
2
2
 
3
3
  import chalk from 'chalk';
4
4
  import { Command } from 'commander';
5
- import { execa } from 'execa';
6
5
  import { join } from 'path';
7
6
  import { fetchLocalClusterStatus } from '../../cluster/runtime.js';
8
7
  import { loadConfig } from '../../config/loader.js';
@@ -77,35 +76,6 @@ prCommand
77
76
  message: `Auto-closed duplicate PR ${existingPR.id}`,
78
77
  metadata: { pr_id: existingPR.id, reason: 'duplicate' },
79
78
  });
80
-
81
- // Close the PR on GitHub if it has a PR number
82
- if (existingPR.github_pr_number) {
83
- try {
84
- // Determine repo directory for gh CLI
85
- let repoCwd = root;
86
- if (teamId) {
87
- const team = getTeamById(db.db, teamId);
88
- if (team?.repo_path) {
89
- repoCwd = join(root, team.repo_path);
90
- }
91
- }
92
- await execa('gh', ['pr', 'close', String(existingPR.github_pr_number)], {
93
- cwd: repoCwd,
94
- });
95
- console.log(
96
- chalk.gray(
97
- ` Closed stale GitHub PR #${existingPR.github_pr_number} for ${storyId}`
98
- )
99
- );
100
- } catch (error) {
101
- // Non-fatal - PR might already be closed or gh CLI not authenticated
102
- console.log(
103
- chalk.yellow(
104
- ` Warning: Could not close GitHub PR #${existingPR.github_pr_number}: ${error instanceof Error ? error.message : String(error)}`
105
- )
106
- );
107
- }
108
- }
109
79
  }
110
80
 
111
81
  // Update story status
@@ -59,7 +59,7 @@ describe('Init Wizard', () => {
59
59
  integrations: {
60
60
  source_control: { provider: 'github' },
61
61
  project_management: { provider: 'none' },
62
- autonomy: { level: 'full' },
62
+ autonomy: { level: 'full', allow_preexisting_ci_failures: true },
63
63
  },
64
64
  agent_runtime: 'claude',
65
65
  });
@@ -96,7 +96,10 @@ describe('Init Wizard', () => {
96
96
 
97
97
  expect(result.integrations.source_control).toEqual({ provider: 'github' });
98
98
  expect(result.integrations.project_management.provider).toBe('jira');
99
- expect(result.integrations.autonomy).toEqual({ level: 'partial' });
99
+ expect(result.integrations.autonomy).toEqual({
100
+ level: 'partial',
101
+ allow_preexisting_ci_failures: true,
102
+ });
100
103
  expect(result.agent_runtime).toBe('claude');
101
104
  });
102
105
 
@@ -149,7 +152,7 @@ describe('Init Wizard', () => {
149
152
  integrations: {
150
153
  source_control: { provider: 'github' },
151
154
  project_management: { provider: 'none' },
152
- autonomy: { level: 'full' },
155
+ autonomy: { level: 'full', allow_preexisting_ci_failures: true },
153
156
  },
154
157
  agent_runtime: 'claude',
155
158
  });
@@ -218,7 +221,10 @@ describe('Init Wizard', () => {
218
221
 
219
222
  expect(result.integrations.source_control).toEqual({ provider: 'github' });
220
223
  expect(result.integrations.project_management.provider).toBe('jira');
221
- expect(result.integrations.autonomy).toEqual({ level: 'partial' });
224
+ expect(result.integrations.autonomy).toEqual({
225
+ level: 'partial',
226
+ allow_preexisting_ci_failures: true,
227
+ });
222
228
  expect(result.agent_runtime).toBe('codex');
223
229
  });
224
230
 
@@ -291,7 +291,7 @@ async function buildResult(
291
291
  const integrations: IntegrationsConfig = {
292
292
  source_control: { provider: sourceControl },
293
293
  project_management: { provider: projectManagement },
294
- autonomy: { level: autonomy },
294
+ autonomy: { level: autonomy, allow_preexisting_ci_failures: true },
295
295
  };
296
296
 
297
297
  // If Jira is selected, run OAuth and setup wizard
@@ -305,7 +305,22 @@ async function buildResult(
305
305
  console.log(chalk.gray(' 1. Go to https://developer.atlassian.com/console/myapps/'));
306
306
  console.log(chalk.gray(' 2. Create a new app with OAuth 2.0 (3LO)'));
307
307
  console.log(chalk.gray(' 3. Add callback URL: http://127.0.0.1:9876/callback'));
308
- console.log(chalk.gray(' 4. Enable scopes: read:jira-work, write:jira-work, offline_access'));
308
+ console.log(chalk.gray(' 4. Enable the following scopes:'));
309
+ console.log(chalk.gray(''));
310
+ console.log(chalk.gray(' Jira API'));
311
+ console.log(chalk.gray(' read:jira-work'));
312
+ console.log(chalk.gray(' write:jira-work'));
313
+ console.log(chalk.gray(' read:jira-user'));
314
+ console.log(chalk.gray(''));
315
+ console.log(chalk.gray(' Jira Software API'));
316
+ console.log(chalk.gray(' read:board-scope:jira-software'));
317
+ console.log(chalk.gray(' write:board-scope:jira-software'));
318
+ console.log(chalk.gray(' read:sprint:jira-software'));
319
+ console.log(chalk.gray(' write:sprint:jira-software'));
320
+ console.log(chalk.gray(''));
321
+ console.log(chalk.gray(' Confluence API'));
322
+ console.log(chalk.gray(' read:confluence-content.all'));
323
+ console.log(chalk.gray(''));
309
324
  console.log();
310
325
 
311
326
  // Get OAuth credentials from environment or prompt user
@@ -140,6 +140,8 @@ const ProjectManagementConfigSchema = z.object({
140
140
  const AutonomyConfigSchema = z.object({
141
141
  // Agent autonomy level
142
142
  level: z.enum(['full', 'partial']).default('full'),
143
+ // When true, PRs whose only CI failures also fail on the base branch are still merged
144
+ allow_preexisting_ci_failures: z.boolean().default(true),
143
145
  });
144
146
 
145
147
  // Integrations configuration
@@ -405,6 +407,8 @@ integrations:
405
407
  # Agent autonomy level (full, partial)
406
408
  autonomy:
407
409
  level: full
410
+ # Merge PRs whose CI failures also exist on the base branch
411
+ allow_preexisting_ci_failures: true
408
412
 
409
413
  # Model assignments per agent tier
410
414
  models:
@@ -193,7 +193,7 @@ describe('context-files module', () => {
193
193
  integrations: {
194
194
  source_control: { provider: 'github' },
195
195
  project_management: { provider: 'none' },
196
- autonomy: { level: 'full' },
196
+ autonomy: { level: 'full', allow_preexisting_ci_failures: true },
197
197
  },
198
198
  github: { base_branch: 'main', pr_template: '' },
199
199
  qa: {
@@ -0,0 +1,24 @@
1
+ // Licensed under the Hungry Ghost Hive License. See LICENSE.
2
+
3
+ import { describe, expect, it } from 'vitest';
4
+
5
+ describe('test infrastructure validation', () => {
6
+ it('should run a basic assertion', () => {
7
+ expect(1 + 1).toBe(2);
8
+ });
9
+
10
+ it('should handle string assertions', () => {
11
+ expect('hungry-ghost-hive').toContain('hive');
12
+ });
13
+
14
+ it('should handle async tests', async () => {
15
+ const result = await Promise.resolve(42);
16
+ expect(result).toBe(42);
17
+ });
18
+
19
+ it('should handle array and object matchers', () => {
20
+ const items = ['senior', 'intermediate', 'junior', 'qa'];
21
+ expect(items).toHaveLength(4);
22
+ expect(items).toContain('junior');
23
+ });
24
+ });