@imix-js/taproot 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 (124) hide show
  1. package/README.md +88 -0
  2. package/dist/adapters/index.d.ts +20 -0
  3. package/dist/adapters/index.js +452 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.js +40 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/acceptance-check.d.ts +26 -0
  9. package/dist/commands/acceptance-check.js +213 -0
  10. package/dist/commands/acceptance-check.js.map +1 -0
  11. package/dist/commands/check-orphans.d.ts +8 -0
  12. package/dist/commands/check-orphans.js +157 -0
  13. package/dist/commands/check-orphans.js.map +1 -0
  14. package/dist/commands/commithook.d.ts +15 -0
  15. package/dist/commands/commithook.js +389 -0
  16. package/dist/commands/commithook.js.map +1 -0
  17. package/dist/commands/coverage.d.ts +41 -0
  18. package/dist/commands/coverage.js +390 -0
  19. package/dist/commands/coverage.js.map +1 -0
  20. package/dist/commands/dod.d.ts +13 -0
  21. package/dist/commands/dod.js +141 -0
  22. package/dist/commands/dod.js.map +1 -0
  23. package/dist/commands/init.d.ts +14 -0
  24. package/dist/commands/init.js +378 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/link-commits.d.ts +12 -0
  27. package/dist/commands/link-commits.js +126 -0
  28. package/dist/commands/link-commits.js.map +1 -0
  29. package/dist/commands/overview.d.ts +6 -0
  30. package/dist/commands/overview.js +192 -0
  31. package/dist/commands/overview.js.map +1 -0
  32. package/dist/commands/plan.d.ts +23 -0
  33. package/dist/commands/plan.js +167 -0
  34. package/dist/commands/plan.js.map +1 -0
  35. package/dist/commands/sync-check.d.ts +8 -0
  36. package/dist/commands/sync-check.js +118 -0
  37. package/dist/commands/sync-check.js.map +1 -0
  38. package/dist/commands/update.d.ts +7 -0
  39. package/dist/commands/update.js +309 -0
  40. package/dist/commands/update.js.map +1 -0
  41. package/dist/commands/validate-format.d.ts +8 -0
  42. package/dist/commands/validate-format.js +93 -0
  43. package/dist/commands/validate-format.js.map +1 -0
  44. package/dist/commands/validate-structure.d.ts +8 -0
  45. package/dist/commands/validate-structure.js +29 -0
  46. package/dist/commands/validate-structure.js.map +1 -0
  47. package/dist/core/config.d.ts +6 -0
  48. package/dist/core/config.js +86 -0
  49. package/dist/core/config.js.map +1 -0
  50. package/dist/core/configuration.d.ts +7 -0
  51. package/dist/core/configuration.js +112 -0
  52. package/dist/core/configuration.js.map +1 -0
  53. package/dist/core/dod-runner.d.ts +20 -0
  54. package/dist/core/dod-runner.js +233 -0
  55. package/dist/core/dod-runner.js.map +1 -0
  56. package/dist/core/dor-runner.d.ts +18 -0
  57. package/dist/core/dor-runner.js +156 -0
  58. package/dist/core/dor-runner.js.map +1 -0
  59. package/dist/core/fs-walker.d.ts +5 -0
  60. package/dist/core/fs-walker.js +74 -0
  61. package/dist/core/fs-walker.js.map +1 -0
  62. package/dist/core/git.d.ts +24 -0
  63. package/dist/core/git.js +76 -0
  64. package/dist/core/git.js.map +1 -0
  65. package/dist/core/impl-reader.d.ts +8 -0
  66. package/dist/core/impl-reader.js +39 -0
  67. package/dist/core/impl-reader.js.map +1 -0
  68. package/dist/core/language.d.ts +39 -0
  69. package/dist/core/language.js +159 -0
  70. package/dist/core/language.js.map +1 -0
  71. package/dist/core/markdown-parser.d.ts +3 -0
  72. package/dist/core/markdown-parser.js +37 -0
  73. package/dist/core/markdown-parser.js.map +1 -0
  74. package/dist/core/reporter.d.ts +3 -0
  75. package/dist/core/reporter.js +33 -0
  76. package/dist/core/reporter.js.map +1 -0
  77. package/dist/templates/index.d.ts +4 -0
  78. package/dist/templates/index.js +126 -0
  79. package/dist/templates/index.js.map +1 -0
  80. package/dist/validators/format-rules.d.ts +10 -0
  81. package/dist/validators/format-rules.js +238 -0
  82. package/dist/validators/format-rules.js.map +1 -0
  83. package/dist/validators/structure-rules.d.ts +10 -0
  84. package/dist/validators/structure-rules.js +94 -0
  85. package/dist/validators/structure-rules.js.map +1 -0
  86. package/dist/validators/types.d.ts +68 -0
  87. package/dist/validators/types.js +2 -0
  88. package/dist/validators/types.js.map +1 -0
  89. package/docs/agents.md +88 -0
  90. package/docs/architecture.md +53 -0
  91. package/docs/cli.md +226 -0
  92. package/docs/concepts.md +268 -0
  93. package/docs/configuration.md +255 -0
  94. package/docs/demo.svg +111 -0
  95. package/docs/patterns.md +118 -0
  96. package/docs/security.md +95 -0
  97. package/docs/workflows.md +151 -0
  98. package/languages/de.json +20 -0
  99. package/languages/en.json +20 -0
  100. package/languages/es.json +20 -0
  101. package/languages/fr.json +20 -0
  102. package/languages/ja.json +20 -0
  103. package/languages/pt.json +20 -0
  104. package/package.json +54 -0
  105. package/skills/analyse-change.md +101 -0
  106. package/skills/behaviour.md +179 -0
  107. package/skills/bug.md +70 -0
  108. package/skills/commit.md +99 -0
  109. package/skills/decompose.md +101 -0
  110. package/skills/discover.md +392 -0
  111. package/skills/grill-me.md +65 -0
  112. package/skills/guide.md +118 -0
  113. package/skills/implement.md +149 -0
  114. package/skills/ineed.md +147 -0
  115. package/skills/intent.md +104 -0
  116. package/skills/plan.md +63 -0
  117. package/skills/promote.md +69 -0
  118. package/skills/refine.md +78 -0
  119. package/skills/research.md +122 -0
  120. package/skills/review-all.md +92 -0
  121. package/skills/review.md +80 -0
  122. package/skills/status.md +103 -0
  123. package/skills/sweep.md +89 -0
  124. package/skills/trace.md +151 -0
@@ -0,0 +1,390 @@
1
+ import { readFileSync, writeFileSync } from 'fs';
2
+ import { join, resolve } from 'path';
3
+ import { loadConfig } from '../core/config.js';
4
+ import { walkHierarchy } from '../core/fs-walker.js';
5
+ import { parseMarkdown } from '../core/markdown-parser.js';
6
+ import { parseImplData } from '../core/impl-reader.js';
7
+ export function registerCoverage(program) {
8
+ program
9
+ .command('coverage')
10
+ .description('Generate a completeness summary of the hierarchy')
11
+ .option('--path <path>', 'Root path (overrides config)')
12
+ .option('--format <format>', 'Output format: tree, json, markdown, context', 'tree')
13
+ .action(async (options) => {
14
+ const { config, configDir } = loadConfig();
15
+ const rootPath = options.path ? resolve(options.path) : config.root;
16
+ const report = await runCoverage({ path: rootPath });
17
+ const format = (options.format ?? 'tree');
18
+ if (format === 'context') {
19
+ const contextPath = join(rootPath, 'CONTEXT.md');
20
+ const content = formatContext(report, contextPath);
21
+ writeFileSync(contextPath, content, 'utf-8');
22
+ process.stdout.write(`CONTEXT.md updated at ${contextPath}\n`);
23
+ }
24
+ else {
25
+ process.stdout.write(formatReport(report, format));
26
+ }
27
+ });
28
+ }
29
+ export async function runCoverage(options) {
30
+ const { config } = loadConfig(options.cwd);
31
+ const rootPath = options.path ? resolve(options.path) : config.root;
32
+ const tree = walkHierarchy(rootPath);
33
+ const intents = [];
34
+ for (const child of tree.children) {
35
+ if (child.marker === 'intent') {
36
+ intents.push(buildIntentSummary(child));
37
+ }
38
+ }
39
+ // Compute totals
40
+ let behaviourCount = 0;
41
+ let implCount = 0;
42
+ let completeCount = 0;
43
+ let testedCount = 0;
44
+ let deferredBehaviourCount = 0;
45
+ let deferredImplCount = 0;
46
+ function countBehaviour(b) {
47
+ if (b.state === 'deferred') {
48
+ deferredBehaviourCount++;
49
+ }
50
+ else {
51
+ behaviourCount++;
52
+ }
53
+ for (const impl of b.implementations) {
54
+ if (impl.state === 'deferred') {
55
+ deferredImplCount++;
56
+ }
57
+ else {
58
+ implCount++;
59
+ if (impl.state === 'complete')
60
+ completeCount++;
61
+ if (impl.testCount > 0)
62
+ testedCount++;
63
+ }
64
+ }
65
+ for (const sub of b.subBehaviours)
66
+ countBehaviour(sub);
67
+ }
68
+ for (const intent of intents) {
69
+ for (const b of intent.behaviours)
70
+ countBehaviour(b);
71
+ }
72
+ return {
73
+ intents,
74
+ totals: {
75
+ intents: intents.length,
76
+ behaviours: behaviourCount,
77
+ implementations: implCount,
78
+ completeImpls: completeCount,
79
+ testedImpls: testedCount,
80
+ deferredBehaviours: deferredBehaviourCount,
81
+ deferredImpls: deferredImplCount,
82
+ },
83
+ };
84
+ }
85
+ function readState(node, markerFile) {
86
+ try {
87
+ const content = readFileSync(join(node.absolutePath, markerFile), 'utf-8');
88
+ const doc = parseMarkdown(join(node.absolutePath, markerFile), content);
89
+ const statusSection = doc.sections.get('status');
90
+ if (!statusSection)
91
+ return 'unknown';
92
+ const match = /\*\*State:\*\*\s*(\S+)/.exec(statusSection.rawBody);
93
+ return match?.[1]?.trim() ?? 'unknown';
94
+ }
95
+ catch {
96
+ return 'unknown';
97
+ }
98
+ }
99
+ function buildImplSummary(node) {
100
+ const filePath = join(node.absolutePath, 'impl.md');
101
+ let state = 'unknown';
102
+ let commitCount = 0;
103
+ let testCount = 0;
104
+ try {
105
+ const content = readFileSync(filePath, 'utf-8');
106
+ const doc = parseMarkdown(filePath, content);
107
+ const data = parseImplData(doc);
108
+ const statusSection = doc.sections.get('status');
109
+ const match = statusSection ? /\*\*State:\*\*\s*(\S+)/.exec(statusSection.rawBody) : null;
110
+ state = match?.[1]?.trim() ?? 'unknown';
111
+ commitCount = data.commits.length;
112
+ testCount = data.testFiles.length;
113
+ }
114
+ catch {
115
+ // use defaults
116
+ }
117
+ return { name: node.name, path: node.relativePath, state, commitCount, testCount };
118
+ }
119
+ function buildBehaviourSummary(node) {
120
+ const state = readState(node, 'usecase.md');
121
+ const implementations = [];
122
+ const subBehaviours = [];
123
+ for (const child of node.children) {
124
+ if (child.marker === 'impl') {
125
+ implementations.push(buildImplSummary(child));
126
+ }
127
+ else if (child.marker === 'behaviour') {
128
+ subBehaviours.push(buildBehaviourSummary(child));
129
+ }
130
+ }
131
+ return { name: node.name, path: node.relativePath, state, implementations, subBehaviours };
132
+ }
133
+ function buildIntentSummary(node) {
134
+ const state = readState(node, 'intent.md');
135
+ const behaviours = [];
136
+ for (const child of node.children) {
137
+ if (child.marker === 'behaviour') {
138
+ behaviours.push(buildBehaviourSummary(child));
139
+ }
140
+ }
141
+ return { name: node.name, path: node.relativePath, state, behaviours };
142
+ }
143
+ // ─── Formatters ──────────────────────────────────────────────────────────────
144
+ export function formatReport(report, format) {
145
+ switch (format) {
146
+ case 'json': return JSON.stringify(report, null, 2) + '\n';
147
+ case 'markdown': return formatMarkdown(report);
148
+ default: return formatTree(report);
149
+ }
150
+ }
151
+ function formatTree(report) {
152
+ const lines = [];
153
+ for (const intent of report.intents) {
154
+ lines.push(`Intent: ${intent.name} [${intent.state}]`);
155
+ const bList = intent.behaviours;
156
+ for (let bi = 0; bi < bList.length; bi++) {
157
+ const isLast = bi === bList.length - 1;
158
+ renderBehaviourTree(bList[bi], lines, isLast ? '└─' : '├─', isLast ? ' ' : '│ ');
159
+ }
160
+ }
161
+ lines.push('');
162
+ const t = report.totals;
163
+ lines.push(`${t.intents} intent${t.intents !== 1 ? 's' : ''}, ${t.behaviours} behaviour${t.behaviours !== 1 ? 's' : ''}, ${t.implementations} implementation${t.implementations !== 1 ? 's' : ''}`);
164
+ lines.push(`${t.completeImpls}/${t.implementations} complete, ${t.testedImpls}/${t.implementations} with tests`);
165
+ lines.push('');
166
+ return lines.join('\n');
167
+ }
168
+ function renderBehaviourTree(b, lines, prefix, childPrefix) {
169
+ const implTotal = countAllImpls(b);
170
+ const completeImpls = countCompleteImpls(b);
171
+ const bar = progressBar(completeImpls, implTotal);
172
+ lines.push(` ${prefix} ${b.name} [${b.state}] ${bar} ${completeImpls}/${implTotal} impl`);
173
+ const allChildren = [...b.implementations, ...b.subBehaviours];
174
+ for (let i = 0; i < b.implementations.length; i++) {
175
+ const impl = b.implementations[i];
176
+ const isLast = i === allChildren.length - 1;
177
+ const testWarn = impl.testCount === 0 ? ' ⚠' : '';
178
+ lines.push(` ${childPrefix} ${isLast ? '└─' : '├─'} ${impl.name} [${impl.state}, ${impl.commitCount} commit${impl.commitCount !== 1 ? 's' : ''}, ${impl.testCount} test${impl.testCount !== 1 ? 's' : ''}]${testWarn}`);
179
+ }
180
+ for (let i = 0; i < b.subBehaviours.length; i++) {
181
+ const sub = b.subBehaviours[i];
182
+ const isLast = i === b.subBehaviours.length - 1;
183
+ renderBehaviourTree(sub, lines, `${childPrefix} ${isLast ? '└─' : '├─'}`, `${childPrefix} ${isLast ? ' ' : '│ '}`);
184
+ }
185
+ }
186
+ function countAllImpls(b) {
187
+ return b.implementations.length + b.subBehaviours.reduce((n, s) => n + countAllImpls(s), 0);
188
+ }
189
+ function countCompleteImpls(b) {
190
+ return (b.implementations.filter(i => i.state === 'complete').length +
191
+ b.subBehaviours.reduce((n, s) => n + countCompleteImpls(s), 0));
192
+ }
193
+ function progressBar(done, total, width = 12) {
194
+ if (total === 0)
195
+ return '─'.repeat(width);
196
+ const filled = Math.round((done / total) * width);
197
+ return '█'.repeat(filled) + '─'.repeat(width - filled);
198
+ }
199
+ function formatMarkdown(report) {
200
+ const lines = ['# Taproot Coverage Report', ''];
201
+ const t = report.totals;
202
+ lines.push(`**${t.intents} intents · ${t.behaviours} behaviours · ${t.implementations} implementations**`);
203
+ lines.push(`${t.completeImpls}/${t.implementations} complete · ${t.testedImpls}/${t.implementations} with tests`);
204
+ lines.push('');
205
+ for (const intent of report.intents) {
206
+ lines.push(`## ${intent.name} \`[${intent.state}]\``);
207
+ lines.push('');
208
+ for (const b of intent.behaviours) {
209
+ renderBehaviourMarkdown(b, lines, '###');
210
+ }
211
+ }
212
+ return lines.join('\n');
213
+ }
214
+ function renderBehaviourMarkdown(b, lines, heading) {
215
+ const implTotal = countAllImpls(b);
216
+ const completeImpls = countCompleteImpls(b);
217
+ lines.push(`${heading} ${b.name} \`[${b.state}]\` — ${completeImpls}/${implTotal} impl`);
218
+ lines.push('');
219
+ if (b.implementations.length > 0) {
220
+ for (const impl of b.implementations) {
221
+ const testWarn = impl.testCount === 0 ? ' ⚠️' : '';
222
+ lines.push(`- **${impl.name}** \`[${impl.state}]\` — ${impl.commitCount} commit${impl.commitCount !== 1 ? 's' : ''}, ${impl.testCount} test${impl.testCount !== 1 ? 's' : ''}${testWarn}`);
223
+ }
224
+ lines.push('');
225
+ }
226
+ const nextHeading = heading.length < 6 ? heading + '#' : heading;
227
+ for (const sub of b.subBehaviours) {
228
+ renderBehaviourMarkdown(sub, lines, nextHeading);
229
+ }
230
+ }
231
+ // ─── Context format ───────────────────────────────────────────────────────────
232
+ export function formatContext(report, outputPath) {
233
+ const now = new Date().toISOString().slice(0, 10);
234
+ const t = report.totals;
235
+ const lines = [];
236
+ lines.push('# Taproot Context');
237
+ lines.push('');
238
+ lines.push('<!-- Auto-generated by `taproot coverage --format context` — do not edit manually -->');
239
+ lines.push(`<!-- Last updated: ${now} -->`);
240
+ lines.push('');
241
+ // ── Summary ──────────────────────────────────────────────────────────────
242
+ lines.push('## Summary');
243
+ lines.push('');
244
+ lines.push(`- **${t.intents}** intent${t.intents !== 1 ? 's' : ''} · **${t.behaviours}** behaviour${t.behaviours !== 1 ? 's' : ''} · **${t.implementations}** implementation${t.implementations !== 1 ? 's' : ''}`);
245
+ lines.push(`- ${t.completeImpls}/${t.implementations} implementations complete`);
246
+ lines.push(`- ${t.testedImpls}/${t.implementations} implementations have tests`);
247
+ lines.push('');
248
+ // ── Intent states breakdown ───────────────────────────────────────────────
249
+ const intentsByState = groupBy(report.intents, i => i.state);
250
+ const stateEntries = Object.entries(intentsByState)
251
+ .map(([state, items]) => `${items.length} ${state}`)
252
+ .join(', ');
253
+ if (stateEntries) {
254
+ lines.push(`Intents by state: ${stateEntries}`);
255
+ lines.push('');
256
+ }
257
+ // ── Hierarchy ─────────────────────────────────────────────────────────────
258
+ lines.push('## Hierarchy');
259
+ lines.push('');
260
+ lines.push('```');
261
+ for (const intent of report.intents) {
262
+ lines.push(`${intent.name}/ [${intent.state}]`);
263
+ for (let bi = 0; bi < intent.behaviours.length; bi++) {
264
+ const b = intent.behaviours[bi];
265
+ const isLast = bi === intent.behaviours.length - 1;
266
+ renderBehaviourContext(b, lines, isLast ? ' └─' : ' ├─', isLast ? ' ' : ' │ ');
267
+ }
268
+ }
269
+ lines.push('```');
270
+ lines.push('');
271
+ // ── Needs attention ───────────────────────────────────────────────────────
272
+ const unimplemented = collectUnimplemented(report);
273
+ const noTests = collectNoTests(report);
274
+ const inProgress = collectInProgress(report);
275
+ if (unimplemented.length > 0 || noTests.length > 0 || inProgress.length > 0) {
276
+ lines.push('## Needs Attention');
277
+ lines.push('');
278
+ if (inProgress.length > 0) {
279
+ lines.push('**In progress:**');
280
+ for (const item of inProgress)
281
+ lines.push(`- \`${item}\``);
282
+ lines.push('');
283
+ }
284
+ if (unimplemented.length > 0) {
285
+ lines.push('**Not yet implemented:**');
286
+ for (const item of unimplemented)
287
+ lines.push(`- \`${item}\``);
288
+ lines.push('');
289
+ }
290
+ if (noTests.length > 0) {
291
+ lines.push('**Missing tests:**');
292
+ for (const item of noTests)
293
+ lines.push(`- \`${item}\``);
294
+ lines.push('');
295
+ }
296
+ }
297
+ // ── Quick reference ───────────────────────────────────────────────────────
298
+ lines.push('## Quick Reference');
299
+ lines.push('');
300
+ lines.push('```bash');
301
+ lines.push('taproot validate-structure # check folder hierarchy');
302
+ lines.push('taproot validate-format # check document schemas');
303
+ lines.push('taproot coverage # tree view');
304
+ lines.push('taproot check-orphans # broken references');
305
+ lines.push('taproot sync-check # stale specs');
306
+ lines.push('taproot link-commits # link git commits to impl.md');
307
+ lines.push('```');
308
+ lines.push('');
309
+ return lines.join('\n');
310
+ }
311
+ function renderBehaviourContext(b, lines, prefix, childPrefix) {
312
+ const implTotal = countAllImpls(b);
313
+ const completeImpls = countCompleteImpls(b);
314
+ lines.push(`${prefix} ${b.name}/ [${b.state}] ${completeImpls}/${implTotal} impl`);
315
+ const allChildren = [...b.implementations, ...b.subBehaviours];
316
+ for (let i = 0; i < b.implementations.length; i++) {
317
+ const impl = b.implementations[i];
318
+ const isLast = i === allChildren.length - 1;
319
+ const warn = impl.testCount === 0 ? ' ⚠ no tests' : '';
320
+ lines.push(`${childPrefix} ${isLast ? '└─' : '├─'} ${impl.name} [${impl.state}]${warn}`);
321
+ }
322
+ for (let i = 0; i < b.subBehaviours.length; i++) {
323
+ const sub = b.subBehaviours[i];
324
+ const offset = b.implementations.length;
325
+ const isLast = offset + i === allChildren.length - 1;
326
+ renderBehaviourContext(sub, lines, `${childPrefix} ${isLast ? '└─' : '├─'}`, `${childPrefix} ${isLast ? ' ' : '│ '}`);
327
+ }
328
+ }
329
+ function collectUnimplemented(report) {
330
+ const paths = [];
331
+ function walk(b) {
332
+ if (b.state === 'deferred')
333
+ return;
334
+ if (b.implementations.length === 0 && b.subBehaviours.length === 0) {
335
+ paths.push(b.path);
336
+ }
337
+ for (const sub of b.subBehaviours)
338
+ walk(sub);
339
+ }
340
+ for (const intent of report.intents) {
341
+ for (const b of intent.behaviours)
342
+ walk(b);
343
+ }
344
+ return paths;
345
+ }
346
+ function collectInProgress(report) {
347
+ const paths = [];
348
+ function walkImpl(impl) {
349
+ if (impl.state === 'in-progress')
350
+ paths.push(impl.path);
351
+ }
352
+ function walk(b) {
353
+ for (const impl of b.implementations)
354
+ walkImpl(impl);
355
+ for (const sub of b.subBehaviours)
356
+ walk(sub);
357
+ }
358
+ for (const intent of report.intents) {
359
+ for (const b of intent.behaviours)
360
+ walk(b);
361
+ }
362
+ return paths;
363
+ }
364
+ function collectNoTests(report) {
365
+ const paths = [];
366
+ function walk(b) {
367
+ for (const impl of b.implementations) {
368
+ if (impl.testCount === 0 && impl.state === 'complete')
369
+ paths.push(impl.path);
370
+ }
371
+ for (const sub of b.subBehaviours)
372
+ walk(sub);
373
+ }
374
+ for (const intent of report.intents) {
375
+ for (const b of intent.behaviours)
376
+ walk(b);
377
+ }
378
+ return paths;
379
+ }
380
+ function groupBy(arr, key) {
381
+ const result = {};
382
+ for (const item of arr) {
383
+ const k = key(item);
384
+ const list = result[k] ?? [];
385
+ list.push(item);
386
+ result[k] = list;
387
+ }
388
+ return result;
389
+ }
390
+ //# sourceMappingURL=coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/commands/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Command } from 'commander';
2
+ import type { DodReport, DodResult } from '../core/dod-runner.js';
3
+ export { DodReport, DodResult };
4
+ export declare function registerDod(program: Command): void;
5
+ export declare function runDod(options: {
6
+ implPath?: string;
7
+ dryRun?: boolean;
8
+ cwd?: string;
9
+ }): Promise<DodReport>;
10
+ /** Advance parent usecase.md state from 'specified' → 'implemented' when impl is marked complete. */
11
+ export declare function cascadeUsecaseState(absImplPath: string): string | null;
12
+ /** Write an agent-check resolution to ## DoD Resolutions section in impl.md. */
13
+ export declare function writeResolution(implPath: string, condition: string, note: string, cwd: string): void;
@@ -0,0 +1,141 @@
1
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
2
+ import { resolve, dirname, join } from 'path';
3
+ import { loadConfig } from '../core/config.js';
4
+ import { runDodChecks } from '../core/dod-runner.js';
5
+ export function registerDod(program) {
6
+ const dodCmd = program
7
+ .command('dod [impl-path]')
8
+ .description('Run Definition of Done checks; mark impl complete if all pass')
9
+ .option('--dry-run', 'Run checks but do not update impl.md state')
10
+ .option('--cwd <dir>', 'Working directory for running shell commands')
11
+ .option('--resolve <condition>', 'Record agent resolution for a named condition (repeatable)', (v, a) => [...a, v], [])
12
+ .option('--note <note>', 'Resolution note (used with --resolve, repeatable)', (v, a) => [...a, v], [])
13
+ .action(async (implPath, options) => {
14
+ const cwd = options.cwd ? resolve(options.cwd) : process.cwd();
15
+ // --resolve mode: write one or more resolutions to impl.md
16
+ if (options.resolve && options.resolve.length > 0) {
17
+ if (!implPath) {
18
+ process.stderr.write('Error: --resolve requires an impl-path argument\n');
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ const notes = options.note ?? [];
23
+ for (let i = 0; i < options.resolve.length; i++) {
24
+ const condition = options.resolve[i];
25
+ const note = notes[i] ?? '';
26
+ writeResolution(implPath, condition, note, cwd);
27
+ process.stdout.write(`Recorded resolution for "${condition}" in ${implPath}\n`);
28
+ }
29
+ return;
30
+ }
31
+ const report = await runDod({ implPath, dryRun: options.dryRun ?? false, cwd });
32
+ if (!report.configured) {
33
+ process.stdout.write('No Definition of Done configured — skipping checks.\n');
34
+ if (implPath && !options.dryRun) {
35
+ markImplComplete(resolve(cwd, implPath));
36
+ const cascade = cascadeUsecaseState(resolve(cwd, implPath));
37
+ if (cascade)
38
+ process.stdout.write(`Advanced parent usecase state: ${cascade}\n`);
39
+ process.stdout.write(`Marked ${implPath} complete.\n`);
40
+ }
41
+ return;
42
+ }
43
+ printReport(report);
44
+ if (report.allPassed) {
45
+ if (implPath && !options.dryRun) {
46
+ if (report.usecaseCascade)
47
+ process.stdout.write(`Advanced parent usecase state: ${report.usecaseCascade}\n`);
48
+ process.stdout.write(`\nAll checks passed. Marked ${implPath} complete.\n`);
49
+ }
50
+ else if (implPath && options.dryRun) {
51
+ process.stdout.write('\nAll checks passed. (dry-run: impl.md not updated)\n');
52
+ }
53
+ else {
54
+ process.stdout.write('\nAll checks passed.\n');
55
+ }
56
+ }
57
+ else {
58
+ process.stdout.write('\nDefinition of Done not met — impl not marked complete.\n');
59
+ process.exitCode = 1;
60
+ }
61
+ });
62
+ // Suppress the default help output for the option name clash with commander reserved word
63
+ void dodCmd;
64
+ }
65
+ export async function runDod(options) {
66
+ const cwd = options.cwd ?? process.cwd();
67
+ const { config } = loadConfig(cwd);
68
+ const report = runDodChecks(config.definitionOfDone, cwd, { implPath: options.implPath });
69
+ if (options.implPath && !options.dryRun && report.allPassed) {
70
+ const absPath = resolve(cwd, options.implPath);
71
+ markImplComplete(absPath);
72
+ const cascade = cascadeUsecaseState(absPath);
73
+ return { ...report, usecaseCascade: cascade ?? undefined };
74
+ }
75
+ return report;
76
+ }
77
+ function printReport(report) {
78
+ const pass = '✓';
79
+ const fail = '✗';
80
+ for (const result of report.results) {
81
+ const icon = result.passed ? pass : fail;
82
+ process.stdout.write(` ${icon} ${result.name}\n`);
83
+ if (!result.passed) {
84
+ if (result.output) {
85
+ const indented = result.output.split('\n').map(l => ` ${l}`).join('\n');
86
+ process.stdout.write(`${indented}\n`);
87
+ }
88
+ process.stdout.write(` → ${result.correction}\n`);
89
+ }
90
+ }
91
+ }
92
+ /** Advance parent usecase.md state from 'specified' → 'implemented' when impl is marked complete. */
93
+ export function cascadeUsecaseState(absImplPath) {
94
+ const usecasePath = join(dirname(dirname(absImplPath)), 'usecase.md');
95
+ if (!existsSync(usecasePath))
96
+ return null;
97
+ const content = readFileSync(usecasePath, 'utf-8');
98
+ if (!/\*\*State:\*\*\s*specified/.test(content))
99
+ return null;
100
+ const today = new Date().toISOString().slice(0, 10);
101
+ const updated = content
102
+ .replace(/(\*\*State:\*\*\s*)specified/, '$1implemented')
103
+ .replace(/(\*\*Last reviewed:\*\*\s*)\d{4}-\d{2}-\d{2}/, `$1${today}`);
104
+ writeFileSync(usecasePath, updated, 'utf-8');
105
+ return 'specified → implemented';
106
+ }
107
+ function markImplComplete(absPath) {
108
+ if (!existsSync(absPath)) {
109
+ throw new Error(`impl.md not found at ${absPath}`);
110
+ }
111
+ const content = readFileSync(absPath, 'utf-8');
112
+ const updated = content.replace(/(\*\*State:\*\*\s*)(planned|in-progress|needs-rework)/, '$1complete');
113
+ if (updated === content)
114
+ return; // already complete or pattern not found
115
+ writeFileSync(absPath, updated, 'utf-8');
116
+ }
117
+ /** Write an agent-check resolution to ## DoD Resolutions section in impl.md. */
118
+ export function writeResolution(implPath, condition, note, cwd) {
119
+ const absPath = resolve(cwd, implPath);
120
+ if (!existsSync(absPath)) {
121
+ throw new Error(`impl.md not found at ${absPath}`);
122
+ }
123
+ const timestamp = new Date().toISOString();
124
+ const entry = `- condition: ${condition} | note: ${note} | resolved: ${timestamp}`;
125
+ let content = readFileSync(absPath, 'utf-8');
126
+ const resolutionHeader = '## DoD Resolutions';
127
+ const hasResolutionSection = /^## DoD Resolutions$/m.test(content);
128
+ if (hasResolutionSection) {
129
+ // Append to existing section before the next ## heading or end of file
130
+ content = content.replace(/(^## DoD Resolutions\n)([\s\S]*?)(\n^##\s|$)/m, (_, header, body, suffix) => {
131
+ const trimmed = body.trimEnd();
132
+ return `${header}${trimmed ? trimmed + '\n' : ''}${entry}\n${suffix}`;
133
+ });
134
+ }
135
+ else {
136
+ // Append new section at end of file
137
+ content = content.trimEnd() + `\n\n${resolutionHeader}\n${entry}\n`;
138
+ }
139
+ writeFileSync(absPath, content, 'utf-8');
140
+ }
141
+ //# sourceMappingURL=dod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dod.js","sourceRoot":"","sources":["../../src/commands/dod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Command } from 'commander';
2
+ import { type LanguagePack } from '../core/language.js';
3
+ import { type AgentName } from '../adapters/index.js';
4
+ export declare const SKILL_FILES: string[];
5
+ export declare function registerInit(program: Command): void;
6
+ export declare function runInit(options: {
7
+ cwd?: string;
8
+ withHooks?: boolean;
9
+ withCi?: string;
10
+ withSkills?: boolean;
11
+ agent?: AgentName | AgentName[] | 'all';
12
+ }): string[];
13
+ export declare function installSkills(targetSkillsDir: string, force?: boolean, pack?: LanguagePack | null, vocab?: Record<string, string> | null): string[];
14
+ export declare function installDocs(targetDocsDir: string, force?: boolean): string[];