@opengroundplan/core 0.1.1 → 0.2.0

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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.d.ts +81 -0
  3. package/dist/agent-runtime.js +108 -0
  4. package/dist/agent-runtime.js.map +1 -0
  5. package/dist/analysis.d.ts +36 -0
  6. package/dist/analysis.js +106 -0
  7. package/dist/analysis.js.map +1 -0
  8. package/dist/analyze.d.ts +26 -0
  9. package/dist/analyze.js +155 -0
  10. package/dist/analyze.js.map +1 -0
  11. package/dist/assessment.d.ts +39 -0
  12. package/dist/assessment.js +81 -0
  13. package/dist/assessment.js.map +1 -0
  14. package/dist/autoplan.d.ts +60 -0
  15. package/dist/autoplan.js +219 -0
  16. package/dist/autoplan.js.map +1 -0
  17. package/dist/blueprint.d.ts +102 -0
  18. package/dist/blueprint.js +490 -0
  19. package/dist/blueprint.js.map +1 -0
  20. package/dist/config.d.ts +11 -0
  21. package/dist/config.js +18 -0
  22. package/dist/config.js.map +1 -1
  23. package/dist/graph.d.ts +20 -0
  24. package/dist/graph.js +84 -0
  25. package/dist/graph.js.map +1 -0
  26. package/dist/improve.d.ts +20 -0
  27. package/dist/improve.js +50 -0
  28. package/dist/improve.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.js +15 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/infer-llm.d.ts +29 -0
  33. package/dist/infer-llm.js +114 -0
  34. package/dist/infer-llm.js.map +1 -0
  35. package/dist/intent.js +24 -1
  36. package/dist/intent.js.map +1 -1
  37. package/dist/knowledge.d.ts +23 -0
  38. package/dist/knowledge.js +61 -0
  39. package/dist/knowledge.js.map +1 -0
  40. package/dist/library.d.ts +25 -0
  41. package/dist/library.js +89 -0
  42. package/dist/library.js.map +1 -0
  43. package/dist/loader.js +23 -5
  44. package/dist/loader.js.map +1 -1
  45. package/dist/pipeline.d.ts +25 -0
  46. package/dist/pipeline.js +37 -0
  47. package/dist/pipeline.js.map +1 -0
  48. package/dist/schema.d.ts +113 -113
  49. package/dist/simulate.d.ts +15 -0
  50. package/dist/simulate.js +89 -0
  51. package/dist/simulate.js.map +1 -0
  52. package/dist/variables.d.ts +7 -0
  53. package/dist/variables.js +37 -0
  54. package/dist/variables.js.map +1 -0
  55. package/dist/verification.d.ts +23 -0
  56. package/dist/verification.js +61 -0
  57. package/dist/verification.js.map +1 -0
  58. package/package.json +7 -4
  59. package/templates/bases/fastapi-service/blueprint.yaml +2 -3
  60. package/templates/layers/auth-jwt/blueprint.yaml +3 -0
  61. package/templates/layers/auth-oidc/blueprint.yaml +1 -0
  62. package/templates/layers/db-mongo/blueprint.yaml +1 -0
  63. package/templates/layers/db-postgres/blueprint.yaml +3 -0
  64. package/templates/layers/db-sqlite/blueprint.yaml +1 -0
@@ -0,0 +1,490 @@
1
+ /**
2
+ * From a selection to an engineering blueprint — the documents a team would write by hand before
3
+ * a line of code: understanding, requirements, architecture decisions, a roadmap, and tasks.
4
+ *
5
+ * Deterministic and catalog-driven. Everything here is derived from the `AutoSelection` (which
6
+ * already carries the ranked architecture, its reasons, the inferred layers, matched intent
7
+ * signals, confidence, and gaps) plus the catalog's own names and descriptions — no prose is
8
+ * invented that can't be traced to a signal or a blueprint. When a model produced the selection
9
+ * its reasoning rides along in `assumptions`; the blueprint reads the same either way.
10
+ */
11
+ import { executionWaves, orchestrate } from './agent-runtime.js';
12
+ import { buildVsBuy, costEstimate, reviewArchitecture } from './analysis.js';
13
+ import { ctoReview, generateADRs, overallScore, qualityScores } from './assessment.js';
14
+ import { renderSimulation, simulate } from './simulate.js';
15
+ import { matchIndustry } from './library.js';
16
+ import { renderGraph } from './graph.js';
17
+ /** Human labels for the quality attributes, so a non-functional requirement reads like prose. */
18
+ const CHARACTERISTIC_LABEL = {
19
+ simplicity: 'Simplicity — few moving parts, fast to ship',
20
+ scalability: 'Scalability — grows with load without a rewrite',
21
+ deployability: 'Deployability — released often and independently',
22
+ testability: 'Testability — behaviour provable in isolation',
23
+ evolvability: 'Evolvability — direction changes cheaply',
24
+ 'fault-tolerance': 'Fault tolerance — survives partial failure',
25
+ maintainability: 'Maintainability — changed safely by a team',
26
+ elasticity: 'Elasticity — absorbs sudden spikes',
27
+ responsiveness: 'Responsiveness — low latency to the user',
28
+ cost: 'Cost — infrastructure spend kept low',
29
+ };
30
+ /** Fixed lifecycle phases — the shape every roadmap takes; the items are project-specific. */
31
+ const LIFECYCLE = [
32
+ ['Discovery', 'Confirm the problem, users, and constraints'],
33
+ ['Planning', 'Break the work into milestones and a backlog'],
34
+ ['Architecture', 'Set boundaries, contracts, and the data model'],
35
+ ['Implementation', 'Build the base and each capability behind its seam'],
36
+ ['Testing', 'Unit, integration, and end-to-end coverage'],
37
+ ['Security review', 'Threat model, dependency and secret scanning'],
38
+ ['Performance review', 'Load, latency, and cost against the targets'],
39
+ ['Deployment', 'CI/CD, infrastructure, and a first release'],
40
+ ['Monitoring', 'Health, tracing, and alerting in production'],
41
+ ];
42
+ export function buildBlueprint(idea, selection, catalog, gaps = [], agents = []) {
43
+ const layers = selection.layers
44
+ .map((id) => catalog.blueprints.get(id))
45
+ .filter((b) => b !== undefined)
46
+ .map((b) => ({ id: b.id, name: b.name, description: b.description }));
47
+ // Describe the architecture that was actually chosen (what `new` would build), not merely the
48
+ // top of the ranking — the two diverge when the top pick has no base for the stack.
49
+ const chosen = selection.ranked.find((r) => r.architecture.id === selection.architecture) ?? selection.ranked[0];
50
+ const architecture = {
51
+ id: selection.architecture,
52
+ name: chosen?.architecture.name ?? 'No overlay',
53
+ oneLine: chosen?.architecture.oneLine ?? 'A layout was not prescribed for this stack.',
54
+ reasons: chosen?.reasons ?? [],
55
+ concerns: chosen?.concerns ?? [],
56
+ alternatives: selection.ranked
57
+ .slice(1, 4)
58
+ .map((r) => ({ name: r.architecture.name, fit: Math.round(r.fit * 100) / 100 })),
59
+ };
60
+ const taskList = tasks(selection, layers);
61
+ const review = reviewArchitecture(selection);
62
+ const quality = qualityScores(selection, review);
63
+ return {
64
+ idea,
65
+ domain: selection.intent.family ?? 'application',
66
+ dna: deriveDNA(selection),
67
+ industry: matchIndustry(idea),
68
+ confidence: selection.confidence,
69
+ understanding: understanding(selection),
70
+ assumptions: selection.assumptions,
71
+ requirements: requirements(selection, layers),
72
+ decisions: decisions(selection, layers),
73
+ architecture,
74
+ layers,
75
+ roadmap: roadmap(selection, layers),
76
+ risks: risks(selection, gaps),
77
+ gaps,
78
+ tasks: taskList,
79
+ review,
80
+ buildVsBuy: buildVsBuy(selection),
81
+ cost: costEstimate(selection),
82
+ quality,
83
+ adrs: generateADRs(selection),
84
+ ctoReview: ctoReview(selection, review, quality),
85
+ simulation: simulate(selection),
86
+ orchestration: orchestrate(taskList, agents),
87
+ executionWaves: executionWaves(taskList),
88
+ };
89
+ }
90
+ const sig = (s, id) => s.intent.matched.some((m) => m.signal === id);
91
+ /** Derive the ProjectDNA from the matched signals, family, and priorities — all traceable. */
92
+ function deriveDNA(s) {
93
+ const regulated = sig(s, 'regulated');
94
+ const multiTenant = sig(s, 'multi-tenant');
95
+ const scale = sig(s, 'high-traffic')
96
+ ? 'large'
97
+ : multiTenant || (s.intent.priorities.scalability ?? 0) >= 3
98
+ ? 'growing'
99
+ : 'small';
100
+ return {
101
+ industry: regulated ? 'regulated' : s.intent.family ?? 'general',
102
+ productType: s.intent.family === 'ai' ? 'AI application' : multiTenant ? 'SaaS' : sig(s, 'frontend-heavy') ? 'frontend app' : sig(s, 'data-pipeline') ? 'data platform' : 'application',
103
+ businessModel: multiTenant ? 'multi-tenant SaaS' : sig(s, 'crud-admin') ? 'internal tool' : 'to be defined',
104
+ expectedScale: scale,
105
+ security: regulated || multiTenant ? 'elevated' : 'standard',
106
+ compliance: regulated ? 'regulated' : 'none',
107
+ riskLevel: sig(s, 'mvp') ? 'low' : regulated || scale === 'large' ? 'high' : 'medium',
108
+ };
109
+ }
110
+ function understanding(s) {
111
+ const notes = [
112
+ `Read as a ${s.intent.family ?? 'general application'} project on the ${s.stack} stack.`,
113
+ `Team size assumed: ${s.teamSize} engineer(s).`,
114
+ `Overall confidence: ${Math.round(s.confidence * 100)}%.`,
115
+ ];
116
+ for (const m of s.intent.matched)
117
+ notes.push(`Signal "${m.signal}": ${m.because}.`);
118
+ return notes;
119
+ }
120
+ function requirements(s, layers) {
121
+ const out = [];
122
+ let n = 1;
123
+ for (const layer of layers) {
124
+ out.push({ id: `FR-${n++}`, kind: 'functional', text: `${layer.name}. ${layer.description}` });
125
+ }
126
+ // Inferred requirements — the capabilities the domain implies but the brief never spelled out.
127
+ let i = 1;
128
+ for (const m of s.intent.matched) {
129
+ out.push({ id: `INF-${i++}`, kind: 'inferred', text: `Consideration raised by "${m.signal}"`, because: m.because });
130
+ }
131
+ let q = 1;
132
+ for (const [char, weight] of Object.entries(s.intent.priorities)) {
133
+ if ((weight ?? 0) < 3)
134
+ continue;
135
+ out.push({ id: `NFR-${q++}`, kind: 'non-functional', text: `${CHARACTERISTIC_LABEL[char] ?? char} (weight ${weight}/5)` });
136
+ }
137
+ return out;
138
+ }
139
+ function decisions(s, layers) {
140
+ const out = [];
141
+ out.push({
142
+ topic: 'Stack',
143
+ choice: s.stack,
144
+ reason: s.assumptions.find((a) => a.toLowerCase().startsWith('stack')) ?? `Best fit for a ${s.intent.family ?? 'general'} project.`,
145
+ confidence: s.confidence,
146
+ alternatives: ['typescript', 'python', 'dotnet', 'node', 'go', 'polyglot'].filter((x) => x !== s.stack),
147
+ });
148
+ const chosen = s.ranked.find((r) => r.architecture.id === s.architecture) ?? s.ranked[0];
149
+ if (chosen) {
150
+ out.push({
151
+ topic: 'Architecture',
152
+ choice: chosen.architecture.name,
153
+ reason: chosen.reasons[0] ?? chosen.architecture.keyTradeoff,
154
+ confidence: Math.round(chosen.fit * 100) / 100,
155
+ alternatives: s.ranked.filter((r) => r.architecture.id !== chosen.architecture.id).slice(0, 3).map((r) => `${r.architecture.name} (${Math.round(r.fit * 100)}% fit)`),
156
+ });
157
+ }
158
+ for (const layer of layers) {
159
+ out.push({
160
+ topic: `Layer: ${layer.name}`,
161
+ choice: layer.id,
162
+ reason: layer.description,
163
+ confidence: s.confidence,
164
+ alternatives: [],
165
+ });
166
+ }
167
+ return out;
168
+ }
169
+ function roadmap(s, layers) {
170
+ const build = [`Scaffold the ${s.stack} base`, ...layers.map((l) => `Implement ${l.name}`)];
171
+ return LIFECYCLE.map(([phase, goal]) => ({
172
+ phase,
173
+ goal,
174
+ items: phase === 'Implementation' ? build : [goal],
175
+ }));
176
+ }
177
+ function risks(s, gaps) {
178
+ const out = [];
179
+ if (s.confidence < 0.4)
180
+ out.push('Low inference confidence — review the architecture choice before committing.');
181
+ for (const c of s.ranked[0]?.concerns ?? [])
182
+ out.push(`Architecture concern: ${c}.`);
183
+ for (const q of s.questions)
184
+ out.push(`Open decision (${q.field}): ${q.reason}.`);
185
+ for (const g of gaps)
186
+ out.push(`Unmet capability: ${g} — not covered by the catalog; plan a bespoke implementation.`);
187
+ return out;
188
+ }
189
+ function tasks(s, layers) {
190
+ const out = [{ id: 'T-1', title: `Scaffold the ${s.stack} base and repository layout`, phase: 'Implementation', dependsOn: [] }];
191
+ let n = 2;
192
+ for (const layer of layers) {
193
+ out.push({ id: `T-${n}`, title: `Implement ${layer.name}`, phase: 'Implementation', dependsOn: ['T-1'], fromBlueprint: layer.id });
194
+ n++;
195
+ }
196
+ const layerIds = out.filter((t) => t.fromBlueprint).map((t) => t.id);
197
+ out.push({ id: `T-${n++}`, title: 'Write the test suite (unit + integration)', phase: 'Testing', dependsOn: layerIds });
198
+ out.push({ id: `T-${n++}`, title: 'Threat model and security review', phase: 'Security review', dependsOn: layerIds });
199
+ out.push({ id: `T-${n++}`, title: 'CI/CD pipeline and first deployment', phase: 'Deployment', dependsOn: [`T-${n - 3}`] });
200
+ out.push({ id: `T-${n++}`, title: 'Health checks, tracing, and alerting', phase: 'Monitoring', dependsOn: [`T-${n - 2}`] });
201
+ return out;
202
+ }
203
+ /* ── rendering ───────────────────────────────────────────────────────────────── */
204
+ /** The blueprint as a set of files (filename → content), ready to write into a repo. */
205
+ export function renderBlueprint(bp) {
206
+ return {
207
+ 'README.md': indexDoc(bp),
208
+ 'understanding.md': understandingDoc(bp),
209
+ 'requirements.md': requirementsDoc(bp),
210
+ 'knowledge-graph.md': renderGraph(bp.idea),
211
+ 'architecture.md': architectureDoc(bp),
212
+ 'decisions.md': decisionsDoc(bp),
213
+ 'roadmap.md': roadmapDoc(bp),
214
+ 'milestones.md': milestonesDoc(bp),
215
+ 'backlog.md': backlogDoc(bp),
216
+ 'architecture-review.md': reviewDoc(bp),
217
+ 'quality.md': qualityDoc(bp),
218
+ 'simulation.md': renderSimulation(bp.simulation),
219
+ 'cto-review.md': ctoReviewDoc(bp),
220
+ 'orchestration.md': orchestrationDoc(bp),
221
+ 'risks.md': risksDoc(bp),
222
+ 'tasks.json': JSON.stringify(bp.tasks, null, 2) + '\n',
223
+ ...Object.fromEntries(bp.adrs.map((adr) => [`adr/${String(adr.number).padStart(4, '0')}-${slugForAdr(adr.title)}.md`, adrDoc(adr)])),
224
+ };
225
+ }
226
+ const slugForAdr = (title) => title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
227
+ function qualityDoc(bp) {
228
+ const overall = overallScore(bp.quality);
229
+ const bar = (n) => '█'.repeat(Math.round(n / 10)) + '░'.repeat(10 - Math.round(n / 10));
230
+ const lines = [`# Quality scorecard`, ``, `**Overall: ${overall}/100**`, ``, `| Dimension | Score | | Note |`, `|---|---|---|---|`];
231
+ for (const s of bp.quality)
232
+ lines.push(`| ${s.dimension} | ${s.score} | \`${bar(s.score)}\` | ${s.note} |`);
233
+ const weak = bp.quality.filter((s) => s.score < 65).map((s) => s.dimension);
234
+ lines.push(``, weak.length ? `**Weakest:** ${weak.join(', ')} — address these first.` : `No dimension scores below 65.`, ``);
235
+ return lines.join('\n');
236
+ }
237
+ function ctoReviewDoc(bp) {
238
+ const r = bp.ctoReview;
239
+ const lines = [`# AI CTO review`, ``, `**Verdict: ${r.verdict.toUpperCase().replace(/-/g, ' ')}**`, ``, r.summary, ``];
240
+ if (r.challenges.length)
241
+ lines.push(`## Challenges`, ``, ...r.challenges.map((c) => `- ${c}`), ``);
242
+ if (r.conditions.length)
243
+ lines.push(`## Conditions before launch`, ``, ...r.conditions.map((c) => `- [ ] ${c}`), ``);
244
+ return lines.join('\n');
245
+ }
246
+ function adrDoc(adr) {
247
+ return [
248
+ `# ${String(adr.number).padStart(4, '0')}. ${adr.title}`,
249
+ ``,
250
+ `- Status: ${adr.status}`,
251
+ ``,
252
+ `## Context`,
253
+ ``,
254
+ adr.context,
255
+ ``,
256
+ `## Decision`,
257
+ ``,
258
+ adr.decision,
259
+ ``,
260
+ `## Alternatives considered`,
261
+ ``,
262
+ ...(adr.alternatives.length ? adr.alternatives.map((a) => `- ${a}`) : ['- None recorded']),
263
+ ``,
264
+ `## Consequences`,
265
+ ``,
266
+ ...adr.consequences.map((c) => `- ${c}`),
267
+ ``,
268
+ ].join('\n');
269
+ }
270
+ function reviewDoc(bp) {
271
+ const blocking = bp.review.filter((f) => f.severity === 'high');
272
+ const badge = (s) => (s === 'high' ? '🔴' : s === 'medium' ? '🟡' : '⚪');
273
+ const lines = [
274
+ `# Architecture review`,
275
+ ``,
276
+ blocking.length
277
+ ? `**${blocking.length} blocking issue(s)** to resolve before this is production-ready.`
278
+ : `No blocking issues — weigh the medium/low findings before launch.`,
279
+ ``,
280
+ `## Findings`,
281
+ ``,
282
+ ];
283
+ if (bp.review.length === 0)
284
+ lines.push(`_None. The selection covers the production baseline._`, ``);
285
+ for (const f of bp.review)
286
+ lines.push(`- ${badge(f.severity)} **${f.area}** — ${f.message}`, ` - ${f.recommendation}`);
287
+ lines.push(``, `## Build vs buy`, ``);
288
+ for (const b of bp.buildVsBuy)
289
+ lines.push(`- **${b.capability}** → **${b.verdict.toUpperCase()}** (${b.option}) — ${b.reason}`);
290
+ lines.push(``, `## Rough monthly cost (small production scale)`, ``);
291
+ for (const c of bp.cost)
292
+ lines.push(`- ${c.item}: ${c.monthly}`);
293
+ lines.push(``);
294
+ return lines.join('\n');
295
+ }
296
+ function orchestrationDoc(bp) {
297
+ if (bp.orchestration.length === 0) {
298
+ return `# Orchestration\n\nNo agent roster was provided. Run with an installed AI tool to assign roles.\n`;
299
+ }
300
+ const lines = [
301
+ `# Orchestration`,
302
+ ``,
303
+ `Each engineering role, the agent it dispatches to, and the tasks it owns. Roles with no`,
304
+ `dependency between them can run in parallel; the backlog in [tasks.json](tasks.json) carries`,
305
+ `the ordering.`,
306
+ ``,
307
+ ];
308
+ for (const a of bp.orchestration) {
309
+ lines.push(`## ${a.role} → ${a.agent ?? 'no agent installed'}`, ``, `_${a.responsibility}_`, ``, ...a.tasks.map((t) => `- ${t}`), ``);
310
+ }
311
+ if (bp.executionWaves.length) {
312
+ lines.push(`## Parallel execution plan`, ``, `Each wave runs after the previous one completes; tasks within a wave run in parallel.`, ``);
313
+ bp.executionWaves.forEach((wave, i) => lines.push(`${i + 1}. ${wave.join(', ')}`));
314
+ lines.push(``);
315
+ }
316
+ return lines.join('\n');
317
+ }
318
+ const pct = (n) => `${Math.round(n * 100)}%`;
319
+ function indexDoc(bp) {
320
+ return [
321
+ `# Engineering blueprint`,
322
+ ``,
323
+ `> ${bp.idea}`,
324
+ ``,
325
+ `Domain: **${bp.domain}** · Stack: **${bp.decisions[0]?.choice}** · Architecture: **${bp.architecture.name}** · Confidence: **${pct(bp.confidence)}**`,
326
+ ``,
327
+ `## Documents`,
328
+ `- [understanding.md](understanding.md) — what was understood, and the signals behind it`,
329
+ `- [requirements.md](requirements.md) — functional, inferred, and non-functional requirements`,
330
+ `- [knowledge-graph.md](knowledge-graph.md) — second-order capabilities the idea drags in`,
331
+ `- [architecture.md](architecture.md) — the recommended architecture and the alternatives`,
332
+ `- [decisions.md](decisions.md) — every decision, its reason, confidence, and alternatives`,
333
+ `- [roadmap.md](roadmap.md) — the delivery lifecycle`,
334
+ `- [milestones.md](milestones.md) — MVP → v1 → scale`,
335
+ `- [backlog.md](backlog.md) — tasks by phase, MVP-flagged`,
336
+ `- [architecture-review.md](architecture-review.md) — production-readiness findings, build-vs-buy, and cost`,
337
+ `- [quality.md](quality.md) — a scorecard across ten quality dimensions`,
338
+ `- [simulation.md](simulation.md) — projected traffic, load, bottlenecks, and cost`,
339
+ `- [cto-review.md](cto-review.md) — an independent CTO pass that challenges the plan`,
340
+ `- [adr/](adr/) — an Architecture Decision Record per major decision`,
341
+ `- [orchestration.md](orchestration.md) — engineering roles, their agents, and their tasks`,
342
+ `- [risks.md](risks.md) — risks, open decisions, and unmet capabilities`,
343
+ `- [tasks.json](tasks.json) — the backlog as structured data`,
344
+ ``,
345
+ `_Generated by Groundplan. Every claim traces to a matched signal or a catalog entry._`,
346
+ ``,
347
+ ].join('\n');
348
+ }
349
+ function understandingDoc(bp) {
350
+ const d = bp.dna;
351
+ return [
352
+ `# Understanding`,
353
+ ``,
354
+ `## Project DNA`,
355
+ ``,
356
+ `| | |`,
357
+ `|---|---|`,
358
+ `| Industry | ${d.industry} |`,
359
+ `| Product type | ${d.productType} |`,
360
+ `| Business model | ${d.businessModel} |`,
361
+ `| Expected scale | ${d.expectedScale} |`,
362
+ `| Security posture | ${d.security} |`,
363
+ `| Compliance | ${d.compliance} |`,
364
+ `| Risk level | ${d.riskLevel} |`,
365
+ ``,
366
+ ...(bp.industry
367
+ ? [
368
+ `## Matched blueprint: ${bp.industry.name}`,
369
+ ``,
370
+ `This idea maps to a known industry pattern. It typically needs:`,
371
+ ``,
372
+ ...bp.industry.recommends.map((r) => `- ${r}`),
373
+ ``,
374
+ `**Recommended patterns:** ${bp.industry.patterns.join('; ')}.`,
375
+ ``,
376
+ `**Anti-patterns to avoid:** ${bp.industry.antiPatterns.join('; ')}.`,
377
+ ``,
378
+ ]
379
+ : []),
380
+ `## Signals`,
381
+ ``,
382
+ ...bp.understanding.map((u) => `- ${u}`),
383
+ ``,
384
+ `## Assumptions`,
385
+ ``,
386
+ ...bp.assumptions.map((a) => `- ${a}`),
387
+ ``,
388
+ ].join('\n');
389
+ }
390
+ function milestonesDoc(bp) {
391
+ const layers = bp.layers.map((l) => l.name);
392
+ const scaleLayers = bp.layers.filter((l) => /cache|queue|observability/.test(l.id)).map((l) => l.name);
393
+ const core = layers.filter((l) => !scaleLayers.includes(l));
394
+ return [
395
+ `# Milestones`,
396
+ ``,
397
+ `## M1 — MVP`,
398
+ `_Prove the core idea with the smallest thing that works._`,
399
+ ``,
400
+ `- Scaffold the ${bp.decisions[0]?.choice} base and the ${bp.architecture.name} layout`,
401
+ ...core.slice(0, 3).map((l) => `- ${l}`),
402
+ `- A minimal test suite and CI`,
403
+ ``,
404
+ `## M2 — v1`,
405
+ `_Everything the product needs to be usable in production._`,
406
+ ``,
407
+ ...core.slice(3).map((l) => `- ${l}`),
408
+ `- Security review and the architecture-review blockers resolved`,
409
+ ``,
410
+ `## M3 — Scale`,
411
+ `_Added when load justifies it._`,
412
+ ``,
413
+ ...(scaleLayers.length ? scaleLayers.map((l) => `- ${l}`) : ['- Caching, queueing, and observability as traffic grows']),
414
+ ``,
415
+ ].join('\n');
416
+ }
417
+ function backlogDoc(bp) {
418
+ const byPhase = new Map();
419
+ for (const t of bp.tasks)
420
+ byPhase.set(t.phase, [...(byPhase.get(t.phase) ?? []), t]);
421
+ const lines = [`# Backlog`, ``, `Tasks grouped by lifecycle phase. Implementation tasks marked _(MVP)_ are the smallest shippable set.`, ``];
422
+ for (const [phase, tasks] of byPhase) {
423
+ lines.push(`## ${phase}`, ``);
424
+ for (const t of tasks) {
425
+ const mvp = phase === 'Implementation' && (t.id === 'T-1' || t.fromBlueprint);
426
+ lines.push(`- [ ] **${t.id}** ${t.title}${mvp ? ' _(MVP)_' : ''}${t.dependsOn.length ? ` — after ${t.dependsOn.join(', ')}` : ''}`);
427
+ }
428
+ lines.push(``);
429
+ }
430
+ return lines.join('\n');
431
+ }
432
+ function requirementsDoc(bp) {
433
+ const group = (kind, title) => {
434
+ const items = bp.requirements.filter((r) => r.kind === kind);
435
+ if (items.length === 0)
436
+ return [];
437
+ return [`## ${title}`, ``, ...items.map((r) => `- **${r.id}** — ${r.text}${r.because ? ` _(${r.because})_` : ''}`), ``];
438
+ };
439
+ return [
440
+ `# Requirements`,
441
+ ``,
442
+ ...group('functional', 'Functional requirements'),
443
+ ...group('inferred', 'Inferred requirements (implied by the domain)'),
444
+ ...group('non-functional', 'Non-functional requirements'),
445
+ ].join('\n');
446
+ }
447
+ function architectureDoc(bp) {
448
+ const lines = [
449
+ `# Architecture`,
450
+ ``,
451
+ `## Recommended: ${bp.architecture.name}`,
452
+ ``,
453
+ bp.architecture.oneLine,
454
+ ``,
455
+ ];
456
+ if (bp.architecture.reasons.length) {
457
+ lines.push(`### Why`, ``, ...bp.architecture.reasons.map((r) => `- ${r}`), ``);
458
+ }
459
+ if (bp.architecture.concerns.length) {
460
+ lines.push(`### Trade-offs`, ``, ...bp.architecture.concerns.map((c) => `- ${c}`), ``);
461
+ }
462
+ if (bp.architecture.alternatives.length) {
463
+ lines.push(`### Alternatives considered`, ``, ...bp.architecture.alternatives.map((a) => `- ${a.name} — ${pct(a.fit)} fit`), ``);
464
+ }
465
+ lines.push(`## Capabilities (layers)`, ``, ...bp.layers.map((l) => `- **${l.name}** — ${l.description}`), ``);
466
+ return lines.join('\n');
467
+ }
468
+ function decisionsDoc(bp) {
469
+ const lines = [`# Decisions`, ``, `Every decision, why it was made, how firmly, and what else was on the table.`, ``];
470
+ for (const d of bp.decisions) {
471
+ lines.push(`## ${d.topic}: ${d.choice}`, ``, `- **Reason:** ${d.reason}`, `- **Confidence:** ${pct(d.confidence)}`);
472
+ if (d.alternatives.length)
473
+ lines.push(`- **Alternatives:** ${d.alternatives.join(', ')}`);
474
+ lines.push(``);
475
+ }
476
+ return lines.join('\n');
477
+ }
478
+ function roadmapDoc(bp) {
479
+ const lines = [`# Roadmap`, ``];
480
+ for (const stage of bp.roadmap) {
481
+ lines.push(`## ${stage.phase}`, ``, `_${stage.goal}_`, ``, ...stage.items.map((i) => `- [ ] ${i}`), ``);
482
+ }
483
+ return lines.join('\n');
484
+ }
485
+ function risksDoc(bp) {
486
+ if (bp.risks.length === 0)
487
+ return `# Risks\n\nNothing flagged — but review before committing to production.\n`;
488
+ return [`# Risks`, ``, ...bp.risks.map((r) => `- ${r}`), ``].join('\n');
489
+ }
490
+ //# sourceMappingURL=blueprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../src/blueprint.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -26,6 +26,17 @@ export interface GroundplanConfig {
26
26
  maxFileBytes: number;
27
27
  postApplyTimeoutMs: number;
28
28
  stackCommands: Record<string, StackCommands>;
29
+ /** Path to the reusable-knowledge store (JSONL). Unset disables the layer entirely. */
30
+ knowledgePath?: string;
31
+ /** Plugin roots (each a directory holding catalog/adapters/registry subdirs) merged into the catalog. */
32
+ pluginRoots: string[];
33
+ ai: {
34
+ enabled: boolean;
35
+ inferModel: string;
36
+ inferEffort: string;
37
+ /** Resolved by role, falling back to the standard Anthropic key; undefined defers to an SDK profile. */
38
+ apiKey?: string;
39
+ };
29
40
  paths: {
30
41
  catalog: string;
31
42
  templates: string;
package/dist/config.js CHANGED
@@ -53,6 +53,16 @@ const defaults = {
53
53
  blueprintFilesDir: 'files',
54
54
  /** Adapters emitted when the user does not choose explicitly. */
55
55
  defaultAdapters: ['claude-code', 'codex', 'cursor', 'github-copilot'],
56
+ /**
57
+ * The model that reads a free-text brief into an architecture selection, resolved by role.
58
+ * A literal id lives here and nowhere else; the call site reads `config.ai.inferModel`. The
59
+ * whole path is optional — with no key (and no SDK installed) inference stays deterministic.
60
+ */
61
+ ai: {
62
+ inferModel: 'claude-opus-4-8',
63
+ /** Low effort keeps a structured-extraction call fast and cheap. */
64
+ inferEffort: 'low',
65
+ },
56
66
  /**
57
67
  * How long a delegation adapter's flag verification is trusted before `doctor` asks for a
58
68
  * recheck. CLI vendors rename flags without notice; a year is long enough not to nag and
@@ -117,6 +127,14 @@ export function loadConfig() {
117
127
  maxFilesPerPlan: num('GROUNDPLAN_MAX_FILES', defaults.maxFilesPerPlan),
118
128
  maxFileBytes: num('GROUNDPLAN_MAX_FILE_BYTES', defaults.maxFileBytes),
119
129
  postApplyTimeoutMs: num('GROUNDPLAN_POST_APPLY_TIMEOUT_MS', defaults.postApplyTimeoutMs),
130
+ knowledgePath: env('GROUNDPLAN_KNOWLEDGE'),
131
+ pluginRoots: list('GROUNDPLAN_PLUGINS', []).map((p) => path.resolve(p)),
132
+ ai: {
133
+ enabled: env('GROUNDPLAN_AI') !== '0' && env('GROUNDPLAN_AI') !== 'false',
134
+ inferModel: env('GROUNDPLAN_MODEL_INFER') ?? defaults.ai.inferModel,
135
+ inferEffort: env('GROUNDPLAN_EFFORT_INFER') ?? defaults.ai.inferEffort,
136
+ apiKey: env('GROUNDPLAN_API_KEY_INFER') ?? env('ANTHROPIC_API_KEY'),
137
+ },
120
138
  };
121
139
  return {
122
140
  ...resolved,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The engineering knowledge graph — the second-order needs a capability drags in. Choosing
3
+ * "payments" is really choosing webhooks, and webhooks mean retries, and retries mean idempotency,
4
+ * and money movement means an audit trail. Groundplan reasons through that chain deterministically
5
+ * here, rather than hoping a model remembers it, and surfaces the implied work before it bites.
6
+ */
7
+ /** capability → the capabilities it structurally requires. A DAG walked transitively. */
8
+ export declare const CAPABILITY_GRAPH: Record<string, string[]>;
9
+ export interface GraphNode {
10
+ capability: string;
11
+ /** The capability that pulled this one in — null for a seed. */
12
+ via: string | null;
13
+ depth: number;
14
+ }
15
+ /** Seed capabilities from an idea's text. */
16
+ export declare function seedCapabilities(idea: string): string[];
17
+ /** Transitive closure of the graph from the seeds — every implied capability, with what pulled it in. */
18
+ export declare function expandCapabilities(seeds: string[]): GraphNode[];
19
+ /** Render the reasoning: seeds and the chain of implied capabilities each drags in. */
20
+ export declare function renderGraph(idea: string): string;