devlyn-cli 1.15.0 → 2.1.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.
Files changed (158) hide show
  1. package/AGENTS.md +104 -0
  2. package/CLAUDE.md +135 -21
  3. package/README.md +43 -125
  4. package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +272 -0
  5. package/benchmark/auto-resolve/README.md +114 -0
  6. package/benchmark/auto-resolve/RUBRIC.md +162 -0
  7. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +30 -0
  8. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +68 -0
  9. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +10 -0
  10. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +4 -0
  11. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +45 -0
  12. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +8 -0
  13. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +54 -0
  14. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +170 -0
  15. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +84 -0
  16. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +21 -0
  17. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +214 -0
  18. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +223 -0
  19. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +5 -0
  20. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +56 -0
  21. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +14 -0
  22. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +28 -0
  23. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +162 -0
  24. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +65 -0
  25. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +19 -0
  26. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +4 -0
  27. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +56 -0
  28. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +9 -0
  29. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +40 -0
  30. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +57 -0
  31. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +10 -0
  32. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +6 -0
  33. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +49 -0
  34. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +9 -0
  35. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +38 -0
  36. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +65 -0
  37. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +10 -0
  38. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +55 -0
  39. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +49 -0
  40. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +7 -0
  41. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +38 -0
  42. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +77 -0
  43. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +10 -0
  44. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +4 -0
  45. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +49 -0
  46. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +10 -0
  47. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +50 -0
  48. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +76 -0
  49. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +10 -0
  50. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +36 -0
  51. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +46 -0
  52. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +7 -0
  53. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +50 -0
  54. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +63 -0
  55. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +10 -0
  56. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +4 -0
  57. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +48 -0
  58. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +1 -0
  59. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +93 -0
  60. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +74 -0
  61. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +10 -0
  62. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +28 -0
  63. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +62 -0
  64. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +5 -0
  65. package/benchmark/auto-resolve/fixtures/SCHEMA.md +130 -0
  66. package/benchmark/auto-resolve/fixtures/test-repo/README.md +27 -0
  67. package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +63 -0
  68. package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +823 -0
  69. package/benchmark/auto-resolve/fixtures/test-repo/package.json +22 -0
  70. package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +17 -0
  71. package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +37 -0
  72. package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +25 -0
  73. package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +58 -0
  74. package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +37 -0
  75. package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +174 -0
  76. package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +256 -0
  77. package/benchmark/auto-resolve/scripts/compile-report.py +331 -0
  78. package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +552 -0
  79. package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +430 -0
  80. package/benchmark/auto-resolve/scripts/judge.sh +359 -0
  81. package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +260 -0
  82. package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +274 -0
  83. package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +328 -0
  84. package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +401 -0
  85. package/benchmark/auto-resolve/scripts/pair-plan-lint.py +468 -0
  86. package/benchmark/auto-resolve/scripts/run-fixture.sh +691 -0
  87. package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +234 -0
  88. package/benchmark/auto-resolve/scripts/run-suite.sh +214 -0
  89. package/benchmark/auto-resolve/scripts/ship-gate.py +222 -0
  90. package/bin/devlyn.js +175 -17
  91. package/config/skills/_shared/adapters/README.md +64 -0
  92. package/config/skills/_shared/adapters/gpt-5-5.md +29 -0
  93. package/config/skills/_shared/adapters/opus-4-7.md +29 -0
  94. package/config/skills/{devlyn:auto-resolve/scripts → _shared}/archive_run.py +26 -0
  95. package/config/skills/_shared/codex-config.md +54 -0
  96. package/config/skills/_shared/codex-monitored.sh +141 -0
  97. package/config/skills/_shared/engine-preflight.md +35 -0
  98. package/config/skills/_shared/expected.schema.json +93 -0
  99. package/config/skills/_shared/pair-plan-schema.md +298 -0
  100. package/config/skills/_shared/runtime-principles.md +110 -0
  101. package/config/skills/_shared/spec-verify-check.py +519 -0
  102. package/config/skills/devlyn:ideate/SKILL.md +99 -429
  103. package/config/skills/devlyn:ideate/references/elicitation.md +97 -0
  104. package/config/skills/devlyn:ideate/references/from-spec-mode.md +54 -0
  105. package/config/skills/devlyn:ideate/references/project-mode.md +76 -0
  106. package/config/skills/devlyn:ideate/references/spec-template.md +102 -0
  107. package/config/skills/devlyn:resolve/SKILL.md +172 -184
  108. package/config/skills/devlyn:resolve/references/free-form-mode.md +68 -0
  109. package/config/skills/devlyn:resolve/references/phases/build-gate.md +45 -0
  110. package/config/skills/devlyn:resolve/references/phases/cleanup.md +39 -0
  111. package/config/skills/devlyn:resolve/references/phases/implement.md +42 -0
  112. package/config/skills/devlyn:resolve/references/phases/plan.md +42 -0
  113. package/config/skills/devlyn:resolve/references/phases/verify.md +69 -0
  114. package/config/skills/devlyn:resolve/references/state-schema.md +106 -0
  115. package/{config/skills → optional-skills}/devlyn:design-system/SKILL.md +1 -0
  116. package/{config/skills → optional-skills}/devlyn:reap/SKILL.md +1 -0
  117. package/{config/skills → optional-skills}/devlyn:team-design-ui/SKILL.md +5 -0
  118. package/package.json +12 -2
  119. package/scripts/lint-skills.sh +431 -0
  120. package/config/skills/devlyn:auto-resolve/SKILL.md +0 -252
  121. package/config/skills/devlyn:auto-resolve/evals/evals.json +0 -21
  122. package/config/skills/devlyn:auto-resolve/evals/task-doctor-subcommand.md +0 -42
  123. package/config/skills/devlyn:auto-resolve/references/build-gate.md +0 -130
  124. package/config/skills/devlyn:auto-resolve/references/engine-routing.md +0 -82
  125. package/config/skills/devlyn:auto-resolve/references/findings-schema.md +0 -103
  126. package/config/skills/devlyn:auto-resolve/references/phases/phase-1-build.md +0 -54
  127. package/config/skills/devlyn:auto-resolve/references/phases/phase-2-evaluate.md +0 -45
  128. package/config/skills/devlyn:auto-resolve/references/phases/phase-3-critic.md +0 -84
  129. package/config/skills/devlyn:auto-resolve/references/pipeline-routing.md +0 -114
  130. package/config/skills/devlyn:auto-resolve/references/pipeline-state.md +0 -201
  131. package/config/skills/devlyn:auto-resolve/scripts/terminal_verdict.py +0 -96
  132. package/config/skills/devlyn:browser-validate/SKILL.md +0 -164
  133. package/config/skills/devlyn:browser-validate/references/flow-testing.md +0 -118
  134. package/config/skills/devlyn:browser-validate/references/tier1-chrome.md +0 -137
  135. package/config/skills/devlyn:browser-validate/references/tier2-playwright.md +0 -195
  136. package/config/skills/devlyn:browser-validate/references/tier3-curl.md +0 -57
  137. package/config/skills/devlyn:clean/SKILL.md +0 -285
  138. package/config/skills/devlyn:design-ui/SKILL.md +0 -351
  139. package/config/skills/devlyn:discover-product/SKILL.md +0 -124
  140. package/config/skills/devlyn:evaluate/SKILL.md +0 -564
  141. package/config/skills/devlyn:feature-spec/SKILL.md +0 -630
  142. package/config/skills/devlyn:ideate/references/challenge-rubric.md +0 -122
  143. package/config/skills/devlyn:ideate/references/codex-critic-template.md +0 -42
  144. package/config/skills/devlyn:ideate/references/templates/item-spec.md +0 -90
  145. package/config/skills/devlyn:implement-ui/SKILL.md +0 -466
  146. package/config/skills/devlyn:preflight/SKILL.md +0 -355
  147. package/config/skills/devlyn:preflight/references/auditors/browser-auditor.md +0 -32
  148. package/config/skills/devlyn:preflight/references/auditors/code-auditor.md +0 -86
  149. package/config/skills/devlyn:preflight/references/auditors/docs-auditor.md +0 -38
  150. package/config/skills/devlyn:product-spec/SKILL.md +0 -603
  151. package/config/skills/devlyn:recommend-features/SKILL.md +0 -286
  152. package/config/skills/devlyn:review/SKILL.md +0 -161
  153. package/config/skills/devlyn:team-resolve/SKILL.md +0 -631
  154. package/config/skills/devlyn:team-review/SKILL.md +0 -493
  155. package/config/skills/devlyn:update-docs/SKILL.md +0 -463
  156. package/config/skills/workflow-routing/SKILL.md +0 -73
  157. /package/{config/skills → optional-skills}/devlyn:reap/scripts/reap.sh +0 -0
  158. /package/{config/skills → optional-skills}/devlyn:reap/scripts/scan.sh +0 -0
@@ -1,285 +0,0 @@
1
- ---
2
- description: Detect and remove dead code, unused dependencies, complexity hotspots, and tech debt. Keeps your codebase lean and maintainable.
3
- allowed-tools: Read, Write, Edit, Glob, Grep, Bash(ls:*), Bash(test:*), Bash(git log:*), Bash(git blame:*), Bash(wc:*), Bash(npm:*), Bash(npx:*), Bash(pnpm:*), Bash(yarn:*), Bash(cargo:*), Bash(pip:*), Bash(go:*), Bash(node -e:*), Bash(python -c:*)
4
- argument-hint: [focus area, or empty for full scan]
5
- ---
6
-
7
- <role>
8
- You are a Codebase Health Engineer. Your job is to find and safely remove dead weight from a codebase — unused code, stale dependencies, orphan files, complexity hotspots, and test gaps. You care about maintainability as much as functionality.
9
-
10
- Your operating principle: every line of code is a liability. Code that serves no purpose increases build times, confuses contributors, and hides real bugs. Remove it with confidence, preserve it with evidence.
11
- </role>
12
-
13
- <user_input>
14
- $ARGUMENTS
15
- </user_input>
16
-
17
- <escalation>
18
- If the cleanup reveals deeply intertwined architectural debt — circular dependencies, god objects woven into multiple systems, or patterns that can't be safely removed without redesigning interfaces — escalate to `/devlyn:team-resolve` with your findings so a multi-perspective team can plan the refactor.
19
- </escalation>
20
-
21
- <process>
22
-
23
- ## Phase 1: CODEBASE UNDERSTANDING
24
-
25
- Before analyzing anything, understand the project's shape.
26
-
27
- 1. Read project metadata in parallel:
28
- - package.json / Cargo.toml / pyproject.toml / go.mod (whatever applies)
29
- - README.md, CLAUDE.md
30
- - Linter and build configs (tsconfig.json, .eslintrc, biome.json, etc.)
31
-
32
- 2. Scan the project structure:
33
- - List top-level directories
34
- - Identify the tech stack, framework, entry points
35
- - Check for monorepo structure (workspaces, packages/)
36
-
37
- 3. Check recent git activity:
38
- - `git log --oneline -20` for recent changes
39
- - Identify actively maintained vs. stale areas
40
-
41
- ## Phase 2: ANALYSIS
42
-
43
- Run these 5 analysis categories. Use parallel tool calls — each category is independent.
44
-
45
- ### Category 1: Dead Code Detection
46
-
47
- Find code that is never executed or referenced.
48
-
49
- **What to scan:**
50
- - Exported functions/classes never imported elsewhere
51
- - Files with zero inbound imports (orphan files)
52
- - Unused variables and parameters (beyond what linters catch)
53
- - Feature flags or config branches that are permanently off
54
- - Commented-out code blocks (more than 3 lines)
55
- - Dead routes: route definitions pointing to removed handlers
56
- - Unused CSS classes or styled components (in UI projects)
57
-
58
- **How to verify:**
59
- - Use Grep to search for import/require/usage of each suspect
60
- - Check if "unused" code is actually used dynamically (string interpolation, dynamic imports, reflection)
61
- - Verify test files before flagging — test helpers may appear unused but are needed
62
-
63
- ### Category 2: Dependency Hygiene
64
-
65
- Find dependency bloat and version issues.
66
-
67
- **What to scan:**
68
- - Installed packages never imported in source code
69
- - Duplicate packages serving the same purpose (e.g., both lodash and underscore)
70
- - devDependencies used in production code (or vice versa)
71
- - Pinned versions with known security issues (if lockfile available)
72
- - Dependencies that could be replaced by built-in language features
73
-
74
- **How to verify:**
75
- - Search all source files for each dependency's import/require
76
- - Check indirect usage (peer dependencies, plugins, config references)
77
- - Verify build tool plugins (webpack, vite, etc.) that may reference deps implicitly
78
-
79
- ### Category 3: Test Health
80
-
81
- Find gaps, obsolete tests, and tests that don't actually test anything.
82
-
83
- **What to scan:**
84
- - Test files for components/modules that no longer exist
85
- - Tests with no assertions (empty test bodies, missing expect/assert)
86
- - Skipped tests (`.skip`, `xit`, `xdescribe`, `@pytest.mark.skip`) without explanation
87
- - Snapshot tests with stale snapshots
88
- - Test coverage gaps: source files with zero corresponding test files
89
-
90
- **How to verify:**
91
- - Cross-reference test file names with source file names
92
- - Read test bodies to check for meaningful assertions
93
- - Check if skipped tests reference issues that are now resolved
94
-
95
- ### Category 4: Complexity Hotspots
96
-
97
- Find code that's disproportionately hard to maintain.
98
-
99
- **What to scan:**
100
- - Functions longer than 50 lines
101
- - Files longer than 500 lines
102
- - Nesting deeper than 4 levels
103
- - Functions with more than 5 parameters
104
- - God objects/files that accumulate unrelated responsibilities
105
- - Circular dependencies between modules
106
-
107
- **How to measure:**
108
- - `wc -l` on suspect files
109
- - Read and count nesting levels
110
- - Trace import chains for circularity
111
-
112
- ### Category 5: Code Hygiene
113
-
114
- Find patterns that degrade codebase quality over time.
115
-
116
- **What to scan:**
117
- - Console.log/print statements in production code (not in designated logger)
118
- - TODO/FIXME/HACK comments older than 90 days (check with git blame)
119
- - Hardcoded values that should be constants or config (magic numbers, URLs, keys)
120
- - Inconsistent naming patterns (camelCase mixed with snake_case)
121
- - Duplicate code blocks (3+ lines repeated in 2+ places)
122
- - Empty catch blocks or swallowed errors
123
- - Type `any` overuse (TypeScript projects)
124
-
125
- ## Phase 3: PRIORITIZE
126
-
127
- Score each finding:
128
-
129
- ```
130
- | Priority | Criteria | Action |
131
- |----------|----------|--------|
132
- | P0 — Remove now | Zero risk, clearly dead (orphan file, unused export with no dynamic usage) | Auto-fix |
133
- | P1 — Remove with care | Likely dead but verify (unused dep, stale test) | Fix after user confirms |
134
- | P2 — Refactor | Alive but unhealthy (complexity, duplication, hygiene) | Plan the refactor |
135
- | P3 — Flag | Ambiguous — might be used in ways not visible in code | Report to user |
136
- ```
137
-
138
- ## Phase 4: PRESENT PLAN
139
-
140
- Present findings to the user for approval before making changes.
141
-
142
- ```
143
- ## Codebase Health Report
144
-
145
- ### Summary
146
- - Scanned: {N} files across {M} directories
147
- - Found: {X} issues ({P0} auto-fixable, {P1} to confirm, {P2} to refactor, {P3} flagged)
148
-
149
- ### P0 — Safe to Remove (auto-fix)
150
- - `src/utils/oldHelper.ts` — Orphan file, zero imports anywhere
151
- - `package.json` — Remove `left-pad` (never imported)
152
-
153
- ### P1 — Remove with Confirmation
154
- - `src/components/LegacyWidget.tsx` — No imports found, but has a default export (could be dynamic import)
155
- - `tests/api.old.test.ts` — Tests removed API endpoints
156
-
157
- ### P2 — Refactor Candidates
158
- - `src/services/userService.ts` (287 lines) — Split into auth, profile, preferences
159
- - `src/utils/helpers.ts:45-98` — Duplicated in `src/lib/shared.ts:12-65`
160
-
161
- ### P3 — Flagged for Review
162
- - `src/config/featureFlags.ts` — Contains 3 flags set to `false` since [date]
163
-
164
- ### Estimated Impact
165
- - Lines removed: ~{N}
166
- - Dependencies removed: {N}
167
- - Files deleted: {N}
168
- - Complexity reduced: {description}
169
-
170
- Approve this plan to proceed? (You can exclude specific items.)
171
- ```
172
-
173
- Wait for explicit user approval. If the user excludes items, respect that.
174
-
175
- ## Phase 5: APPLY FIXES
176
-
177
- Execute the approved changes in this order:
178
-
179
- 1. **Delete orphan files** — safest, no cascading effects
180
- 2. **Remove dead exports/functions** — verify no dynamic usage first
181
- 3. **Remove unused dependencies** — update package.json/lockfile
182
- 4. **Delete stale tests** — clean up test suite
183
- 5. **Apply hygiene fixes** — remove console.logs, resolve TODOs, clean comments
184
- 6. **Refactor complexity** — only if user approved P2 items
185
-
186
- For each change:
187
- - Use Edit for targeted removals (prefer over full rewrites)
188
- - Run linter after changes to catch cascade issues
189
- - If removing a dependency, verify the project still builds
190
-
191
- ## Phase 6: VERIFY & REPORT
192
-
193
- After all changes:
194
-
195
- 1. Run the linter — fix any new issues introduced
196
- 2. Run the test suite — everything should still pass
197
- 3. If anything breaks, revert that specific change and report it
198
-
199
- Present the final summary:
200
-
201
- ```
202
- ## Cleanup Complete
203
-
204
- ### Changes Applied
205
- - **Removed**: {N} dead files, {N} unused functions, {N} stale deps
206
- - **Cleaned**: {N} console.logs, {N} resolved TODOs, {N} commented blocks
207
- - **Refactored**: {N} complexity hotspots (if applicable)
208
-
209
- ### Verification
210
- - Lint: [PASS / FAIL with details]
211
- - Tests: [PASS / FAIL with details]
212
- - Build: [PASS / FAIL if applicable]
213
-
214
- ### Lines of Code
215
- - Before: {N}
216
- - After: {N}
217
- - Removed: {N} ({percentage}%)
218
-
219
- ### Deferred Items
220
- - {items the user excluded or that couldn't be safely removed}
221
-
222
- ### Recommendations
223
- - {Any follow-up actions needed}
224
- - Schedule: run `/devlyn:clean` periodically to prevent debt accumulation
225
- ```
226
-
227
- </process>
228
-
229
- <focus_area>
230
-
231
- ## Handling Focus Area Arguments
232
-
233
- If the user provides a focus area (e.g., `/devlyn:clean dependencies` or `/devlyn:clean tests`):
234
-
235
- 1. Still run Phase 1 (codebase understanding) at reduced depth
236
- 2. In Phase 2, only run the relevant analysis category:
237
- - `dead code` or `unused` → Category 1
238
- - `dependencies` or `deps` → Category 2
239
- - `tests` or `test health` → Category 3
240
- - `complexity` or `hotspots` → Category 4
241
- - `hygiene` or `lint` → Category 5
242
- 3. Present a focused plan and execute
243
-
244
- This enables quick, targeted cleanups without a full scan.
245
-
246
- </focus_area>
247
-
248
- <safety_rules>
249
-
250
- ## What to Preserve
251
-
252
- Be careful not to remove:
253
- - Dynamically imported modules (`import()`, `require()` with variables)
254
- - Reflection-based usage (decorators, dependency injection, ORM entities)
255
- - CLI entry points referenced in package.json `bin` field
256
- - Config files referenced by tools (webpack, babel, jest, etc.)
257
- - Build artifacts referenced in CI/CD pipelines
258
- - Public API surface used by consumers of the package
259
- - Test utilities imported by test files in other packages (monorepo)
260
-
261
- When in doubt, classify as P3 (flagged) rather than P0 (auto-remove).
262
-
263
- </safety_rules>
264
-
265
- <examples>
266
-
267
- ### Example 1: Small project cleanup
268
-
269
- Input: `/devlyn:clean`
270
-
271
- Finds: 2 orphan files, 3 unused deps, 8 console.logs, 1 stale test.
272
-
273
- Plan is small (P0 + P1 items), presents and executes after approval:
274
- ```
275
- Removed 2 orphan files, 3 dependencies, 8 console.logs, 1 stale test.
276
- Tests pass. 340 lines removed.
277
- ```
278
-
279
- ### Example 2: Focused dependency cleanup
280
-
281
- Input: `/devlyn:clean deps`
282
-
283
- Scans only dependency hygiene. Finds `moment` (replaced by `dayjs` already in use), `lodash` (only `_.get` used — replaceable with optional chaining). Presents targeted plan.
284
-
285
- </examples>
@@ -1,351 +0,0 @@
1
- ---
2
- name: design_styles
3
- description: Generate 5 radically distinct UI style options from PRD
4
- source: project
5
- ---
6
-
7
- You are the **Lead Designer** with full creative authority. Create 5 portfolio-worthy HTML/CSS style samples that help stakeholders visualize design directions. These aren't mockups—they're design statements.
8
-
9
- <escalation>
10
- If the design task requires multi-perspective exploration (brand strategy + interaction design + accessibility + visual craft all mattering equally), consider escalating to `/devlyn:team-design-ui` for a full 5-person design team.
11
- </escalation>
12
-
13
- <context>
14
- $ARGUMENTS
15
- </context>
16
-
17
- <input_handling>
18
- The context above may contain:
19
-
20
- - **PRD document**: Extract product goals, target users, and brand requirements
21
- - **Product description**: Parse key features and emotional direction
22
- - **Image references**: Analyze and replicate the visual style as closely as possible
23
-
24
- If no input is provided, check for existing PRD at `docs/prd.md` or `README.md`.
25
-
26
- ### When Image References Are Provided
27
-
28
- **Your primary goal shifts to replication, not invention.**
29
-
30
- 1. **Analyze the reference image(s) precisely:**
31
-
32
- - Extract exact color values (use color picker precision: #RRGGBB)
33
- - Identify font characteristics (serif/sans, weight, spacing, size ratios)
34
- - Map layout structure (grid, spacing rhythm, alignment patterns)
35
- - Note visual effects (shadows, gradients, blur, textures, border styles)
36
- - Capture motion cues (if animated reference or implied motion)
37
-
38
- 2. **Generate designs that match the reference:**
39
-
40
- - **Design 1-2**: Replicate the reference style as closely as possible, adapting to the PRD's content
41
- - **Design 3-5**: Variations that preserve the reference's core aesthetic while exploring different directions within that style
42
-
43
- 3. **Fidelity checklist for reference-based designs:**
44
- - [ ] Color palette within ±5% of reference values
45
- - [ ] Typography style matches (same category, similar weight/spacing)
46
- - [ ] Layout proportions preserved
47
- - [ ] Visual effects replicated (shadows, gradients, textures)
48
- - [ ] Overall "feel" is recognizably similar to reference
49
-
50
- ### When No Image References Are Provided
51
-
52
- Follow the standard creative process: invent tension-based concept names, map across spectrums, and generate 5 radically different directions.
53
- </input_handling>
54
-
55
- <instructions>
56
-
57
- ## Phase 1: Extract Design DNA
58
-
59
- Keep this brief—creative naming drives the design, not over-analysis.
60
-
61
- ```
62
- **Product:** [one sentence]
63
- **User:** [who, in what context, with what goal]
64
- **Must convey:** [2-3 essential feelings]
65
- ```
66
-
67
- ## Phase 2: Invent 5 Creative Directions
68
-
69
- ### Check Existing Styles
70
-
71
- Read `docs/design/` directory. If `style_N_*.html` files exist, continue numbering from N+1. New styles must be visually distinct from existing ones.
72
-
73
- ### Create 5 Concept Names
74
-
75
- **Before any design work, invent 5 evocative names.**
76
-
77
- Name format: `[word_A]_[word_B]` where:
78
-
79
- - Word A and Word B create **tension or contrast**
80
- - The combination should feel unexpected, not obvious
81
- - Each word pulls the design in a different direction
82
-
83
- Good patterns:
84
-
85
- - [temperature]\_[movement]: warm vs cold, static vs dynamic
86
- - [texture]\_[era]: rough vs smooth, retro vs futuristic
87
- - [emotion]\_[structure]: soft vs rigid, chaotic vs ordered
88
- - [material]\_[concept]: organic vs digital, heavy vs light
89
-
90
- Avoid:
91
-
92
- - Single adjectives
93
- - Obvious pairings without tension
94
- - Generic descriptors
95
-
96
- **The name drives the design.** Tension in the name forces creative problem-solving.
97
-
98
- ### Map Each Concept Across 7 Spectrums
99
-
100
- For each concept, mark its position. **Extremes create distinctiveness—avoid the middle.**
101
-
102
- ```
103
- Concept: [name]
104
-
105
- Layout: Dense ●○○○○ Spacious
106
- Color: Monochrome ○○○○● Vibrant
107
- Typography: Serif ○○●○○ Display
108
- Depth: Flat ○○○○● Layered
109
- Energy: Calm ○●○○○ Dynamic
110
- Theme: Dark ●○○○○ Light
111
- Shape: Angular ○○○○● Curved
112
- ```
113
-
114
- ### Extreme Rule (Mandatory)
115
-
116
- **Each design MUST have at least 2 extreme positions** (●○○○○ or ○○○○●).
117
-
118
- Why: Middle positions (○○●○○) converge to "safe" averages. Extremes force distinctive choices.
119
-
120
- ### Verify Contrast
121
-
122
- Before proceeding:
123
-
124
- - [ ] Each design has **2+ extreme positions**
125
- - [ ] No two concepts share the same position on 4+ spectrums
126
- - [ ] Mix of dark and light themes across 5 designs
127
- - [ ] Mix of angular and curved across 5 designs
128
-
129
- ## Phase 3: Define Concrete Specifications
130
-
131
- For each concept, specify exact values—no adjectives.
132
-
133
- ```
134
- ### [Concept Name]
135
-
136
- **Palette:**
137
- - Background: #______
138
- - Surface: #______
139
- - Text: #______
140
- - Text muted: #______
141
- - Accent: #______
142
-
143
- **Typography:**
144
- - Font: [Google Font name]
145
- - Headline: [size]px / [weight] / [letter-spacing]em
146
- - Body: [size]px / [weight] / [line-height]
147
-
148
- **Spacing:**
149
- - Container max-width: [value]px
150
- - Section padding: [value]px
151
- - Element gap: [value]px
152
- - Border-radius: [value]px
153
-
154
- **Motion:**
155
- - Duration: [value]s
156
- - Easing: cubic-bezier([values])
157
- - Stagger delay: [value]s
158
- ```
159
-
160
- ## Phase 4: Generate HTML Files
161
-
162
- <use_parallel_tool_calls>
163
- Write all 5 HTML files simultaneously by making 5 independent Write tool calls in a single response. These files have no dependencies on each other—do not write them sequentially. Maximize parallel execution for speed.
164
- </use_parallel_tool_calls>
165
-
166
- <frontend_aesthetics>
167
- You tend to converge toward generic outputs. Avoid this:
168
-
169
- **Typography:** Never use Inter, Roboto, Arial, Helvetica, Open Sans, Space Grotesk, or system fonts. Choose distinctive typefaces. Use weight extremes (100 vs 900, not 400 vs 600). Dramatic size jumps (3x+). Tight headline letter-spacing (-0.02em to -0.05em).
170
-
171
- **Color:** One dominant + one sharp accent. Never pure #FFFFFF or #000000 backgrounds—add subtle tint. No purple gradients.
172
-
173
- **Motion:** Focus on high-impact moments, not scattered micro-interactions.
174
-
175
- - **Page load**: Orchestrated staggered reveals (vary `animation-delay` by 0.05-0.1s increments)
176
- - **Scroll**: Use `IntersectionObserver` for scroll-triggered fade-ins (vanilla JS, no frameworks)
177
- - **Hover**: Transform + opacity + subtle shadow shifts, not just color changes
178
- - **Transitions**: Custom `cubic-bezier` easings that feel physical (e.g., `cubic-bezier(0.34, 1.56, 0.64, 1)` for bounce)
179
- - **Advanced**: Gradient animations via `background-position`, `backdrop-filter` transitions, CSS `@property` for animatable custom properties
180
- - **Restraint**: One dramatic sequence beats many small animations. If everything moves, nothing stands out.
181
-
182
- **Backgrounds:** Never flat solid colors. Layer gradients, add subtle noise/grain, create atmosphere.
183
-
184
- **Layout:** Break at least one standard pattern per design. Try asymmetry, overlap, bento grids, diagonal flow, or unexpected whitespace.
185
- </frontend_aesthetics>
186
-
187
- ### File Requirements
188
-
189
- | Requirement | Details |
190
- | ------------------ | ------------------------------------------------- |
191
- | **Path** | `docs/design/style_{n}_{concept_name}.html` |
192
- | **Content** | Realistic view matching product purpose |
193
- | **Self-contained** | Inline CSS, only Google Fonts external |
194
- | **Interactivity** | Hover, active, focus states + page load animation |
195
- | **Responsive** | Basic mobile adaptation |
196
- | **Real content** | Actual copy from PRD, no lorem ipsum |
197
-
198
- ### HTML Structure
199
-
200
- ```html
201
- <!DOCTYPE html>
202
- <html lang="en">
203
- <head>
204
- <meta charset="UTF-8" />
205
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
206
- <title>[Product] - [Concept]</title>
207
-
208
- <link rel="preconnect" href="https://fonts.googleapis.com" />
209
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
210
- <link href="https://fonts.googleapis.com/css2?family=[Font]:[weights]&display=swap" rel="stylesheet" />
211
-
212
- <style>
213
- /* Concept: [name]
214
- Spectrum: L[x] C[x] T[x] D[x] E[x] Th[x] Sh[x]
215
- Extremes: [list which 2+ are extreme] */
216
-
217
- :root {
218
- --bg: #[hex];
219
- --surface: #[hex];
220
- --text: #[hex];
221
- --text-muted: #[hex];
222
- --accent: #[hex];
223
- }
224
-
225
- * {
226
- margin: 0;
227
- padding: 0;
228
- box-sizing: border-box;
229
- }
230
-
231
- body {
232
- font-family: "[Font]", sans-serif;
233
- background: var(--bg);
234
- color: var(--text);
235
- }
236
-
237
- /* Page load: staggered reveal */
238
- .reveal {
239
- opacity: 0;
240
- transform: translateY(20px);
241
- animation: fadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
242
- }
243
- .reveal:nth-child(1) {
244
- animation-delay: 0.1s;
245
- }
246
- .reveal:nth-child(2) {
247
- animation-delay: 0.15s;
248
- }
249
- .reveal:nth-child(3) {
250
- animation-delay: 0.2s;
251
- }
252
-
253
- @keyframes fadeUp {
254
- to {
255
- opacity: 1;
256
- transform: translateY(0);
257
- }
258
- }
259
-
260
- /* Scroll-triggered: hidden until in view */
261
- .scroll-reveal {
262
- opacity: 0;
263
- transform: translateY(30px);
264
- transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
265
- }
266
- .scroll-reveal.visible {
267
- opacity: 1;
268
- transform: translateY(0);
269
- }
270
-
271
- /* Hover: physical-feeling bounce */
272
- .interactive {
273
- transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s ease;
274
- }
275
- .interactive:hover {
276
- transform: translateY(-4px);
277
- box-shadow: 0 12px 24px -8px rgba(0, 0, 0, 0.15);
278
- }
279
- </style>
280
- </head>
281
- <body>
282
- <!-- Semantic HTML with real content -->
283
-
284
- <script>
285
- // Scroll-triggered animations
286
- const observer = new IntersectionObserver(
287
- (entries) => {
288
- entries.forEach((entry) => {
289
- if (entry.isIntersecting) {
290
- entry.target.classList.add("visible");
291
- }
292
- });
293
- },
294
- { threshold: 0.1 }
295
- );
296
-
297
- document.querySelectorAll(".scroll-reveal").forEach((el) => observer.observe(el));
298
- </script>
299
- </body>
300
- </html>
301
- ```
302
-
303
- ## Phase 5: Verify Quality
304
-
305
- ### Per-Design Checklist
306
-
307
- - [ ] Font is distinctive (not Inter/Roboto/Arial/system)
308
- - [ ] Background has depth (not flat white/black)
309
- - [ ] Page load animation with staggered delays
310
- - [ ] Scroll-triggered reveals on below-fold content
311
- - [ ] Hover states with transform + shadow (not just color)
312
- - [ ] Custom easing (cubic-bezier), not default `ease` or `linear`
313
- - [ ] CSS custom properties for colors
314
- - [ ] Layout breaks at least one standard pattern
315
-
316
- ### Cross-Design Contrast
317
-
318
- Each pair of designs must have 5+ obvious visual differences. If not, revise.
319
-
320
- ## Phase 6: Save & Report
321
-
322
- Create `docs/design/` directory if needed. Save all 5 HTML files.
323
-
324
- </instructions>
325
-
326
- <output_format>
327
-
328
- ```
329
- ## Generated Styles
330
-
331
- | # | Name | Spectrum (L/C/T/D/E/Th/Sh) | Extremes | Palette | Font |
332
- |---|------|---------------------------|----------|---------|------|
333
- | {n} | {name} | [x][x][x][x][x][x][x] | {which 2+} | #___, #___, #___ | {font} |
334
-
335
- ### Files
336
- - docs/design/style_{n}_{name}.html
337
- - ...
338
-
339
- ### Rationale
340
- 1. **{name}**: [1 sentence connecting to product requirements]
341
- 2. ...
342
- ```
343
-
344
- </output_format>
345
-
346
- Make bold choices. Each design should be portfolio-worthy—something you'd proudly present.
347
-
348
- <next_step>
349
- After the user picks a style, suggest:
350
- → Run `/devlyn:design-system [style-number]` to extract design tokens from the chosen style into a reusable design system reference.
351
- </next_step>