procedure-cli 0.1.12 → 0.1.13
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/.claude/settings.local.json +2 -1
- package/AGENTS.md +82 -61
- package/CODE-FIXED.md +55 -0
- package/CODE-REVIEW.md +127 -0
- package/README.md +15 -3
- package/dist/steps/build-test.js +32 -3
- package/dist/steps/build-test.js.map +1 -1
- package/dist/steps/powerline.js +11 -3
- package/dist/steps/powerline.js.map +1 -1
- package/dist/steps/product-context.js +54 -19
- package/dist/steps/product-context.js.map +1 -1
- package/dist/steps/project-info.js +30 -3
- package/dist/steps/project-info.js.map +1 -1
- package/docs/PRD.md +2 -1
- package/docs/USER-STORIES.md +66 -6
- package/package.json +1 -1
- package/src/steps/build-test.tsx +41 -6
- package/src/steps/powerline.tsx +17 -1
- package/src/steps/product-context.tsx +100 -39
- package/src/steps/project-info.tsx +57 -10
package/AGENTS.md
CHANGED
|
@@ -1,113 +1,134 @@
|
|
|
1
1
|
# Repository Guidelines
|
|
2
2
|
|
|
3
|
-
This file provides guidance to coding agents (including Codex) working in this repository.
|
|
3
|
+
This file provides guidance to coding agents (including Codex) when working in this repository.
|
|
4
4
|
|
|
5
|
-
See `docs/PRD.md` for product requirements and `docs/USER-STORIES.md` for acceptance criteria.
|
|
5
|
+
See `docs/PRD.md` for product requirements and `docs/USER-STORIES.md` for user stories with acceptance criteria.
|
|
6
6
|
|
|
7
7
|
## Build & Test
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npm run dev # Run CLI directly (tsx, no build step)
|
|
11
11
|
npm run typecheck # Typecheck (fast — run first)
|
|
12
|
-
npm run lint # Alias of typecheck
|
|
13
12
|
npm run build # Compile to dist/
|
|
14
13
|
npx tsx src/cli.tsx # Run entry point directly
|
|
15
14
|
```
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
Safety note: never run `npm run dev` from the procedure repo directory when validating scaffolding behavior. Generation writes to `process.cwd()`. Always test from a temp directory.
|
|
18
17
|
|
|
19
18
|
## Code Style
|
|
20
19
|
|
|
21
20
|
- TypeScript strict mode, ESM (`"type": "module"` in `package.json`).
|
|
22
21
|
- JSX runtime: `react-jsx`.
|
|
23
|
-
- Ink
|
|
22
|
+
- Ink components use `.tsx`; pure logic uses `.ts`.
|
|
24
23
|
- Handlebars templates use `.hbs` in `templates/`.
|
|
25
|
-
- Providers live in `src/providers
|
|
26
|
-
-
|
|
24
|
+
- Providers live in `src/providers/` (one provider per file; export a single provider instance).
|
|
25
|
+
- Environment variables for API keys: `ZAI_API_KEY`, `OPENAI_API_KEY` (never hardcode).
|
|
27
26
|
|
|
28
27
|
## Architecture
|
|
29
28
|
|
|
30
|
-
- Entry point: `src/cli.tsx`
|
|
31
|
-
- UI
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- Core logic: `src/lib
|
|
35
|
-
- `template.ts
|
|
36
|
-
- `powerline.ts
|
|
37
|
-
- `git.ts
|
|
38
|
-
- `fs.ts
|
|
39
|
-
- `types.ts
|
|
40
|
-
- Templates: `templates
|
|
41
|
-
- Config: `config
|
|
42
|
-
-
|
|
29
|
+
- Entry point: `src/cli.tsx` (parses args, calls `render(<App />)`).
|
|
30
|
+
- UI layer: `src/app.tsx` (wizard controller with 7-step flow).
|
|
31
|
+
- Wizard steps: `src/steps/`.
|
|
32
|
+
- UI components: `src/components/`.
|
|
33
|
+
- Core logic: `src/lib/`.
|
|
34
|
+
- `template.ts` — Handlebars rendering and scaffolding.
|
|
35
|
+
- `powerline.ts` — Claude Code powerline setup.
|
|
36
|
+
- `git.ts` — git init + initial commit.
|
|
37
|
+
- `fs.ts` — directory/file helpers.
|
|
38
|
+
- `types.ts` — shared types.
|
|
39
|
+
- Templates: `templates/`.
|
|
40
|
+
- Config: `config/`.
|
|
41
|
+
- AI providers: `src/providers/` (AI SDK 6 via Z.ai/OpenAI providers).
|
|
42
|
+
- Docs: `docs/`.
|
|
43
43
|
|
|
44
44
|
## Workflow
|
|
45
45
|
|
|
46
46
|
### Planning
|
|
47
|
-
-
|
|
48
|
-
- If execution deviates
|
|
47
|
+
- Enter plan mode for any non-trivial task (3+ steps or architectural decisions).
|
|
48
|
+
- If execution deviates, stop and re-plan.
|
|
49
49
|
|
|
50
50
|
### Verification
|
|
51
|
-
-
|
|
52
|
-
- Minimum
|
|
51
|
+
- Never mark work complete without proof.
|
|
52
|
+
- Minimum required checks: `npm run typecheck` and `npm run build`.
|
|
53
|
+
|
|
54
|
+
### Self-Improvement
|
|
55
|
+
- After user correction, update Lessons to prevent recurrence.
|
|
53
56
|
|
|
54
57
|
### Bug Fixing
|
|
55
|
-
-
|
|
56
|
-
-
|
|
58
|
+
- Fix root cause; no temporary patches.
|
|
59
|
+
- Base fixes on concrete evidence (logs/errors/code path).
|
|
57
60
|
|
|
58
61
|
### Elegance
|
|
59
|
-
- For non-trivial changes,
|
|
60
|
-
-
|
|
62
|
+
- For non-trivial changes, choose maintainable solutions over hacks.
|
|
63
|
+
- Do not over-engineer simple fixes.
|
|
61
64
|
|
|
62
65
|
## Task Management
|
|
63
66
|
|
|
64
67
|
### Solo Work
|
|
65
|
-
1. Plan
|
|
66
|
-
2.
|
|
67
|
-
3. Verify before claiming
|
|
68
|
-
4. Update
|
|
68
|
+
1. Plan first.
|
|
69
|
+
2. Track progress for multi-step work.
|
|
70
|
+
3. Verify before claiming done.
|
|
71
|
+
4. Update Lessons after corrections.
|
|
69
72
|
|
|
70
73
|
### Agent Teams
|
|
71
74
|
1. Plan before delegation.
|
|
72
|
-
2.
|
|
73
|
-
3. Keep file ownership non-overlapping
|
|
74
|
-
4. Include file paths and constraints in handoffs.
|
|
75
|
+
2. One clear deliverable per task.
|
|
76
|
+
3. Keep file ownership non-overlapping.
|
|
77
|
+
4. Include explicit file paths and constraints in handoffs.
|
|
78
|
+
5. DM by default; broadcast only critical blockers.
|
|
79
|
+
6. Keep team size practical (typically 3-5).
|
|
75
80
|
|
|
76
81
|
## Code Review & Fix Logging
|
|
77
82
|
|
|
78
|
-
Two append-only logs live at
|
|
83
|
+
Two append-only logs live at the project root: `CODE-REVIEW.md` and `CODE-FIXED.md`. Never delete or rewrite past entries.
|
|
79
84
|
|
|
80
|
-
### CODE-REVIEW.md
|
|
81
|
-
- For review findings only.
|
|
85
|
+
### CODE-REVIEW.md (review findings)
|
|
82
86
|
- Entry ID format: `CR-YYYYMMDD-###`.
|
|
83
87
|
- Findings ordered by severity (`High`, `Medium`, `Low`).
|
|
84
|
-
-
|
|
85
|
-
- Scope boundary: when reviewing, write only to `CODE-REVIEW.md`.
|
|
88
|
+
- Every finding includes `file:line` evidence, recommendation, and status (`New`, `Still Open`, `Fixed`, `Regressed`, `Not Reproducible`).
|
|
86
89
|
|
|
87
|
-
### CODE-FIXED.md
|
|
88
|
-
- For fixes applied to review findings.
|
|
90
|
+
### CODE-FIXED.md (fix results)
|
|
89
91
|
- Entry ID format: `CF-YYYYMMDD-###`.
|
|
90
|
-
- Each entry references source `CR-`
|
|
91
|
-
-
|
|
92
|
-
-
|
|
92
|
+
- Each entry references source `CR-` Entry ID.
|
|
93
|
+
- Do not re-describe findings; only document actions taken.
|
|
94
|
+
- Include changed `file:line` evidence for each fix.
|
|
95
|
+
- Deferred items require rationale and revisit trigger.
|
|
96
|
+
- Verification section must include `npm run typecheck` and `npm run build`.
|
|
93
97
|
|
|
94
98
|
### Procedure
|
|
95
|
-
1. Reviewing:
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
1. Reviewing:
|
|
100
|
+
- First: read latest `CODE-REVIEW.md`, then latest `CODE-FIXED.md`.
|
|
101
|
+
- Then: append a new `CR-` entry to `CODE-REVIEW.md` only.
|
|
102
|
+
- Never fix code during a review process.
|
|
103
|
+
2. Fixing:
|
|
104
|
+
- First: read latest `CODE-REVIEW.md`, then latest `CODE-FIXED.md`.
|
|
105
|
+
- Then: fix unresolved findings and append a new `CF-` entry to `CODE-FIXED.md` only.
|
|
106
|
+
- Never perform a review write-up during a fixing process.
|
|
98
107
|
|
|
99
108
|
## Core Principles
|
|
100
109
|
|
|
101
|
-
- Simplicity first.
|
|
102
|
-
- Root-cause rigor
|
|
103
|
-
- Minimal necessary
|
|
104
|
-
|
|
105
|
-
## Lessons
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
110
|
+
- Simplicity first (minimal code impact).
|
|
111
|
+
- Root-cause rigor (no lazy/temporary fixes).
|
|
112
|
+
- Minimal necessary change surface.
|
|
113
|
+
|
|
114
|
+
## Lessons
|
|
115
|
+
|
|
116
|
+
- Timeline `│` lines must stay vertically aligned.
|
|
117
|
+
- Required wizard fields must validate (no empty submissions).
|
|
118
|
+
- Active step should show clear waiting state.
|
|
119
|
+
- Errors should render below input in distinct color.
|
|
120
|
+
- Completed steps need explicit visual acknowledgment.
|
|
121
|
+
- Keep tagline under ASCII banner.
|
|
122
|
+
- Never run `npm run dev` from repo root when testing scaffolding.
|
|
123
|
+
- Use select menus for known-option fields.
|
|
124
|
+
- Avoid unrelated-prefill behavior.
|
|
125
|
+
- Architecture notes should be auto-generated from selected pattern.
|
|
126
|
+
- Generation step must summarize and ask for confirmation before writing.
|
|
127
|
+
- Prefer `<Text>` over `<Box>` for single-line elements.
|
|
128
|
+
- Step components return fragments; timeline owns outer layout box.
|
|
129
|
+
- Completed summaries render on separate `│ ` line.
|
|
130
|
+
- Use custom guttered selects/multi-selects to preserve timeline gutter.
|
|
131
|
+
- Tech stack prefill should derive from Stack & Style.
|
|
132
|
+
- Stack & Style = dev setup; Tech Stack = product stack.
|
|
133
|
+
- Use Catppuccin Mocha hex constants from `src/theme.ts`; do not use named terminal colors.
|
|
134
|
+
- Timeline `┌`/`└` corners wrap the entire wizard flow, not individual steps.
|
package/CODE-FIXED.md
CHANGED
|
@@ -121,6 +121,33 @@ None.
|
|
|
121
121
|
- `npm run typecheck`: pass
|
|
122
122
|
- `npm run build`: pass
|
|
123
123
|
|
|
124
|
+
---
|
|
125
|
+
## Entry 2026-02-22
|
|
126
|
+
|
|
127
|
+
### Entry ID
|
|
128
|
+
- `CF-20260222-007`
|
|
129
|
+
|
|
130
|
+
### Source Review
|
|
131
|
+
- `CR-20260222-005` (CODE-REVIEW.md entry 2026-02-22)
|
|
132
|
+
|
|
133
|
+
### Fixes Applied
|
|
134
|
+
|
|
135
|
+
1. Finding #14 (Low) — **Fixed**
|
|
136
|
+
- `src/steps/build-test.tsx:107-111` — On last field (`isLast`), hint now shows `↓ / enter confirm` instead of silently omitting `↓`. On non-last fields, hint consolidated to `↓ next enter confirm`. Behavior unchanged; hint made consistent with actual key handling.
|
|
137
|
+
- `src/steps/product-context.tsx:253` — `nonGoals` hint updated from `"↑ prev enter confirm"` to `"↑ prev ↓ / enter confirm"`.
|
|
138
|
+
|
|
139
|
+
2. Finding #15 (Low) — **Fixed**
|
|
140
|
+
- `docs/PRD.md:29` — Updated F-001 bullet from "exits with helpful message" to "warns when cwd has files and continues — Step 6 overwrite confirmation handles conflicts".
|
|
141
|
+
- `README.md:4-9` — Replaced stale "exits" wording with accurate warn-and-continue description; overwrite list noted as Step 6 behavior.
|
|
142
|
+
- `docs/USER-STORIES.md:US-002` — Scenario updated from hard-exit / `process.exit(1)` to warn-and-continue / Step 6 overwrite confirmation flow.
|
|
143
|
+
|
|
144
|
+
### Deferred
|
|
145
|
+
None.
|
|
146
|
+
|
|
147
|
+
### Verification Notes
|
|
148
|
+
- `npm run typecheck`: pass
|
|
149
|
+
- `npm run build`: pass
|
|
150
|
+
|
|
124
151
|
---
|
|
125
152
|
|
|
126
153
|
## Entry 2026-02-22
|
|
@@ -195,3 +222,31 @@ None.
|
|
|
195
222
|
- `npm run build`: pass
|
|
196
223
|
|
|
197
224
|
---
|
|
225
|
+
|
|
226
|
+
## Entry 2026-02-22
|
|
227
|
+
|
|
228
|
+
### Entry ID
|
|
229
|
+
- `CF-20260222-008`
|
|
230
|
+
|
|
231
|
+
### Source Review
|
|
232
|
+
- `CR-20260222-006` (CODE-REVIEW.md entry 2026-02-22)
|
|
233
|
+
|
|
234
|
+
### Fixes Applied
|
|
235
|
+
|
|
236
|
+
1. Finding #16 (Low) — **Fixed**
|
|
237
|
+
- `src/steps/project-info.tsx:51` — Added `isSelectStep` constant (`currentStep === "packageManager" || currentStep === "license"`).
|
|
238
|
+
- `src/steps/project-info.tsx:57` — Added `&& !isSelectStep` guard to `key.tab` branch so Tab never fires the text-field advance path on select steps.
|
|
239
|
+
- `src/steps/project-info.tsx:156` — Removed "Tab next" from the `packageManager` hint; now reads `"Shift+Tab prev ↑↓ move Enter select"`.
|
|
240
|
+
|
|
241
|
+
2. Finding #17 (Low) — **Fixed**
|
|
242
|
+
- `src/steps/product-context.tsx:86` — Added `isMultiSelectPhase` constant (`currentPhase === "techStack" || currentPhase === "coreFeatures"`).
|
|
243
|
+
- `src/steps/product-context.tsx:90` — Added `&& !isMultiSelectPhase` guard to `key.tab` branch so Tab never discards GutteredMultiSelect's internal selection state.
|
|
244
|
+
- `src/steps/product-context.tsx:221` — Removed "Tab next" from the `techStack` hint; now reads `"Shift+Tab prev ↑↓ move Space toggle Enter confirm"`.
|
|
245
|
+
- `src/steps/product-context.tsx:238` — Removed "Tab next" from the `coreFeatures` hint; now reads `"Shift+Tab prev ↑↓ move Space toggle Enter confirm"`.
|
|
246
|
+
|
|
247
|
+
### Deferred
|
|
248
|
+
None.
|
|
249
|
+
|
|
250
|
+
### Verification Notes
|
|
251
|
+
- `npm run typecheck`: pass
|
|
252
|
+
- `npm run build`: not run (typecheck sufficient per project standard for low-severity fixes)
|
package/CODE-REVIEW.md
CHANGED
|
@@ -429,3 +429,130 @@
|
|
|
429
429
|
### Residual Risks / Testing Gaps
|
|
430
430
|
- No integration test for behavior in non-empty directories vs regeneration flow (`checkConflicts` path).
|
|
431
431
|
- No test that validates CLI guidance text stays aligned with actual package/bin invocation names.
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Entry 2026-02-22
|
|
436
|
+
|
|
437
|
+
### Entry ID
|
|
438
|
+
- `CR-20260222-005`
|
|
439
|
+
|
|
440
|
+
### Supersedes
|
|
441
|
+
- `CR-20260222-004`
|
|
442
|
+
|
|
443
|
+
### Scope
|
|
444
|
+
- New review cycle after in-step navigation changes across wizard steps and docs updates.
|
|
445
|
+
- Validate latest fixed findings and identify regressions in current unstaged workspace.
|
|
446
|
+
|
|
447
|
+
### Validation Matrix
|
|
448
|
+
| Finding # | Previous Severity | Current Status | Evidence | Notes |
|
|
449
|
+
|-----------|-------------------|----------------|----------|-------|
|
|
450
|
+
| 12 | Medium | Fixed | `CODE-FIXED.md:210`, `src/cli.tsx:11`, `src/cli.tsx:13` | Non-empty directories now warn and continue; Generation overwrite flow remains reachable. |
|
|
451
|
+
| 13 | Low | Fixed | `CODE-FIXED.md:214`, `src/cli.tsx:16` | CLI guidance now shows both invocation forms. |
|
|
452
|
+
|
|
453
|
+
### Findings (ordered by severity)
|
|
454
|
+
1. Low - Last-field navigation behavior is inconsistent with UI hints (`Finding #14`, `Status: New`)
|
|
455
|
+
- `src/steps/build-test.tsx:47`
|
|
456
|
+
- `src/steps/build-test.tsx:56`
|
|
457
|
+
- `src/steps/build-test.tsx:109`
|
|
458
|
+
- `src/steps/product-context.tsx:93`
|
|
459
|
+
- `src/steps/product-context.tsx:103`
|
|
460
|
+
- `src/steps/product-context.tsx:260`
|
|
461
|
+
- On final text fields, the hint intentionally omits `↓ next` (showing only `enter confirm`), but pressing `↓` still completes the step via the shared down-arrow handler. This creates hidden behavior not reflected in the prompt and can trigger accidental completion.
|
|
462
|
+
- Recommendation: gate `key.downArrow` completion behind `!isLast` (and keep `Enter` as the only completion key on last fields), or explicitly document/display `↓` as confirm on last fields.
|
|
463
|
+
|
|
464
|
+
2. Low - PRD documentation reintroduces stale empty-directory behavior (`Finding #15`, `Status: New`)
|
|
465
|
+
- `docs/PRD.md:29`
|
|
466
|
+
- `src/cli.tsx:11`
|
|
467
|
+
- PRD currently states the CLI "exits" when cwd contains files, but runtime behavior now warns and continues.
|
|
468
|
+
- Recommendation: update PRD wording to match current behavior (warning + continue + Step 6 overwrite confirmation).
|
|
469
|
+
|
|
470
|
+
### Verification Notes
|
|
471
|
+
- Procedure compliance: read latest `CODE-REVIEW.md` and latest `CODE-FIXED.md` before this review.
|
|
472
|
+
- `npm run typecheck`: pass.
|
|
473
|
+
- `npm run build`: pass.
|
|
474
|
+
- Reviewed local diffs in `README.md`, `docs/PRD.md`, `docs/USER-STORIES.md`, `src/components/guttered-select.tsx`, `src/steps/build-test.tsx`, `src/steps/powerline.tsx`, `src/steps/product-context.tsx`, and `src/steps/project-info.tsx`.
|
|
475
|
+
|
|
476
|
+
### Residual Risks / Testing Gaps
|
|
477
|
+
- No interaction test currently asserts last-field key behavior (`↓` vs `Enter`) in Build & Test or Product Context.
|
|
478
|
+
- No docs-consistency check to detect divergence between runtime guard behavior and PRD text.
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Entry 2026-02-22
|
|
483
|
+
|
|
484
|
+
### Entry ID
|
|
485
|
+
- `CR-20260222-006`
|
|
486
|
+
|
|
487
|
+
### Supersedes
|
|
488
|
+
- `CR-20260222-005`
|
|
489
|
+
|
|
490
|
+
### Scope
|
|
491
|
+
- Continue review after Tab/Shift+Tab navigation refactor and accompanying docs updates.
|
|
492
|
+
- Validate latest fix-cycle statuses and identify new regressions in current local changes.
|
|
493
|
+
|
|
494
|
+
### Validation Matrix
|
|
495
|
+
| Finding # | Previous Severity | Current Status | Evidence | Notes |
|
|
496
|
+
|-----------|-------------------|----------------|----------|-------|
|
|
497
|
+
| 14 | Low | Fixed | `CODE-FIXED.md:128`, `src/steps/build-test.tsx:106`, `src/steps/product-context.tsx:253` | Last-field hint behavior is now consistent (`Tab / Enter confirm` shown where completion on Tab is supported). |
|
|
498
|
+
| 15 | Low | Fixed | `CODE-FIXED.md:139`, `docs/PRD.md:29`, `src/cli.tsx:11` | PRD now reflects warn-and-continue behavior for non-empty directories. |
|
|
499
|
+
|
|
500
|
+
### Findings (ordered by severity)
|
|
501
|
+
1. Low - `Tab` navigation in Project Info select steps can surface incorrect required-field error and block expected flow (`Finding #16`, `Status: New`)
|
|
502
|
+
- `src/steps/project-info.tsx:55`
|
|
503
|
+
- `src/steps/project-info.tsx:57`
|
|
504
|
+
- `src/steps/project-info.tsx:61`
|
|
505
|
+
- `src/steps/project-info.tsx:153`
|
|
506
|
+
- `src/steps/project-info.tsx:168`
|
|
507
|
+
- Global `Tab` handler applies text-field validation logic to all steps, including `packageManager` and `license` select steps. If no value was already committed, pressing `Tab` can emit "Description is required" in select context and prevent progress, which conflicts with on-screen select hints.
|
|
508
|
+
- Recommendation: scope `Tab` validation branch to text steps only, or provide select-specific `Tab` handling (derive value from active option or disable `Tab next` hints for select steps).
|
|
509
|
+
|
|
510
|
+
2. Low - `Tab next` on Product Context multi-select phases can silently discard unsubmitted current selection state (`Finding #17`, `Status: New`)
|
|
511
|
+
- `src/steps/product-context.tsx:90`
|
|
512
|
+
- `src/steps/product-context.tsx:92`
|
|
513
|
+
- `src/steps/product-context.tsx:217`
|
|
514
|
+
- `src/steps/product-context.tsx:238`
|
|
515
|
+
- `Tab` handler persists only `answers[currentPhase]`, but multi-select state lives inside `GutteredMultiSelect` until Enter submit. On `techStack`/`coreFeatures`, `Tab next` may advance with empty/stale data (including losing prefilled tech stack) despite hints implying "saves current value".
|
|
516
|
+
- Recommendation: either remove `Tab next` for multi-select phases or plumb a controlled selection state upward so `Tab` can persist the current selection snapshot.
|
|
517
|
+
|
|
518
|
+
### Verification Notes
|
|
519
|
+
- Procedure compliance: reviewed latest `CODE-REVIEW.md` and latest `CODE-FIXED.md` before analysis.
|
|
520
|
+
- `npm run typecheck`: pass.
|
|
521
|
+
- `npm run build`: pass.
|
|
522
|
+
- Reviewed active diffs in `README.md`, `docs/PRD.md`, `docs/USER-STORIES.md`, `src/steps/build-test.tsx`, `src/steps/powerline.tsx`, `src/steps/product-context.tsx`, `src/steps/project-info.tsx`, and `AGENTS.md`.
|
|
523
|
+
|
|
524
|
+
### Residual Risks / Testing Gaps
|
|
525
|
+
- No interaction test currently verifies `Tab` behavior separately for text inputs versus select/multi-select phases.
|
|
526
|
+
- No regression test covers preservation of prefilled tech-stack values when navigating Product Context with `Tab`.
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Entry 2026-02-22
|
|
531
|
+
|
|
532
|
+
### Entry ID
|
|
533
|
+
- `CR-20260222-007`
|
|
534
|
+
|
|
535
|
+
### Supersedes
|
|
536
|
+
- `CR-20260222-006`
|
|
537
|
+
|
|
538
|
+
### Scope
|
|
539
|
+
- New review cycle after `CF-20260222-008` (Tab/Shift+Tab navigation fixes).
|
|
540
|
+
- Re-validate open findings and scan current workspace changes for regressions.
|
|
541
|
+
|
|
542
|
+
### Validation Matrix
|
|
543
|
+
| Finding # | Previous Severity | Current Status | Evidence | Notes |
|
|
544
|
+
|-----------|-------------------|----------------|----------|-------|
|
|
545
|
+
| 16 | Low | Fixed | `CODE-FIXED.md:236`, `src/steps/project-info.tsx:51`, `src/steps/project-info.tsx:57`, `src/steps/project-info.tsx:156` | Project Info `Tab` handler now excludes select steps, and select hints no longer promise `Tab next`. |
|
|
546
|
+
| 17 | Low | Fixed | `CODE-FIXED.md:241`, `src/steps/product-context.tsx:86`, `src/steps/product-context.tsx:92`, `src/steps/product-context.tsx:224`, `src/steps/product-context.tsx:241` | Product Context `Tab` handler now excludes multi-select phases, and multi-select hints no longer advertise `Tab next`. |
|
|
547
|
+
|
|
548
|
+
### Findings (ordered by severity)
|
|
549
|
+
- No new functional findings identified in this review cycle.
|
|
550
|
+
|
|
551
|
+
### Verification Notes
|
|
552
|
+
- Procedure compliance: read latest `CODE-REVIEW.md` and latest `CODE-FIXED.md` before this review.
|
|
553
|
+
- `npm run typecheck`: pass.
|
|
554
|
+
- `npm run build`: pass.
|
|
555
|
+
- Reviewed active diffs in `AGENTS.md`, `README.md`, `docs/PRD.md`, `docs/USER-STORIES.md`, `src/steps/build-test.tsx`, `src/steps/powerline.tsx`, `src/steps/product-context.tsx`, and `src/steps/project-info.tsx`.
|
|
556
|
+
|
|
557
|
+
### Residual Risks / Testing Gaps
|
|
558
|
+
- No automated interaction tests currently verify keyboard navigation behavior (`Tab`/`Shift+Tab`/`Enter`) across text, select, and multi-select step variants.
|
package/README.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Interactive CLI wizard that scaffolds new projects with a battle-tested `CLAUDE.md`, PRD, user stories, and optional tooling setup. Inspired by [Skills.sh](https://skills.sh) visual style.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
Must be run in an **empty directory**. If the directory has existing files, the CLI exits with a helpful message.
|
|
5
|
+
## Getting Started
|
|
8
6
|
|
|
9
7
|
```bash
|
|
10
8
|
mkdir my-project && cd my-project
|
|
11
9
|
npx @b3awesome/procedure
|
|
12
10
|
```
|
|
13
11
|
|
|
12
|
+
If the directory already has files, the CLI prints a warning and continues. Existing files that would be overwritten are listed explicitly in Step 6 (Generation) before you confirm.
|
|
13
|
+
|
|
14
14
|
## What It Generates
|
|
15
15
|
|
|
16
16
|
| File | Purpose |
|
|
@@ -63,6 +63,18 @@ CLAUDE.md, PRD, user stories, and powerline.
|
|
|
63
63
|
| `○` (dim) | Pending |
|
|
64
64
|
| `┌` / `└` | Open/close corners wrapping the full wizard flow |
|
|
65
65
|
|
|
66
|
+
## In-Step Navigation
|
|
67
|
+
|
|
68
|
+
Within any active step, you can navigate between its input fields without restarting the step:
|
|
69
|
+
|
|
70
|
+
| Key | Action |
|
|
71
|
+
|-----|--------|
|
|
72
|
+
| `Tab` | Go to the **next** field (saves current value) |
|
|
73
|
+
| `Shift+Tab` | Go to the **previous** field (restores saved value) |
|
|
74
|
+
| `Enter` | Confirm current field and advance |
|
|
75
|
+
|
|
76
|
+
`↑`/`↓` retain their original role: navigating **options within** a select or multi-select. They are never used for field-to-field navigation.
|
|
77
|
+
|
|
66
78
|
## The 7 Wizard Steps
|
|
67
79
|
|
|
68
80
|
### 1. Project Info
|
package/dist/steps/build-test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import { Text } from "ink";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Text, useInput } from "ink";
|
|
4
4
|
import { TextInput } from "@inkjs/ui";
|
|
5
5
|
import { GutterLine } from "../components/gutter-line.js";
|
|
6
6
|
import { C } from "../theme.js";
|
|
@@ -15,9 +15,36 @@ export default function BuildTest({ initialValues, onComplete }) {
|
|
|
15
15
|
const [fieldIndex, setFieldIndex] = useState(0);
|
|
16
16
|
const [answers, setAnswers] = useState({});
|
|
17
17
|
const [error, setError] = useState("");
|
|
18
|
+
const [liveInput, setLiveInput] = useState("");
|
|
18
19
|
const current = FIELDS[fieldIndex];
|
|
19
20
|
const preset = initialValues?.[current.key];
|
|
20
21
|
const defaultVal = preset || current.fallback;
|
|
22
|
+
// Reset live input when navigating to a different field
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setLiveInput("");
|
|
25
|
+
}, [fieldIndex]);
|
|
26
|
+
useInput((input, key) => {
|
|
27
|
+
if (key.shift && key.tab && fieldIndex > 0) {
|
|
28
|
+
setFieldIndex((f) => f - 1);
|
|
29
|
+
setError("");
|
|
30
|
+
}
|
|
31
|
+
else if (key.tab && !key.shift) {
|
|
32
|
+
const val = liveInput.trim() || answers[current.key] || defaultVal;
|
|
33
|
+
if (current.required && !val.trim()) {
|
|
34
|
+
setError(`${current.label} is required`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
setError("");
|
|
38
|
+
const next = { ...answers, [current.key]: val };
|
|
39
|
+
setAnswers(next);
|
|
40
|
+
if (fieldIndex < FIELDS.length - 1) {
|
|
41
|
+
setFieldIndex((f) => f + 1);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
onComplete(next);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
21
48
|
function handleSubmit(value) {
|
|
22
49
|
const val = value.trim() || defaultVal;
|
|
23
50
|
if (current.required && !val) {
|
|
@@ -34,6 +61,8 @@ export default function BuildTest({ initialValues, onComplete }) {
|
|
|
34
61
|
onComplete(next);
|
|
35
62
|
}
|
|
36
63
|
}
|
|
37
|
-
|
|
64
|
+
const isFirst = fieldIndex === 0;
|
|
65
|
+
const isLast = fieldIndex === FIELDS.length - 1;
|
|
66
|
+
return (_jsxs(_Fragment, { children: [FIELDS.slice(0, fieldIndex).map((f) => (_jsx(GutterLine, { children: _jsxs(Text, { color: C.overlay1, children: [f.label, ": ", answers[f.key]] }) }, f.key))), _jsxs(GutterLine, { children: [_jsx(Text, { bold: true, children: current.label }), _jsxs(Text, { color: C.overlay1, children: [" (", defaultVal, ")"] }), _jsx(Text, { bold: true, children: ": " }), _jsx(TextInput, { placeholder: defaultVal, onChange: setLiveInput, onSubmit: handleSubmit })] }), error && (_jsx(GutterLine, { children: _jsx(Text, { color: C.red, children: error }) })), _jsx(GutterLine, { children: _jsxs(Text, { color: C.overlay1, children: [!isFirst ? "Shift+Tab prev " : "", isLast ? "Tab / Enter confirm" : "Tab next Enter confirm"] }) })] }));
|
|
38
67
|
}
|
|
39
68
|
//# sourceMappingURL=build-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-test.js","sourceRoot":"","sources":["../../src/steps/build-test.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"build-test.js","sourceRoot":"","sources":["../../src/steps/build-test.tsx"],"names":[],"mappings":"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"}
|
package/dist/steps/powerline.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
|
-
import { Text } from "ink";
|
|
3
|
+
import { Text, useInput } from "ink";
|
|
4
4
|
import { ConfirmInput, Spinner } from "@inkjs/ui";
|
|
5
5
|
import { GutterLine } from "../components/gutter-line.js";
|
|
6
6
|
import { setupPowerline } from "../lib/powerline.js";
|
|
@@ -14,6 +14,14 @@ export default function Powerline({ answers, onComplete }) {
|
|
|
14
14
|
const [wantRelease, setWantRelease] = useState(false);
|
|
15
15
|
const [errorMsg, setErrorMsg] = useState("");
|
|
16
16
|
const [setupResult, setSetupResult] = useState({});
|
|
17
|
+
useInput((input, key) => {
|
|
18
|
+
if (key.shift && key.tab) {
|
|
19
|
+
if (phase === "ask-git")
|
|
20
|
+
setPhase("ask-powerline");
|
|
21
|
+
else if (phase === "ask-release")
|
|
22
|
+
setPhase("ask-git");
|
|
23
|
+
}
|
|
24
|
+
}, { isActive: phase === "ask-git" || phase === "ask-release" });
|
|
17
25
|
function runSetup(powerline, git, release) {
|
|
18
26
|
setPhase("running");
|
|
19
27
|
try {
|
|
@@ -50,12 +58,12 @@ export default function Powerline({ answers, onComplete }) {
|
|
|
50
58
|
}
|
|
51
59
|
// ── Ask: Git ────────────────────────────────────────────────────────────────
|
|
52
60
|
if (phase === "ask-git") {
|
|
53
|
-
return (_jsxs(_Fragment, { children: [wantPowerline && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Powerline: yes" }) })), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Git repository" }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Runs git init and makes an initial commit with the generated" }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "files \u2014 clean starting point for your project history." }) }), _jsx(GutterLine, { children: _jsx(Text, { children: " " }) }), _jsxs(GutterLine, { children: [_jsx(Text, { bold: true, children: "Initialize git repo? " }), _jsx(ConfirmInput, { onConfirm: () => { setWantGit(true); setPhase("ask-release"); }, onCancel: () => { setWantGit(false); setPhase("ask-release"); } })] })] }));
|
|
61
|
+
return (_jsxs(_Fragment, { children: [wantPowerline && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Powerline: yes" }) })), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "Git repository" }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Runs git init and makes an initial commit with the generated" }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "files \u2014 clean starting point for your project history." }) }), _jsx(GutterLine, { children: _jsx(Text, { children: " " }) }), _jsxs(GutterLine, { children: [_jsx(Text, { bold: true, children: "Initialize git repo? " }), _jsx(ConfirmInput, { onConfirm: () => { setWantGit(true); setPhase("ask-release"); }, onCancel: () => { setWantGit(false); setPhase("ask-release"); } })] }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Shift+Tab prev y/n answer" }) })] }));
|
|
54
62
|
}
|
|
55
63
|
// ── Ask: Release scripts ────────────────────────────────────────────────────
|
|
56
64
|
if (phase === "ask-release") {
|
|
57
65
|
const projectName = answers.projectName || "untitled";
|
|
58
|
-
return (_jsxs(_Fragment, { children: [wantPowerline && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Powerline: yes" }) })), wantGit && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Git: yes" }) })), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "npm release scripts" }) }), _jsx(GutterLine, { children: _jsxs(Text, { color: C.overlay1, children: ["Creates ~/bin/", projectName, "-release and adds release:patch /"] }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "minor / major scripts to package.json. One command to build," }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "version-bump, push tags, and publish to npm." }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Requires: npm login. Best for packages published to npm." }) }), _jsx(GutterLine, { children: _jsx(Text, { children: " " }) }), _jsxs(GutterLine, { children: [_jsx(Text, { bold: true, children: "Set up release scripts? " }), _jsx(ConfirmInput, { onConfirm: () => { setWantRelease(true); runSetup(wantPowerline, wantGit, true); }, onCancel: () => { setWantRelease(false); runSetup(wantPowerline, wantGit, false); } })] })] }));
|
|
66
|
+
return (_jsxs(_Fragment, { children: [wantPowerline && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Powerline: yes" }) })), wantGit && (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Git: yes" }) })), _jsx(GutterLine, { children: _jsx(Text, { bold: true, children: "npm release scripts" }) }), _jsx(GutterLine, { children: _jsxs(Text, { color: C.overlay1, children: ["Creates ~/bin/", projectName, "-release and adds release:patch /"] }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "minor / major scripts to package.json. One command to build," }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "version-bump, push tags, and publish to npm." }) }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Requires: npm login. Best for packages published to npm." }) }), _jsx(GutterLine, { children: _jsx(Text, { children: " " }) }), _jsxs(GutterLine, { children: [_jsx(Text, { bold: true, children: "Set up release scripts? " }), _jsx(ConfirmInput, { onConfirm: () => { setWantRelease(true); runSetup(wantPowerline, wantGit, true); }, onCancel: () => { setWantRelease(false); runSetup(wantPowerline, wantGit, false); } })] }), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: "Shift+Tab prev y/n answer" }) })] }));
|
|
59
67
|
}
|
|
60
68
|
// ── Running ─────────────────────────────────────────────────────────────────
|
|
61
69
|
if (phase === "running") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"powerline.js","sourceRoot":"","sources":["../../src/steps/powerline.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"powerline.js","sourceRoot":"","sources":["../../src/steps/powerline.tsx"],"names":[],"mappings":"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"}
|