@llm-dev-ops/agentics-cli 2.7.26 → 2.7.27

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.
@@ -1,28 +1,25 @@
1
1
  /**
2
- * ADR-PIPELINE-094 Decision 8 — Phase 5a local fallback generator.
2
+ * ADR-PIPELINE-094 Decision 8 + ADR-PIPELINE-099 D1+D2 — Phase 5a fallback.
3
3
  *
4
- * Produces minimal implementation prompts (`prompts/impl-001-*.md`) and
5
- * `prompts/execution-plan.json` from Phase-1 simulator consensus when Ruflo
6
- * is unavailable. Output is sufficient to satisfy ADR-094 Decision 3's
7
- * Phase 5b hard-block (`phase5a/execution-plan.json` 50 bytes).
4
+ * Produces N coherent implementation prompts (≥4 in every code path; ≥6 when
5
+ * the fleet decomposer + planner outputs are present) plus a valid
6
+ * `prompts/execution-plan.json`. Replaces the pre-099 single-prompt
7
+ * `impl-001-phase1-consensus.md` dump that the user reported as
8
+ * "thumbs up thumbs down garbage".
8
9
  *
9
- * The prompt-generator already has its own Phase-1 fallback path
10
- * (ADR-094 D2). This module exists for the case where the gate's Ruflo
11
- * invocation hits us before the prompt-generator runs — typically via
12
- * `runPrimaryPhaseExecution(phase5a-prompts, ...)` on the unavailable path.
10
+ * Precedence inside this module (mirrors ADR-099 §D1):
11
+ * tier-3: agent-fleet decomposition (decomposer.sub_objectives +
12
+ * planner.steps + clarifier.assumptions). Emits ≥6 prompts when
13
+ * the fleet returned ≥6 sub-objectives.
14
+ * tier-4: success-criterion fan-out — one prompt per
15
+ * `scenario.success_criteria[]` entry, with manifest brief +
16
+ * decision-memo + scenario inlined as guardrails. Emits ≥4
17
+ * prompts when at least 4 success criteria are present.
13
18
  *
14
- * For consistency with the prompt-generator, output paths and the prompt
15
- * frontmatter shape match D2's output.
19
+ * The two earlier tiers (Ruflo writer-agent and ADR/DDD/SPARC chain) live
20
+ * in the prompt-generator and the auto-chain phase 4.5 block; this fallback
21
+ * only runs when both of them produced nothing.
16
22
  */
17
23
  import type { LocalFallbackResult } from './phase3-local-fallback.js';
18
- /**
19
- * Run the Phase-5a fallback. Writes:
20
- * - phase5a/execution-plan.json
21
- * - prompts/impl-001-phase1-consensus.md
22
- *
23
- * If `phase5a/execution-plan.json` already exists (e.g. from the
24
- * prompt-generator's D2 path), this is a no-op success — we never overwrite
25
- * a richer execution plan with a fallback one.
26
- */
27
- export declare function runPhase5aLocalFallback(runDir: string): LocalFallbackResult;
24
+ export declare function runPhase5aLocalFallback(runDir: string, queryOverride?: string): LocalFallbackResult;
28
25
  //# sourceMappingURL=phase5a-local-fallback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"phase5a-local-fallback.d.ts","sourceRoot":"","sources":["../../../src/pipeline/local-fallback/phase5a-local-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAyE3E"}
1
+ {"version":3,"file":"phase5a-local-fallback.d.ts","sourceRoot":"","sources":["../../../src/pipeline/local-fallback/phase5a-local-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAatE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAwKnG"}
@@ -1,35 +1,33 @@
1
1
  /**
2
- * ADR-PIPELINE-094 Decision 8 — Phase 5a local fallback generator.
2
+ * ADR-PIPELINE-094 Decision 8 + ADR-PIPELINE-099 D1+D2 — Phase 5a fallback.
3
3
  *
4
- * Produces minimal implementation prompts (`prompts/impl-001-*.md`) and
5
- * `prompts/execution-plan.json` from Phase-1 simulator consensus when Ruflo
6
- * is unavailable. Output is sufficient to satisfy ADR-094 Decision 3's
7
- * Phase 5b hard-block (`phase5a/execution-plan.json` 50 bytes).
4
+ * Produces N coherent implementation prompts (≥4 in every code path; ≥6 when
5
+ * the fleet decomposer + planner outputs are present) plus a valid
6
+ * `prompts/execution-plan.json`. Replaces the pre-099 single-prompt
7
+ * `impl-001-phase1-consensus.md` dump that the user reported as
8
+ * "thumbs up thumbs down garbage".
8
9
  *
9
- * The prompt-generator already has its own Phase-1 fallback path
10
- * (ADR-094 D2). This module exists for the case where the gate's Ruflo
11
- * invocation hits us before the prompt-generator runs — typically via
12
- * `runPrimaryPhaseExecution(phase5a-prompts, ...)` on the unavailable path.
10
+ * Precedence inside this module (mirrors ADR-099 §D1):
11
+ * tier-3: agent-fleet decomposition (decomposer.sub_objectives +
12
+ * planner.steps + clarifier.assumptions). Emits ≥6 prompts when
13
+ * the fleet returned ≥6 sub-objectives.
14
+ * tier-4: success-criterion fan-out — one prompt per
15
+ * `scenario.success_criteria[]` entry, with manifest brief +
16
+ * decision-memo + scenario inlined as guardrails. Emits ≥4
17
+ * prompts when at least 4 success criteria are present.
13
18
  *
14
- * For consistency with the prompt-generator, output paths and the prompt
15
- * frontmatter shape match D2's output.
19
+ * The two earlier tiers (Ruflo writer-agent and ADR/DDD/SPARC chain) live
20
+ * in the prompt-generator and the auto-chain phase 4.5 block; this fallback
21
+ * only runs when both of them produced nothing.
16
22
  */
17
23
  import * as fs from 'node:fs';
18
24
  import * as path from 'node:path';
19
25
  import { readPhase1Consensus, extractScenarioQuery } from './phase1-consensus-reader.js';
20
- /**
21
- * Run the Phase-5a fallback. Writes:
22
- * - phase5a/execution-plan.json
23
- * - prompts/impl-001-phase1-consensus.md
24
- *
25
- * If `phase5a/execution-plan.json` already exists (e.g. from the
26
- * prompt-generator's D2 path), this is a no-op success — we never overwrite
27
- * a richer execution plan with a fallback one.
28
- */
29
- export function runPhase5aLocalFallback(runDir) {
26
+ import { decomposeAgentFleet, renderUnitPromptMarkdown } from '../../synthesis/agent-fleet-decomposer.js';
27
+ export function runPhase5aLocalFallback(runDir, queryOverride) {
30
28
  const filesWritten = [];
31
29
  // Skip if the canonical artifacts already exist (the prompt-generator's
32
- // D2 fallback path may have produced them).
30
+ // ADR-094 D2 path may have produced them).
33
31
  const existingPlan = path.join(runDir, 'phase5a', 'execution-plan.json');
34
32
  if (fs.existsSync(existingPlan) && fs.statSync(existingPlan).size > 50) {
35
33
  return {
@@ -47,37 +45,115 @@ export function runPhase5aLocalFallback(runDir) {
47
45
  message: 'Phase-5a local fallback: no Phase-1 consensus on disk',
48
46
  };
49
47
  }
50
- const query = extractScenarioQuery(consensus) || '';
48
+ // Caller-supplied query (the user's original `agentics ask` brief) takes
49
+ // precedence over scenario.json, since the prompt-generator's D2 entry
50
+ // point carries the canonical PipelineContext.query and Phase-1 may not
51
+ // have written scenario.json with a `summary` field.
52
+ const query = queryOverride || extractScenarioQuery(consensus) || '';
53
+ const promptsDir = path.join(runDir, 'prompts');
54
+ const phase5aDir = path.join(runDir, 'phase5a');
51
55
  try {
52
- // ── Implementation prompt ─────────────────────────────────────────────
53
- const promptsDir = path.join(runDir, 'prompts');
54
56
  fs.mkdirSync(promptsDir, { recursive: true });
55
- const promptId = 'impl-001-phase1-consensus';
56
- const promptBody = buildPhase1FallbackPromptMarkdown(query, consensus.decisionMemo, consensus.scenario, consensus.executiveSummary);
57
- fs.writeFileSync(path.join(promptsDir, `${promptId}.md`), promptBody, 'utf8');
58
- filesWritten.push(`prompts/${promptId}.md`);
59
- // ── Execution plan ────────────────────────────────────────────────────
60
- const phase5aDir = path.join(runDir, 'phase5a');
61
57
  fs.mkdirSync(phase5aDir, { recursive: true });
58
+ const promptEntries = [];
59
+ // ── Tier 3: agent-fleet decomposition ────────────────────────────────
60
+ const decomp = decomposeAgentFleet(runDir, query);
61
+ if (decomp.units.length > 0) {
62
+ decomp.units.forEach((unit, idx) => {
63
+ const order = idx + 1;
64
+ const filename = `impl-${pad3(order)}-${unit.slug}.md`;
65
+ const body = renderUnitPromptMarkdown(unit, order, decomp.units.length, decomp.context, [], []);
66
+ fs.writeFileSync(path.join(promptsDir, filename), body, 'utf-8');
67
+ filesWritten.push(`prompts/${filename}`);
68
+ promptEntries.push({
69
+ id: unit.id,
70
+ title: unit.title,
71
+ order,
72
+ path: `prompts/${filename}`,
73
+ source: unit.sourceAgent,
74
+ tier: unit.tier,
75
+ dependencies: unit.dependencies,
76
+ });
77
+ });
78
+ process.stderr.write(` [PROMPTS] Phase-5a tier-3 (agent-fleet): wrote ${decomp.units.length} prompts ` +
79
+ `(decomposer=${decomp.provenance.decomposerCount}, planner=${decomp.provenance.plannerCount}, ` +
80
+ `assumptions=${decomp.provenance.clarifierAssumptionsCount})\n`);
81
+ }
82
+ // ── Tier 4: success-criterion fan-out ────────────────────────────────
83
+ // If tier-3 didn't reach the ≥6 floor, supplement with one prompt per
84
+ // success-criterion. Even when tier-3 produced ≥6 we DON'T add tier-4
85
+ // — too many prompts dilutes the build plan.
86
+ if (promptEntries.length < 6) {
87
+ const successCriteria = extractSuccessCriteriaList(consensus);
88
+ const startingOrder = promptEntries.length + 1;
89
+ successCriteria.forEach((criterion, idx) => {
90
+ const order = startingOrder + idx;
91
+ const slug = slugify(`validate-${criterion}`) || `success-criterion-${idx + 1}`;
92
+ const filename = `impl-${pad3(order)}-${slug}.md`;
93
+ const body = renderSuccessCriterionPrompt(order, startingOrder + successCriteria.length - 1, criterion, query, consensus.executiveSummary, consensus.decisionMemo, promptEntries.map(p => p.id));
94
+ fs.writeFileSync(path.join(promptsDir, filename), body, 'utf-8');
95
+ filesWritten.push(`prompts/${filename}`);
96
+ promptEntries.push({
97
+ id: `unit-${pad3(order)}-${slug}`,
98
+ title: `Validate success criterion: ${truncate(criterion, 60)}`,
99
+ order,
100
+ path: `prompts/${filename}`,
101
+ source: 'phase1/scenario.success_criteria',
102
+ tier: 'validation',
103
+ dependencies: promptEntries.length > 0 ? [promptEntries[0].id] : [],
104
+ });
105
+ });
106
+ if (successCriteria.length > 0) {
107
+ process.stderr.write(` [PROMPTS] Phase-5a tier-4 (success-criteria): wrote ${successCriteria.length} validation prompts ` +
108
+ `(total now: ${promptEntries.length})\n`);
109
+ }
110
+ }
111
+ // ── Last-resort safety net ───────────────────────────────────────────
112
+ // If even tier-3 + tier-4 produced fewer than 4 prompts, synthesize
113
+ // from the executive summary + decision memo + scenario.json — but
114
+ // split into 4 distinct prompts (foundation, integration, domain,
115
+ // validation), NEVER one. The pre-ADR-099 single-prompt path is gone.
116
+ if (promptEntries.length < 4) {
117
+ const synth = synthesizeMinimumFourPrompts(query, consensus);
118
+ synth.forEach((p, idx) => {
119
+ const order = promptEntries.length + idx + 1;
120
+ const filename = `impl-${pad3(order)}-${p.slug}.md`;
121
+ fs.writeFileSync(path.join(promptsDir, filename), p.body, 'utf-8');
122
+ filesWritten.push(`prompts/${filename}`);
123
+ promptEntries.push({
124
+ id: `unit-${pad3(order)}-${p.slug}`,
125
+ title: p.title,
126
+ order,
127
+ path: `prompts/${filename}`,
128
+ source: 'phase1-fallback-synthesis',
129
+ tier: p.tier,
130
+ dependencies: p.dependsOnFirst && promptEntries.length > 0 ? [promptEntries[0].id] : [],
131
+ });
132
+ });
133
+ process.stderr.write(` [PROMPTS] Phase-5a tier-5 (minimum-4 synthesis): wrote ${synth.length} prompts ` +
134
+ `(total now: ${promptEntries.length})\n`);
135
+ }
136
+ // ── Execution plan (legacy + canonical paths) ────────────────────────
62
137
  const executionPlan = {
63
- generator: 'local-fallback',
64
- quality: 'degraded',
65
- totalSteps: 1,
66
- estimatedDuration: '5-15 minutes',
67
- implementations: [{
68
- id: promptId,
69
- title: 'Implementation: Phase-1 consensus',
70
- boundedContext: 'phase1-consensus',
71
- source: 'phase1-consensus',
72
- order: 1,
73
- path: `prompts/${promptId}.md`,
74
- }],
138
+ generator: decomp.units.length > 0 ? 'agent-fleet' : 'phase1-fallback-multi',
139
+ quality: decomp.units.length > 0 ? 'directional' : 'degraded',
140
+ totalSteps: promptEntries.length,
141
+ estimatedDuration: `${promptEntries.length * 5}-${promptEntries.length * 15} minutes`,
142
+ implementations: promptEntries.map(e => ({
143
+ id: e.id,
144
+ title: e.title,
145
+ boundedContext: e.tier,
146
+ source: e.source,
147
+ order: e.order,
148
+ path: e.path,
149
+ dependencies: e.dependencies,
150
+ })),
151
+ provenance: decomp.provenance,
75
152
  };
76
153
  const planJson = JSON.stringify(executionPlan, null, 2);
77
- fs.writeFileSync(path.join(phase5aDir, 'execution-plan.json'), planJson, 'utf8');
154
+ fs.writeFileSync(path.join(phase5aDir, 'execution-plan.json'), planJson, 'utf-8');
78
155
  filesWritten.push('phase5a/execution-plan.json');
79
- // Also mirror execution-plan into prompts/ for legacy consumers.
80
- fs.writeFileSync(path.join(promptsDir, 'execution-plan.json'), planJson, 'utf8');
156
+ fs.writeFileSync(path.join(promptsDir, 'execution-plan.json'), planJson, 'utf-8');
81
157
  filesWritten.push('prompts/execution-plan.json');
82
158
  }
83
159
  catch (err) {
@@ -91,76 +167,193 @@ export function runPhase5aLocalFallback(runDir) {
91
167
  return {
92
168
  success: true,
93
169
  filesWritten,
94
- message: `Phase-5a local fallback: wrote ${filesWritten.length} prompt artifacts (degraded)`,
170
+ message: `Phase-5a local fallback: wrote ${filesWritten.length} prompt artifacts (${filesWritten.filter(f => f.startsWith('prompts/impl-')).length} build prompts)`,
95
171
  };
96
172
  }
97
- function buildPhase1FallbackPromptMarkdown(query, decisionMemo, scenario, execSummary) {
173
+ // ── Helpers ────────────────────────────────────────────────────────────────
174
+ function extractSuccessCriteriaList(consensus) {
175
+ if (!consensus || !consensus.scenario)
176
+ return [];
177
+ const sc = consensus.scenario['success_criteria'] ?? consensus.scenario['successCriteria'];
178
+ const out = [];
179
+ if (Array.isArray(sc)) {
180
+ for (const item of sc) {
181
+ if (typeof item === 'string')
182
+ out.push(item);
183
+ else if (item && typeof item === 'object') {
184
+ const o = item;
185
+ for (const key of ['description', 'criterion', 'name', 'title']) {
186
+ if (typeof o[key] === 'string') {
187
+ out.push(o[key]);
188
+ break;
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ return out;
195
+ }
196
+ function renderSuccessCriterionPrompt(order, total, criterion, query, execSummary, decisionMemo, priorUnitIds) {
98
197
  const lines = [];
99
198
  lines.push('---');
100
- lines.push('id: impl-001-phase1-consensus');
101
- lines.push('title: Phase-1 Consensus Implementation');
102
- lines.push('order: 1');
103
- lines.push('degraded_mode: phase1-fallback');
104
- lines.push(`source: ${[
105
- decisionMemo ? 'phase1/decision-memo.md' : null,
106
- scenario ? 'phase1/scenario.json' : null,
107
- execSummary ? 'phase1/executive-summary.md' : null,
108
- ].filter(Boolean).join(', ') || 'phase1-consensus'}`);
199
+ lines.push(`id: unit-${pad3(order)}-${slugify(`validate-${criterion}`)}`);
200
+ lines.push(`title: ${escapeYamlString(`Validate success criterion: ${truncate(criterion, 60)}`)}`);
201
+ lines.push(`order: ${order}`);
202
+ lines.push('tier: validation');
203
+ lines.push('generator: phase1-fallback-multi');
109
204
  lines.push('quality: degraded');
110
- lines.push('generator: local-fallback');
205
+ lines.push(`source: phase1/scenario.success_criteria`);
206
+ if (priorUnitIds.length > 0) {
207
+ lines.push('dependencies:');
208
+ for (const d of priorUnitIds)
209
+ lines.push(` - ${d}`);
210
+ }
211
+ else {
212
+ lines.push('dependency_root: true');
213
+ }
111
214
  lines.push('---');
112
215
  lines.push('');
113
- lines.push('# Implementation: Phase-1 Consensus');
216
+ lines.push(`# Build Step ${order} of ${total}: Validate "${truncate(criterion, 80)}"`);
217
+ lines.push('');
218
+ lines.push('## Project Brief');
219
+ lines.push('');
220
+ lines.push(query || '(no brief recorded)');
221
+ lines.push('');
222
+ lines.push('## Success Criterion This Step Verifies');
114
223
  lines.push('');
115
- lines.push('> **Generated by local fallback** (ADR-PIPELINE-094 Decision 8). The full SPARC → ADR → DDD chain was unavailable for this run; this prompt was produced directly from Phase-1 simulator consensus. Quality: **degraded**.');
224
+ lines.push(`> ${criterion}`);
116
225
  lines.push('');
117
- if (query) {
118
- lines.push('## Brief');
226
+ if (execSummary) {
227
+ lines.push('## Executive Summary (context)');
119
228
  lines.push('');
120
- lines.push(query);
229
+ lines.push(truncate(execSummary.trim(), 1200));
121
230
  lines.push('');
122
231
  }
123
- if (execSummary) {
124
- lines.push('## Executive Summary');
232
+ if (decisionMemo) {
233
+ lines.push('## Decision Memo (rationale)');
125
234
  lines.push('');
126
- lines.push(execSummary.trim());
235
+ lines.push(truncate(decisionMemo.trim(), 1200));
127
236
  lines.push('');
128
237
  }
129
- if (decisionMemo) {
130
- lines.push('## Decision Memo');
238
+ lines.push('## Implementation Expectations');
239
+ lines.push('');
240
+ lines.push('1. Build the smallest deployable slice that proves the success criterion above.');
241
+ lines.push('2. Write tests first that exercise the criterion end-to-end.');
242
+ lines.push('3. Real domain logic — no stubs.');
243
+ lines.push('4. Export public APIs that downstream prompts can import.');
244
+ lines.push('5. Zero compilation errors. No `any` for domain values.');
245
+ lines.push('');
246
+ return lines.join('\n');
247
+ }
248
+ function synthesizeMinimumFourPrompts(query, consensus) {
249
+ const lang = consensus.projectLanguage ?? 'typescript';
250
+ const slices = [
251
+ {
252
+ slug: 'foundation-types-and-config',
253
+ title: 'Foundation: Domain Types + AppConfig + Logger',
254
+ tier: 'foundation',
255
+ description: 'Build the core domain types, the typed AppConfig (env-driven, Zod-validated), the structured logger, and the typed AppError hierarchy. Every later step imports from this slice.',
256
+ dependsOnFirst: false,
257
+ },
258
+ {
259
+ slug: 'analysis-layer',
260
+ title: 'Domain: Analysis Layer (pure functions)',
261
+ tier: 'domain',
262
+ description: 'Implement the analysis layer as pure functions over the domain types. No I/O, no side-effects. Unit-tested against fixtures.',
263
+ dependsOnFirst: true,
264
+ },
265
+ {
266
+ slug: 'integration-and-decisions',
267
+ title: 'Integration: External Surface + Decision Layer',
268
+ tier: 'integration',
269
+ description: 'Wire the analysis layer to the inbound API and outbound integration (HTTP/ERP/webhook as the brief requires). Idempotency keys on writes, retry with backoff, circuit breaker.',
270
+ dependsOnFirst: true,
271
+ },
272
+ {
273
+ slug: 'smoke-and-validation',
274
+ title: 'Validation: End-to-end Smoke + Health Check',
275
+ tier: 'validation',
276
+ description: 'Smoke test that walks the full request → analysis → decision → integration path. Health-check endpoint. Verify the executive-summary success metrics are observable.',
277
+ dependsOnFirst: true,
278
+ },
279
+ ];
280
+ return slices.map((slice, idx) => ({
281
+ slug: slice.slug,
282
+ title: slice.title,
283
+ tier: slice.tier,
284
+ dependsOnFirst: slice.dependsOnFirst,
285
+ body: renderSynthesizedPromptBody(idx + 1, slices.length, slice, query, lang, consensus),
286
+ }));
287
+ }
288
+ function renderSynthesizedPromptBody(order, total, slice, query, lang, consensus) {
289
+ const lines = [];
290
+ lines.push('---');
291
+ lines.push(`id: unit-${pad3(order)}-${slice.slug}`);
292
+ lines.push(`title: ${escapeYamlString(slice.title)}`);
293
+ lines.push(`order: ${order}`);
294
+ lines.push(`tier: ${slice.tier}`);
295
+ lines.push('generator: phase1-fallback-multi');
296
+ lines.push('quality: degraded');
297
+ lines.push('source: phase1-fallback-synthesis');
298
+ if (slice.dependsOnFirst) {
299
+ lines.push('dependencies:');
300
+ lines.push(' - unit-001-foundation-types-and-config');
301
+ }
302
+ else {
303
+ lines.push('dependency_root: true');
304
+ }
305
+ lines.push('---');
306
+ lines.push('');
307
+ lines.push(`# Build Step ${order} of ${total}: ${slice.title}`);
308
+ lines.push('');
309
+ lines.push(`**Tier:** ${slice.tier} · **Language:** ${lang}`);
310
+ lines.push('');
311
+ lines.push('## Project Brief');
312
+ lines.push('');
313
+ lines.push(query || '(no brief recorded)');
314
+ lines.push('');
315
+ lines.push('## What This Step Builds');
316
+ lines.push('');
317
+ lines.push(slice.description);
318
+ lines.push('');
319
+ if (consensus.executiveSummary) {
320
+ lines.push('## Executive Summary (context)');
131
321
  lines.push('');
132
- lines.push(decisionMemo.trim());
322
+ lines.push(truncate(consensus.executiveSummary.trim(), 1500));
133
323
  lines.push('');
134
324
  }
135
- if (scenario) {
136
- lines.push('## Scenario');
325
+ if (consensus.decisionMemo) {
326
+ lines.push('## Decision Memo (rationale)');
137
327
  lines.push('');
138
- lines.push('```json');
139
- lines.push(JSON.stringify(scenario, null, 2));
140
- lines.push('```');
328
+ lines.push(truncate(consensus.decisionMemo.trim(), 1500));
141
329
  lines.push('');
142
330
  }
143
- lines.push('## Implementation Directive');
144
- lines.push('');
145
- lines.push('Implement the system described in the Brief, using the Decision Memo and');
146
- lines.push('Executive Summary above as architectural rationale. Produce a single deployable');
147
- lines.push('service in the language declared by `phase1/manifest.json` (`project.language`).');
148
- lines.push('');
149
- lines.push('Layered structure:');
150
- lines.push('');
151
- lines.push('```');
152
- lines.push('src/');
153
- lines.push(' index.ts # entry point');
154
- lines.push(' config.ts # AppConfig + environment loading');
155
- lines.push(' errors.ts # typed AppError classes');
156
- lines.push(' analysis.ts # analysis layer (pure functions)');
157
- lines.push(' decisions.ts # decision layer (pure functions)');
158
- lines.push(' integration.ts # outbound integration (HTTP/ERP)');
159
- lines.push('tests/');
160
- lines.push(' analysis.test.ts');
161
- lines.push(' decisions.test.ts');
162
- lines.push('```');
331
+ lines.push('## Implementation Expectations');
332
+ lines.push('');
333
+ lines.push('1. Implement only this slice no premature work on later steps.');
334
+ lines.push('2. Tests first (London-school TDD). Mock dependencies from prior steps.');
335
+ lines.push('3. Real domain logic. No stubs, no TODO scaffolds, no placeholder bodies.');
336
+ lines.push('4. Export public APIs at module boundaries so downstream slices can import.');
337
+ lines.push('5. Zero compilation errors. Validate ALL external input with Zod.');
338
+ lines.push('6. Structured logging via createLogger() — never console.log in production code.');
163
339
  lines.push('');
164
340
  return lines.join('\n');
165
341
  }
342
+ function pad3(n) {
343
+ return String(n).padStart(3, '0');
344
+ }
345
+ function slugify(text) {
346
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '').slice(0, 60);
347
+ }
348
+ function truncate(text, max) {
349
+ if (!text)
350
+ return '';
351
+ return text.length > max ? text.slice(0, max - 1) + '…' : text;
352
+ }
353
+ function escapeYamlString(s) {
354
+ if (/[:#&*!|>'"%@`?[\]{},]/.test(s)) {
355
+ return `"${s.replace(/"/g, '\\"').replace(/\\/g, '\\\\')}"`;
356
+ }
357
+ return s;
358
+ }
166
359
  //# sourceMappingURL=phase5a-local-fallback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phase5a-local-fallback.js","sourceRoot":"","sources":["../../../src/pipeline/local-fallback/phase5a-local-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzF;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,qEAAqE;SAC/E,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,qBAAqB;YAC7B,OAAO,EAAE,uDAAuD;SACjE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEpD,IAAI,CAAC;QACH,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,2BAA2B,CAAC;QAC7C,MAAM,UAAU,GAAG,iCAAiC,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,KAAK,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9E,YAAY,CAAC,IAAI,CAAC,WAAW,QAAQ,KAAK,CAAC,CAAC;QAE5C,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG;YACpB,SAAS,EAAE,gBAAgB;YAC3B,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,CAAC;YACb,iBAAiB,EAAE,cAAc;YACjC,eAAe,EAAE,CAAC;oBAChB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,mCAAmC;oBAC1C,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,kBAAkB;oBAC1B,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,WAAW,QAAQ,KAAK;iBAC/B,CAAC;SACH,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjF,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAEjD,iEAAiE;QACjE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjF,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,2CAA4C,GAAa,CAAC,OAAO,EAAE;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,OAAO,EAAE,kCAAkC,YAAY,CAAC,MAAM,8BAA8B;KAC7F,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CACxC,KAAa,EACb,YAAgC,EAChC,QAA6C,EAC7C,WAA+B;IAE/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,WAAW;QACpB,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI;QAC/C,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI;QACxC,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI;KACnD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,4NAA4N,CAAC,CAAC;IACzO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"phase5a-local-fallback.js","sourceRoot":"","sources":["../../../src/pipeline/local-fallback/phase5a-local-fallback.ts"],"names":[],"mappings":"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"}