@x0rium/devkit-cli 0.4.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.
- package/dist/advance.d.ts +9 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +47 -0
- package/dist/advance.js.map +1 -0
- package/dist/constitution.d.ts +16 -0
- package/dist/constitution.d.ts.map +1 -0
- package/dist/constitution.js +186 -0
- package/dist/constitution.js.map +1 -0
- package/dist/coverage.d.ts +18 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +167 -0
- package/dist/coverage.js.map +1 -0
- package/dist/dashboard.d.ts +2 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +380 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/detector.d.ts +3 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +45 -0
- package/dist/detector.js.map +1 -0
- package/dist/escalate.d.ts +11 -0
- package/dist/escalate.d.ts.map +1 -0
- package/dist/escalate.js +133 -0
- package/dist/escalate.js.map +1 -0
- package/dist/gate.d.ts +15 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +244 -0
- package/dist/gate.js.map +1 -0
- package/dist/impact.d.ts +17 -0
- package/dist/impact.d.ts.map +1 -0
- package/dist/impact.js +192 -0
- package/dist/impact.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +494 -0
- package/dist/index.js.map +1 -0
- package/dist/investigate.d.ts +21 -0
- package/dist/investigate.d.ts.map +1 -0
- package/dist/investigate.js +200 -0
- package/dist/investigate.js.map +1 -0
- package/dist/rfc.d.ts +21 -0
- package/dist/rfc.d.ts.map +1 -0
- package/dist/rfc.js +152 -0
- package/dist/rfc.js.map +1 -0
- package/dist/scaffold.d.ts +7 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +54 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schemas.d.ts +11 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +103 -0
- package/dist/schemas.js.map +1 -0
- package/dist/status.d.ts +13 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +112 -0
- package/dist/status.js.map +1 -0
- package/dist/validator.d.ts +16 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +185 -0
- package/dist/validator.js.map +1 -0
- package/dist/watch.d.ts +2 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +48 -0
- package/dist/watch.js.map +1 -0
- package/package.json +47 -0
package/dist/gate.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const PHASE_MAP = {
|
|
4
|
+
research: 'product',
|
|
5
|
+
product: 'arch',
|
|
6
|
+
arch: 'spec',
|
|
7
|
+
spec: 'qa',
|
|
8
|
+
qa: 'production',
|
|
9
|
+
};
|
|
10
|
+
// --- ResearchKit Gate ---
|
|
11
|
+
function checkResearchGate(devkitDir) {
|
|
12
|
+
const conditions = [];
|
|
13
|
+
const researchDir = join(devkitDir, 'research');
|
|
14
|
+
// Check market.md exists
|
|
15
|
+
const marketExists = existsSync(join(researchDir, 'market.md'));
|
|
16
|
+
conditions.push({
|
|
17
|
+
description: 'Market research completed (market.md)',
|
|
18
|
+
satisfied: marketExists,
|
|
19
|
+
});
|
|
20
|
+
// Check feasibility.md exists and has verdict
|
|
21
|
+
const feasPath = join(researchDir, 'feasibility.md');
|
|
22
|
+
if (existsSync(feasPath)) {
|
|
23
|
+
const content = readFileSync(feasPath, 'utf-8');
|
|
24
|
+
const feasibleMatch = content.match(/FEASIBLE:\s*(yes|conditional)/i);
|
|
25
|
+
conditions.push({
|
|
26
|
+
description: 'Feasibility is "yes" or "conditional"',
|
|
27
|
+
satisfied: !!feasibleMatch,
|
|
28
|
+
detail: feasibleMatch ? `FEASIBLE: ${feasibleMatch[1]}` : 'FEASIBLE field not found or is "no"',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
conditions.push({
|
|
33
|
+
description: 'Feasibility assessment completed (feasibility.md)',
|
|
34
|
+
satisfied: false,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// Check unknowns.md — no open blockers
|
|
38
|
+
const unknownsPath = join(researchDir, 'unknowns.md');
|
|
39
|
+
if (existsSync(unknownsPath)) {
|
|
40
|
+
const content = readFileSync(unknownsPath, 'utf-8');
|
|
41
|
+
const sections = content.split(/^## /m).slice(1);
|
|
42
|
+
let openBlockers = 0;
|
|
43
|
+
for (const section of sections) {
|
|
44
|
+
const isBlocker = /BLOCKER:\s*yes/i.test(section);
|
|
45
|
+
const isOpen = /STATUS:\s*open/i.test(section);
|
|
46
|
+
if (isBlocker && isOpen)
|
|
47
|
+
openBlockers++;
|
|
48
|
+
}
|
|
49
|
+
conditions.push({
|
|
50
|
+
description: 'No open BLOCKER unknowns',
|
|
51
|
+
satisfied: openBlockers === 0,
|
|
52
|
+
detail: openBlockers > 0 ? `${openBlockers} open blocker(s) found` : undefined,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
conditions.push({
|
|
57
|
+
description: 'Unknowns mapped (unknowns.md)',
|
|
58
|
+
satisfied: false,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Check assumptions.md exists
|
|
62
|
+
conditions.push({
|
|
63
|
+
description: 'Assumptions documented (assumptions.md)',
|
|
64
|
+
satisfied: existsSync(join(researchDir, 'assumptions.md')),
|
|
65
|
+
});
|
|
66
|
+
return conditions;
|
|
67
|
+
}
|
|
68
|
+
// --- ProductKit Gate ---
|
|
69
|
+
function checkProductGate(devkitDir) {
|
|
70
|
+
const conditions = [];
|
|
71
|
+
const productDir = join(devkitDir, 'product');
|
|
72
|
+
// Users defined
|
|
73
|
+
const usersPath = join(productDir, 'users.md');
|
|
74
|
+
if (existsSync(usersPath)) {
|
|
75
|
+
const content = readFileSync(usersPath, 'utf-8');
|
|
76
|
+
const hasPrimary = /## Primary User/i.test(content);
|
|
77
|
+
const hasHappyPath = /HAPPY_PATH:/i.test(content);
|
|
78
|
+
conditions.push({
|
|
79
|
+
description: 'Primary user defined with happy path',
|
|
80
|
+
satisfied: hasPrimary && hasHappyPath,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
conditions.push({ description: 'User definition completed (users.md)', satisfied: false });
|
|
85
|
+
}
|
|
86
|
+
// UX invariants
|
|
87
|
+
const uxPath = join(productDir, 'ux_invariants.md');
|
|
88
|
+
if (existsSync(uxPath)) {
|
|
89
|
+
const content = readFileSync(uxPath, 'utf-8');
|
|
90
|
+
const invariants = content.split(/^## U\d+/m).length - 1;
|
|
91
|
+
conditions.push({
|
|
92
|
+
description: 'UX invariants established',
|
|
93
|
+
satisfied: invariants > 0,
|
|
94
|
+
detail: `${invariants} UX invariant(s) defined`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
conditions.push({ description: 'UX invariants defined (ux_invariants.md)', satisfied: false });
|
|
99
|
+
}
|
|
100
|
+
// Roadmap with anti-scope
|
|
101
|
+
const roadmapPath = join(productDir, 'roadmap.md');
|
|
102
|
+
if (existsSync(roadmapPath)) {
|
|
103
|
+
const content = readFileSync(roadmapPath, 'utf-8');
|
|
104
|
+
const hasMvp = /## MVP/i.test(content);
|
|
105
|
+
const hasAntiScope = /## Never/i.test(content) || /anti-scope/i.test(content);
|
|
106
|
+
conditions.push({
|
|
107
|
+
description: 'Roadmap has MVP and anti-scope',
|
|
108
|
+
satisfied: hasMvp && hasAntiScope,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
conditions.push({ description: 'Roadmap defined (roadmap.md)', satisfied: false });
|
|
113
|
+
}
|
|
114
|
+
return conditions;
|
|
115
|
+
}
|
|
116
|
+
// --- ArchKit Gate ---
|
|
117
|
+
function checkArchGate(devkitDir) {
|
|
118
|
+
const conditions = [];
|
|
119
|
+
const archDir = join(devkitDir, 'arch');
|
|
120
|
+
// Invariants exist
|
|
121
|
+
const invPath = join(archDir, 'invariants.md');
|
|
122
|
+
conditions.push({
|
|
123
|
+
description: 'Technical invariants defined (invariants.md)',
|
|
124
|
+
satisfied: existsSync(invPath),
|
|
125
|
+
});
|
|
126
|
+
// Constitution generated
|
|
127
|
+
const constPath = join(archDir, 'constitution.md');
|
|
128
|
+
conditions.push({
|
|
129
|
+
description: 'Constitution generated (constitution.md)',
|
|
130
|
+
satisfied: existsSync(constPath),
|
|
131
|
+
});
|
|
132
|
+
// No unresolved open questions in invariants
|
|
133
|
+
if (existsSync(invPath)) {
|
|
134
|
+
const content = readFileSync(invPath, 'utf-8');
|
|
135
|
+
const hasOpenQuestions = /OPEN_QUESTION|STATUS:\s*unverified/i.test(content);
|
|
136
|
+
conditions.push({
|
|
137
|
+
description: 'No unverified invariants or open questions',
|
|
138
|
+
satisfied: !hasOpenQuestions,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return conditions;
|
|
142
|
+
}
|
|
143
|
+
// --- SpecKit Gate ---
|
|
144
|
+
function checkSpecGate(devkitDir) {
|
|
145
|
+
const conditions = [];
|
|
146
|
+
// At least one spec implemented
|
|
147
|
+
const specifyDir = join(devkitDir, '..', '.specify', 'specs');
|
|
148
|
+
if (existsSync(specifyDir)) {
|
|
149
|
+
const specs = readdirSync(specifyDir).filter(f => f.endsWith('.md'));
|
|
150
|
+
conditions.push({
|
|
151
|
+
description: 'At least one spec implemented',
|
|
152
|
+
satisfied: specs.length > 0,
|
|
153
|
+
detail: `${specs.length} spec(s) found`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
conditions.push({
|
|
158
|
+
description: 'Implementation specs exist (.specify/specs/)',
|
|
159
|
+
satisfied: false,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return conditions;
|
|
163
|
+
}
|
|
164
|
+
// --- QAKit Gate ---
|
|
165
|
+
function checkQaGate(devkitDir) {
|
|
166
|
+
const conditions = [];
|
|
167
|
+
const qaDir = join(devkitDir, 'qa');
|
|
168
|
+
conditions.push({
|
|
169
|
+
description: 'Test contracts generated (test_contracts.md)',
|
|
170
|
+
satisfied: existsSync(join(qaDir, 'test_contracts.md')),
|
|
171
|
+
});
|
|
172
|
+
conditions.push({
|
|
173
|
+
description: 'Coverage map generated (coverage_map.md)',
|
|
174
|
+
satisfied: existsSync(join(qaDir, 'coverage_map.md')),
|
|
175
|
+
});
|
|
176
|
+
// No open blocker escalations
|
|
177
|
+
const escDir = join(qaDir, 'escalations');
|
|
178
|
+
if (existsSync(escDir)) {
|
|
179
|
+
const files = readdirSync(escDir).filter(f => f.endsWith('.md'));
|
|
180
|
+
let openBlockers = 0;
|
|
181
|
+
for (const file of files) {
|
|
182
|
+
const content = readFileSync(join(escDir, file), 'utf-8');
|
|
183
|
+
if (/STATUS:\s*open/i.test(content) && /blocker/i.test(content)) {
|
|
184
|
+
openBlockers++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
conditions.push({
|
|
188
|
+
description: 'No open blocker escalations',
|
|
189
|
+
satisfied: openBlockers === 0,
|
|
190
|
+
detail: openBlockers > 0 ? `${openBlockers} open blocker escalation(s)` : undefined,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return conditions;
|
|
194
|
+
}
|
|
195
|
+
export function checkGate(cwd, currentPhase) {
|
|
196
|
+
const devkitDir = join(cwd, '.devkit');
|
|
197
|
+
const checkers = {
|
|
198
|
+
research: checkResearchGate,
|
|
199
|
+
product: checkProductGate,
|
|
200
|
+
arch: checkArchGate,
|
|
201
|
+
spec: checkSpecGate,
|
|
202
|
+
qa: checkQaGate,
|
|
203
|
+
};
|
|
204
|
+
const checker = checkers[currentPhase];
|
|
205
|
+
const conditions = checker ? checker(devkitDir) : [];
|
|
206
|
+
const allowed = conditions.length > 0 && conditions.every(c => c.satisfied);
|
|
207
|
+
return {
|
|
208
|
+
allowed,
|
|
209
|
+
currentPhase,
|
|
210
|
+
nextPhase: PHASE_MAP[currentPhase],
|
|
211
|
+
conditions,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const PHASE_LABELS = {
|
|
215
|
+
research: 'ResearchKit',
|
|
216
|
+
product: 'ProductKit',
|
|
217
|
+
arch: 'ArchKit',
|
|
218
|
+
spec: 'SpecKit',
|
|
219
|
+
qa: 'QAKit',
|
|
220
|
+
production: 'Production',
|
|
221
|
+
};
|
|
222
|
+
export function formatGate(result) {
|
|
223
|
+
const lines = [];
|
|
224
|
+
const from = PHASE_LABELS[result.currentPhase];
|
|
225
|
+
const to = PHASE_LABELS[result.nextPhase];
|
|
226
|
+
lines.push(`Gate: ${from} → ${to}\n`);
|
|
227
|
+
for (const cond of result.conditions) {
|
|
228
|
+
const icon = cond.satisfied ? '✅' : '❌';
|
|
229
|
+
lines.push(` ${icon} ${cond.description}`);
|
|
230
|
+
if (cond.detail) {
|
|
231
|
+
lines.push(` ${cond.detail}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
lines.push('');
|
|
235
|
+
if (result.allowed) {
|
|
236
|
+
lines.push(`🟢 ALLOWED — ready to proceed to ${to}`);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const unsatisfied = result.conditions.filter(c => !c.satisfied).length;
|
|
240
|
+
lines.push(`🔴 BLOCKED — ${unsatisfied} condition(s) not met`);
|
|
241
|
+
}
|
|
242
|
+
return lines.join('\n');
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=gate.js.map
|
package/dist/gate.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
|
package/dist/impact.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ImpactEntity {
|
|
2
|
+
name: string;
|
|
3
|
+
dependsOn: string[];
|
|
4
|
+
dependedBy: string[];
|
|
5
|
+
invariants: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface ImpactResult {
|
|
8
|
+
description: string;
|
|
9
|
+
affectedInvariants: string[];
|
|
10
|
+
affectedComponents: string[];
|
|
11
|
+
affectedSpecs: string[];
|
|
12
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
13
|
+
recommendation: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function analyzeImpact(cwd: string, description: string): ImpactResult;
|
|
16
|
+
export declare function formatImpact(result: ImpactResult): string;
|
|
17
|
+
//# sourceMappingURL=impact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../src/impact.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CAC1B;AA6ED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CA4G5E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0CzD"}
|
package/dist/impact.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
function parseImpactMap(content) {
|
|
4
|
+
const entities = [];
|
|
5
|
+
const sections = content.split(/^## /m).slice(1);
|
|
6
|
+
for (const section of sections) {
|
|
7
|
+
const lines = section.split('\n');
|
|
8
|
+
const name = lines[0]?.trim() ?? '';
|
|
9
|
+
const dependsOn = [];
|
|
10
|
+
const dependedBy = [];
|
|
11
|
+
const invariants = [];
|
|
12
|
+
for (const line of lines) {
|
|
13
|
+
const depOnMatch = line.match(/DEPENDS_ON:\s*\[(.+)\]/);
|
|
14
|
+
if (depOnMatch) {
|
|
15
|
+
dependsOn.push(...depOnMatch[1].split(',').map(s => s.trim()).filter(Boolean));
|
|
16
|
+
}
|
|
17
|
+
const depByMatch = line.match(/DEPENDED_BY:\s*\[(.+)\]/);
|
|
18
|
+
if (depByMatch) {
|
|
19
|
+
dependedBy.push(...depByMatch[1].split(',').map(s => s.trim()).filter(Boolean));
|
|
20
|
+
}
|
|
21
|
+
const invMatch = line.match(/INVARIANTS:\s*\[(.+)\]/);
|
|
22
|
+
if (invMatch) {
|
|
23
|
+
invariants.push(...invMatch[1].split(',').map(s => s.trim()).filter(Boolean));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
entities.push({ name, dependsOn, dependedBy, invariants });
|
|
27
|
+
}
|
|
28
|
+
return entities;
|
|
29
|
+
}
|
|
30
|
+
function findAffected(entities, keywords) {
|
|
31
|
+
const components = new Set();
|
|
32
|
+
const invariants = new Set();
|
|
33
|
+
const visited = new Set();
|
|
34
|
+
function walk(name) {
|
|
35
|
+
if (visited.has(name))
|
|
36
|
+
return;
|
|
37
|
+
visited.add(name);
|
|
38
|
+
components.add(name);
|
|
39
|
+
const entity = entities.find(e => e.name.toLowerCase().includes(name.toLowerCase()));
|
|
40
|
+
if (!entity)
|
|
41
|
+
return;
|
|
42
|
+
for (const inv of entity.invariants) {
|
|
43
|
+
invariants.add(inv);
|
|
44
|
+
}
|
|
45
|
+
// Walk dependedBy (things that depend on this)
|
|
46
|
+
for (const dep of entity.dependedBy) {
|
|
47
|
+
walk(dep);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Start from entities that match keywords
|
|
51
|
+
for (const entity of entities) {
|
|
52
|
+
for (const keyword of keywords) {
|
|
53
|
+
if (entity.name.toLowerCase().includes(keyword.toLowerCase())) {
|
|
54
|
+
walk(entity.name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { components, invariants };
|
|
59
|
+
}
|
|
60
|
+
export function analyzeImpact(cwd, description) {
|
|
61
|
+
const devkitDir = join(cwd, '.devkit');
|
|
62
|
+
const impactPath = join(devkitDir, 'arch', 'impact.md');
|
|
63
|
+
// Extract keywords from description
|
|
64
|
+
const keywords = description
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.split(/[\s,;]+/)
|
|
67
|
+
.filter(w => w.length > 2)
|
|
68
|
+
.filter(w => !['the', 'and', 'for', 'with', 'from', 'that', 'this', 'into', 'add', 'new', 'use'].includes(w));
|
|
69
|
+
if (!existsSync(impactPath)) {
|
|
70
|
+
// No impact map — do best-effort analysis from invariants
|
|
71
|
+
const invPath = join(devkitDir, 'arch', 'invariants.md');
|
|
72
|
+
const uxPath = join(devkitDir, 'product', 'ux_invariants.md');
|
|
73
|
+
const affectedInvariants = [];
|
|
74
|
+
for (const path of [invPath, uxPath]) {
|
|
75
|
+
if (!existsSync(path))
|
|
76
|
+
continue;
|
|
77
|
+
const content = readFileSync(path, 'utf-8');
|
|
78
|
+
// Find invariants whose text mentions any keyword
|
|
79
|
+
const sections = content.split(/^## /m).slice(1);
|
|
80
|
+
for (const section of sections) {
|
|
81
|
+
const header = section.split('\n')[0]?.trim() ?? '';
|
|
82
|
+
for (const keyword of keywords) {
|
|
83
|
+
if (section.toLowerCase().includes(keyword)) {
|
|
84
|
+
affectedInvariants.push(header);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Check specs
|
|
91
|
+
const affectedSpecs = [];
|
|
92
|
+
const specsDir = join(cwd, '.specify', 'specs');
|
|
93
|
+
if (existsSync(specsDir)) {
|
|
94
|
+
const specs = readdirSync(specsDir).filter(f => f.endsWith('.md'));
|
|
95
|
+
for (const spec of specs) {
|
|
96
|
+
const content = readFileSync(join(specsDir, spec), 'utf-8');
|
|
97
|
+
for (const keyword of keywords) {
|
|
98
|
+
if (content.toLowerCase().includes(keyword)) {
|
|
99
|
+
affectedSpecs.push(spec.replace('.md', ''));
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const riskLevel = affectedInvariants.length >= 3
|
|
106
|
+
? 'high'
|
|
107
|
+
: affectedInvariants.length >= 1
|
|
108
|
+
? 'medium'
|
|
109
|
+
: 'low';
|
|
110
|
+
const recommendation = affectedInvariants.length > 0
|
|
111
|
+
? `This change touches ${affectedInvariants.length} invariant(s). Open an RFC via "devkit rfc" before proceeding.`
|
|
112
|
+
: 'No invariants directly affected. Proceed with caution and validate after implementation.';
|
|
113
|
+
return {
|
|
114
|
+
description,
|
|
115
|
+
affectedInvariants,
|
|
116
|
+
affectedComponents: [],
|
|
117
|
+
affectedSpecs,
|
|
118
|
+
riskLevel,
|
|
119
|
+
recommendation,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// Full analysis with impact map
|
|
123
|
+
const impactContent = readFileSync(impactPath, 'utf-8');
|
|
124
|
+
const entities = parseImpactMap(impactContent);
|
|
125
|
+
const { components, invariants } = findAffected(entities, keywords);
|
|
126
|
+
const affectedSpecs = [];
|
|
127
|
+
const specsDir = join(cwd, '.specify', 'specs');
|
|
128
|
+
if (existsSync(specsDir)) {
|
|
129
|
+
const specs = readdirSync(specsDir).filter(f => f.endsWith('.md'));
|
|
130
|
+
for (const spec of specs) {
|
|
131
|
+
const content = readFileSync(join(specsDir, spec), 'utf-8');
|
|
132
|
+
for (const keyword of keywords) {
|
|
133
|
+
if (content.toLowerCase().includes(keyword)) {
|
|
134
|
+
affectedSpecs.push(spec.replace('.md', ''));
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const riskLevel = invariants.size >= 3
|
|
141
|
+
? 'high'
|
|
142
|
+
: invariants.size >= 1
|
|
143
|
+
? 'medium'
|
|
144
|
+
: 'low';
|
|
145
|
+
const recommendation = invariants.size > 0
|
|
146
|
+
? `This change touches ${invariants.size} invariant(s) across ${components.size} component(s). Open an RFC via "devkit rfc" before proceeding.`
|
|
147
|
+
: 'No invariants directly affected. Proceed with normal spec-kit workflow.';
|
|
148
|
+
return {
|
|
149
|
+
description,
|
|
150
|
+
affectedInvariants: [...invariants],
|
|
151
|
+
affectedComponents: [...components],
|
|
152
|
+
affectedSpecs,
|
|
153
|
+
riskLevel,
|
|
154
|
+
recommendation,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function formatImpact(result) {
|
|
158
|
+
const lines = [];
|
|
159
|
+
const riskEmoji = result.riskLevel === 'high' ? '🔴' :
|
|
160
|
+
result.riskLevel === 'medium' ? '🟡' : '🟢';
|
|
161
|
+
lines.push(`Impact Analysis: "${result.description}"`);
|
|
162
|
+
lines.push(`Risk: ${riskEmoji} ${result.riskLevel.toUpperCase()}`);
|
|
163
|
+
lines.push('');
|
|
164
|
+
if (result.affectedInvariants.length > 0) {
|
|
165
|
+
lines.push(' Affected invariants:');
|
|
166
|
+
for (const inv of result.affectedInvariants) {
|
|
167
|
+
lines.push(` ⚡ ${inv}`);
|
|
168
|
+
}
|
|
169
|
+
lines.push('');
|
|
170
|
+
}
|
|
171
|
+
if (result.affectedComponents.length > 0) {
|
|
172
|
+
lines.push(' Affected components:');
|
|
173
|
+
for (const comp of result.affectedComponents) {
|
|
174
|
+
lines.push(` 📦 ${comp}`);
|
|
175
|
+
}
|
|
176
|
+
lines.push('');
|
|
177
|
+
}
|
|
178
|
+
if (result.affectedSpecs.length > 0) {
|
|
179
|
+
lines.push(' Affected specs:');
|
|
180
|
+
for (const spec of result.affectedSpecs) {
|
|
181
|
+
lines.push(` 📄 ${spec}`);
|
|
182
|
+
}
|
|
183
|
+
lines.push('');
|
|
184
|
+
}
|
|
185
|
+
if (result.affectedInvariants.length === 0 && result.affectedComponents.length === 0) {
|
|
186
|
+
lines.push(' No direct impact detected on existing invariants or components.');
|
|
187
|
+
lines.push('');
|
|
188
|
+
}
|
|
189
|
+
lines.push(` 💡 ${result.recommendation}`);
|
|
190
|
+
return lines.join('\n');
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=impact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../src/impact.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|