agentic-orchestrator 0.1.18 → 0.1.19

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 (38) hide show
  1. package/agentic/orchestrator/prompts/planner.system.md +1 -0
  2. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -2
  3. package/apps/control-plane/test/dashboard-api.integration.spec.ts +94 -0
  4. package/apps/control-plane/test/dashboard-client.spec.ts +55 -1
  5. package/apps/control-plane/test/dashboard-ui-utils.spec.ts +139 -0
  6. package/apps/control-plane/test/worker-decision-loop.spec.ts +70 -2
  7. package/config/agentic/orchestrator/prompts/planner.system.md +1 -0
  8. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +29 -2
  9. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  10. package/package.json +1 -1
  11. package/packages/web-dashboard/src/app/api/actions/route.ts +30 -1
  12. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +1 -1
  13. package/packages/web-dashboard/src/app/api/features/[id]/log/route.ts +18 -0
  14. package/packages/web-dashboard/src/app/globals.css +12 -3
  15. package/packages/web-dashboard/src/app/page.tsx +247 -317
  16. package/packages/web-dashboard/src/components/collision-queue.tsx +38 -0
  17. package/packages/web-dashboard/src/components/confirmation-modal.tsx +73 -0
  18. package/packages/web-dashboard/src/components/detail-panel.tsx +431 -0
  19. package/packages/web-dashboard/src/components/diff-viewer.tsx +68 -0
  20. package/packages/web-dashboard/src/components/evidence-viewer.tsx +127 -0
  21. package/packages/web-dashboard/src/components/feature-card.tsx +145 -0
  22. package/packages/web-dashboard/src/components/filter-bar.tsx +153 -0
  23. package/packages/web-dashboard/src/components/gate-results.tsx +50 -0
  24. package/packages/web-dashboard/src/components/human-input-panel.tsx +74 -0
  25. package/packages/web-dashboard/src/components/kanban-board.tsx +72 -0
  26. package/packages/web-dashboard/src/components/plan-viewer.tsx +93 -0
  27. package/packages/web-dashboard/src/components/pr-status-card.tsx +97 -0
  28. package/packages/web-dashboard/src/components/summary-bar.tsx +65 -0
  29. package/packages/web-dashboard/src/components/toast.tsx +96 -0
  30. package/packages/web-dashboard/src/lib/aop-client.ts +96 -0
  31. package/packages/web-dashboard/src/lib/dashboard-utils.ts +393 -0
  32. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +85 -0
  33. package/packages/web-dashboard/src/lib/types.ts +16 -0
  34. package/packages/web-dashboard/src/styles/dashboard.module.css +906 -0
  35. package/spec-files/outstanding/agentic_orchestrator_dashboard_advanced_ux_spec.md +660 -0
  36. package/spec-files/outstanding/agentic_orchestrator_worker_runtime_watchdog_resilience_spec.md +509 -0
  37. package/spec-files/progress.md +26 -1
  38. /package/spec-files/{outstanding → completed}/agentic_orchestrator_dashboard_ux_improvements_spec.md +0 -0
@@ -2,6 +2,7 @@ You are the planner role.
2
2
 
3
3
  Produce deterministic plan submissions and plan updates that conform to plan schema and policy constraints.
4
4
  Avoid speculative edits outside the declared file scope.
5
+ When emitting `PLAN_SUBMISSION` or `REQUEST.action=amend_plan`, `plan_json` must only include keys allowed by `plan.schema.json` (no extra fields such as `phase_notes`).
5
6
 
6
7
  After each QA wave, perform an explicit reconciliation pass:
7
8
 
@@ -7,6 +7,23 @@ import type { RuntimeRole, SupervisorToolCaller } from './types.js';
7
7
  import type { ActivityMonitorService } from '../application/services/activity-monitor-service.js';
8
8
 
9
9
  type AnyRecord = Record<string, unknown>;
10
+ const PLAN_TOP_LEVEL_KEYS = new Set([
11
+ 'feature_id',
12
+ 'plan_version',
13
+ 'summary',
14
+ 'allowed_areas',
15
+ 'forbidden_areas',
16
+ 'base_ref',
17
+ 'files',
18
+ 'contracts',
19
+ 'acceptance_criteria',
20
+ 'gate_profile',
21
+ 'gate_targets',
22
+ 'risk',
23
+ 'revision_of',
24
+ 'revision_reason',
25
+ 'verification_overrides',
26
+ ]);
10
27
 
11
28
  export interface WorkerDecisionInput {
12
29
  role: RuntimeRole;
@@ -65,6 +82,17 @@ function readPlanVersion(value: unknown): number | null {
65
82
  return Math.floor(value);
66
83
  }
67
84
 
85
+ function sanitizePlannerPlan(plan: AnyRecord): AnyRecord {
86
+ const sanitized: AnyRecord = {};
87
+ for (const [key, value] of Object.entries(plan)) {
88
+ if (!PLAN_TOP_LEVEL_KEYS.has(key)) {
89
+ continue;
90
+ }
91
+ sanitized[key] = value;
92
+ }
93
+ return sanitized;
94
+ }
95
+
68
96
  function asOutputs(result: Record<string, unknown>): AnyRecord[] {
69
97
  const outputs = result.outputs;
70
98
  if (Array.isArray(outputs)) {
@@ -223,7 +251,7 @@ export class WorkerDecisionLoop implements WorkerDecisionRunner {
223
251
  return;
224
252
  }
225
253
 
226
- const planJson = asRecord(output.plan_json ?? output.plan);
254
+ const planJson = sanitizePlannerPlan(asRecord(output.plan_json ?? output.plan));
227
255
  if (Object.keys(planJson).length === 0) {
228
256
  return;
229
257
  }
@@ -350,7 +378,7 @@ export class WorkerDecisionLoop implements WorkerDecisionRunner {
350
378
  }
351
379
 
352
380
  if (action === 'amend_plan' && input.role === 'planner') {
353
- const planJson = asRecord(request.plan_json);
381
+ const planJson = sanitizePlannerPlan(asRecord(request.plan_json));
354
382
  if (Object.keys(planJson).length === 0) {
355
383
  return;
356
384
  }
@@ -11,6 +11,12 @@ const readDashboardStatusMock = vi.hoisted(() =>
11
11
  })),
12
12
  );
13
13
  const readFeatureStateMock = vi.hoisted(() => vi.fn(async () => null));
14
+ const readFeatureLogMock = vi.hoisted(() =>
15
+ vi.fn(async () => ({
16
+ entries: [{ timestamp: '2026-03-05T00:00:00Z', message: 'log message', type: 'log' }],
17
+ total: 1,
18
+ })),
19
+ );
14
20
  const getAopRootMock = vi.hoisted(() => vi.fn(() => process.cwd()));
15
21
  const approveFeatureReviewMock = vi.hoisted(() =>
16
22
  vi.fn(async () => ({ ok: true, data: { merged: true } })),
@@ -21,12 +27,19 @@ const denyFeatureReviewMock = vi.hoisted(() =>
21
27
  const requestFeatureChangesMock = vi.hoisted(() =>
22
28
  vi.fn(async () => ({ ok: true, data: { delivered: true } })),
23
29
  );
30
+ const sendFeatureMessageMock = vi.hoisted(() =>
31
+ vi.fn(async () => ({ ok: true, data: { delivered: true } })),
32
+ );
33
+ const retryFeatureMock = vi.hoisted(() =>
34
+ vi.fn(async () => ({ ok: true, data: { retry_mode: 'full' } })),
35
+ );
24
36
  const execFileMock = vi.hoisted(() => vi.fn());
25
37
 
26
38
  vi.mock('../../../packages/web-dashboard/src/lib/aop-client.js', () => ({
27
39
  resolveProjectRoot: resolveProjectRootMock,
28
40
  readDashboardStatus: readDashboardStatusMock,
29
41
  readFeatureState: readFeatureStateMock,
42
+ readFeatureLog: readFeatureLogMock,
30
43
  getAopRoot: getAopRootMock,
31
44
  }));
32
45
 
@@ -34,6 +47,8 @@ vi.mock('../../../packages/web-dashboard/src/lib/orchestrator-tools.js', () => (
34
47
  approveFeatureReview: approveFeatureReviewMock,
35
48
  denyFeatureReview: denyFeatureReviewMock,
36
49
  requestFeatureChanges: requestFeatureChangesMock,
50
+ sendFeatureMessage: sendFeatureMessageMock,
51
+ retryFeature: retryFeatureMock,
37
52
  }));
38
53
 
39
54
  vi.mock('node:child_process', () => ({
@@ -52,6 +67,7 @@ vi.mock('node:child_process', () => ({
52
67
 
53
68
  import { POST as actionsPost } from '../../../packages/web-dashboard/src/app/api/actions/route.js';
54
69
  import { POST as checkoutPost } from '../../../packages/web-dashboard/src/app/api/features/[id]/checkout/route.js';
70
+ import { GET as logGet } from '../../../packages/web-dashboard/src/app/api/features/[id]/log/route.js';
55
71
  import { GET as statusGet } from '../../../packages/web-dashboard/src/app/api/status/route.js';
56
72
  import { GET as projectsGet } from '../../../packages/web-dashboard/src/app/api/projects/route.js';
57
73
 
@@ -67,10 +83,13 @@ describe('dashboard api integration', () => {
67
83
  resolveProjectRootMock.mockReset();
68
84
  readDashboardStatusMock.mockReset();
69
85
  readFeatureStateMock.mockReset();
86
+ readFeatureLogMock.mockReset();
70
87
  getAopRootMock.mockReset();
71
88
  approveFeatureReviewMock.mockReset();
72
89
  denyFeatureReviewMock.mockReset();
73
90
  requestFeatureChangesMock.mockReset();
91
+ sendFeatureMessageMock.mockReset();
92
+ retryFeatureMock.mockReset();
74
93
  execFileMock.mockReset();
75
94
 
76
95
  resolveProjectRootMock.mockResolvedValue(repoRoot);
@@ -89,6 +108,10 @@ describe('dashboard api integration', () => {
89
108
  },
90
109
  ],
91
110
  });
111
+ readFeatureLogMock.mockResolvedValue({
112
+ entries: [{ timestamp: '2026-03-05T00:00:00Z', message: 'log message', type: 'log' }],
113
+ total: 1,
114
+ });
92
115
  });
93
116
 
94
117
  afterEach(async () => {
@@ -154,6 +177,58 @@ describe('dashboard api integration', () => {
154
177
  expect(body.error.code).toBe('reason_required');
155
178
  });
156
179
 
180
+ it('GIVEN_feature_send_message_without_message_WHEN_posted_THEN_returns_400', async () => {
181
+ const response = await actionsPost(
182
+ new Request('http://localhost/api/actions', {
183
+ method: 'POST',
184
+ body: JSON.stringify({
185
+ action: 'feature.send_message',
186
+ feature_id: 'feature_checkout',
187
+ }),
188
+ }),
189
+ );
190
+
191
+ const body = (await response.json()) as { ok: boolean; error: { code: string } };
192
+ expect(response.status).toBe(400);
193
+ expect(body.ok).toBe(false);
194
+ expect(body.error.code).toBe('message_required');
195
+ });
196
+
197
+ it('GIVEN_feature_send_message_WHEN_posted_THEN_routes_to_tool', async () => {
198
+ const response = await actionsPost(
199
+ new Request('http://localhost/api/actions?project=alpha', {
200
+ method: 'POST',
201
+ body: JSON.stringify({
202
+ action: 'feature.send_message',
203
+ feature_id: 'feature_checkout',
204
+ message: 'Need clarification',
205
+ }),
206
+ }),
207
+ );
208
+
209
+ expect(response.status).toBe(200);
210
+ expect(sendFeatureMessageMock).toHaveBeenCalledWith(
211
+ 'feature_checkout',
212
+ 'Need clarification',
213
+ repoRoot,
214
+ );
215
+ });
216
+
217
+ it('GIVEN_feature_retry_WHEN_posted_THEN_routes_to_retry_tool', async () => {
218
+ const response = await actionsPost(
219
+ new Request('http://localhost/api/actions', {
220
+ method: 'POST',
221
+ body: JSON.stringify({
222
+ action: 'feature.retry',
223
+ feature_id: 'feature_checkout',
224
+ }),
225
+ }),
226
+ );
227
+
228
+ expect(response.status).toBe(200);
229
+ expect(retryFeatureMock).toHaveBeenCalledWith('feature_checkout', repoRoot);
230
+ });
231
+
157
232
  it('GIVEN_checkout_then_restore_WHEN_feature_branch_exists_THEN_persists_and_restores_checkout_record', async () => {
158
233
  readFeatureStateMock.mockResolvedValue({
159
234
  id: 'feature_checkout',
@@ -276,4 +351,23 @@ describe('dashboard api integration', () => {
276
351
  expect(body.data.projects.map((project) => project.name)).toEqual(['alpha', 'beta']);
277
352
  expect(body.data.projects.map((project) => project.path)).toEqual([projectAlpha, projectBeta]);
278
353
  });
354
+
355
+ it('GIVEN_feature_history_route_WHEN_requested_THEN_returns_log_entries', async () => {
356
+ const response = await logGet(
357
+ new Request('http://localhost/api/features/feature_checkout/log?project=alpha'),
358
+ {
359
+ params: Promise.resolve({ id: 'feature_checkout' }),
360
+ },
361
+ );
362
+ const body = (await response.json()) as {
363
+ ok: boolean;
364
+ data: { entries: Array<{ message: string }>; total: number };
365
+ };
366
+
367
+ expect(response.status).toBe(200);
368
+ expect(body.ok).toBe(true);
369
+ expect(body.data.total).toBe(1);
370
+ expect(body.data.entries[0].message).toBe('log message');
371
+ expect(readFeatureLogMock).toHaveBeenCalledWith('feature_checkout', repoRoot);
372
+ });
279
373
  });
@@ -2,7 +2,7 @@ import fs from 'node:fs/promises';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { afterEach, describe, expect, it } from 'vitest';
5
- import { readDashboardStatus } from '@/lib/aop-client.js';
5
+ import { readDashboardStatus, readFeatureLog } from '@/lib/aop-client.js';
6
6
 
7
7
  async function writeState(repoRoot: string, featureId: string, frontMatter: string): Promise<void> {
8
8
  const featureDir = path.join(repoRoot, '.aop', 'features', featureId);
@@ -91,6 +91,33 @@ describe('dashboard aop client mapping', () => {
91
91
  });
92
92
  });
93
93
 
94
+ it('GIVEN_state_with_gate_map_WHEN_readDashboardStatus_THEN_gate_statuses_are_parsed', async () => {
95
+ const repoRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aop-dash-client-'));
96
+ tempRoots.push(repoRoot);
97
+ await fs.mkdir(path.join(repoRoot, '.aop', 'features'), { recursive: true });
98
+ await fs.writeFile(
99
+ path.join(repoRoot, '.aop', 'features', 'index.json'),
100
+ JSON.stringify({ active: ['feature_gate'], blocked: [], merged: [], blocked_queue: [] }),
101
+ 'utf8',
102
+ );
103
+ await writeState(
104
+ repoRoot,
105
+ 'feature_gate',
106
+ [
107
+ 'feature_id: feature_gate',
108
+ 'version: 1',
109
+ 'status: qa',
110
+ 'gates:',
111
+ ' fast: pass',
112
+ ' full: fail',
113
+ ' merge: na',
114
+ ].join('\n'),
115
+ );
116
+
117
+ const payload = await readDashboardStatus(repoRoot);
118
+ expect(payload.features[0].gates).toEqual({ fast: 'pass', full: 'fail', merge: 'na' });
119
+ });
120
+
94
121
  it('GIVEN_blocked_queue_feature_without_state_WHEN_readDashboardStatus_THEN_phase_is_blocked', async () => {
95
122
  const repoRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aop-dash-client-'));
96
123
  tempRoots.push(repoRoot);
@@ -119,4 +146,31 @@ describe('dashboard aop client mapping', () => {
119
146
  phase: 'blocked',
120
147
  });
121
148
  });
149
+
150
+ it('GIVEN_state_body_and_evidence_WHEN_readFeatureLog_THEN_returns_sorted_entries', async () => {
151
+ const repoRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'aop-dash-client-'));
152
+ tempRoots.push(repoRoot);
153
+ const featureRoot = path.join(repoRoot, '.aop', 'features', 'feature_hist');
154
+ const evidenceRoot = path.join(featureRoot, 'evidence');
155
+ await fs.mkdir(evidenceRoot, { recursive: true });
156
+ await fs.writeFile(
157
+ path.join(featureRoot, 'state.md'),
158
+ [
159
+ '---',
160
+ 'feature_id: feature_hist',
161
+ 'status: qa',
162
+ '---',
163
+ '[2026-03-05T00:00:00Z] status changed to qa',
164
+ '[2026-03-04T20:00:00Z] gates fast pass',
165
+ ].join('\n'),
166
+ 'utf8',
167
+ );
168
+ await fs.writeFile(path.join(evidenceRoot, 'qa-summary.txt'), 'ok', 'utf8');
169
+
170
+ const log = await readFeatureLog('feature_hist', repoRoot);
171
+ expect(log.total).toBeGreaterThanOrEqual(3);
172
+ expect(log.entries[0].timestamp >= log.entries[1].timestamp).toBe(true);
173
+ expect(log.entries.some((entry) => entry.type === 'evidence')).toBe(true);
174
+ expect(log.entries.some((entry) => entry.type === 'state_change')).toBe(true);
175
+ });
122
176
  });
@@ -0,0 +1,139 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import {
3
+ applyQuickFilter,
4
+ computeSummaryCounts,
5
+ createDefaultFilters,
6
+ filterFeatures,
7
+ formatElapsedTime,
8
+ formatRelativeTime,
9
+ parseUnifiedDiff,
10
+ truncateText,
11
+ } from '../../../packages/web-dashboard/src/lib/dashboard-utils.js';
12
+ import type {
13
+ DashboardStatusPayload,
14
+ FeatureSummary,
15
+ } from '../../../packages/web-dashboard/src/lib/types.js';
16
+
17
+ function feature(overrides: Partial<FeatureSummary>): FeatureSummary {
18
+ return {
19
+ id: overrides.feature_id ?? 'feature_a',
20
+ feature_id: overrides.feature_id ?? 'feature_a',
21
+ status: overrides.status ?? 'planning',
22
+ phase: overrides.phase ?? 'planning',
23
+ branch: overrides.branch ?? null,
24
+ worktree_path: overrides.worktree_path ?? null,
25
+ activity_state: overrides.activity_state ?? 'idle',
26
+ pr: overrides.pr ?? null,
27
+ gates: overrides.gates,
28
+ ...overrides,
29
+ };
30
+ }
31
+
32
+ describe('dashboard utilities', () => {
33
+ it('applies quick filters deterministically', () => {
34
+ const active = applyQuickFilter('active');
35
+ expect(active.phases).toEqual(['planning', 'building', 'qa', 'ready_to_merge']);
36
+
37
+ const awaitingInput = applyQuickFilter('awaiting_input');
38
+ expect(awaitingInput.activities).toEqual(['waiting_input']);
39
+
40
+ const ciFailing = applyQuickFilter('ci_failing');
41
+ expect(ciFailing.ciFailuresOnly).toBe(true);
42
+ });
43
+
44
+ it('filters feature collections by search, phase, activity, gates, and ci', () => {
45
+ const features = [
46
+ feature({
47
+ feature_id: 'alpha',
48
+ phase: 'blocked',
49
+ activity_state: 'waiting_input',
50
+ gates: { fast: 'fail' },
51
+ pr: { ci_status: 'failure' },
52
+ }),
53
+ feature({
54
+ feature_id: 'beta',
55
+ phase: 'qa',
56
+ activity_state: 'active',
57
+ gates: { fast: 'pass' },
58
+ pr: { ci_status: 'success' },
59
+ }),
60
+ ];
61
+
62
+ const filters = {
63
+ ...createDefaultFilters(),
64
+ searchText: 'alp',
65
+ phases: ['blocked'] as FeatureSummary['phase'][],
66
+ activities: ['waiting_input'] as NonNullable<FeatureSummary['activity_state']>[],
67
+ gateFailuresOnly: true,
68
+ ciFailuresOnly: true,
69
+ };
70
+
71
+ const filtered = filterFeatures(features, filters);
72
+ expect(filtered).toHaveLength(1);
73
+ expect(filtered[0].feature_id).toBe('alpha');
74
+ });
75
+
76
+ it('computes summary counters from status payload', () => {
77
+ const payload: DashboardStatusPayload = {
78
+ index: {
79
+ active: ['alpha', 'beta'],
80
+ blocked: ['alpha'],
81
+ merged: [],
82
+ blocked_queue: [],
83
+ },
84
+ features: [
85
+ feature({
86
+ feature_id: 'alpha',
87
+ phase: 'blocked',
88
+ activity_state: 'waiting_input',
89
+ pr: { ci_status: 'failure' },
90
+ }),
91
+ feature({
92
+ feature_id: 'beta',
93
+ phase: 'ready_to_merge',
94
+ activity_state: 'active',
95
+ pr: { ci_status: 'success' },
96
+ }),
97
+ ],
98
+ };
99
+
100
+ const counts = computeSummaryCounts(payload);
101
+ expect(counts).toEqual({
102
+ active: 2,
103
+ blocked: 1,
104
+ awaitingInput: 1,
105
+ readyToMerge: 1,
106
+ ciFailing: 1,
107
+ });
108
+ });
109
+
110
+ it('parses unified diff into file and hunk metadata with line numbers', () => {
111
+ const parsed = parseUnifiedDiff(
112
+ [
113
+ 'diff --git a/file.ts b/file.ts',
114
+ 'index abc..def 100644',
115
+ '--- a/file.ts',
116
+ '+++ b/file.ts',
117
+ '@@ -1,2 +1,2 @@',
118
+ '-const oldValue = 1;',
119
+ '+const newValue = 2;',
120
+ ' export const done = true;',
121
+ ].join('\n'),
122
+ );
123
+
124
+ expect(parsed).toHaveLength(1);
125
+ expect(parsed[0].filePath).toBe('file.ts');
126
+ const allLines = parsed[0].hunks.flatMap((hunk) => hunk.lines);
127
+ const firstDelete = allLines.find((line) => line.type === 'del');
128
+ const firstAdd = allLines.find((line) => line.type === 'add');
129
+ expect(firstDelete).toMatchObject({ type: 'del', oldLineNumber: 1 });
130
+ expect(firstAdd).toMatchObject({ type: 'add', newLineNumber: 1 });
131
+ });
132
+
133
+ it('formats relative and elapsed time and truncates text', () => {
134
+ const now = Date.parse('2026-03-05T00:01:00Z');
135
+ expect(formatRelativeTime('2026-03-05T00:00:00Z', now)).toBe('1 minute ago');
136
+ expect(formatElapsedTime('2026-03-04T22:31:00Z', now)).toBe('1h 30m');
137
+ expect(truncateText('feature_abcdefghijklmnopqrstuvwxyz', 24)).toBe('feature_abcdefghijklm...');
138
+ });
139
+ });
@@ -19,7 +19,7 @@ describe('WorkerDecisionLoop', () => {
19
19
 
20
20
  function makeToolCaller() {
21
21
  return {
22
- callTool: vi.fn(async (_role: string, toolName: string) => {
22
+ callTool: vi.fn(async (_role: string, toolName: string, _input?: unknown) => {
23
23
  if (toolName === TOOLS.FEATURE_GET_CONTEXT) {
24
24
  return { ok: true, data: { refreshed: true } };
25
25
  }
@@ -117,6 +117,38 @@ describe('WorkerDecisionLoop', () => {
117
117
  );
118
118
  });
119
119
 
120
+ it('GIVEN_planner_submission_with_unknown_plan_fields_WHEN_executed_THEN_drops_unrecognized_fields', async () => {
121
+ const provider = makeProvider({
122
+ type: 'PLAN_SUBMISSION',
123
+ plan_json: {
124
+ feature_id: 'feature_a',
125
+ plan_version: 1,
126
+ summary: 'Initial plan',
127
+ phase_notes: ['not in schema'],
128
+ },
129
+ });
130
+ const toolCaller = makeToolCaller();
131
+ const loop = new WorkerDecisionLoop({
132
+ provider: provider as never,
133
+ toolCaller: toolCaller as never,
134
+ });
135
+
136
+ const result = await loop.execute({
137
+ role: 'planner',
138
+ featureId: 'feature_a',
139
+ contextBundle: { plan: null },
140
+ instructions: 'plan',
141
+ });
142
+
143
+ expect(result.planSubmission).toBe(true);
144
+ const planSubmitCall = toolCaller.callTool.mock.calls.find(
145
+ (call) => call[0] === 'planner' && call[1] === TOOLS.PLAN_SUBMIT,
146
+ );
147
+ expect(planSubmitCall).toBeDefined();
148
+ const payload = planSubmitCall?.[2] as { plan_json?: Record<string, unknown> };
149
+ expect(payload.plan_json?.phase_notes).toBeUndefined();
150
+ });
151
+
120
152
  it('GIVEN_planner_submission_with_existing_plan_WHEN_executed_THEN_routes_to_plan_update', async () => {
121
153
  const provider = makeProvider({
122
154
  type: 'PLAN_SUBMISSION',
@@ -478,6 +510,42 @@ describe('WorkerDecisionLoop', () => {
478
510
  );
479
511
  });
480
512
 
513
+ it('GIVEN_planner_amend_plan_with_unknown_plan_fields_WHEN_executed_THEN_strips_unrecognized_fields', async () => {
514
+ const provider = makeProvider({
515
+ type: 'REQUEST',
516
+ request: {
517
+ action: 'amend_plan',
518
+ plan_json: {
519
+ feature_id: 'feature_a',
520
+ plan_version: 1,
521
+ summary: 'Plan with extra metadata',
522
+ phase_notes: ['drop me'],
523
+ },
524
+ },
525
+ });
526
+ const toolCaller = makeToolCaller();
527
+ const loop = new WorkerDecisionLoop({
528
+ provider: provider as never,
529
+ toolCaller: toolCaller as never,
530
+ });
531
+
532
+ const result = await loop.execute({
533
+ role: 'planner',
534
+ featureId: 'feature_a',
535
+ contextBundle: { plan: null },
536
+ instructions: 'amend',
537
+ });
538
+
539
+ expect(result.requestHandled).toBe(true);
540
+ expect(result.planSubmission).toBe(true);
541
+ const planSubmitCall = toolCaller.callTool.mock.calls.find(
542
+ (call) => call[0] === 'planner' && call[1] === TOOLS.PLAN_SUBMIT,
543
+ );
544
+ expect(planSubmitCall).toBeDefined();
545
+ const payload = planSubmitCall?.[2] as { plan_json?: Record<string, unknown> };
546
+ expect(payload.plan_json?.phase_notes).toBeUndefined();
547
+ });
548
+
481
549
  it('GIVEN_planner_amend_plan_request_WHEN_existing_version_present_THEN_updates_plan', async () => {
482
550
  const provider = makeProvider({
483
551
  type: 'REQUEST',
@@ -620,7 +688,7 @@ describe('WorkerDecisionLoop amend_plan revision_of branches', () => {
620
688
 
621
689
  function makeToolCaller() {
622
690
  return {
623
- callTool: vi.fn(async (_role: string, toolName: string) => {
691
+ callTool: vi.fn(async (_role: string, toolName: string, _input?: unknown) => {
624
692
  if (toolName === TOOLS.FEATURE_GET_CONTEXT) {
625
693
  return { ok: true, data: { refreshed: true } };
626
694
  }
@@ -2,6 +2,7 @@ You are the planner role.
2
2
 
3
3
  Produce deterministic plan submissions and plan updates that conform to plan schema and policy constraints.
4
4
  Avoid speculative edits outside the declared file scope.
5
+ When emitting `PLAN_SUBMISSION` or `REQUEST.action=amend_plan`, `plan_json` must only include keys allowed by `plan.schema.json` (no extra fields such as `phase_notes`).
5
6
 
6
7
  After each QA wave, perform an explicit reconciliation pass:
7
8
 
@@ -2,6 +2,23 @@ import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { TOOLS } from '../core/constants.js';
4
4
  import { ERROR_CODES } from '../core/error-codes.js';
5
+ const PLAN_TOP_LEVEL_KEYS = new Set([
6
+ 'feature_id',
7
+ 'plan_version',
8
+ 'summary',
9
+ 'allowed_areas',
10
+ 'forbidden_areas',
11
+ 'base_ref',
12
+ 'files',
13
+ 'contracts',
14
+ 'acceptance_criteria',
15
+ 'gate_profile',
16
+ 'gate_targets',
17
+ 'risk',
18
+ 'revision_of',
19
+ 'revision_reason',
20
+ 'verification_overrides',
21
+ ]);
5
22
  function asRecord(value) {
6
23
  return value && typeof value === 'object' ? value : {};
7
24
  }
@@ -31,6 +48,16 @@ function readPlanVersion(value) {
31
48
  }
32
49
  return Math.floor(value);
33
50
  }
51
+ function sanitizePlannerPlan(plan) {
52
+ const sanitized = {};
53
+ for (const [key, value] of Object.entries(plan)) {
54
+ if (!PLAN_TOP_LEVEL_KEYS.has(key)) {
55
+ continue;
56
+ }
57
+ sanitized[key] = value;
58
+ }
59
+ return sanitized;
60
+ }
34
61
  function asOutputs(result) {
35
62
  const outputs = result.outputs;
36
63
  if (Array.isArray(outputs)) {
@@ -163,7 +190,7 @@ export class WorkerDecisionLoop {
163
190
  if (input.role !== 'planner') {
164
191
  return;
165
192
  }
166
- const planJson = asRecord(output.plan_json ?? output.plan);
193
+ const planJson = sanitizePlannerPlan(asRecord(output.plan_json ?? output.plan));
167
194
  if (Object.keys(planJson).length === 0) {
168
195
  return;
169
196
  }
@@ -266,7 +293,7 @@ export class WorkerDecisionLoop {
266
293
  return;
267
294
  }
268
295
  if (action === 'amend_plan' && input.role === 'planner') {
269
- const planJson = asRecord(request.plan_json);
296
+ const planJson = sanitizePlannerPlan(asRecord(request.plan_json));
270
297
  if (Object.keys(planJson).length === 0) {
271
298
  return;
272
299
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker-decision-loop.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/supervisor/worker-decision-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-decision-loop.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/supervisor/worker-decision-loop.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-orchestrator",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "private": false,
5
5
  "workspaces": [
6
6
  "packages/*"