@iservu-inc/adf-cli 0.17.0 → 0.17.5
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/.context/memory/architecture.md +1 -1
- package/.context/memory/glossary.md +1 -1
- package/CLAUDE.md +5 -5
- package/README.md +1 -1
- package/lib/analysis/heuristic-gap-analyzer.js +4 -4
- package/lib/analysis/synthesis-engine.js +5 -5
- package/lib/commands/init.js +545 -467
- package/lib/frameworks/output-generators.js +54 -147
- package/lib/frameworks/progress-tracker.js +16 -0
- package/lib/frameworks/questions.js +156 -464
- package/lib/frameworks/session-manager.js +56 -0
- package/lib/learning/analytics-view.js +5 -5
- package/lib/learning/analytics.js +22 -6
- package/lib/templates/scripts/analyze-docs.js +23 -12
- package/lib/templates/scripts/build.js +1 -1
- package/lib/templates/scripts/check-framework-updates.js +1 -1
- package/lib/templates/scripts/init.js +1 -1
- package/lib/templates/shared/memory/constitution.md +2 -2
- package/lib/templates/shared/templates/README.md +2 -2
- package/lib/utils/context-extractor.js +51 -3
- package/lib/utils/framework-detector.js +11 -2
- package/package.json +1 -1
- package/tests/analytics-view.test.js +12 -10
- package/tests/context-extractor.test.js +47 -2
- package/tests/decay-manager.test.js +22 -19
- package/tests/deploy.test.js +7 -3
- package/tests/dynamic-question-generator.test.js +2 -2
- package/tests/framework-detector.test.js +31 -3
- package/tests/heuristic-gap-analyzer.test.js +5 -5
- package/tests/pattern-decay.test.js +34 -52
- package/tests/session-manager.test.js +125 -0
|
@@ -18,78 +18,48 @@ async function generatePRP(answers, outputPath) {
|
|
|
18
18
|
### What We're Building
|
|
19
19
|
${answers['prp-1'] || 'Not provided'}
|
|
20
20
|
|
|
21
|
-
### Primary User Action
|
|
21
|
+
### Problem & Primary User Action
|
|
22
22
|
${answers['prp-2'] || 'Not provided'}
|
|
23
23
|
|
|
24
|
-
### Problem Being Solved
|
|
25
|
-
${answers['prp-3'] || 'Not provided'}
|
|
26
|
-
|
|
27
24
|
### Success Criteria
|
|
28
|
-
${answers['prp-
|
|
25
|
+
${answers['prp-3'] || 'Not provided'}
|
|
29
26
|
|
|
30
27
|
---
|
|
31
28
|
|
|
32
|
-
## 2. Business
|
|
29
|
+
## 2. Business Context
|
|
33
30
|
|
|
34
|
-
### Value
|
|
35
|
-
${answers['prp-
|
|
36
|
-
|
|
37
|
-
### Cost of NOT Building
|
|
38
|
-
${answers['prp-6'] || 'Not provided'}
|
|
39
|
-
|
|
40
|
-
### Usage Pattern
|
|
41
|
-
${answers['prp-7'] || 'Not provided'}
|
|
31
|
+
### Value & Usage Pattern
|
|
32
|
+
${answers['prp-4'] || 'Not provided'}
|
|
42
33
|
|
|
43
34
|
---
|
|
44
35
|
|
|
45
36
|
## 3. Contextual Intelligence
|
|
46
37
|
|
|
47
|
-
### Technology Stack
|
|
48
|
-
${answers['prp-
|
|
49
|
-
|
|
50
|
-
### Files & Directories
|
|
51
|
-
${answers['prp-9'] || 'Not provided'}
|
|
52
|
-
|
|
53
|
-
### Libraries & Packages
|
|
54
|
-
${answers['prp-10'] || 'Not provided'}
|
|
55
|
-
|
|
56
|
-
### Code Patterns to Follow
|
|
57
|
-
${answers['prp-11'] || 'Not provided'}
|
|
38
|
+
### Technology Stack & Libraries
|
|
39
|
+
${answers['prp-5'] || 'Not provided'}
|
|
58
40
|
|
|
59
|
-
### Documentation
|
|
60
|
-
${answers['prp-
|
|
41
|
+
### Patterns, Conventions & Documentation
|
|
42
|
+
${answers['prp-6'] || 'Not provided'}
|
|
61
43
|
|
|
62
44
|
---
|
|
63
45
|
|
|
64
46
|
## 4. Implementation Blueprint
|
|
65
47
|
|
|
66
48
|
### Implementation Steps
|
|
67
|
-
${answers['prp-
|
|
68
|
-
|
|
69
|
-
### Data Model
|
|
70
|
-
${answers['prp-14'] || 'Not provided'}
|
|
49
|
+
${answers['prp-7'] || 'Not provided'}
|
|
71
50
|
|
|
72
|
-
### API Design
|
|
73
|
-
${answers['prp-
|
|
51
|
+
### Data Model & API Design
|
|
52
|
+
${answers['prp-8'] || 'Not provided'}
|
|
74
53
|
|
|
75
54
|
### Edge Cases & Error Handling
|
|
76
|
-
${answers['prp-
|
|
77
|
-
|
|
78
|
-
### Technical Approach
|
|
79
|
-
${answers['prp-17'] || 'Not provided'}
|
|
55
|
+
${answers['prp-9'] || 'Not provided'}
|
|
80
56
|
|
|
81
57
|
---
|
|
82
58
|
|
|
83
59
|
## 5. Validation
|
|
84
60
|
|
|
85
|
-
###
|
|
86
|
-
${answers['prp-
|
|
87
|
-
|
|
88
|
-
### Automated Tests Required
|
|
89
|
-
${answers['prp-19'] || 'Not provided'}
|
|
90
|
-
|
|
91
|
-
### Definition of Done
|
|
92
|
-
${answers['prp-20'] || 'Not provided'}
|
|
61
|
+
### Testing Strategy & Definition of Done
|
|
62
|
+
${answers['prp-10'] || 'Not provided'}
|
|
93
63
|
|
|
94
64
|
---
|
|
95
65
|
|
|
@@ -98,13 +68,13 @@ ${answers['prp-20'] || 'Not provided'}
|
|
|
98
68
|
**Implement the above feature following this blueprint:**
|
|
99
69
|
|
|
100
70
|
1. Start with the implementation steps in Section 4
|
|
101
|
-
2. Reference the
|
|
71
|
+
2. Reference the patterns and documentation in Section 3
|
|
102
72
|
3. Implement the data model and API design as specified
|
|
103
73
|
4. Handle all edge cases listed
|
|
104
74
|
5. Write tests as specified in Section 5
|
|
105
75
|
6. Validate against the Definition of Done
|
|
106
76
|
|
|
107
|
-
**Success Criteria:** ${answers['prp-
|
|
77
|
+
**Success Criteria:** ${answers['prp-3'] || 'See Section 1'}
|
|
108
78
|
`;
|
|
109
79
|
|
|
110
80
|
await fs.writeFile(path.join(outputPath, 'prp.md'), prp, 'utf-8');
|
|
@@ -116,23 +86,14 @@ async function generateBalanced(answers, outputPath) {
|
|
|
116
86
|
|
|
117
87
|
**Generated:** ${new Date().toISOString()}
|
|
118
88
|
|
|
119
|
-
## Code Quality Standards
|
|
120
|
-
${answers['bal-
|
|
121
|
-
|
|
122
|
-
## Testing Requirements
|
|
123
|
-
${answers['bal-22'] || 'Not provided'}
|
|
89
|
+
## Code Quality & Documentation Standards
|
|
90
|
+
${answers['bal-11'] || 'Not provided'}
|
|
124
91
|
|
|
125
|
-
##
|
|
126
|
-
${answers['bal-
|
|
127
|
-
|
|
128
|
-
## UX/Accessibility Principles
|
|
129
|
-
${answers['bal-24'] || 'Not provided'}
|
|
92
|
+
## Security & Accessibility Requirements
|
|
93
|
+
${answers['bal-12'] || 'Not provided'}
|
|
130
94
|
|
|
131
|
-
##
|
|
132
|
-
${answers['bal-
|
|
133
|
-
|
|
134
|
-
## Decision-Making Guidelines
|
|
135
|
-
${answers['bal-26'] || 'Not provided'}
|
|
95
|
+
## Testing Requirements & Coverage Targets
|
|
96
|
+
${answers['bal-13'] || 'Not provided'}
|
|
136
97
|
`;
|
|
137
98
|
|
|
138
99
|
// Specification
|
|
@@ -147,61 +108,40 @@ ${answers['bal-26'] || 'Not provided'}
|
|
|
147
108
|
### Goal
|
|
148
109
|
${answers['prp-1'] || 'Not provided'}
|
|
149
110
|
|
|
150
|
-
### Problem
|
|
151
|
-
${answers['prp-
|
|
111
|
+
### Problem & Primary Action
|
|
112
|
+
${answers['prp-2'] || 'Not provided'}
|
|
152
113
|
|
|
153
114
|
### Success Criteria
|
|
154
|
-
${answers['prp-
|
|
115
|
+
${answers['prp-3'] || 'Not provided'}
|
|
155
116
|
|
|
156
117
|
---
|
|
157
118
|
|
|
158
119
|
## Features & Requirements
|
|
159
120
|
|
|
160
121
|
### All Features with Priorities
|
|
161
|
-
${answers['bal-
|
|
122
|
+
${answers['bal-14'] || 'Not provided'}
|
|
162
123
|
|
|
163
|
-
### Feature Behaviors
|
|
164
|
-
${answers['bal-
|
|
124
|
+
### Feature Behaviors & User Workflow
|
|
125
|
+
${answers['bal-15'] || 'Not provided'}
|
|
165
126
|
|
|
166
127
|
### Out of Scope
|
|
167
|
-
${answers['bal-
|
|
168
|
-
|
|
169
|
-
### Integration Requirements
|
|
170
|
-
${answers['bal-30'] || 'Not provided'}
|
|
128
|
+
${answers['bal-16'] || 'Not provided'}
|
|
171
129
|
|
|
172
|
-
###
|
|
173
|
-
${answers['bal-
|
|
174
|
-
|
|
175
|
-
### Edge Cases
|
|
176
|
-
${answers['bal-32'] || 'Not provided'}
|
|
130
|
+
### Integration Requirements & Third-Party Services
|
|
131
|
+
${answers['bal-17'] || 'Not provided'}
|
|
177
132
|
|
|
178
133
|
### UI/UX Specifications
|
|
179
|
-
${answers['bal-
|
|
180
|
-
|
|
181
|
-
### Assumptions
|
|
182
|
-
${answers['bal-34'] || 'Not provided'}
|
|
183
|
-
|
|
184
|
-
### Open Questions
|
|
185
|
-
${answers['bal-35'] || 'Not provided'}
|
|
134
|
+
${answers['bal-18'] || 'Not provided'}
|
|
186
135
|
|
|
187
136
|
---
|
|
188
137
|
|
|
189
138
|
## Technical Context
|
|
190
139
|
|
|
191
|
-
### Technology Stack
|
|
192
|
-
${answers['prp-
|
|
193
|
-
|
|
194
|
-
### Files & Directories
|
|
195
|
-
${answers['prp-9'] || 'Not provided'}
|
|
196
|
-
|
|
197
|
-
### Dependencies
|
|
198
|
-
${answers['prp-10'] || 'Not provided'}
|
|
199
|
-
|
|
200
|
-
### Code Patterns
|
|
201
|
-
${answers['prp-11'] || 'Not provided'}
|
|
140
|
+
### Technology Stack & Libraries
|
|
141
|
+
${answers['prp-5'] || 'Not provided'}
|
|
202
142
|
|
|
203
|
-
### Documentation
|
|
204
|
-
${answers['prp-
|
|
143
|
+
### Patterns, Conventions & Documentation
|
|
144
|
+
${answers['prp-6'] || 'Not provided'}
|
|
205
145
|
`;
|
|
206
146
|
|
|
207
147
|
// Technical Plan
|
|
@@ -213,48 +153,30 @@ ${answers['prp-12'] || 'Not provided'}
|
|
|
213
153
|
|
|
214
154
|
## Architecture
|
|
215
155
|
|
|
216
|
-
### Technology Choice Justification
|
|
217
|
-
${answers['bal-36'] || 'Not provided'}
|
|
218
|
-
|
|
219
156
|
### Architectural Pattern
|
|
220
|
-
${answers['bal-
|
|
221
|
-
|
|
222
|
-
### Database Design
|
|
223
|
-
${answers['bal-38'] || 'Not provided'}
|
|
224
|
-
|
|
225
|
-
### API Design
|
|
226
|
-
${answers['bal-39'] || 'Not provided'}
|
|
157
|
+
${answers['bal-19'] || 'Not provided'}
|
|
227
158
|
|
|
228
159
|
### Authentication/Authorization
|
|
229
|
-
${answers['bal-
|
|
230
|
-
|
|
231
|
-
### Third-Party Services
|
|
232
|
-
${answers['bal-41'] || 'Not provided'}
|
|
160
|
+
${answers['bal-20'] || 'Not provided'}
|
|
233
161
|
|
|
234
|
-
### Deployment Architecture
|
|
235
|
-
${answers['bal-
|
|
162
|
+
### Deployment Architecture & CI/CD
|
|
163
|
+
${answers['bal-21'] || 'Not provided'}
|
|
236
164
|
|
|
237
|
-
### Performance Strategy
|
|
238
|
-
${answers['bal-
|
|
165
|
+
### Performance & Caching Strategy
|
|
166
|
+
${answers['bal-22'] || 'Not provided'}
|
|
239
167
|
|
|
240
168
|
---
|
|
241
169
|
|
|
242
170
|
## Implementation Details
|
|
243
171
|
|
|
244
172
|
### Steps
|
|
245
|
-
${answers['prp-
|
|
246
|
-
|
|
247
|
-
### Data Model
|
|
248
|
-
${answers['prp-14'] || 'Not provided'}
|
|
249
|
-
|
|
250
|
-
### API Endpoints
|
|
251
|
-
${answers['prp-15'] || 'Not provided'}
|
|
173
|
+
${answers['prp-7'] || 'Not provided'}
|
|
252
174
|
|
|
253
|
-
###
|
|
254
|
-
${answers['prp-
|
|
175
|
+
### Data Model & API Design
|
|
176
|
+
${answers['prp-8'] || 'Not provided'}
|
|
255
177
|
|
|
256
|
-
###
|
|
257
|
-
${answers['prp-
|
|
178
|
+
### Edge Cases & Error Handling
|
|
179
|
+
${answers['prp-9'] || 'Not provided'}
|
|
258
180
|
`;
|
|
259
181
|
|
|
260
182
|
// Tasks
|
|
@@ -267,35 +189,20 @@ ${answers['prp-17'] || 'Not provided'}
|
|
|
267
189
|
## Task Breakdown
|
|
268
190
|
|
|
269
191
|
### All Tasks (Dependency Order)
|
|
270
|
-
${answers['bal-
|
|
271
|
-
|
|
272
|
-
### Critical Path
|
|
273
|
-
${answers['bal-45'] || 'Not provided'}
|
|
274
|
-
|
|
275
|
-
### Parallel Tasks
|
|
276
|
-
${answers['bal-46'] || 'Not provided'}
|
|
277
|
-
|
|
278
|
-
### Milestones
|
|
279
|
-
${answers['bal-47'] || 'Not provided'}
|
|
280
|
-
|
|
281
|
-
### Testing Strategy
|
|
282
|
-
${answers['bal-48'] || 'Not provided'}
|
|
192
|
+
${answers['bal-23'] || 'Not provided'}
|
|
283
193
|
|
|
284
|
-
###
|
|
285
|
-
${answers['bal-
|
|
194
|
+
### Key Milestones & Critical Path
|
|
195
|
+
${answers['bal-24'] || 'Not provided'}
|
|
286
196
|
|
|
287
197
|
---
|
|
288
198
|
|
|
289
199
|
## Validation
|
|
290
200
|
|
|
291
|
-
###
|
|
292
|
-
${answers['prp-
|
|
293
|
-
|
|
294
|
-
### Automated Tests
|
|
295
|
-
${answers['prp-19'] || 'Not provided'}
|
|
201
|
+
### Testing Strategy & Definition of Done
|
|
202
|
+
${answers['prp-10'] || 'Not provided'}
|
|
296
203
|
|
|
297
204
|
### Project Definition of Done
|
|
298
|
-
${answers['bal-
|
|
205
|
+
${answers['bal-25'] || 'Not provided'}
|
|
299
206
|
`;
|
|
300
207
|
|
|
301
208
|
await fs.writeFile(path.join(outputPath, 'constitution.md'), constitution, 'utf-8');
|
|
@@ -207,6 +207,22 @@ class ProgressTracker {
|
|
|
207
207
|
await this.appendToLog(`\n---\n\n## Session Completed\n**Finished:** ${this.progress.completedAt}\n**Total Questions Answered:** ${this.progress.totalQuestionsAnswered}\n`);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
+
async reopen() {
|
|
211
|
+
this.progress.status = 'in-progress';
|
|
212
|
+
this.progress.canResume = true;
|
|
213
|
+
this.progress.completedAt = null;
|
|
214
|
+
|
|
215
|
+
// Reset block-tracking counters to avoid duplicates when interviewer
|
|
216
|
+
// replays blocks (it pushes to completedBlocks and increments cumulatively)
|
|
217
|
+
this.progress.completedBlocks = [];
|
|
218
|
+
this.progress.skippedBlocks = [];
|
|
219
|
+
this.progress.totalQuestionsAnswered = 0;
|
|
220
|
+
this.progress.currentBlock = 0;
|
|
221
|
+
|
|
222
|
+
await this.save();
|
|
223
|
+
await this.appendToLog(`\n---\n\n## Session Reopened\n**Reopened:** ${new Date().toISOString()}\n`);
|
|
224
|
+
}
|
|
225
|
+
|
|
210
226
|
async save() {
|
|
211
227
|
await fs.writeJson(this.progressFile, this.progress, { spaces: 2 });
|
|
212
228
|
}
|