zelari-code 2.1.0 → 2.1.2

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 (114) hide show
  1. package/README.md +4 -4
  2. package/package.json +8 -5
  3. package/dist/cli/ast/engine.test.js +0 -101
  4. package/dist/cli/ast/engine.test.js.map +0 -1
  5. package/dist/cli/ast/tools.test.js +0 -124
  6. package/dist/cli/ast/tools.test.js.map +0 -1
  7. package/dist/cli/headless.test.js +0 -107
  8. package/dist/cli/headless.test.js.map +0 -1
  9. package/dist/cli/headlessE2eSession.test.js +0 -189
  10. package/dist/cli/headlessE2eSession.test.js.map +0 -1
  11. package/dist/cli/headlessHistorySeed.test.js +0 -158
  12. package/dist/cli/headlessHistorySeed.test.js.map +0 -1
  13. package/dist/cli/headlessSessionEvent.test.js +0 -83
  14. package/dist/cli/headlessSessionEvent.test.js.map +0 -1
  15. package/dist/cli/headlessSpine.test.js +0 -153
  16. package/dist/cli/headlessSpine.test.js.map +0 -1
  17. package/dist/cli/hooks/observationStore.test.js +0 -135
  18. package/dist/cli/hooks/observationStore.test.js.map +0 -1
  19. package/dist/cli/hooks/sessionSurface.test.js +0 -112
  20. package/dist/cli/hooks/sessionSurface.test.js.map +0 -1
  21. package/dist/cli/kraken/candidateRegistry.test.js +0 -211
  22. package/dist/cli/kraken/candidateRegistry.test.js.map +0 -1
  23. package/dist/cli/kraken/completionGate.test.js +0 -172
  24. package/dist/cli/kraken/completionGate.test.js.map +0 -1
  25. package/dist/cli/kraken/evidenceAnchoring.test.js +0 -92
  26. package/dist/cli/kraken/evidenceAnchoring.test.js.map +0 -1
  27. package/dist/cli/kraken/evidenceProvenance.test.js +0 -113
  28. package/dist/cli/kraken/evidenceProvenance.test.js.map +0 -1
  29. package/dist/cli/kraken/executor.workbench.test.js +0 -134
  30. package/dist/cli/kraken/executor.workbench.test.js.map +0 -1
  31. package/dist/cli/kraken/metrics.test.js +0 -145
  32. package/dist/cli/kraken/metrics.test.js.map +0 -1
  33. package/dist/cli/kraken/nativeVerification.test.js +0 -207
  34. package/dist/cli/kraken/nativeVerification.test.js.map +0 -1
  35. package/dist/cli/kraken/planner.test.js +0 -43
  36. package/dist/cli/kraken/planner.test.js.map +0 -1
  37. package/dist/cli/kraken/scriptPlanner.test.js +0 -152
  38. package/dist/cli/kraken/scriptPlanner.test.js.map +0 -1
  39. package/dist/cli/kraken/selectionPlaybook.test.js +0 -55
  40. package/dist/cli/kraken/selectionPlaybook.test.js.map +0 -1
  41. package/dist/cli/kraken/skillSuggest.test.js +0 -157
  42. package/dist/cli/kraken/skillSuggest.test.js.map +0 -1
  43. package/dist/cli/kraken/strictDefaults.test.js +0 -149
  44. package/dist/cli/kraken/strictDefaults.test.js.map +0 -1
  45. package/dist/cli/kraken/strictGatePackIndependence.test.js +0 -112
  46. package/dist/cli/kraken/strictGatePackIndependence.test.js.map +0 -1
  47. package/dist/cli/kraken/turnRuntime.test.js +0 -377
  48. package/dist/cli/kraken/turnRuntime.test.js.map +0 -1
  49. package/dist/cli/kraken/verificationBridge.session.test.js +0 -104
  50. package/dist/cli/kraken/verificationBridge.session.test.js.map +0 -1
  51. package/dist/cli/kraken/verificationBridge.test.js +0 -177
  52. package/dist/cli/kraken/verificationBridge.test.js.map +0 -1
  53. package/dist/cli/kraken/verifier.test.js +0 -232
  54. package/dist/cli/kraken/verifier.test.js.map +0 -1
  55. package/dist/cli/kraken/verifierAdvisoryLock.test.js +0 -154
  56. package/dist/cli/kraken/verifierAdvisoryLock.test.js.map +0 -1
  57. package/dist/cli/kraken/verifierLifecycle.test.js +0 -181
  58. package/dist/cli/kraken/verifierLifecycle.test.js.map +0 -1
  59. package/dist/cli/kraken/verifierRoundTrip.test.js +0 -166
  60. package/dist/cli/kraken/verifierRoundTrip.test.js.map +0 -1
  61. package/dist/cli/kraken/verifierSettings.test.js +0 -237
  62. package/dist/cli/kraken/verifierSettings.test.js.map +0 -1
  63. package/dist/cli/kraken/verifyReport.test.js +0 -111
  64. package/dist/cli/kraken/verifyReport.test.js.map +0 -1
  65. package/dist/cli/kraken/weaknessMeter.test.js +0 -212
  66. package/dist/cli/kraken/weaknessMeter.test.js.map +0 -1
  67. package/dist/cli/kraken/workbench.test.js +0 -253
  68. package/dist/cli/kraken/workbench.test.js.map +0 -1
  69. package/dist/cli/kraken/workbenchView.test.js +0 -130
  70. package/dist/cli/kraken/workbenchView.test.js.map +0 -1
  71. package/dist/cli/legacyContextIsolation.test.js +0 -65
  72. package/dist/cli/legacyContextIsolation.test.js.map +0 -1
  73. package/dist/cli/lsp/tools.test.js +0 -90
  74. package/dist/cli/lsp/tools.test.js.map +0 -1
  75. package/dist/cli/missionContinuation.test.js +0 -117
  76. package/dist/cli/missionContinuation.test.js.map +0 -1
  77. package/dist/cli/profileMatrix.test.js +0 -130
  78. package/dist/cli/profileMatrix.test.js.map +0 -1
  79. package/dist/cli/provider/capabilities.test.js +0 -46
  80. package/dist/cli/provider/capabilities.test.js.map +0 -1
  81. package/dist/cli/provider/openai-compatible.timeout.test.js +0 -72
  82. package/dist/cli/provider/openai-compatible.timeout.test.js.map +0 -1
  83. package/dist/cli/providerConfig.test.js +0 -85
  84. package/dist/cli/providerConfig.test.js.map +0 -1
  85. package/dist/cli/sessionReplayInvariant.test.js +0 -187
  86. package/dist/cli/sessionReplayInvariant.test.js.map +0 -1
  87. package/dist/cli/sessionSpine.test.js +0 -171
  88. package/dist/cli/sessionSpine.test.js.map +0 -1
  89. package/dist/cli/thinking.test.js +0 -214
  90. package/dist/cli/thinking.test.js.map +0 -1
  91. package/dist/cli/tools/inspectCommand.schema.test.js +0 -82
  92. package/dist/cli/tools/inspectCommand.schema.test.js.map +0 -1
  93. package/dist/cli/tools/inspectCommand.test.js +0 -311
  94. package/dist/cli/tools/inspectCommand.test.js.map +0 -1
  95. package/dist/cli/tools/krakenCsvFanout.test.js +0 -200
  96. package/dist/cli/tools/krakenCsvFanout.test.js.map +0 -1
  97. package/dist/cli/tools/krakenSelectTool.test.js +0 -246
  98. package/dist/cli/tools/krakenSelectTool.test.js.map +0 -1
  99. package/dist/cli/tools/observeBatch.test.js +0 -329
  100. package/dist/cli/tools/observeBatch.test.js.map +0 -1
  101. package/dist/cli/tools/taskTool.dynamicChecks.test.js +0 -156
  102. package/dist/cli/tools/taskTool.dynamicChecks.test.js.map +0 -1
  103. package/dist/cli/tools/taskTool.planSafety.test.js +0 -280
  104. package/dist/cli/tools/taskTool.planSafety.test.js.map +0 -1
  105. package/dist/cli/tools/taskTool.verifyReport.test.js +0 -140
  106. package/dist/cli/tools/taskTool.verifyReport.test.js.map +0 -1
  107. package/dist/cli/utils/contextGrowthSummary.test.js +0 -74
  108. package/dist/cli/utils/contextGrowthSummary.test.js.map +0 -1
  109. package/dist/cli/workspace/planDriftCheck.test.js +0 -146
  110. package/dist/cli/workspace/planDriftCheck.test.js.map +0 -1
  111. package/dist/cli/workspace/planStore.test.js +0 -295
  112. package/dist/cli/workspace/planStore.test.js.map +0 -1
  113. package/dist/cli/zelariMission.test.js +0 -44
  114. package/dist/cli/zelariMission.test.js.map +0 -1
@@ -1,146 +0,0 @@
1
- /**
2
- * planDriftCheck tests — P1.5 governance acceptance (v0.10 post-mortem).
3
- *
4
- * Covers: aligned plan (green), duplicate milestone, canonical blocklist
5
- * hits (phase + task), canonical phase missing from plan.json, duplicate
6
- * task titles, unknown phaseId, fail-open skips (missing plan.json,
7
- * ZELARI_DRIFT_CHECK=0, no canonical doc), and the drift-report.json
8
- * artifact.
9
- *
10
- * @since v1.15.0
11
- */
12
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
13
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
14
- import { tmpdir } from 'node:os';
15
- import { join } from 'node:path';
16
- import { runPlanDriftCheck } from './planDriftCheck.js';
17
- let dir;
18
- beforeEach(() => {
19
- dir = mkdtempSync(join(tmpdir(), 'zelari-drift-'));
20
- });
21
- afterEach(() => {
22
- rmSync(dir, { recursive: true, force: true });
23
- delete process.env['ZELARI_DRIFT_CHECK'];
24
- });
25
- function zelari() {
26
- const z = join(dir, '.zelari');
27
- mkdirSync(z, { recursive: true });
28
- return z;
29
- }
30
- function seedPlan(phases, tasks, milestones) {
31
- const z = zelari();
32
- writeFileSync(join(z, 'plan.json'), JSON.stringify({ phases, tasks, milestones }), 'utf8');
33
- return z;
34
- }
35
- function seedCanonical(text) {
36
- mkdirSync(join(dir, '.zelari', 'docs'), { recursive: true });
37
- writeFileSync(join(dir, '.zelari', 'docs', 'plan-canonical-v9-9-9.md'), text, 'utf8');
38
- }
39
- const CANONICAL = [
40
- '# Piano canonico',
41
- '## Regola',
42
- 'Duplicati: `p0-parit-*`, `p0-safety-gate-observability-*`.',
43
- '### P0 — `p0-safety-observability`',
44
- '### P1 — `p1-session-ux-extensibility`',
45
- ].join('\n');
46
- function phase(id) {
47
- return { kind: 'phase', id, name: id };
48
- }
49
- function task(id, name, phaseId) {
50
- return { kind: 'task', id, name, phaseId, status: 'pending', priority: 'high' };
51
- }
52
- describe('runPlanDriftCheck', () => {
53
- it('is green when plan.json matches the canonical doc', async () => {
54
- const z = seedPlan([phase('p0-safety-observability'), phase('p1-session-ux-extensibility')], [
55
- task('p0-safety-observability-lifecyclehookrunner-1', 'LifecycleHookRunner', 'p0-safety-observability'),
56
- task('p1-session-ux-extensibility-fork-rewind-2', 'Fork e rewind', 'p1-session-ux-extensibility'),
57
- ], [{ kind: 'milestone', id: 'm-1', name: 'v0.10.0', targetVersion: 'v0.10.0' }]);
58
- seedCanonical(CANONICAL);
59
- const result = await runPlanDriftCheck(z);
60
- expect(result.ran).toBe(true);
61
- expect(result.ok).toBe(true);
62
- expect(result.findings).toEqual([]);
63
- expect(result.canonicalDoc).toBe('plan-canonical-v9-9-9.md');
64
- expect(result.reportPath).toBe(join(z, 'drift-report.json'));
65
- const report = JSON.parse(readFileSync(result.reportPath, 'utf8'));
66
- expect(report.ok).toBe(true);
67
- expect(report.counts).toEqual({ phases: 2, tasks: 2, milestones: 1 });
68
- });
69
- it('flags duplicate milestones targeting the same version', async () => {
70
- const z = seedPlan([phase('p0-safety-observability')], [task('t-1', 'Solo task', 'p0-safety-observability')], [
71
- { kind: 'milestone', id: 'm-1', name: 'v0.10.0 A', targetVersion: 'v0.10.0' },
72
- { kind: 'milestone', id: 'm-2', name: 'v0.10.0 B', targetVersion: '0.10.0' },
73
- ]);
74
- seedCanonical(CANONICAL);
75
- const result = await runPlanDriftCheck(z);
76
- expect(result.ok).toBe(false);
77
- const dup = result.findings.filter((f) => f.code === 'DUPLICATE_MILESTONE');
78
- expect(dup).toHaveLength(1);
79
- expect(dup[0].severity).toBe('error');
80
- expect(dup[0].message).toContain('m-1');
81
- expect(dup[0].message).toContain('m-2');
82
- });
83
- it('flags phases and tasks matching a canonical duplicate/descope prefix', async () => {
84
- const z = seedPlan([phase('p0-safety-observability'), phase('p0-parit-sicurezza')], [
85
- task('p0-parit-sicurezza-hook-1', 'Hook runner', 'p0-parit-sicurezza'),
86
- task('p0-safety-gate-observability-hook-2', 'Altro hook', 'p0-safety-observability'),
87
- ], []);
88
- seedCanonical(CANONICAL);
89
- const result = await runPlanDriftCheck(z);
90
- expect(result.ok).toBe(false);
91
- const codes = result.findings.map((f) => f.code);
92
- expect(codes).toContain('PHASE_IN_CANONICAL_BLOCKLIST');
93
- expect(codes).toContain('TASK_IN_CANONICAL_BLOCKLIST');
94
- });
95
- it('flags canonical phases missing from plan.json', async () => {
96
- const z = seedPlan([phase('p0-safety-observability')], [task('t-1', 'Task', 'p0-safety-observability')], []);
97
- seedCanonical(CANONICAL);
98
- const result = await runPlanDriftCheck(z);
99
- expect(result.ok).toBe(false);
100
- const missing = result.findings.filter((f) => f.code === 'CANONICAL_PHASE_MISSING');
101
- expect(missing).toHaveLength(1);
102
- expect(missing[0].message).toContain('p1-session-ux-extensibility');
103
- });
104
- it('warns (non-blocking) on duplicate titles and unknown phaseId', async () => {
105
- const z = seedPlan([phase('p0-safety-observability'), phase('p1-session-ux-extensibility')], [
106
- task('a-1', 'Lifecycle hook runner', 'p0-safety-observability'),
107
- task('b-2', 'Lifecycle Hook Runner!', 'p1-session-ux-extensibility'),
108
- task('c-3', 'Task orfano', 'fase-inesistente'),
109
- ], []);
110
- seedCanonical(CANONICAL);
111
- const result = await runPlanDriftCheck(z);
112
- expect(result.ok).toBe(true); // warnings only
113
- const codes = result.findings.map((f) => f.code).sort();
114
- expect(codes).toEqual(['DUPLICATE_TASK_TITLE', 'TASK_IN_UNKNOWN_PHASE']);
115
- });
116
- it('runs structural checks only when no canonical doc exists', async () => {
117
- const z = seedPlan([phase('p0-safety-observability')], [task('t-1', 'Task', 'p0-safety-observability')], [{ kind: 'milestone', id: 'm-1', name: 'v1', targetVersion: 'v1.0.0' }]);
118
- const result = await runPlanDriftCheck(z);
119
- expect(result.ran).toBe(true);
120
- expect(result.ok).toBe(true);
121
- expect(result.canonicalDoc).toBeUndefined();
122
- expect(result.reason).toContain('no canonical doc');
123
- });
124
- it('is skipped when plan.json is missing', async () => {
125
- const z = zelari();
126
- const result = await runPlanDriftCheck(z);
127
- expect(result.ran).toBe(false);
128
- expect(result.reason).toContain('missing');
129
- });
130
- it('is skipped when plan.json is corrupt', async () => {
131
- const z = zelari();
132
- writeFileSync(join(z, 'plan.json'), '{not json', 'utf8');
133
- const result = await runPlanDriftCheck(z);
134
- expect(result.ran).toBe(false);
135
- expect(result.reason).toContain('corrupt');
136
- });
137
- it('is disabled via ZELARI_DRIFT_CHECK=0', async () => {
138
- seedPlan([phase('p0')], [], []);
139
- process.env['ZELARI_DRIFT_CHECK'] = '0';
140
- const result = await runPlanDriftCheck(join(dir, '.zelari'));
141
- expect(result.ran).toBe(false);
142
- expect(result.reason).toContain('disabled');
143
- expect(existsSync(join(dir, '.zelari', 'drift-report.json'))).toBe(false);
144
- });
145
- });
146
- //# sourceMappingURL=planDriftCheck.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planDriftCheck.test.js","sourceRoot":"","sources":["../../../src/cli/workspace/planDriftCheck.test.ts"],"names":[],"mappings":"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"}
@@ -1,295 +0,0 @@
1
- /**
2
- * planStore + planTaskTools tests — ADR-0018 slice 3a acceptance.
3
- *
4
- * Covers: v1 envelope persistence, coexistence with council plan tasks
5
- * (normalization done→completed, name→title alias, no id collisions, root
6
- * pass-through), caps, corrupt-file safety, .bak backup, and the council
7
- * writePlan round-trip preserving the v1 root fields.
8
- *
9
- * @since v1.43.0
10
- */
11
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
12
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
13
- import { tmpdir } from 'node:os';
14
- import { join } from 'node:path';
15
- import { createPlanTaskTools } from '../tools/planTaskTools.js';
16
- import { createWorkspaceContext, createWorkspaceStubs } from './stubs.js';
17
- let dir;
18
- beforeEach(() => {
19
- dir = mkdtempSync(join(tmpdir(), 'zelari-plan-'));
20
- });
21
- afterEach(() => {
22
- rmSync(dir, { recursive: true, force: true });
23
- });
24
- function planPath() {
25
- return join(dir, '.zelari', 'plan.json');
26
- }
27
- function readPlanJson() {
28
- return JSON.parse(readFileSync(planPath(), 'utf8'));
29
- }
30
- function seedPlanJson(content) {
31
- mkdirSync(join(dir, '.zelari'), { recursive: true });
32
- writeFileSync(planPath(), JSON.stringify(content), 'utf8');
33
- }
34
- function toolCtx() {
35
- return {
36
- signal: new AbortController().signal,
37
- cwd: dir,
38
- audit: () => { },
39
- sessionId: 'plan-store-test',
40
- };
41
- }
42
- function makeTools(onTaskEvent) {
43
- const tools = createPlanTaskTools({ projectRoot: dir, onTaskEvent });
44
- return {
45
- create: tools[0],
46
- update: tools[1],
47
- list: tools[2],
48
- };
49
- }
50
- describe('planStore / task_* tools (ADR-0018 3a)', () => {
51
- it('task_create persists the v1 envelope and the per-task artifact', async () => {
52
- const { create } = makeTools();
53
- const res = await create.execute({ title: 'Extract RunCoordinator' }, toolCtx());
54
- expect(res.ok).toBe(true);
55
- if (!res.ok)
56
- return;
57
- expect(res.value.id).toBe('t1');
58
- expect(res.value.task.status).toBe('pending');
59
- const file = readPlanJson();
60
- expect(file.schemaVersion).toBe(1);
61
- expect(file.counter).toBe(1);
62
- expect(file.tasks[0].id).toBe('t1');
63
- expect(file.tasks[0].title).toBe('Extract RunCoordinator');
64
- expect(file.tasks[0].name).toBe('Extract RunCoordinator'); // council alias
65
- expect(existsSync(join(dir, '.zelari', 'plan-tasks', 't1.md'))).toBe(true);
66
- });
67
- it('coexists with council tasks: normalization, no id collision, root pass-through', async () => {
68
- seedPlanJson({
69
- phases: [{ kind: 'phase', id: 'p1', name: 'P1', order: 1 }],
70
- tasks: [
71
- {
72
- kind: 'task',
73
- id: 'p1-foo-1',
74
- name: 'Council task',
75
- phaseId: 'p1',
76
- status: 'done',
77
- priority: 'high',
78
- description: 'council extra field',
79
- },
80
- ],
81
- milestones: [],
82
- xCouncilMeta: 'keep-me',
83
- });
84
- const { create, list } = makeTools();
85
- const l1 = await list.execute({}, toolCtx());
86
- expect(l1.ok).toBe(true);
87
- if (!l1.ok)
88
- return;
89
- expect(l1.value.tasks).toHaveLength(1);
90
- expect(l1.value.tasks[0].title).toBe('Council task'); // name → title
91
- expect(l1.value.tasks[0].status).toBe('completed'); // done → completed
92
- expect(l1.value.done).toBe(1);
93
- expect(l1.value.total).toBe(1);
94
- const res = await create.execute({ title: 'Agent task', phaseId: 'p1' }, toolCtx());
95
- expect(res.ok).toBe(true);
96
- if (!res.ok)
97
- return;
98
- expect(res.value.id).toBe('t1'); // counter starts fresh, no collision with p1-foo-1
99
- const file = readPlanJson();
100
- expect(file.xCouncilMeta).toBe('keep-me'); // unknown root field preserved
101
- expect(file.phases).toHaveLength(1);
102
- const council = file.tasks.find((t) => t.id === 'p1-foo-1');
103
- expect(council.name).toBe('Council task');
104
- expect(council.description).toBe('council extra field'); // task pass-through
105
- expect(council.status).toBe('completed'); // normalized on rewrite
106
- });
107
- it('task_update applies fields, appendNote, and errors PLAN_TASK_NOT_FOUND', async () => {
108
- const { create, update } = makeTools();
109
- const created = await create.execute({ title: 'Fix auth refresh' }, toolCtx());
110
- expect(created.ok).toBe(true);
111
- const up = await update.execute({ id: 't1', status: 'in_progress', priority: 'high' }, toolCtx());
112
- expect(up.ok).toBe(true);
113
- if (!up.ok)
114
- return;
115
- expect(up.value.task.status).toBe('in_progress');
116
- expect(up.value.task.priority).toBe('high');
117
- const up2 = await update.execute({ id: 't1', appendNote: 'wip on refresh token' }, toolCtx());
118
- expect(up2.ok).toBe(true);
119
- const up3 = await update.execute({ id: 't1', appendNote: 'second note' }, toolCtx());
120
- expect(up3.ok).toBe(true);
121
- if (!up3.ok)
122
- return;
123
- expect(String(up3.value.task.notes)).toContain('wip on refresh token');
124
- expect(String(up3.value.task.notes)).toContain('second note');
125
- const nf = await update.execute({ id: 't9', status: 'pending' }, toolCtx());
126
- expect(nf.ok).toBe(false);
127
- if (nf.ok)
128
- return;
129
- expect(nf.error).toContain('PLAN_TASK_NOT_FOUND');
130
- });
131
- it('task_list filters by status and phaseId', async () => {
132
- const { create, update, list } = makeTools();
133
- await create.execute({ title: 'A', phaseId: 'p1' }, toolCtx());
134
- await create.execute({ title: 'B', phaseId: 'p2' }, toolCtx());
135
- await update.execute({ id: 't1', status: 'completed' }, toolCtx());
136
- const byStatus = await list.execute({ status: 'completed' }, toolCtx());
137
- expect(byStatus.ok && byStatus.value.tasks.map((t) => t.id)).toEqual(['t1']);
138
- const byPhase = await list.execute({ phaseId: 'p2' }, toolCtx());
139
- expect(byPhase.ok && byPhase.value.tasks.map((t) => t.id)).toEqual(['t2']);
140
- const all = await list.execute({}, toolCtx());
141
- expect(all.ok && all.value.total).toBe(2);
142
- expect(all.ok && all.value.done).toBe(1);
143
- });
144
- it('defensive caps: oversized title is truncated, 101st task rejected', async () => {
145
- const { create } = makeTools();
146
- // Bypassing zod (registry validates; execute is called directly here) —
147
- // the store must still enforce the cap defensively.
148
- const res = await create.execute({ title: 'x'.repeat(250) }, toolCtx());
149
- expect(res.ok).toBe(true);
150
- if (!res.ok)
151
- return;
152
- expect(res.value.task.title.length).toBe(200);
153
- const tasks = Array.from({ length: 100 }, (_, i) => ({
154
- kind: 'task',
155
- id: `t${i + 1}`,
156
- name: `bulk ${i + 1}`,
157
- phaseId: 'p0',
158
- status: 'pending',
159
- }));
160
- seedPlanJson({
161
- schemaVersion: 1,
162
- counter: 100,
163
- tasks,
164
- phases: [],
165
- milestones: [],
166
- });
167
- const over = await create.execute({ title: 'one too many' }, toolCtx());
168
- expect(over.ok).toBe(false);
169
- if (over.ok)
170
- return;
171
- expect(over.error).toContain('PLAN_TOO_MANY_TASKS');
172
- });
173
- it('corrupt plan.json → PLAN_CORRUPT error and the file is left untouched', async () => {
174
- mkdirSync(join(dir, '.zelari'), { recursive: true });
175
- writeFileSync(planPath(), '{ broken json', 'utf8');
176
- const { create, list } = makeTools();
177
- const res = await create.execute({ title: 'X' }, toolCtx());
178
- expect(res.ok).toBe(false);
179
- if (res.ok)
180
- return;
181
- expect(res.error).toContain('PLAN_CORRUPT');
182
- const ls = await list.execute({}, toolCtx());
183
- expect(ls.ok).toBe(false);
184
- expect(readFileSync(planPath(), 'utf8')).toBe('{ broken json'); // not overwritten
185
- });
186
- it('a second write keeps a .bak of the previous state', async () => {
187
- const { create } = makeTools();
188
- await create.execute({ title: 'first' }, toolCtx());
189
- await create.execute({ title: 'second' }, toolCtx());
190
- const bak = JSON.parse(readFileSync(`${planPath()}.bak`, 'utf8'));
191
- expect(bak.tasks[0].title).toBe('first');
192
- const cur = readPlanJson();
193
- expect(cur.tasks).toHaveLength(2);
194
- expect(cur.counter).toBe(2);
195
- });
196
- it('council writePlan round-trip preserves schemaVersion/counter (stub interop)', async () => {
197
- seedPlanJson({
198
- schemaVersion: 1,
199
- counter: 3,
200
- phases: [{ kind: 'phase', id: 'p1', name: 'P1', order: 1 }],
201
- tasks: [
202
- {
203
- kind: 'task',
204
- id: 't1',
205
- name: 'Agent task',
206
- title: 'Agent task',
207
- phaseId: 'p1',
208
- status: 'pending',
209
- },
210
- ],
211
- milestones: [],
212
- });
213
- const wsCtx = createWorkspaceContext(dir);
214
- const updateTask = createWorkspaceStubs(wsCtx).find((s) => s.name === 'updateTask');
215
- expect(updateTask).toBeTruthy();
216
- const out = await updateTask.execute({ taskId: 't1', status: 'done' }, wsCtx);
217
- expect(String(out)).toContain('t1');
218
- const file = readPlanJson();
219
- expect(file.schemaVersion).toBe(1); // ADR-0018 pass-through root fields
220
- expect(file.counter).toBe(3);
221
- expect(file.tasks[0].status).toBe('done'); // council writer vocabulary
222
- expect(file.phases).toHaveLength(1);
223
- });
224
- });
225
- describe('task_* first-class events (ADR-0018 3b)', () => {
226
- it('task_create emits task_update with the created payload', async () => {
227
- const events = [];
228
- const { create } = makeTools((e) => events.push(e));
229
- const res = await create.execute({ title: 'Event slice', priority: 'high', phaseId: 'p9' }, toolCtx());
230
- expect(res.ok).toBe(true);
231
- expect(events).toEqual([
232
- {
233
- type: 'task_update',
234
- source: 'workspace_plan',
235
- task: {
236
- id: 't1',
237
- title: 'Event slice',
238
- status: 'pending',
239
- phaseId: 'p9',
240
- priority: 'high',
241
- },
242
- },
243
- ]);
244
- });
245
- it('task_update emits task_update with the mutated status', async () => {
246
- const events = [];
247
- const { create, update } = makeTools((e) => events.push(e));
248
- await create.execute({ title: 'A' }, toolCtx());
249
- const res = await update.execute({ id: 't1', status: 'in_progress' }, toolCtx());
250
- expect(res.ok).toBe(true);
251
- const last = events[events.length - 1];
252
- expect(last.type).toBe('task_update');
253
- if (last.type !== 'task_update')
254
- return;
255
- expect(last.task.id).toBe('t1');
256
- expect(last.task.status).toBe('in_progress');
257
- });
258
- it('task_list emits a FULL snapshot regardless of filters', async () => {
259
- const events = [];
260
- const { create, update, list } = makeTools((e) => events.push(e));
261
- await create.execute({ title: 'One' }, toolCtx());
262
- await create.execute({ title: 'Two' }, toolCtx());
263
- await update.execute({ id: 't1', status: 'completed' }, toolCtx());
264
- const res = await list.execute({ status: 'pending' }, toolCtx());
265
- expect(res.ok).toBe(true);
266
- if (!res.ok)
267
- return;
268
- expect(res.value.tasks).toHaveLength(1); // filtered view for the agent
269
- const snap = events.find((e) => e.type === 'task_snapshot');
270
- expect(snap).toBeDefined();
271
- if (!snap || snap.type !== 'task_snapshot')
272
- return;
273
- expect(snap.tasks).toHaveLength(2); // full view for frontends
274
- expect(snap.tasks.map((t) => `${t.id}:${t.status}`).sort()).toEqual([
275
- 't1:completed',
276
- 't2:pending',
277
- ]);
278
- });
279
- it('no events on tool errors; a throwing sink never breaks the tool', async () => {
280
- const events = [];
281
- const ok = makeTools((e) => events.push(e));
282
- const bad = makeTools(() => {
283
- throw new Error('sink exploded');
284
- });
285
- const missing = await ok.update.execute({ id: 'nope', status: 'pending' }, toolCtx());
286
- expect(missing.ok).toBe(false);
287
- expect(events).toHaveLength(0);
288
- const res = await bad.create.execute({ title: 'Still works' }, toolCtx());
289
- expect(res.ok).toBe(true);
290
- if (!res.ok)
291
- return;
292
- expect(res.value.id).toBe('t1');
293
- });
294
- });
295
- //# sourceMappingURL=planStore.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planStore.test.js","sourceRoot":"","sources":["../../../src/cli/workspace/planStore.test.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { resolveMaxCost, resolveMaxTokens, resolveMaxIterations, resolveMaxStall, } from './zelariMission.js';
3
- describe('resolveMaxCost (ADR-0013)', () => {
4
- it('returns undefined when env var is not set', () => {
5
- expect(resolveMaxCost({})).toBeUndefined();
6
- });
7
- it('parses a valid USD value', () => {
8
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: '5.00' })).toBe(5.0);
9
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: '0.50' })).toBe(0.5);
10
- });
11
- it('returns undefined for zero or negative', () => {
12
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: '0' })).toBeUndefined();
13
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: '-1' })).toBeUndefined();
14
- });
15
- it('returns undefined for non-numeric', () => {
16
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: 'abc' })).toBeUndefined();
17
- expect(resolveMaxCost({ ZELARI_MISSION_MAX_COST: '' })).toBeUndefined();
18
- });
19
- });
20
- describe('resolveMaxTokens (ADR-0013)', () => {
21
- it('returns undefined when env var is not set', () => {
22
- expect(resolveMaxTokens({})).toBeUndefined();
23
- });
24
- it('parses a valid token count', () => {
25
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: '2000000' })).toBe(2_000_000);
26
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: '100000' })).toBe(100_000);
27
- });
28
- it('returns undefined for zero or negative', () => {
29
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: '0' })).toBeUndefined();
30
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: '-5' })).toBeUndefined();
31
- });
32
- it('returns undefined for non-integer', () => {
33
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: 'abc' })).toBeUndefined();
34
- expect(resolveMaxTokens({ ZELARI_MISSION_MAX_TOKENS: '' })).toBeUndefined();
35
- });
36
- });
37
- // Sanity: existing resolve functions still work alongside the new ones.
38
- describe('resolveMaxIterations / resolveMaxStall (regression)', () => {
39
- it('returns defaults when env is empty', () => {
40
- expect(resolveMaxIterations({})).toBeGreaterThan(0);
41
- expect(resolveMaxStall({})).toBeGreaterThanOrEqual(0);
42
- });
43
- });
44
- //# sourceMappingURL=zelariMission.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zelariMission.test.js","sourceRoot":"","sources":["../../src/cli/zelariMission.test.ts"],"names":[],"mappings":"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"}