red64-cli 0.1.0 → 0.3.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/README.md +1 -2
- package/dist/cli/parseArgs.d.ts.map +1 -1
- package/dist/cli/parseArgs.js +5 -0
- package/dist/cli/parseArgs.js.map +1 -1
- package/dist/components/init/CompleteStep.d.ts.map +1 -1
- package/dist/components/init/CompleteStep.js +2 -2
- package/dist/components/init/CompleteStep.js.map +1 -1
- package/dist/components/init/TestCheckStep.d.ts +16 -0
- package/dist/components/init/TestCheckStep.d.ts.map +1 -0
- package/dist/components/init/TestCheckStep.js +120 -0
- package/dist/components/init/TestCheckStep.js.map +1 -0
- package/dist/components/init/index.d.ts +1 -0
- package/dist/components/init/index.d.ts.map +1 -1
- package/dist/components/init/index.js +1 -0
- package/dist/components/init/index.js.map +1 -1
- package/dist/components/init/types.d.ts +9 -0
- package/dist/components/init/types.d.ts.map +1 -1
- package/dist/components/screens/InitScreen.d.ts.map +1 -1
- package/dist/components/screens/InitScreen.js +69 -6
- package/dist/components/screens/InitScreen.js.map +1 -1
- package/dist/components/screens/ListScreen.d.ts.map +1 -1
- package/dist/components/screens/ListScreen.js +28 -3
- package/dist/components/screens/ListScreen.js.map +1 -1
- package/dist/components/screens/StartScreen.d.ts.map +1 -1
- package/dist/components/screens/StartScreen.js +212 -13
- package/dist/components/screens/StartScreen.js.map +1 -1
- package/dist/components/ui/ArtifactsSidebar.d.ts +19 -0
- package/dist/components/ui/ArtifactsSidebar.d.ts.map +1 -0
- package/dist/components/ui/ArtifactsSidebar.js +51 -0
- package/dist/components/ui/ArtifactsSidebar.js.map +1 -0
- package/dist/components/ui/FeatureSidebar.d.ts.map +1 -1
- package/dist/components/ui/FeatureSidebar.js +1 -1
- package/dist/components/ui/FeatureSidebar.js.map +1 -1
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +1 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/services/ClaudeErrorDetector.js +3 -3
- package/dist/services/ClaudeErrorDetector.js.map +1 -1
- package/dist/services/ConfigService.d.ts +1 -0
- package/dist/services/ConfigService.d.ts.map +1 -1
- package/dist/services/ConfigService.js.map +1 -1
- package/dist/services/ProjectDetector.d.ts +28 -0
- package/dist/services/ProjectDetector.d.ts.map +1 -0
- package/dist/services/ProjectDetector.js +236 -0
- package/dist/services/ProjectDetector.js.map +1 -0
- package/dist/services/TestRunner.d.ts +46 -0
- package/dist/services/TestRunner.d.ts.map +1 -0
- package/dist/services/TestRunner.js +85 -0
- package/dist/services/TestRunner.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/framework/.red64/settings/templates/specs/gap-analysis.md +163 -0
- package/framework/agents/claude/.claude/agents/red64/spec-impl.md +131 -2
- package/framework/agents/claude/.claude/agents/red64/validate-gap.md +13 -7
- package/framework/agents/claude/.claude/commands/red64/spec-impl.md +24 -0
- package/framework/agents/claude/.claude/commands/red64/validate-gap.md +4 -0
- package/framework/agents/codex/.codex/agents/red64/spec-impl.md +131 -2
- package/framework/agents/codex/.codex/agents/red64/validate-gap.md +13 -7
- package/framework/agents/codex/.codex/commands/red64/spec-impl.md +24 -0
- package/framework/agents/codex/.codex/commands/red64/validate-gap.md +4 -0
- package/framework/stacks/generic/feedback.md +80 -0
- package/framework/stacks/nextjs/accessibility.md +437 -0
- package/framework/stacks/nextjs/api.md +431 -0
- package/framework/stacks/nextjs/coding-style.md +282 -0
- package/framework/stacks/nextjs/commenting.md +226 -0
- package/framework/stacks/nextjs/components.md +411 -0
- package/framework/stacks/nextjs/conventions.md +333 -0
- package/framework/stacks/nextjs/css.md +310 -0
- package/framework/stacks/nextjs/error-handling.md +442 -0
- package/framework/stacks/nextjs/feedback.md +124 -0
- package/framework/stacks/nextjs/migrations.md +332 -0
- package/framework/stacks/nextjs/models.md +362 -0
- package/framework/stacks/nextjs/queries.md +410 -0
- package/framework/stacks/nextjs/responsive.md +338 -0
- package/framework/stacks/nextjs/tech-stack.md +177 -0
- package/framework/stacks/nextjs/test-writing.md +475 -0
- package/framework/stacks/nextjs/validation.md +467 -0
- package/framework/stacks/python/api.md +468 -0
- package/framework/stacks/python/authentication.md +342 -0
- package/framework/stacks/python/code-quality.md +283 -0
- package/framework/stacks/python/code-refactoring.md +315 -0
- package/framework/stacks/python/coding-style.md +462 -0
- package/framework/stacks/python/conventions.md +399 -0
- package/framework/stacks/python/error-handling.md +512 -0
- package/framework/stacks/python/feedback.md +92 -0
- package/framework/stacks/python/implement-ai-llm.md +468 -0
- package/framework/stacks/python/migrations.md +388 -0
- package/framework/stacks/python/models.md +399 -0
- package/framework/stacks/python/python.md +232 -0
- package/framework/stacks/python/queries.md +451 -0
- package/framework/stacks/python/structure.md +245 -58
- package/framework/stacks/python/tech.md +92 -35
- package/framework/stacks/python/testing.md +380 -0
- package/framework/stacks/python/validation.md +471 -0
- package/framework/stacks/rails/authentication.md +176 -0
- package/framework/stacks/rails/code-quality.md +287 -0
- package/framework/stacks/rails/code-refactoring.md +299 -0
- package/framework/stacks/rails/feedback.md +130 -0
- package/framework/stacks/rails/implement-ai-llm-with-rubyllm.md +342 -0
- package/framework/stacks/rails/rails.md +301 -0
- package/framework/stacks/rails/rails8-best-practices.md +498 -0
- package/framework/stacks/rails/rails8-css.md +573 -0
- package/framework/stacks/rails/structure.md +140 -0
- package/framework/stacks/rails/tech.md +108 -0
- package/framework/stacks/react/code-quality.md +521 -0
- package/framework/stacks/react/components.md +625 -0
- package/framework/stacks/react/data-fetching.md +586 -0
- package/framework/stacks/react/feedback.md +110 -0
- package/framework/stacks/react/forms.md +694 -0
- package/framework/stacks/react/performance.md +640 -0
- package/framework/stacks/react/product.md +22 -9
- package/framework/stacks/react/state-management.md +472 -0
- package/framework/stacks/react/structure.md +351 -44
- package/framework/stacks/react/tech.md +219 -30
- package/framework/stacks/react/testing.md +690 -0
- package/package.json +1 -1
- package/framework/stacks/node/product.md +0 -27
- package/framework/stacks/node/structure.md +0 -82
- package/framework/stacks/node/tech.md +0 -63
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Detector Service
|
|
3
|
+
* Auto-detects test commands from various project configuration files
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, access } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* Detection strategies ordered by priority
|
|
9
|
+
*/
|
|
10
|
+
const DETECTION_STRATEGIES = [
|
|
11
|
+
// Node.js / package.json
|
|
12
|
+
{
|
|
13
|
+
file: 'package.json',
|
|
14
|
+
confidence: 'high',
|
|
15
|
+
detect: (content) => {
|
|
16
|
+
try {
|
|
17
|
+
const pkg = JSON.parse(content);
|
|
18
|
+
// Check scripts.test - ignore default npm init placeholder
|
|
19
|
+
if (pkg.scripts?.test && pkg.scripts.test !== 'echo "Error: no test specified" && exit 1') {
|
|
20
|
+
return 'npm test';
|
|
21
|
+
}
|
|
22
|
+
// Check for common test runners in dependencies
|
|
23
|
+
const deps = { ...pkg.devDependencies, ...pkg.dependencies };
|
|
24
|
+
if (deps?.vitest) {
|
|
25
|
+
return 'npx vitest run';
|
|
26
|
+
}
|
|
27
|
+
if (deps?.jest) {
|
|
28
|
+
return 'npx jest';
|
|
29
|
+
}
|
|
30
|
+
if (deps?.mocha) {
|
|
31
|
+
return 'npx mocha';
|
|
32
|
+
}
|
|
33
|
+
if (deps?.ava) {
|
|
34
|
+
return 'npx ava';
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
// Python / pyproject.toml
|
|
44
|
+
{
|
|
45
|
+
file: 'pyproject.toml',
|
|
46
|
+
confidence: 'high',
|
|
47
|
+
detect: (content) => {
|
|
48
|
+
if (content.includes('[tool.pytest') || content.includes('pytest')) {
|
|
49
|
+
return 'pytest';
|
|
50
|
+
}
|
|
51
|
+
if (content.includes('unittest')) {
|
|
52
|
+
return 'python -m unittest discover';
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
// Python / setup.py fallback
|
|
58
|
+
{
|
|
59
|
+
file: 'setup.py',
|
|
60
|
+
confidence: 'medium',
|
|
61
|
+
detect: (content) => {
|
|
62
|
+
if (content.includes('pytest') || content.includes('test_suite')) {
|
|
63
|
+
return 'pytest';
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
// Python / requirements.txt fallback
|
|
69
|
+
{
|
|
70
|
+
file: 'requirements.txt',
|
|
71
|
+
confidence: 'medium',
|
|
72
|
+
detect: (content) => {
|
|
73
|
+
if (content.includes('pytest')) {
|
|
74
|
+
return 'pytest';
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
// Rust / Cargo.toml
|
|
80
|
+
{
|
|
81
|
+
file: 'Cargo.toml',
|
|
82
|
+
confidence: 'high',
|
|
83
|
+
detect: (_content) => {
|
|
84
|
+
return 'cargo test';
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
// Go / go.mod
|
|
88
|
+
{
|
|
89
|
+
file: 'go.mod',
|
|
90
|
+
confidence: 'high',
|
|
91
|
+
detect: (_content) => {
|
|
92
|
+
return 'go test ./...';
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
// Ruby / Gemfile
|
|
96
|
+
{
|
|
97
|
+
file: 'Gemfile',
|
|
98
|
+
confidence: 'medium',
|
|
99
|
+
detect: (content) => {
|
|
100
|
+
if (content.includes('rspec')) {
|
|
101
|
+
return 'bundle exec rspec';
|
|
102
|
+
}
|
|
103
|
+
if (content.includes('minitest')) {
|
|
104
|
+
return 'bundle exec rake test';
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
// Java / Maven
|
|
110
|
+
{
|
|
111
|
+
file: 'pom.xml',
|
|
112
|
+
confidence: 'high',
|
|
113
|
+
detect: (_content) => {
|
|
114
|
+
return 'mvn test';
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
// Java/Kotlin / Gradle
|
|
118
|
+
{
|
|
119
|
+
file: 'build.gradle',
|
|
120
|
+
confidence: 'high',
|
|
121
|
+
detect: (_content) => {
|
|
122
|
+
return './gradlew test';
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
// Kotlin DSL
|
|
126
|
+
{
|
|
127
|
+
file: 'build.gradle.kts',
|
|
128
|
+
confidence: 'high',
|
|
129
|
+
detect: (_content) => {
|
|
130
|
+
return './gradlew test';
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
// Makefile
|
|
134
|
+
{
|
|
135
|
+
file: 'Makefile',
|
|
136
|
+
confidence: 'medium',
|
|
137
|
+
detect: (content) => {
|
|
138
|
+
if (content.match(/^test\s*:/m)) {
|
|
139
|
+
return 'make test';
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
// PHP / Composer
|
|
145
|
+
{
|
|
146
|
+
file: 'composer.json',
|
|
147
|
+
confidence: 'medium',
|
|
148
|
+
detect: (content) => {
|
|
149
|
+
try {
|
|
150
|
+
const composer = JSON.parse(content);
|
|
151
|
+
if (composer.scripts?.test) {
|
|
152
|
+
return 'composer test';
|
|
153
|
+
}
|
|
154
|
+
const deps = { ...composer.require, ...composer['require-dev'] };
|
|
155
|
+
if (deps?.['phpunit/phpunit']) {
|
|
156
|
+
return './vendor/bin/phpunit';
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
// Elixir / Mix
|
|
166
|
+
{
|
|
167
|
+
file: 'mix.exs',
|
|
168
|
+
confidence: 'high',
|
|
169
|
+
detect: (_content) => {
|
|
170
|
+
return 'mix test';
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
// .NET / C#
|
|
174
|
+
{
|
|
175
|
+
file: '*.csproj',
|
|
176
|
+
confidence: 'high',
|
|
177
|
+
detect: (_content) => {
|
|
178
|
+
return 'dotnet test';
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
];
|
|
182
|
+
/**
|
|
183
|
+
* Check if file exists
|
|
184
|
+
*/
|
|
185
|
+
async function fileExists(path) {
|
|
186
|
+
try {
|
|
187
|
+
await access(path);
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create project detector service
|
|
196
|
+
*/
|
|
197
|
+
export function createProjectDetector() {
|
|
198
|
+
return {
|
|
199
|
+
async detect(projectDir) {
|
|
200
|
+
// Try each strategy in priority order
|
|
201
|
+
for (const strategy of DETECTION_STRATEGIES) {
|
|
202
|
+
// Handle glob patterns (e.g., *.csproj)
|
|
203
|
+
if (strategy.file.includes('*')) {
|
|
204
|
+
// For now, skip glob patterns - can be enhanced later
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const filePath = join(projectDir, strategy.file);
|
|
208
|
+
if (await fileExists(filePath)) {
|
|
209
|
+
try {
|
|
210
|
+
const content = await readFile(filePath, 'utf-8');
|
|
211
|
+
const testCommand = strategy.detect(content);
|
|
212
|
+
if (testCommand) {
|
|
213
|
+
return {
|
|
214
|
+
detected: true,
|
|
215
|
+
testCommand,
|
|
216
|
+
source: strategy.file,
|
|
217
|
+
confidence: strategy.confidence
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// Continue to next strategy on read error
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// No test command detected
|
|
227
|
+
return {
|
|
228
|
+
detected: false,
|
|
229
|
+
testCommand: null,
|
|
230
|
+
source: null,
|
|
231
|
+
confidence: 'low'
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=ProjectDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectDetector.js","sourceRoot":"","sources":["../../src/services/ProjectDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Service
|
|
3
|
+
* Executes project tests and reports results
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Test execution result
|
|
7
|
+
*/
|
|
8
|
+
export interface TestResult {
|
|
9
|
+
readonly success: boolean;
|
|
10
|
+
readonly exitCode: number;
|
|
11
|
+
readonly stdout: string;
|
|
12
|
+
readonly stderr: string;
|
|
13
|
+
readonly durationMs: number;
|
|
14
|
+
readonly timedOut: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Test runner options
|
|
18
|
+
*/
|
|
19
|
+
export interface TestRunnerOptions {
|
|
20
|
+
readonly testCommand: string;
|
|
21
|
+
readonly workingDir: string;
|
|
22
|
+
readonly timeoutMs?: number;
|
|
23
|
+
readonly onOutput?: (chunk: string) => void;
|
|
24
|
+
readonly onError?: (chunk: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Test runner service interface
|
|
28
|
+
*/
|
|
29
|
+
export interface TestRunnerService {
|
|
30
|
+
/**
|
|
31
|
+
* Run the test command
|
|
32
|
+
*/
|
|
33
|
+
run(options: TestRunnerOptions): Promise<TestResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Parse test command into command and args
|
|
36
|
+
*/
|
|
37
|
+
parseCommand(testCommand: string): {
|
|
38
|
+
cmd: string;
|
|
39
|
+
args: readonly string[];
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create test runner service
|
|
44
|
+
*/
|
|
45
|
+
export declare function createTestRunner(): TestRunnerService;
|
|
46
|
+
//# sourceMappingURL=TestRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunner.d.ts","sourceRoot":"","sources":["../../src/services/TestRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAErD;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC7E;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAiFpD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Service
|
|
3
|
+
* Executes project tests and reports results
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
/**
|
|
7
|
+
* Default timeout: 5 minutes
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_TIMEOUT_MS = 300000;
|
|
10
|
+
/**
|
|
11
|
+
* Create test runner service
|
|
12
|
+
*/
|
|
13
|
+
export function createTestRunner() {
|
|
14
|
+
return {
|
|
15
|
+
parseCommand(testCommand) {
|
|
16
|
+
const parts = testCommand.trim().split(/\s+/);
|
|
17
|
+
const cmd = parts[0];
|
|
18
|
+
const args = parts.slice(1);
|
|
19
|
+
return { cmd, args };
|
|
20
|
+
},
|
|
21
|
+
async run(options) {
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
let stdout = '';
|
|
26
|
+
let stderr = '';
|
|
27
|
+
let timedOut = false;
|
|
28
|
+
// Use shell to handle complex commands (pipes, &&, etc.)
|
|
29
|
+
const proc = spawn(options.testCommand, [], {
|
|
30
|
+
cwd: options.workingDir,
|
|
31
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
+
shell: true
|
|
33
|
+
});
|
|
34
|
+
// Set timeout
|
|
35
|
+
const timeoutId = setTimeout(() => {
|
|
36
|
+
timedOut = true;
|
|
37
|
+
proc.kill('SIGTERM');
|
|
38
|
+
// Force kill after 5 seconds if SIGTERM doesn't work
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
proc.kill('SIGKILL');
|
|
41
|
+
}, 5000);
|
|
42
|
+
}, timeoutMs);
|
|
43
|
+
// Capture stdout
|
|
44
|
+
proc.stdout?.on('data', (data) => {
|
|
45
|
+
const chunk = data.toString();
|
|
46
|
+
stdout += chunk;
|
|
47
|
+
options.onOutput?.(chunk);
|
|
48
|
+
});
|
|
49
|
+
// Capture stderr
|
|
50
|
+
proc.stderr?.on('data', (data) => {
|
|
51
|
+
const chunk = data.toString();
|
|
52
|
+
stderr += chunk;
|
|
53
|
+
options.onError?.(chunk);
|
|
54
|
+
});
|
|
55
|
+
// Handle completion
|
|
56
|
+
proc.on('close', (code) => {
|
|
57
|
+
clearTimeout(timeoutId);
|
|
58
|
+
const durationMs = Date.now() - startTime;
|
|
59
|
+
resolve({
|
|
60
|
+
success: code === 0,
|
|
61
|
+
exitCode: code ?? -1,
|
|
62
|
+
stdout,
|
|
63
|
+
stderr,
|
|
64
|
+
durationMs,
|
|
65
|
+
timedOut
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
// Handle spawn errors (e.g., command not found)
|
|
69
|
+
proc.on('error', (error) => {
|
|
70
|
+
clearTimeout(timeoutId);
|
|
71
|
+
const durationMs = Date.now() - startTime;
|
|
72
|
+
resolve({
|
|
73
|
+
success: false,
|
|
74
|
+
exitCode: -1,
|
|
75
|
+
stdout,
|
|
76
|
+
stderr: stderr || error.message,
|
|
77
|
+
durationMs,
|
|
78
|
+
timedOut: false
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=TestRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunner.js","sourceRoot":"","sources":["../../src/services/TestRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -22,4 +22,6 @@ export { createGitHubService, GitHubFetchError, type GitHubService, type GitHubS
|
|
|
22
22
|
export { createSpecInitService, type SpecInitService, type SpecInitResult } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector, type ClaudeErrorDetectorService, type ClaudeError, type ClaudeErrorCode } from './ClaudeErrorDetector.js';
|
|
24
24
|
export { createClaudeHealthCheck, type ClaudeHealthCheckService, type HealthCheckResult, type HealthCheckOptions } from './ClaudeHealthCheck.js';
|
|
25
|
+
export { createProjectDetector, type ProjectDetectorService, type DetectionResult } from './ProjectDetector.js';
|
|
26
|
+
export { createTestRunner, type TestRunnerService, type TestResult, type TestRunnerOptions } from './TestRunner.js';
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,IAAI,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.js
CHANGED
|
@@ -22,4 +22,6 @@ export { createGitHubService, GitHubFetchError } from './GitHubService.js';
|
|
|
22
22
|
export { createSpecInitService } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
|
|
24
24
|
export { createClaudeHealthCheck } from './ClaudeHealthCheck.js';
|
|
25
|
+
export { createProjectDetector } from './ProjectDetector.js';
|
|
26
|
+
export { createTestRunner } from './TestRunner.js';
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EAIxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EAIxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export interface GlobalFlags {
|
|
|
45
45
|
readonly 'no-steering'?: boolean;
|
|
46
46
|
readonly 'no-cache'?: boolean;
|
|
47
47
|
readonly agent?: CodingAgent;
|
|
48
|
+
readonly 'skip-tests'?: boolean;
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
51
|
* CLIConfig interface combining command, args, and flags
|
|
@@ -139,6 +140,17 @@ export interface TaskProgress {
|
|
|
139
140
|
readonly completedTasks: readonly string[];
|
|
140
141
|
readonly totalTasks: number;
|
|
141
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Artifact generated during spec-driven development
|
|
145
|
+
* Tracks files created by the framework for easy reference
|
|
146
|
+
*/
|
|
147
|
+
export interface Artifact {
|
|
148
|
+
readonly name: string;
|
|
149
|
+
readonly filename: string;
|
|
150
|
+
readonly path: string;
|
|
151
|
+
readonly phase: string;
|
|
152
|
+
readonly createdAt: string;
|
|
153
|
+
}
|
|
142
154
|
/**
|
|
143
155
|
* FlowState interface with feature, phase, timestamps, history, and metadata
|
|
144
156
|
* Requirement: 1.5 - State persistence
|
|
@@ -162,6 +174,7 @@ export interface FlowState {
|
|
|
162
174
|
readonly phaseMetrics?: {
|
|
163
175
|
readonly [phaseType: string]: PhaseMetric;
|
|
164
176
|
};
|
|
177
|
+
readonly artifacts?: readonly Artifact[];
|
|
165
178
|
}
|
|
166
179
|
/**
|
|
167
180
|
* Agent invocation options for Claude CLI execution
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEd;;;GAGG;AACH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAgBrG,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiF;IACxG,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,wBAAwB,CAAC;KACnH;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;KACzF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiF;IACxG,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,wBAAwB,CAAC;KACnH;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;KACzF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC;AAgLF,gCAAgC;AAChC,OAAO,EAKL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Gap Analysis Template
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
**Purpose**: Analyze the gap between requirements and existing codebase to inform implementation strategy decisions.
|
|
5
|
+
|
|
6
|
+
**Approach**:
|
|
7
|
+
- Provide analysis and options, not final implementation choices
|
|
8
|
+
- Offer multiple viable alternatives when applicable
|
|
9
|
+
- Flag unknowns and constraints explicitly
|
|
10
|
+
- Align with existing patterns and architecture limits
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Executive Summary
|
|
14
|
+
|
|
15
|
+
Brief overview (3-5 bullets) covering:
|
|
16
|
+
- Scope of analysis
|
|
17
|
+
- Key findings
|
|
18
|
+
- Primary challenges identified
|
|
19
|
+
- Recommended approach
|
|
20
|
+
|
|
21
|
+
## Current State Investigation
|
|
22
|
+
|
|
23
|
+
### Domain-Related Assets
|
|
24
|
+
|
|
25
|
+
| Category | Assets Found | Location | Notes |
|
|
26
|
+
|----------|--------------|----------|-------|
|
|
27
|
+
| Key Modules | | | |
|
|
28
|
+
| Reusable Components | | | |
|
|
29
|
+
| Services/Utilities | | | |
|
|
30
|
+
|
|
31
|
+
### Architecture Patterns
|
|
32
|
+
|
|
33
|
+
- **Dominant patterns**:
|
|
34
|
+
- **Naming conventions**:
|
|
35
|
+
- **Dependency direction**:
|
|
36
|
+
- **Testing approach**:
|
|
37
|
+
|
|
38
|
+
### Integration Surfaces
|
|
39
|
+
|
|
40
|
+
- **Data models/schemas**:
|
|
41
|
+
- **API clients**:
|
|
42
|
+
- **Auth mechanisms**:
|
|
43
|
+
|
|
44
|
+
## Requirements Feasibility Analysis
|
|
45
|
+
|
|
46
|
+
### Technical Needs (from Requirements)
|
|
47
|
+
|
|
48
|
+
| Requirement | Technical Need | Category | Complexity |
|
|
49
|
+
|-------------|----------------|----------|------------|
|
|
50
|
+
| 1.x | | Data Model / API / UI / Logic | Simple / Moderate / Complex |
|
|
51
|
+
|
|
52
|
+
### Gap Analysis
|
|
53
|
+
|
|
54
|
+
| Requirement | Gap Type | Description | Impact |
|
|
55
|
+
|-------------|----------|-------------|--------|
|
|
56
|
+
| 1.x | Missing / Unknown / Constraint | | High / Medium / Low |
|
|
57
|
+
|
|
58
|
+
**Gap Types**:
|
|
59
|
+
- **Missing**: Capability does not exist in current codebase
|
|
60
|
+
- **Unknown**: Requires further research to determine feasibility
|
|
61
|
+
- **Constraint**: Existing architecture limits implementation options
|
|
62
|
+
|
|
63
|
+
## Implementation Approach Options
|
|
64
|
+
|
|
65
|
+
### Option A: Extend Existing Components
|
|
66
|
+
|
|
67
|
+
**When to consider**: Feature fits naturally into existing structure
|
|
68
|
+
|
|
69
|
+
**Files/Modules to Extend**:
|
|
70
|
+
| File | Change Type | Impact Assessment |
|
|
71
|
+
|------|-------------|-------------------|
|
|
72
|
+
| | Extend / Modify | |
|
|
73
|
+
|
|
74
|
+
**Trade-offs**:
|
|
75
|
+
- Minimal new files, faster initial development
|
|
76
|
+
- Leverages existing patterns and infrastructure
|
|
77
|
+
- Risk of bloating existing components
|
|
78
|
+
- May complicate existing logic
|
|
79
|
+
|
|
80
|
+
### Option B: Create New Components
|
|
81
|
+
|
|
82
|
+
**When to consider**: Feature has distinct responsibility or existing components are already complex
|
|
83
|
+
|
|
84
|
+
**New Components Required**:
|
|
85
|
+
| Component | Responsibility | Integration Points |
|
|
86
|
+
|-----------|----------------|-------------------|
|
|
87
|
+
| | | |
|
|
88
|
+
|
|
89
|
+
**Trade-offs**:
|
|
90
|
+
- Clean separation of concerns
|
|
91
|
+
- Easier to test in isolation
|
|
92
|
+
- More files to navigate
|
|
93
|
+
- Requires careful interface design
|
|
94
|
+
|
|
95
|
+
### Option C: Hybrid Approach
|
|
96
|
+
|
|
97
|
+
**When to consider**: Complex features requiring both extension and new creation
|
|
98
|
+
|
|
99
|
+
**Combination Strategy**:
|
|
100
|
+
| Part | Approach | Rationale |
|
|
101
|
+
|------|----------|-----------|
|
|
102
|
+
| | Extend / Create | |
|
|
103
|
+
|
|
104
|
+
**Trade-offs**:
|
|
105
|
+
- Balanced approach for complex features
|
|
106
|
+
- Allows iterative refinement
|
|
107
|
+
- More complex planning required
|
|
108
|
+
- Potential for inconsistency if not well-coordinated
|
|
109
|
+
|
|
110
|
+
## Effort and Risk Assessment
|
|
111
|
+
|
|
112
|
+
### Effort Estimate
|
|
113
|
+
|
|
114
|
+
| Option | Effort | Justification |
|
|
115
|
+
|--------|--------|---------------|
|
|
116
|
+
| A | S / M / L / XL | |
|
|
117
|
+
| B | S / M / L / XL | |
|
|
118
|
+
| C | S / M / L / XL | |
|
|
119
|
+
|
|
120
|
+
**Effort Scale**:
|
|
121
|
+
- **S** (1-3 days): Existing patterns, minimal dependencies, straightforward integration
|
|
122
|
+
- **M** (3-7 days): Some new patterns/integrations, moderate complexity
|
|
123
|
+
- **L** (1-2 weeks): Significant functionality, multiple integrations or workflows
|
|
124
|
+
- **XL** (2+ weeks): Architectural changes, unfamiliar tech, broad impact
|
|
125
|
+
|
|
126
|
+
### Risk Assessment
|
|
127
|
+
|
|
128
|
+
| Option | Risk | Justification |
|
|
129
|
+
|--------|------|---------------|
|
|
130
|
+
| A | High / Medium / Low | |
|
|
131
|
+
| B | High / Medium / Low | |
|
|
132
|
+
| C | High / Medium / Low | |
|
|
133
|
+
|
|
134
|
+
**Risk Factors**:
|
|
135
|
+
- **High**: Unknown tech, complex integrations, architectural shifts, unclear perf/security path
|
|
136
|
+
- **Medium**: New patterns with guidance, manageable integrations, known perf solutions
|
|
137
|
+
- **Low**: Extend established patterns, familiar tech, clear scope, minimal integration
|
|
138
|
+
|
|
139
|
+
## Recommendations for Design Phase
|
|
140
|
+
|
|
141
|
+
### Preferred Approach
|
|
142
|
+
|
|
143
|
+
**Recommended Option**: [A / B / C]
|
|
144
|
+
|
|
145
|
+
**Rationale**:
|
|
146
|
+
-
|
|
147
|
+
|
|
148
|
+
### Key Decisions Required
|
|
149
|
+
|
|
150
|
+
1.
|
|
151
|
+
2.
|
|
152
|
+
3.
|
|
153
|
+
|
|
154
|
+
### Research Items to Carry Forward
|
|
155
|
+
|
|
156
|
+
| Item | Priority | Reason |
|
|
157
|
+
|------|----------|--------|
|
|
158
|
+
| | High / Medium / Low | |
|
|
159
|
+
|
|
160
|
+
## Out of Scope
|
|
161
|
+
|
|
162
|
+
Items explicitly deferred to design phase:
|
|
163
|
+
-
|