hardness 1.0.0 → 1.1.2
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/AGENTS.md +11 -0
- package/CHANGELOG.md +36 -0
- package/README.md +62 -15
- package/node_modules/@hardness/analyzers/package.json +1 -1
- package/node_modules/@hardness/core/dist/common/paths.js +2 -2
- package/node_modules/@hardness/core/dist/common/paths.js.map +1 -1
- package/node_modules/@hardness/core/package.json +1 -1
- package/node_modules/@hardness/prompts/package.json +1 -1
- package/package.json +1 -1
- package/packages/analyzers/package.json +1 -1
- package/packages/cli/dist/commands/discover.js +47 -6
- package/packages/cli/dist/commands/discover.js.map +1 -1
- package/packages/cli/dist/commands/plan.js +39 -6
- package/packages/cli/dist/commands/plan.js.map +1 -1
- package/packages/cli/dist/commands/spec.js +34 -6
- package/packages/cli/dist/commands/spec.js.map +1 -1
- package/packages/cli/dist/dispatcher.d.ts +2 -0
- package/packages/cli/dist/dispatcher.js +63 -62
- package/packages/cli/dist/dispatcher.js.map +1 -1
- package/packages/cli/dist/generators/prd-generator.d.ts +14 -0
- package/packages/cli/dist/generators/prd-generator.js +164 -0
- package/packages/cli/dist/generators/prd-generator.js.map +1 -0
- package/packages/cli/dist/generators/spec-generator.d.ts +35 -0
- package/packages/cli/dist/generators/spec-generator.js +245 -0
- package/packages/cli/dist/generators/spec-generator.js.map +1 -0
- package/packages/cli/dist/generators/sprint-generator.d.ts +51 -0
- package/packages/cli/dist/generators/sprint-generator.js +162 -0
- package/packages/cli/dist/generators/sprint-generator.js.map +1 -0
- package/packages/cli/dist/index.js +1 -1
- package/packages/cli/dist/interview/evaluator-prompt.d.ts +9 -0
- package/packages/cli/dist/interview/evaluator-prompt.js +192 -0
- package/packages/cli/dist/interview/evaluator-prompt.js.map +1 -0
- package/packages/cli/dist/interview/evaluator.d.ts +46 -0
- package/packages/cli/dist/interview/evaluator.js +142 -0
- package/packages/cli/dist/interview/evaluator.js.map +1 -0
- package/packages/cli/dist/interview/questions.d.ts +29 -0
- package/packages/cli/dist/interview/questions.js +642 -0
- package/packages/cli/dist/interview/questions.js.map +1 -0
- package/packages/cli/dist/interview/runner.d.ts +14 -0
- package/packages/cli/dist/interview/runner.js +327 -0
- package/packages/cli/dist/interview/runner.js.map +1 -0
- package/packages/cli/dist/interview/suggestions.d.ts +6 -0
- package/packages/cli/dist/interview/suggestions.js +230 -0
- package/packages/cli/dist/interview/suggestions.js.map +1 -0
- package/packages/cli/dist/interview/types.d.ts +46 -0
- package/packages/cli/dist/interview/types.js +50 -0
- package/packages/cli/dist/interview/types.js.map +1 -0
- package/packages/cli/package.json +1 -1
- package/packages/core/dist/common/paths.js +2 -2
- package/packages/core/dist/common/paths.js.map +1 -1
- package/packages/core/package.json +1 -1
- package/packages/prompts/package.json +1 -1
|
@@ -0,0 +1,642 @@
|
|
|
1
|
+
// Question catalog for the hardness discover interview.
|
|
2
|
+
// 7 phases, ~22 questions total.
|
|
3
|
+
// Opening=2, Vision=4, People=3, Features=3, Constraints=8, Boundaries=3, Review=2
|
|
4
|
+
/** Get the prompt for a question based on user level */
|
|
5
|
+
export function getPromptForLevel(question, level) {
|
|
6
|
+
if (question.promptByLevel) {
|
|
7
|
+
return question.promptByLevel[level];
|
|
8
|
+
}
|
|
9
|
+
return question.prompt;
|
|
10
|
+
}
|
|
11
|
+
/** Get the choices for a question based on user level */
|
|
12
|
+
export function getChoicesForLevel(question, level) {
|
|
13
|
+
if (question.choicesByLevel) {
|
|
14
|
+
return question.choicesByLevel[level];
|
|
15
|
+
}
|
|
16
|
+
return question.choices;
|
|
17
|
+
}
|
|
18
|
+
export const QUESTIONS = [
|
|
19
|
+
// -------------------------------------------------------------------------
|
|
20
|
+
// Phase 0 — Opening (2 questions)
|
|
21
|
+
// -------------------------------------------------------------------------
|
|
22
|
+
{
|
|
23
|
+
id: 'q0.1',
|
|
24
|
+
phase: 'opening',
|
|
25
|
+
prompt: 'Tell us everything about what you want to build. The more detail you share, the better we can help you.',
|
|
26
|
+
type: 'multiline',
|
|
27
|
+
suggestionId: 'q0.1',
|
|
28
|
+
promptByLevel: {
|
|
29
|
+
beginner: 'Tell us everything about what you want to build. The more detail you share, the better we can help you.',
|
|
30
|
+
intermediate: 'Tell us everything about what you want to build. The more detail you share, the better we can help you.',
|
|
31
|
+
advanced: 'Tell us everything about what you want to build. The more detail you share, the better we can help you.',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 'q0.2',
|
|
36
|
+
phase: 'opening',
|
|
37
|
+
prompt: 'How would you describe your experience with software development?',
|
|
38
|
+
type: 'choice',
|
|
39
|
+
choices: [
|
|
40
|
+
'Beginner — I have never built software before',
|
|
41
|
+
'Intermediate — I have some experience with programming',
|
|
42
|
+
'Advanced — I am a professional developer',
|
|
43
|
+
],
|
|
44
|
+
suggestionId: 'q0.2',
|
|
45
|
+
promptByLevel: {
|
|
46
|
+
beginner: 'How would you describe your experience with software development?',
|
|
47
|
+
intermediate: 'How would you describe your experience with software development?',
|
|
48
|
+
advanced: 'How would you describe your experience with software development?',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
// -------------------------------------------------------------------------
|
|
52
|
+
// Phase 1 — Vision (4 questions)
|
|
53
|
+
// -------------------------------------------------------------------------
|
|
54
|
+
{
|
|
55
|
+
id: 'q1.1',
|
|
56
|
+
phase: 'vision',
|
|
57
|
+
prompt: 'What is your project called?',
|
|
58
|
+
type: 'string',
|
|
59
|
+
suggestionId: 'q1.1',
|
|
60
|
+
promptByLevel: {
|
|
61
|
+
beginner: 'What name would you like to give your project?',
|
|
62
|
+
intermediate: 'What is your project called?',
|
|
63
|
+
advanced: 'Project name?',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'q1.2',
|
|
68
|
+
phase: 'vision',
|
|
69
|
+
prompt: 'In one sentence, what does your project do?',
|
|
70
|
+
type: 'string',
|
|
71
|
+
suggestionId: 'q1.2',
|
|
72
|
+
promptByLevel: {
|
|
73
|
+
beginner: 'In one sentence, what does your project do for people?',
|
|
74
|
+
intermediate: 'In one sentence, what does your project do?',
|
|
75
|
+
advanced: 'One-line project description?',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'q1.3',
|
|
80
|
+
phase: 'vision',
|
|
81
|
+
prompt: 'What problem does this solve? (1-3 sentences)',
|
|
82
|
+
type: 'multiline',
|
|
83
|
+
suggestionId: 'q1.3',
|
|
84
|
+
promptByLevel: {
|
|
85
|
+
beginner: 'What problem does this solve for people? Why would someone want to use it? (1-3 sentences)',
|
|
86
|
+
intermediate: 'What problem does this solve? (1-3 sentences)',
|
|
87
|
+
advanced: 'Problem statement (1-3 sentences):',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'q1.4',
|
|
92
|
+
phase: 'vision',
|
|
93
|
+
prompt: 'What type of project is this?',
|
|
94
|
+
type: 'choice',
|
|
95
|
+
choices: [
|
|
96
|
+
'web-app — Web application (frontend + backend)',
|
|
97
|
+
'api — API / backend service',
|
|
98
|
+
'cli — CLI tool',
|
|
99
|
+
'library — Library / SDK',
|
|
100
|
+
'desktop — Desktop application',
|
|
101
|
+
'mobile — Mobile application',
|
|
102
|
+
'other — Other',
|
|
103
|
+
],
|
|
104
|
+
choicesByLevel: {
|
|
105
|
+
beginner: [
|
|
106
|
+
'A website or web system that people use in the browser',
|
|
107
|
+
'A behind-the-scenes service that other programs talk to',
|
|
108
|
+
'A tool you run from the command line (terminal)',
|
|
109
|
+
'A reusable piece of code that other developers can use',
|
|
110
|
+
'An app that runs on a computer (Windows, Mac, Linux)',
|
|
111
|
+
'A phone app (iOS, Android)',
|
|
112
|
+
'Something else',
|
|
113
|
+
],
|
|
114
|
+
intermediate: [
|
|
115
|
+
'Web application (frontend + backend)',
|
|
116
|
+
'API / backend service',
|
|
117
|
+
'CLI tool',
|
|
118
|
+
'Library / SDK',
|
|
119
|
+
'Desktop application',
|
|
120
|
+
'Mobile application',
|
|
121
|
+
'Other',
|
|
122
|
+
],
|
|
123
|
+
advanced: [
|
|
124
|
+
'web-app — Web application (frontend + backend)',
|
|
125
|
+
'api — API / backend service',
|
|
126
|
+
'cli — CLI tool',
|
|
127
|
+
'library — Library / SDK',
|
|
128
|
+
'desktop — Desktop application',
|
|
129
|
+
'mobile — Mobile application',
|
|
130
|
+
'other — Other',
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
suggestionId: 'q1.4',
|
|
134
|
+
promptByLevel: {
|
|
135
|
+
beginner: 'What kind of thing are you building?',
|
|
136
|
+
intermediate: 'What type of project is this?',
|
|
137
|
+
advanced: 'Project type?',
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
// -------------------------------------------------------------------------
|
|
141
|
+
// Phase 2 — People (3 questions)
|
|
142
|
+
// -------------------------------------------------------------------------
|
|
143
|
+
{
|
|
144
|
+
id: 'q2.1',
|
|
145
|
+
phase: 'people',
|
|
146
|
+
prompt: 'Who is the primary user? (role, e.g. "developer", "data analyst", "end consumer")',
|
|
147
|
+
type: 'string',
|
|
148
|
+
suggestionId: 'q2.1',
|
|
149
|
+
promptByLevel: {
|
|
150
|
+
beginner: 'Who will use this? Describe the main person who will be using what you build.',
|
|
151
|
+
intermediate: 'Who is the primary user? (e.g. "developer", "analyst", "end user")',
|
|
152
|
+
advanced: 'Primary user persona? (role, e.g. "developer", "data analyst", "end consumer")',
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'q2.2',
|
|
157
|
+
phase: 'people',
|
|
158
|
+
prompt: 'Anyone else who will use or maintain this? (comma-separated, or Enter to skip)',
|
|
159
|
+
type: 'string',
|
|
160
|
+
suggestionId: 'q2.2',
|
|
161
|
+
promptByLevel: {
|
|
162
|
+
beginner: 'Will anyone else use or help maintain this besides the main user? (or press Enter to skip)',
|
|
163
|
+
intermediate: 'Anyone else who will use or maintain this? (comma-separated, or Enter to skip)',
|
|
164
|
+
advanced: 'Secondary personas / maintainers? (comma-separated, Enter to skip)',
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
id: 'q2.3',
|
|
169
|
+
phase: 'people',
|
|
170
|
+
prompt: 'How technical are your users?',
|
|
171
|
+
type: 'choice',
|
|
172
|
+
choices: [
|
|
173
|
+
'1 — Non-technical (end users / customers)',
|
|
174
|
+
'2 — Semi-technical (analysts, power users)',
|
|
175
|
+
'3 — Technical (developers, engineers)',
|
|
176
|
+
],
|
|
177
|
+
choicesByLevel: {
|
|
178
|
+
beginner: [
|
|
179
|
+
'Regular people who are not familiar with technology',
|
|
180
|
+
'People who are comfortable using computers but do not write code',
|
|
181
|
+
'People who write code and understand technology well',
|
|
182
|
+
],
|
|
183
|
+
intermediate: [
|
|
184
|
+
'Non-technical (end users / customers)',
|
|
185
|
+
'Semi-technical (analysts, power users)',
|
|
186
|
+
'Technical (developers, engineers)',
|
|
187
|
+
],
|
|
188
|
+
advanced: [
|
|
189
|
+
'1 — Non-technical (end users / customers)',
|
|
190
|
+
'2 — Semi-technical (analysts, power users)',
|
|
191
|
+
'3 — Technical (developers, engineers)',
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
suggestionId: 'q2.3',
|
|
195
|
+
promptByLevel: {
|
|
196
|
+
beginner: 'How comfortable with technology are the people who will use this?',
|
|
197
|
+
intermediate: 'How technical are your users?',
|
|
198
|
+
advanced: 'User technical level?',
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
// -------------------------------------------------------------------------
|
|
202
|
+
// Phase 3 — Features (3 questions)
|
|
203
|
+
// -------------------------------------------------------------------------
|
|
204
|
+
{
|
|
205
|
+
id: 'q3.1',
|
|
206
|
+
phase: 'features',
|
|
207
|
+
prompt: 'List the core features (one per line, empty line to finish):',
|
|
208
|
+
type: 'multiline',
|
|
209
|
+
suggestionId: 'q3.1',
|
|
210
|
+
promptByLevel: {
|
|
211
|
+
beginner: 'What should your project be able to do? List each thing on a separate line. Press Enter on an empty line when done.',
|
|
212
|
+
intermediate: 'List the core features (one per line, empty line to finish):',
|
|
213
|
+
advanced: 'Core features (one per line, empty line to finish):',
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: 'q3.2',
|
|
218
|
+
phase: 'features',
|
|
219
|
+
prompt: 'For each feature above, what is the default priority?',
|
|
220
|
+
type: 'choice',
|
|
221
|
+
choices: [
|
|
222
|
+
'1 — Must-have (v1.0)',
|
|
223
|
+
'2 — Should-have (v1.1)',
|
|
224
|
+
'3 — Nice-to-have (future)',
|
|
225
|
+
],
|
|
226
|
+
choicesByLevel: {
|
|
227
|
+
beginner: [
|
|
228
|
+
'These are all essential — the project does not work without them',
|
|
229
|
+
'Most are important, but some could wait for a future version',
|
|
230
|
+
'These are nice ideas, but only a few are truly needed right now',
|
|
231
|
+
],
|
|
232
|
+
intermediate: [
|
|
233
|
+
'Must-have (v1.0)',
|
|
234
|
+
'Should-have (v1.1)',
|
|
235
|
+
'Nice-to-have (future)',
|
|
236
|
+
],
|
|
237
|
+
advanced: [
|
|
238
|
+
'1 — Must-have (v1.0)',
|
|
239
|
+
'2 — Should-have (v1.1)',
|
|
240
|
+
'3 — Nice-to-have (future)',
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
suggestionId: 'q3.2',
|
|
244
|
+
promptByLevel: {
|
|
245
|
+
beginner: 'How important are the features you listed? Are they all essential, or could some wait?',
|
|
246
|
+
intermediate: 'Default priority for the features above?',
|
|
247
|
+
advanced: 'Default feature priority?',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
id: 'q3.3',
|
|
252
|
+
phase: 'features',
|
|
253
|
+
prompt: 'How do you know the core features are done? (measurable criterion)',
|
|
254
|
+
type: 'string',
|
|
255
|
+
suggestionId: 'q3.3',
|
|
256
|
+
promptByLevel: {
|
|
257
|
+
beginner: 'How will you know that these features are working correctly? What would you check?',
|
|
258
|
+
intermediate: 'How do you know the core features are done? (measurable criterion)',
|
|
259
|
+
advanced: 'Definition of done / acceptance criterion for core features?',
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
// -------------------------------------------------------------------------
|
|
263
|
+
// Phase 4 — Constraints (8 questions)
|
|
264
|
+
// -------------------------------------------------------------------------
|
|
265
|
+
{
|
|
266
|
+
id: 'q4.1',
|
|
267
|
+
phase: 'constraints',
|
|
268
|
+
prompt: 'I detected your stack from the directory. Is the detection correct?',
|
|
269
|
+
type: 'choice',
|
|
270
|
+
choices: [
|
|
271
|
+
'1 — Yes, use the detected stack',
|
|
272
|
+
'2 — No, let me specify',
|
|
273
|
+
],
|
|
274
|
+
choicesByLevel: {
|
|
275
|
+
beginner: [
|
|
276
|
+
'Yes, that looks right',
|
|
277
|
+
'No, let me tell you what I am using',
|
|
278
|
+
],
|
|
279
|
+
intermediate: [
|
|
280
|
+
'Yes, use the detected stack',
|
|
281
|
+
'No, let me specify',
|
|
282
|
+
],
|
|
283
|
+
advanced: [
|
|
284
|
+
'1 — Yes, use the detected stack',
|
|
285
|
+
'2 — No, let me specify',
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
suggestionId: 'q4.1',
|
|
289
|
+
promptByLevel: {
|
|
290
|
+
beginner: 'I looked at your project folder and figured out what tools you are using. Does this look right?',
|
|
291
|
+
intermediate: 'I detected your stack from the directory. Is the detection correct?',
|
|
292
|
+
advanced: 'Stack detection correct?',
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
id: 'q4.2',
|
|
297
|
+
phase: 'constraints',
|
|
298
|
+
prompt: 'What frontend approach will you use?',
|
|
299
|
+
type: 'choice',
|
|
300
|
+
choices: [
|
|
301
|
+
'React (Next.js / Vite)',
|
|
302
|
+
'Vue (Nuxt / Vite)',
|
|
303
|
+
'Svelte / SvelteKit',
|
|
304
|
+
'Angular',
|
|
305
|
+
'Static HTML / CSS',
|
|
306
|
+
'No frontend (API only)',
|
|
307
|
+
],
|
|
308
|
+
choicesByLevel: {
|
|
309
|
+
beginner: [
|
|
310
|
+
'People will use it in a web browser',
|
|
311
|
+
'People will use it on their phone',
|
|
312
|
+
'People will use it from the command line or terminal',
|
|
313
|
+
'There is no visual interface — it works behind the scenes',
|
|
314
|
+
],
|
|
315
|
+
intermediate: [
|
|
316
|
+
'React (Next.js / Vite)',
|
|
317
|
+
'Vue (Nuxt / Vite)',
|
|
318
|
+
'Svelte / SvelteKit',
|
|
319
|
+
'Angular',
|
|
320
|
+
'Static HTML / CSS',
|
|
321
|
+
'No frontend (API only)',
|
|
322
|
+
],
|
|
323
|
+
advanced: [
|
|
324
|
+
'React (Next.js / Vite)',
|
|
325
|
+
'Vue (Nuxt / Vite)',
|
|
326
|
+
'Svelte / SvelteKit',
|
|
327
|
+
'Angular',
|
|
328
|
+
'Static HTML / CSS',
|
|
329
|
+
'No frontend (API only)',
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
suggestionId: 'q4.2',
|
|
333
|
+
promptByLevel: {
|
|
334
|
+
beginner: 'How will people use your system? Through a website, a phone app, or in some other way?',
|
|
335
|
+
intermediate: 'What frontend approach will you use?',
|
|
336
|
+
advanced: 'Frontend framework?',
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
id: 'q4.3',
|
|
341
|
+
phase: 'constraints',
|
|
342
|
+
prompt: 'What database will you use?',
|
|
343
|
+
type: 'choice',
|
|
344
|
+
choices: [
|
|
345
|
+
'PostgreSQL',
|
|
346
|
+
'MySQL / MariaDB',
|
|
347
|
+
'SQLite (embedded)',
|
|
348
|
+
'MongoDB',
|
|
349
|
+
'Redis (cache/sessions)',
|
|
350
|
+
'None needed',
|
|
351
|
+
"I don't know",
|
|
352
|
+
],
|
|
353
|
+
choicesByLevel: {
|
|
354
|
+
beginner: [
|
|
355
|
+
'Yes, it needs to save and remember information (like user accounts, posts, orders)',
|
|
356
|
+
'It only needs to save small things like settings',
|
|
357
|
+
'No, it does not need to save any information',
|
|
358
|
+
'I am not sure',
|
|
359
|
+
],
|
|
360
|
+
intermediate: [
|
|
361
|
+
'PostgreSQL',
|
|
362
|
+
'MySQL / MariaDB',
|
|
363
|
+
'SQLite (embedded)',
|
|
364
|
+
'MongoDB',
|
|
365
|
+
'Redis (cache/sessions)',
|
|
366
|
+
'None needed',
|
|
367
|
+
"I don't know",
|
|
368
|
+
],
|
|
369
|
+
advanced: [
|
|
370
|
+
'PostgreSQL',
|
|
371
|
+
'MySQL / MariaDB',
|
|
372
|
+
'SQLite (embedded)',
|
|
373
|
+
'MongoDB',
|
|
374
|
+
'Redis (cache/sessions)',
|
|
375
|
+
'None needed',
|
|
376
|
+
"I don't know",
|
|
377
|
+
],
|
|
378
|
+
},
|
|
379
|
+
suggestionId: 'q4.3',
|
|
380
|
+
promptByLevel: {
|
|
381
|
+
beginner: 'Does your system need to save and remember information? If so, what kind of information?',
|
|
382
|
+
intermediate: 'What database will you use?',
|
|
383
|
+
advanced: 'Database?',
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
id: 'q4.4',
|
|
388
|
+
phase: 'constraints',
|
|
389
|
+
prompt: 'How should users authenticate?',
|
|
390
|
+
type: 'choice',
|
|
391
|
+
choices: [
|
|
392
|
+
'Email/password (local)',
|
|
393
|
+
'OAuth (Google, GitHub, etc.)',
|
|
394
|
+
'API keys / tokens',
|
|
395
|
+
'No authentication',
|
|
396
|
+
"I don't know",
|
|
397
|
+
],
|
|
398
|
+
choicesByLevel: {
|
|
399
|
+
beginner: [
|
|
400
|
+
'Yes, with email and password',
|
|
401
|
+
'Yes, with a Google or social media account',
|
|
402
|
+
'No, anyone can use it without signing in',
|
|
403
|
+
'I am not sure yet',
|
|
404
|
+
],
|
|
405
|
+
intermediate: [
|
|
406
|
+
'Email/password (local)',
|
|
407
|
+
'OAuth (Google, GitHub, etc.)',
|
|
408
|
+
'API keys / tokens',
|
|
409
|
+
'No authentication',
|
|
410
|
+
"I don't know",
|
|
411
|
+
],
|
|
412
|
+
advanced: [
|
|
413
|
+
'Email/password (local)',
|
|
414
|
+
'OAuth (Google, GitHub, etc.)',
|
|
415
|
+
'API keys / tokens',
|
|
416
|
+
'No authentication',
|
|
417
|
+
"I don't know",
|
|
418
|
+
],
|
|
419
|
+
},
|
|
420
|
+
suggestionId: 'q4.4',
|
|
421
|
+
promptByLevel: {
|
|
422
|
+
beginner: 'Do people need to create an account and sign in to use this? If yes, how?',
|
|
423
|
+
intermediate: 'How should users authenticate?',
|
|
424
|
+
advanced: 'Authentication strategy?',
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
id: 'q4.5',
|
|
429
|
+
phase: 'constraints',
|
|
430
|
+
prompt: 'How many concurrent users do you expect?',
|
|
431
|
+
type: 'choice',
|
|
432
|
+
choices: [
|
|
433
|
+
'< 100 (small / prototype)',
|
|
434
|
+
'100–10,000 (medium)',
|
|
435
|
+
'10,000+ (large scale)',
|
|
436
|
+
"I don't know",
|
|
437
|
+
],
|
|
438
|
+
choicesByLevel: {
|
|
439
|
+
beginner: [
|
|
440
|
+
'Just me or a small group of people',
|
|
441
|
+
'Hundreds or a few thousand people',
|
|
442
|
+
'Tens of thousands or more',
|
|
443
|
+
'I have no idea',
|
|
444
|
+
],
|
|
445
|
+
intermediate: [
|
|
446
|
+
'< 100 (small / prototype)',
|
|
447
|
+
'100–10,000 (medium)',
|
|
448
|
+
'10,000+ (large scale)',
|
|
449
|
+
"I don't know",
|
|
450
|
+
],
|
|
451
|
+
advanced: [
|
|
452
|
+
'< 100 (small / prototype)',
|
|
453
|
+
'100–10,000 (medium)',
|
|
454
|
+
'10,000+ (large scale)',
|
|
455
|
+
"I don't know",
|
|
456
|
+
],
|
|
457
|
+
},
|
|
458
|
+
suggestionId: 'q4.5',
|
|
459
|
+
promptByLevel: {
|
|
460
|
+
beginner: 'How many people do you expect to use this at the same time?',
|
|
461
|
+
intermediate: 'How many concurrent users do you expect?',
|
|
462
|
+
advanced: 'Expected concurrency?',
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
id: 'q4.6',
|
|
467
|
+
phase: 'constraints',
|
|
468
|
+
prompt: 'Where will this be deployed?',
|
|
469
|
+
type: 'choice',
|
|
470
|
+
choices: [
|
|
471
|
+
'VPS / dedicated server',
|
|
472
|
+
'Docker container',
|
|
473
|
+
'Serverless (AWS Lambda, Cloudflare Workers, Vercel)',
|
|
474
|
+
'Cloud PaaS (Heroku, Railway, Render)',
|
|
475
|
+
'On-premises',
|
|
476
|
+
"I don't know",
|
|
477
|
+
],
|
|
478
|
+
choicesByLevel: {
|
|
479
|
+
beginner: [
|
|
480
|
+
'On the internet so anyone can access it',
|
|
481
|
+
'On a specific computer or server in an office',
|
|
482
|
+
'I have not thought about this yet',
|
|
483
|
+
],
|
|
484
|
+
intermediate: [
|
|
485
|
+
'VPS / dedicated server',
|
|
486
|
+
'Docker container',
|
|
487
|
+
'Serverless (AWS Lambda, Cloudflare Workers, Vercel)',
|
|
488
|
+
'Cloud PaaS (Heroku, Railway, Render)',
|
|
489
|
+
'On-premises',
|
|
490
|
+
"I don't know",
|
|
491
|
+
],
|
|
492
|
+
advanced: [
|
|
493
|
+
'VPS / dedicated server',
|
|
494
|
+
'Docker container',
|
|
495
|
+
'Serverless (AWS Lambda, Cloudflare Workers, Vercel)',
|
|
496
|
+
'Cloud PaaS (Heroku, Railway, Render)',
|
|
497
|
+
'On-premises',
|
|
498
|
+
"I don't know",
|
|
499
|
+
],
|
|
500
|
+
},
|
|
501
|
+
suggestionId: 'q4.6',
|
|
502
|
+
promptByLevel: {
|
|
503
|
+
beginner: 'Where should your system be available? On the internet, on a specific computer, or somewhere else?',
|
|
504
|
+
intermediate: 'Where will this be deployed?',
|
|
505
|
+
advanced: 'Deployment target?',
|
|
506
|
+
},
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
id: 'q4.7',
|
|
510
|
+
phase: 'constraints',
|
|
511
|
+
prompt: 'Any specific performance requirements? (response time, throughput, or ?)',
|
|
512
|
+
type: 'string',
|
|
513
|
+
suggestionId: 'q4.7',
|
|
514
|
+
promptByLevel: {
|
|
515
|
+
beginner: 'How fast should your system respond? Should it be instant, or is it okay if it takes a few seconds?',
|
|
516
|
+
intermediate: 'Any specific performance requirements? (response time, throughput)',
|
|
517
|
+
advanced: 'Performance requirements? (p95 latency, throughput, or ?)',
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
id: 'q4.8',
|
|
522
|
+
phase: 'constraints',
|
|
523
|
+
prompt: 'What observability do you need?',
|
|
524
|
+
type: 'choice',
|
|
525
|
+
choices: [
|
|
526
|
+
'Logging only (console/file)',
|
|
527
|
+
'Logging + metrics',
|
|
528
|
+
'Logging + metrics + tracing (full observability)',
|
|
529
|
+
"I don't know",
|
|
530
|
+
],
|
|
531
|
+
choicesByLevel: {
|
|
532
|
+
beginner: [
|
|
533
|
+
'Just tell me if something goes wrong',
|
|
534
|
+
'I want to know what is happening and track problems',
|
|
535
|
+
'I want full visibility into everything the system does',
|
|
536
|
+
'I am not sure what I need',
|
|
537
|
+
],
|
|
538
|
+
intermediate: [
|
|
539
|
+
'Logging only (console/file)',
|
|
540
|
+
'Logging + metrics',
|
|
541
|
+
'Logging + metrics + tracing (full observability)',
|
|
542
|
+
"I don't know",
|
|
543
|
+
],
|
|
544
|
+
advanced: [
|
|
545
|
+
'Logging only (console/file)',
|
|
546
|
+
'Logging + metrics',
|
|
547
|
+
'Logging + metrics + tracing (full observability)',
|
|
548
|
+
"I don't know",
|
|
549
|
+
],
|
|
550
|
+
},
|
|
551
|
+
suggestionId: 'q4.8',
|
|
552
|
+
promptByLevel: {
|
|
553
|
+
beginner: 'If something goes wrong with your system, how do you want to be notified?',
|
|
554
|
+
intermediate: 'What level of monitoring do you need?',
|
|
555
|
+
advanced: 'Observability requirements?',
|
|
556
|
+
},
|
|
557
|
+
},
|
|
558
|
+
// -------------------------------------------------------------------------
|
|
559
|
+
// Phase 5 — Boundaries (3 questions)
|
|
560
|
+
// -------------------------------------------------------------------------
|
|
561
|
+
{
|
|
562
|
+
id: 'q5.1',
|
|
563
|
+
phase: 'boundaries',
|
|
564
|
+
prompt: 'What is explicitly NOT in scope for v1.0? (one per line, empty line to finish, or ?)',
|
|
565
|
+
type: 'multiline',
|
|
566
|
+
suggestionId: 'q5.1',
|
|
567
|
+
promptByLevel: {
|
|
568
|
+
beginner: 'What should this project NOT do in the first version? List things you want to leave for later. (one per line, press Enter on an empty line when done)',
|
|
569
|
+
intermediate: 'What is explicitly NOT in scope for v1.0? (one per line, empty line to finish)',
|
|
570
|
+
advanced: 'Out of scope for v1.0? (one per line, empty line to finish)',
|
|
571
|
+
},
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
id: 'q5.2',
|
|
575
|
+
phase: 'boundaries',
|
|
576
|
+
prompt: 'Any assumptions we should document? (or ?)',
|
|
577
|
+
type: 'string',
|
|
578
|
+
suggestionId: 'q5.2',
|
|
579
|
+
promptByLevel: {
|
|
580
|
+
beginner: 'Is there anything we should assume about the people using this or the environment it will run in?',
|
|
581
|
+
intermediate: 'Any assumptions we should document?',
|
|
582
|
+
advanced: 'Assumptions to document?',
|
|
583
|
+
},
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
id: 'q5.3',
|
|
587
|
+
phase: 'boundaries',
|
|
588
|
+
prompt: 'Any known risks? (or ?)',
|
|
589
|
+
type: 'string',
|
|
590
|
+
suggestionId: 'q5.3',
|
|
591
|
+
promptByLevel: {
|
|
592
|
+
beginner: 'Is there anything that could go wrong or be a challenge while building this?',
|
|
593
|
+
intermediate: 'Any known risks or challenges?',
|
|
594
|
+
advanced: 'Known risks?',
|
|
595
|
+
},
|
|
596
|
+
},
|
|
597
|
+
// -------------------------------------------------------------------------
|
|
598
|
+
// Phase 6 — Review (2 entries: confirm + action)
|
|
599
|
+
// -------------------------------------------------------------------------
|
|
600
|
+
{
|
|
601
|
+
id: 'q6.1',
|
|
602
|
+
phase: 'review',
|
|
603
|
+
prompt: 'Does the summary look right?',
|
|
604
|
+
type: 'choice',
|
|
605
|
+
choices: [
|
|
606
|
+
'1 — Yes, generate the PRD',
|
|
607
|
+
'2 — I want to change something',
|
|
608
|
+
],
|
|
609
|
+
choicesByLevel: {
|
|
610
|
+
beginner: [
|
|
611
|
+
'Yes, everything looks good — create the project plan',
|
|
612
|
+
'I want to change something',
|
|
613
|
+
],
|
|
614
|
+
intermediate: [
|
|
615
|
+
'Yes, generate the PRD',
|
|
616
|
+
'I want to change something',
|
|
617
|
+
],
|
|
618
|
+
advanced: [
|
|
619
|
+
'1 — Yes, generate the PRD',
|
|
620
|
+
'2 — I want to change something',
|
|
621
|
+
],
|
|
622
|
+
},
|
|
623
|
+
suggestionId: 'q6.1',
|
|
624
|
+
promptByLevel: {
|
|
625
|
+
beginner: 'We have collected all the information. Does everything look right to you?',
|
|
626
|
+
intermediate: 'Does the summary look right?',
|
|
627
|
+
advanced: 'Summary correct? Generate PRD?',
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
id: 'q6.2',
|
|
632
|
+
phase: 'review',
|
|
633
|
+
prompt: 'Generating PRD.md...',
|
|
634
|
+
type: 'action',
|
|
635
|
+
suggestionId: 'q6.2',
|
|
636
|
+
},
|
|
637
|
+
];
|
|
638
|
+
/** Questions grouped by phase for easy iteration */
|
|
639
|
+
export function questionsByPhase(phase) {
|
|
640
|
+
return QUESTIONS.filter((q) => q.phase === phase);
|
|
641
|
+
}
|
|
642
|
+
//# sourceMappingURL=questions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/interview/questions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import readline from 'readline';
|
|
2
|
+
import type { InterviewState } from './types.js';
|
|
3
|
+
import type { InterviewEvaluator } from './evaluator.js';
|
|
4
|
+
export interface RunnerOptions {
|
|
5
|
+
/** Inject a readline interface (for testing). If omitted, uses process.stdin/stdout. */
|
|
6
|
+
rl?: readline.Interface;
|
|
7
|
+
/** Override project root. Falls back to HARDNESS_ROOT env var or cwd. */
|
|
8
|
+
root?: string;
|
|
9
|
+
/** Inject an evaluator (for LLM calls). If omitted, evaluation is skipped. */
|
|
10
|
+
evaluator?: InterviewEvaluator;
|
|
11
|
+
/** Override locale detection (for testing). */
|
|
12
|
+
locale?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function runInterview(options?: RunnerOptions): Promise<InterviewState>;
|