qualia-framework 2.6.0 → 3.2.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 (321) hide show
  1. package/CLAUDE.md +64 -0
  2. package/README.md +103 -30
  3. package/agents/builder.md +110 -0
  4. package/agents/planner.md +134 -0
  5. package/agents/qa-browser.md +186 -0
  6. package/agents/verifier.md +221 -0
  7. package/bin/cli.js +336 -531
  8. package/bin/install.js +570 -0
  9. package/bin/qualia-ui.js +299 -0
  10. package/bin/state.js +630 -0
  11. package/bin/statusline.js +252 -0
  12. package/guide.md +63 -0
  13. package/hooks/auto-update.js +139 -0
  14. package/hooks/branch-guard.js +47 -0
  15. package/hooks/migration-guard.js +60 -0
  16. package/hooks/pre-compact.js +32 -0
  17. package/hooks/pre-deploy-gate.js +110 -0
  18. package/hooks/pre-push.js +33 -0
  19. package/hooks/session-start.js +170 -0
  20. package/package.json +29 -20
  21. package/rules/design-reference.md +179 -0
  22. package/rules/frontend.md +126 -0
  23. package/skills/qualia/SKILL.md +87 -0
  24. package/skills/qualia-build/SKILL.md +97 -0
  25. package/skills/qualia-debug/SKILL.md +87 -0
  26. package/skills/qualia-design/SKILL.md +93 -0
  27. package/skills/qualia-handoff/SKILL.md +66 -0
  28. package/skills/qualia-idk/SKILL.md +8 -0
  29. package/skills/qualia-learn/SKILL.md +88 -0
  30. package/skills/qualia-new/SKILL.md +323 -0
  31. package/{framework/skills → skills}/qualia-optimize/SKILL.md +1 -1
  32. package/skills/qualia-pause/SKILL.md +63 -0
  33. package/skills/qualia-plan/SKILL.md +101 -0
  34. package/skills/qualia-polish/SKILL.md +157 -0
  35. package/skills/qualia-quick/SKILL.md +37 -0
  36. package/skills/qualia-report/SKILL.md +105 -0
  37. package/skills/qualia-resume/SKILL.md +49 -0
  38. package/skills/qualia-review/SKILL.md +76 -0
  39. package/skills/qualia-ship/SKILL.md +90 -0
  40. package/skills/qualia-skill-new/SKILL.md +167 -0
  41. package/skills/qualia-task/SKILL.md +91 -0
  42. package/skills/qualia-verify/SKILL.md +113 -0
  43. package/templates/DESIGN.md +137 -0
  44. package/templates/plan.md +28 -0
  45. package/templates/project.md +22 -0
  46. package/templates/state.md +27 -0
  47. package/templates/tracking.json +20 -0
  48. package/tests/bin.test.sh +673 -0
  49. package/tests/hooks.test.sh +315 -0
  50. package/tests/state.test.sh +535 -0
  51. package/tests/statusline.test.sh +243 -0
  52. package/bin/collect-metrics.sh +0 -62
  53. package/framework/.claudeignore +0 -51
  54. package/framework/CLAUDE.md +0 -51
  55. package/framework/MCP_SETUP.md +0 -229
  56. package/framework/agents/architecture-strategist.md +0 -53
  57. package/framework/agents/backend-agent.md +0 -150
  58. package/framework/agents/code-simplicity-reviewer.md +0 -86
  59. package/framework/agents/frontend-agent.md +0 -111
  60. package/framework/agents/kieran-typescript-reviewer.md +0 -96
  61. package/framework/agents/performance-oracle.md +0 -111
  62. package/framework/agents/qualia-codebase-mapper.md +0 -761
  63. package/framework/agents/qualia-debugger.md +0 -1204
  64. package/framework/agents/qualia-executor.md +0 -882
  65. package/framework/agents/qualia-integration-checker.md +0 -424
  66. package/framework/agents/qualia-phase-researcher.md +0 -457
  67. package/framework/agents/qualia-plan-checker.md +0 -700
  68. package/framework/agents/qualia-planner.md +0 -1245
  69. package/framework/agents/qualia-project-researcher.md +0 -603
  70. package/framework/agents/qualia-research-synthesizer.md +0 -200
  71. package/framework/agents/qualia-roadmapper.md +0 -606
  72. package/framework/agents/qualia-verifier.md +0 -686
  73. package/framework/agents/red-team-qa.md +0 -130
  74. package/framework/agents/security-auditor.md +0 -72
  75. package/framework/agents/team-orchestrator.md +0 -229
  76. package/framework/agents/teams/framework-audit-team.md +0 -66
  77. package/framework/agents/teams/full-stack-team.md +0 -48
  78. package/framework/agents/teams/optimize-team.md +0 -53
  79. package/framework/agents/teams/review-team.md +0 -70
  80. package/framework/agents/teams/ship-team.md +0 -86
  81. package/framework/agents/test-agent.md +0 -182
  82. package/framework/hooks/auto-format.sh +0 -54
  83. package/framework/hooks/block-env-edit.sh +0 -42
  84. package/framework/hooks/branch-guard.sh +0 -43
  85. package/framework/hooks/confirm-delete.sh +0 -59
  86. package/framework/hooks/migration-validate.sh +0 -77
  87. package/framework/hooks/notification-speak.sh +0 -16
  88. package/framework/hooks/pre-commit.sh +0 -100
  89. package/framework/hooks/pre-compact.sh +0 -56
  90. package/framework/hooks/pre-deploy-gate.sh +0 -160
  91. package/framework/hooks/qualia-colors.sh +0 -32
  92. package/framework/hooks/retention-cleanup.sh +0 -62
  93. package/framework/hooks/save-session-state.sh +0 -185
  94. package/framework/hooks/session-context-loader.sh +0 -96
  95. package/framework/hooks/session-learn.sh +0 -32
  96. package/framework/hooks/skill-announce.sh +0 -123
  97. package/framework/hooks/tool-error-announce.sh +0 -27
  98. package/framework/install.ps1 +0 -323
  99. package/framework/install.sh +0 -313
  100. package/framework/qualia-framework/VERSION +0 -1
  101. package/framework/qualia-framework/assets/qualia-logo.png +0 -0
  102. package/framework/qualia-framework/bin/collect-metrics.sh +0 -67
  103. package/framework/qualia-framework/bin/generate-report-docx.py +0 -429
  104. package/framework/qualia-framework/bin/qualia-tools.js +0 -2201
  105. package/framework/qualia-framework/bin/qualia-tools.test.js +0 -1054
  106. package/framework/qualia-framework/references/checkpoints.md +0 -775
  107. package/framework/qualia-framework/references/completion-checklists.md +0 -359
  108. package/framework/qualia-framework/references/continuation-format.md +0 -249
  109. package/framework/qualia-framework/references/continuation-prompt.md +0 -97
  110. package/framework/qualia-framework/references/decimal-phase-calculation.md +0 -65
  111. package/framework/qualia-framework/references/design-quality.md +0 -56
  112. package/framework/qualia-framework/references/employee-guide.md +0 -167
  113. package/framework/qualia-framework/references/git-integration.md +0 -254
  114. package/framework/qualia-framework/references/git-planning-commit.md +0 -50
  115. package/framework/qualia-framework/references/model-profile-resolution.md +0 -32
  116. package/framework/qualia-framework/references/model-profiles.md +0 -73
  117. package/framework/qualia-framework/references/phase-argument-parsing.md +0 -61
  118. package/framework/qualia-framework/references/planning-config.md +0 -195
  119. package/framework/qualia-framework/references/questioning.md +0 -141
  120. package/framework/qualia-framework/references/tdd.md +0 -263
  121. package/framework/qualia-framework/references/ui-brand.md +0 -160
  122. package/framework/qualia-framework/references/verification-patterns.md +0 -612
  123. package/framework/qualia-framework/templates/DEBUG.md +0 -159
  124. package/framework/qualia-framework/templates/DESIGN.md +0 -81
  125. package/framework/qualia-framework/templates/UAT.md +0 -247
  126. package/framework/qualia-framework/templates/codebase/architecture.md +0 -255
  127. package/framework/qualia-framework/templates/codebase/concerns.md +0 -310
  128. package/framework/qualia-framework/templates/codebase/conventions.md +0 -307
  129. package/framework/qualia-framework/templates/codebase/integrations.md +0 -280
  130. package/framework/qualia-framework/templates/codebase/stack.md +0 -186
  131. package/framework/qualia-framework/templates/codebase/structure.md +0 -285
  132. package/framework/qualia-framework/templates/codebase/testing.md +0 -480
  133. package/framework/qualia-framework/templates/config.json +0 -35
  134. package/framework/qualia-framework/templates/context.md +0 -283
  135. package/framework/qualia-framework/templates/continue-here.md +0 -78
  136. package/framework/qualia-framework/templates/debug-subagent-prompt.md +0 -91
  137. package/framework/qualia-framework/templates/discovery.md +0 -146
  138. package/framework/qualia-framework/templates/lab-notes.md +0 -16
  139. package/framework/qualia-framework/templates/milestone-archive.md +0 -123
  140. package/framework/qualia-framework/templates/milestone.md +0 -115
  141. package/framework/qualia-framework/templates/phase-prompt.md +0 -567
  142. package/framework/qualia-framework/templates/planner-subagent-prompt.md +0 -117
  143. package/framework/qualia-framework/templates/project.md +0 -184
  144. package/framework/qualia-framework/templates/projects/ai-agent.md +0 -156
  145. package/framework/qualia-framework/templates/projects/mobile-app.md +0 -181
  146. package/framework/qualia-framework/templates/projects/voice-agent.md +0 -134
  147. package/framework/qualia-framework/templates/projects/website.md +0 -137
  148. package/framework/qualia-framework/templates/requirements.md +0 -231
  149. package/framework/qualia-framework/templates/research-project/ARCHITECTURE.md +0 -204
  150. package/framework/qualia-framework/templates/research-project/FEATURES.md +0 -147
  151. package/framework/qualia-framework/templates/research-project/PITFALLS.md +0 -200
  152. package/framework/qualia-framework/templates/research-project/STACK.md +0 -120
  153. package/framework/qualia-framework/templates/research-project/SUMMARY.md +0 -170
  154. package/framework/qualia-framework/templates/research.md +0 -552
  155. package/framework/qualia-framework/templates/roadmap.md +0 -206
  156. package/framework/qualia-framework/templates/state.md +0 -179
  157. package/framework/qualia-framework/templates/summary-complex.md +0 -59
  158. package/framework/qualia-framework/templates/summary-minimal.md +0 -41
  159. package/framework/qualia-framework/templates/summary-standard.md +0 -48
  160. package/framework/qualia-framework/templates/summary.md +0 -246
  161. package/framework/qualia-framework/templates/user-setup.md +0 -311
  162. package/framework/qualia-framework/templates/verification-report.md +0 -322
  163. package/framework/qualia-framework/workflows/add-phase.md +0 -179
  164. package/framework/qualia-framework/workflows/add-todo.md +0 -157
  165. package/framework/qualia-framework/workflows/audit-milestone.md +0 -241
  166. package/framework/qualia-framework/workflows/check-todos.md +0 -176
  167. package/framework/qualia-framework/workflows/complete-milestone.md +0 -858
  168. package/framework/qualia-framework/workflows/diagnose-issues.md +0 -219
  169. package/framework/qualia-framework/workflows/discovery-phase.md +0 -289
  170. package/framework/qualia-framework/workflows/discuss-phase.md +0 -534
  171. package/framework/qualia-framework/workflows/execute-phase.md +0 -559
  172. package/framework/qualia-framework/workflows/execute-plan.md +0 -438
  173. package/framework/qualia-framework/workflows/help.md +0 -470
  174. package/framework/qualia-framework/workflows/insert-phase.md +0 -220
  175. package/framework/qualia-framework/workflows/list-phase-assumptions.md +0 -178
  176. package/framework/qualia-framework/workflows/map-codebase.md +0 -327
  177. package/framework/qualia-framework/workflows/new-milestone.md +0 -363
  178. package/framework/qualia-framework/workflows/new-project.md +0 -982
  179. package/framework/qualia-framework/workflows/pause-work.md +0 -122
  180. package/framework/qualia-framework/workflows/plan-milestone-gaps.md +0 -256
  181. package/framework/qualia-framework/workflows/plan-phase.md +0 -422
  182. package/framework/qualia-framework/workflows/progress.md +0 -389
  183. package/framework/qualia-framework/workflows/quick.md +0 -252
  184. package/framework/qualia-framework/workflows/remove-phase.md +0 -326
  185. package/framework/qualia-framework/workflows/research-phase.md +0 -74
  186. package/framework/qualia-framework/workflows/resume-project.md +0 -306
  187. package/framework/qualia-framework/workflows/set-profile.md +0 -80
  188. package/framework/qualia-framework/workflows/settings.md +0 -145
  189. package/framework/qualia-framework/workflows/transition.md +0 -556
  190. package/framework/qualia-framework/workflows/update.md +0 -197
  191. package/framework/qualia-framework/workflows/verify-phase.md +0 -195
  192. package/framework/qualia-framework/workflows/verify-work.md +0 -625
  193. package/framework/rules/context7.md +0 -14
  194. package/framework/rules/frontend.md +0 -33
  195. package/framework/rules/speed.md +0 -23
  196. package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
  197. package/framework/scripts/apply-retention.sh +0 -120
  198. package/framework/scripts/bootstrap-pop-os.sh +0 -354
  199. package/framework/scripts/claude-voice +0 -13
  200. package/framework/scripts/cleanup.sh +0 -131
  201. package/framework/scripts/cowork-mode.sh +0 -141
  202. package/framework/scripts/generate-project-claude-md.sh +0 -153
  203. package/framework/scripts/load-test-webhook.js +0 -172
  204. package/framework/scripts/say.py +0 -236
  205. package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +0 -167
  206. package/framework/scripts/showcase-video-recorder/playwright-helpers.js +0 -216
  207. package/framework/scripts/speak.py +0 -55
  208. package/framework/scripts/speak.sh +0 -18
  209. package/framework/scripts/status.sh +0 -138
  210. package/framework/scripts/sync-to-framework.sh +0 -65
  211. package/framework/scripts/voice-hotkey.py +0 -227
  212. package/framework/scripts/voice-input.sh +0 -51
  213. package/framework/skills/animate/SKILL.md +0 -202
  214. package/framework/skills/bolder/SKILL.md +0 -144
  215. package/framework/skills/browser-qa/SKILL.md +0 -536
  216. package/framework/skills/clarify/SKILL.md +0 -179
  217. package/framework/skills/client-handoff/SKILL.md +0 -135
  218. package/framework/skills/collab-onboard/SKILL.md +0 -111
  219. package/framework/skills/colorize/SKILL.md +0 -170
  220. package/framework/skills/critique/SKILL.md +0 -126
  221. package/framework/skills/deep-research/SKILL.md +0 -240
  222. package/framework/skills/delight/SKILL.md +0 -329
  223. package/framework/skills/deploy/SKILL.md +0 -261
  224. package/framework/skills/deploy-verify/SKILL.md +0 -377
  225. package/framework/skills/deploy-verify/scripts/canary-check.sh +0 -206
  226. package/framework/skills/deploy-verify/scripts/check-console-errors.js +0 -147
  227. package/framework/skills/deploy-verify/scripts/check-cwv.js +0 -139
  228. package/framework/skills/deploy-verify/scripts/project-detect.sh +0 -84
  229. package/framework/skills/deploy-verify/scripts/verify.sh +0 -548
  230. package/framework/skills/design-quieter/SKILL.md +0 -130
  231. package/framework/skills/distill/SKILL.md +0 -149
  232. package/framework/skills/docs-lookup/SKILL.md +0 -79
  233. package/framework/skills/fcm-notifications/SKILL.md +0 -125
  234. package/framework/skills/financial-ledger/SKILL.md +0 -1039
  235. package/framework/skills/frontend-master/NOTICE.md +0 -4
  236. package/framework/skills/frontend-master/SKILL.md +0 -127
  237. package/framework/skills/frontend-master/reference/color-and-contrast.md +0 -132
  238. package/framework/skills/frontend-master/reference/interaction-design.md +0 -123
  239. package/framework/skills/frontend-master/reference/motion-design.md +0 -99
  240. package/framework/skills/frontend-master/reference/responsive-design.md +0 -114
  241. package/framework/skills/frontend-master/reference/spatial-design.md +0 -100
  242. package/framework/skills/frontend-master/reference/typography.md +0 -131
  243. package/framework/skills/frontend-master/reference/ux-writing.md +0 -107
  244. package/framework/skills/harden/SKILL.md +0 -357
  245. package/framework/skills/i18n-rtl/SKILL.md +0 -752
  246. package/framework/skills/learn/SKILL.md +0 -95
  247. package/framework/skills/memory/SKILL.md +0 -50
  248. package/framework/skills/mobile-expo/SKILL.md +0 -977
  249. package/framework/skills/mobile-expo/references/store-checklist.md +0 -550
  250. package/framework/skills/nestjs-backend/README.md +0 -73
  251. package/framework/skills/nestjs-backend/SKILL.md +0 -446
  252. package/framework/skills/nestjs-backend/references/templates.md +0 -1173
  253. package/framework/skills/normalize/SKILL.md +0 -79
  254. package/framework/skills/onboard/SKILL.md +0 -242
  255. package/framework/skills/openrouter-agent/SKILL.md +0 -922
  256. package/framework/skills/polish/SKILL.md +0 -209
  257. package/framework/skills/pr/SKILL.md +0 -66
  258. package/framework/skills/qualia/SKILL.md +0 -199
  259. package/framework/skills/qualia-add-todo/SKILL.md +0 -68
  260. package/framework/skills/qualia-audit-milestone/SKILL.md +0 -95
  261. package/framework/skills/qualia-check-todos/SKILL.md +0 -55
  262. package/framework/skills/qualia-complete-milestone/SKILL.md +0 -134
  263. package/framework/skills/qualia-debug/SKILL.md +0 -149
  264. package/framework/skills/qualia-design/SKILL.md +0 -203
  265. package/framework/skills/qualia-discuss-phase/SKILL.md +0 -72
  266. package/framework/skills/qualia-evolve/SKILL.md +0 -200
  267. package/framework/skills/qualia-execute-phase/SKILL.md +0 -89
  268. package/framework/skills/qualia-framework-audit/SKILL.md +0 -604
  269. package/framework/skills/qualia-guide/SKILL.md +0 -32
  270. package/framework/skills/qualia-help/SKILL.md +0 -114
  271. package/framework/skills/qualia-idk/SKILL.md +0 -352
  272. package/framework/skills/qualia-list-phase-assumptions/SKILL.md +0 -67
  273. package/framework/skills/qualia-new-milestone/SKILL.md +0 -72
  274. package/framework/skills/qualia-new-project/SKILL.md +0 -232
  275. package/framework/skills/qualia-pause-work/SKILL.md +0 -96
  276. package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +0 -57
  277. package/framework/skills/qualia-plan-phase/SKILL.md +0 -104
  278. package/framework/skills/qualia-production-check/SKILL.md +0 -0
  279. package/framework/skills/qualia-progress/SKILL.md +0 -53
  280. package/framework/skills/qualia-quick/SKILL.md +0 -89
  281. package/framework/skills/qualia-report/SKILL.md +0 -166
  282. package/framework/skills/qualia-research-phase/SKILL.md +0 -88
  283. package/framework/skills/qualia-resume-work/SKILL.md +0 -62
  284. package/framework/skills/qualia-review/SKILL.md +0 -263
  285. package/framework/skills/qualia-start/SKILL.md +0 -161
  286. package/framework/skills/qualia-verify-work/SKILL.md +0 -132
  287. package/framework/skills/rag/SKILL.md +0 -750
  288. package/framework/skills/responsive/SKILL.md +0 -231
  289. package/framework/skills/retro/SKILL.md +0 -284
  290. package/framework/skills/sakani-conventions/SKILL.md +0 -136
  291. package/framework/skills/sakani-conventions/evals/evals.json +0 -23
  292. package/framework/skills/sakani-conventions/references/entities.md +0 -365
  293. package/framework/skills/sakani-conventions/references/error-codes.md +0 -95
  294. package/framework/skills/seo-master/SKILL.md +0 -490
  295. package/framework/skills/seo-master/references/checklist.md +0 -199
  296. package/framework/skills/seo-master/references/structured-data.md +0 -609
  297. package/framework/skills/ship/SKILL.md +0 -239
  298. package/framework/skills/stack-researcher/SKILL.md +0 -215
  299. package/framework/skills/status/SKILL.md +0 -154
  300. package/framework/skills/status/scripts/health-check.sh +0 -562
  301. package/framework/skills/subscription-payments/SKILL.md +0 -250
  302. package/framework/skills/supabase/SKILL.md +0 -973
  303. package/framework/skills/supabase/references/templates.md +0 -159
  304. package/framework/skills/team/SKILL.md +0 -67
  305. package/framework/skills/test-runner/SKILL.md +0 -202
  306. package/framework/skills/voice-agent/SKILL.md +0 -1312
  307. package/framework/skills/zoho-workflow/SKILL.md +0 -51
  308. package/framework/statusline-command.sh +0 -117
  309. package/framework/teams/default/inboxes/plan-04.json +0 -9
  310. package/framework/teams/review-team.md +0 -75
  311. package/framework/teams/ship-team.md +0 -86
  312. package/profiles/fawzi.json +0 -16
  313. package/profiles/hasan.json +0 -16
  314. package/profiles/moayad.json +0 -16
  315. package/templates/CLAUDE-owner.md +0 -52
  316. package/templates/CLAUDE.md.hbs +0 -58
  317. package/templates/env.claude.template +0 -12
  318. package/templates/settings.json +0 -172
  319. package/uninstall.sh +0 -90
  320. /package/{framework/rules → rules}/deployment.md +0 -0
  321. /package/{framework/rules → rules}/security.md +0 -0
@@ -1,612 +0,0 @@
1
- # Verification Patterns
2
-
3
- How to verify different types of artifacts are real implementations, not stubs or placeholders.
4
-
5
- <core_principle>
6
- **Existence ≠ Implementation**
7
-
8
- A file existing does not mean the feature works. Verification must check:
9
- 1. **Exists** - File is present at expected path
10
- 2. **Substantive** - Content is real implementation, not placeholder
11
- 3. **Wired** - Connected to the rest of the system
12
- 4. **Functional** - Actually works when invoked
13
-
14
- Levels 1-3 can be checked programmatically. Level 4 often requires human verification.
15
- </core_principle>
16
-
17
- <stub_detection>
18
-
19
- ## Universal Stub Patterns
20
-
21
- These patterns indicate placeholder code regardless of file type:
22
-
23
- **Comment-based stubs:**
24
- ```bash
25
- # Grep patterns for stub comments
26
- grep -E "(TODO|FIXME|XXX|HACK|PLACEHOLDER)" "$file"
27
- grep -E "implement|add later|coming soon|will be" "$file" -i
28
- grep -E "// \.\.\.|/\* \.\.\. \*/|# \.\.\." "$file"
29
- ```
30
-
31
- **Placeholder text in output:**
32
- ```bash
33
- # UI placeholder patterns
34
- grep -E "placeholder|lorem ipsum|coming soon|under construction" "$file" -i
35
- grep -E "sample|example|test data|dummy" "$file" -i
36
- grep -E "\[.*\]|<.*>|\{.*\}" "$file" # Template brackets left in
37
- ```
38
-
39
- **Empty or trivial implementations:**
40
- ```bash
41
- # Functions that do nothing
42
- grep -E "return null|return undefined|return \{\}|return \[\]" "$file"
43
- grep -E "pass$|\.\.\.|\bnothing\b" "$file"
44
- grep -E "console\.(log|warn|error).*only" "$file" # Log-only functions
45
- ```
46
-
47
- **Hardcoded values where dynamic expected:**
48
- ```bash
49
- # Hardcoded IDs, counts, or content
50
- grep -E "id.*=.*['\"].*['\"]" "$file" # Hardcoded string IDs
51
- grep -E "count.*=.*\d+|length.*=.*\d+" "$file" # Hardcoded counts
52
- grep -E "\\\$\d+\.\d{2}|\d+ items" "$file" # Hardcoded display values
53
- ```
54
-
55
- </stub_detection>
56
-
57
- <react_components>
58
-
59
- ## React/Next.js Components
60
-
61
- **Existence check:**
62
- ```bash
63
- # File exists and exports component
64
- [ -f "$component_path" ] && grep -E "export (default |)function|export const.*=.*\(" "$component_path"
65
- ```
66
-
67
- **Substantive check:**
68
- ```bash
69
- # Returns actual JSX, not placeholder
70
- grep -E "return.*<" "$component_path" | grep -v "return.*null" | grep -v "placeholder" -i
71
-
72
- # Has meaningful content (not just wrapper div)
73
- grep -E "<[A-Z][a-zA-Z]+|className=|onClick=|onChange=" "$component_path"
74
-
75
- # Uses props or state (not static)
76
- grep -E "props\.|useState|useEffect|useContext|\{.*\}" "$component_path"
77
- ```
78
-
79
- **Stub patterns specific to React:**
80
- ```javascript
81
- // RED FLAGS - These are stubs:
82
- return <div>Component</div>
83
- return <div>Placeholder</div>
84
- return <div>{/* TODO */}</div>
85
- return <p>Coming soon</p>
86
- return null
87
- return <></>
88
-
89
- // Also stubs - empty handlers:
90
- onClick={() => {}}
91
- onChange={() => console.log('clicked')}
92
- onSubmit={(e) => e.preventDefault()} // Only prevents default, does nothing
93
- ```
94
-
95
- **Wiring check:**
96
- ```bash
97
- # Component imports what it needs
98
- grep -E "^import.*from" "$component_path"
99
-
100
- # Props are actually used (not just received)
101
- # Look for destructuring or props.X usage
102
- grep -E "\{ .* \}.*props|\bprops\.[a-zA-Z]+" "$component_path"
103
-
104
- # API calls exist (for data-fetching components)
105
- grep -E "fetch\(|axios\.|useSWR|useQuery|getServerSideProps|getStaticProps" "$component_path"
106
- ```
107
-
108
- **Functional verification (human required):**
109
- - Does the component render visible content?
110
- - Do interactive elements respond to clicks?
111
- - Does data load and display?
112
- - Do error states show appropriately?
113
-
114
- </react_components>
115
-
116
- <api_routes>
117
-
118
- ## API Routes (Next.js App Router / Express / etc.)
119
-
120
- **Existence check:**
121
- ```bash
122
- # Route file exists
123
- [ -f "$route_path" ]
124
-
125
- # Exports HTTP method handlers (Next.js App Router)
126
- grep -E "export (async )?(function|const) (GET|POST|PUT|PATCH|DELETE)" "$route_path"
127
-
128
- # Or Express-style handlers
129
- grep -E "\.(get|post|put|patch|delete)\(" "$route_path"
130
- ```
131
-
132
- **Substantive check:**
133
- ```bash
134
- # Has actual logic, not just return statement
135
- wc -l "$route_path" # More than 10-15 lines suggests real implementation
136
-
137
- # Interacts with data source
138
- grep -E "prisma\.|db\.|mongoose\.|sql|query|find|create|update|delete" "$route_path" -i
139
-
140
- # Has error handling
141
- grep -E "try|catch|throw|error|Error" "$route_path"
142
-
143
- # Returns meaningful response
144
- grep -E "Response\.json|res\.json|res\.send|return.*\{" "$route_path" | grep -v "message.*not implemented" -i
145
- ```
146
-
147
- **Stub patterns specific to API routes:**
148
- ```typescript
149
- // RED FLAGS - These are stubs:
150
- export async function POST() {
151
- return Response.json({ message: "Not implemented" })
152
- }
153
-
154
- export async function GET() {
155
- return Response.json([]) // Empty array with no DB query
156
- }
157
-
158
- export async function PUT() {
159
- return new Response() // Empty response
160
- }
161
-
162
- // Console log only:
163
- export async function POST(req) {
164
- console.log(await req.json())
165
- return Response.json({ ok: true })
166
- }
167
- ```
168
-
169
- **Wiring check:**
170
- ```bash
171
- # Imports database/service clients
172
- grep -E "^import.*prisma|^import.*db|^import.*client" "$route_path"
173
-
174
- # Actually uses request body (for POST/PUT)
175
- grep -E "req\.json\(\)|req\.body|request\.json\(\)" "$route_path"
176
-
177
- # Validates input (not just trusting request)
178
- grep -E "schema\.parse|validate|zod|yup|joi" "$route_path"
179
- ```
180
-
181
- **Functional verification (human or automated):**
182
- - Does GET return real data from database?
183
- - Does POST actually create a record?
184
- - Does error response have correct status code?
185
- - Are auth checks actually enforced?
186
-
187
- </api_routes>
188
-
189
- <database_schema>
190
-
191
- ## Database Schema (Prisma / Drizzle / SQL)
192
-
193
- **Existence check:**
194
- ```bash
195
- # Schema file exists
196
- [ -f "prisma/schema.prisma" ] || [ -f "drizzle/schema.ts" ] || [ -f "src/db/schema.sql" ]
197
-
198
- # Model/table is defined
199
- grep -E "^model $model_name|CREATE TABLE $table_name|export const $table_name" "$schema_path"
200
- ```
201
-
202
- **Substantive check:**
203
- ```bash
204
- # Has expected fields (not just id)
205
- grep -A 20 "model $model_name" "$schema_path" | grep -E "^\s+\w+\s+\w+"
206
-
207
- # Has relationships if expected
208
- grep -E "@relation|REFERENCES|FOREIGN KEY" "$schema_path"
209
-
210
- # Has appropriate field types (not all String)
211
- grep -A 20 "model $model_name" "$schema_path" | grep -E "Int|DateTime|Boolean|Float|Decimal|Json"
212
- ```
213
-
214
- **Stub patterns specific to schemas:**
215
- ```prisma
216
- // RED FLAGS - These are stubs:
217
- model User {
218
- id String @id
219
- // TODO: add fields
220
- }
221
-
222
- model Message {
223
- id String @id
224
- content String // Only one real field
225
- }
226
-
227
- // Missing critical fields:
228
- model Order {
229
- id String @id
230
- // No: userId, items, total, status, createdAt
231
- }
232
- ```
233
-
234
- **Wiring check:**
235
- ```bash
236
- # Migrations exist and are applied
237
- ls prisma/migrations/ 2>/dev/null | wc -l # Should be > 0
238
- npx prisma migrate status 2>/dev/null | grep -v "pending"
239
-
240
- # Client is generated
241
- [ -d "node_modules/.prisma/client" ]
242
- ```
243
-
244
- **Functional verification:**
245
- ```bash
246
- # Can query the table (automated)
247
- npx prisma db execute --stdin <<< "SELECT COUNT(*) FROM $table_name"
248
- ```
249
-
250
- </database_schema>
251
-
252
- <hooks_utilities>
253
-
254
- ## Custom Hooks and Utilities
255
-
256
- **Existence check:**
257
- ```bash
258
- # File exists and exports function
259
- [ -f "$hook_path" ] && grep -E "export (default )?(function|const)" "$hook_path"
260
- ```
261
-
262
- **Substantive check:**
263
- ```bash
264
- # Hook uses React hooks (for custom hooks)
265
- grep -E "useState|useEffect|useCallback|useMemo|useRef|useContext" "$hook_path"
266
-
267
- # Has meaningful return value
268
- grep -E "return \{|return \[" "$hook_path"
269
-
270
- # More than trivial length
271
- [ $(wc -l < "$hook_path") -gt 10 ]
272
- ```
273
-
274
- **Stub patterns specific to hooks:**
275
- ```typescript
276
- // RED FLAGS - These are stubs:
277
- export function useAuth() {
278
- return { user: null, login: () => {}, logout: () => {} }
279
- }
280
-
281
- export function useCart() {
282
- const [items, setItems] = useState([])
283
- return { items, addItem: () => console.log('add'), removeItem: () => {} }
284
- }
285
-
286
- // Hardcoded return:
287
- export function useUser() {
288
- return { name: "Test User", email: "test@example.com" }
289
- }
290
- ```
291
-
292
- **Wiring check:**
293
- ```bash
294
- # Hook is actually imported somewhere
295
- grep -r "import.*$hook_name" src/ --include="*.tsx" --include="*.ts" | grep -v "$hook_path"
296
-
297
- # Hook is actually called
298
- grep -r "$hook_name()" src/ --include="*.tsx" --include="*.ts" | grep -v "$hook_path"
299
- ```
300
-
301
- </hooks_utilities>
302
-
303
- <environment_config>
304
-
305
- ## Environment Variables and Configuration
306
-
307
- **Existence check:**
308
- ```bash
309
- # .env file exists
310
- [ -f ".env" ] || [ -f ".env.local" ]
311
-
312
- # Required variable is defined
313
- grep -E "^$VAR_NAME=" .env .env.local 2>/dev/null
314
- ```
315
-
316
- **Substantive check:**
317
- ```bash
318
- # Variable has actual value (not placeholder)
319
- grep -E "^$VAR_NAME=.+" .env .env.local 2>/dev/null | grep -v "your-.*-here|xxx|placeholder|TODO" -i
320
-
321
- # Value looks valid for type:
322
- # - URLs should start with http
323
- # - Keys should be long enough
324
- # - Booleans should be true/false
325
- ```
326
-
327
- **Stub patterns specific to env:**
328
- ```bash
329
- # RED FLAGS - These are stubs:
330
- DATABASE_URL=your-database-url-here
331
- STRIPE_SECRET_KEY=sk_test_xxx
332
- API_KEY=placeholder
333
- NEXT_PUBLIC_API_URL=http://localhost:3000 # Still pointing to localhost in prod
334
- ```
335
-
336
- **Wiring check:**
337
- ```bash
338
- # Variable is actually used in code
339
- grep -r "process\.env\.$VAR_NAME|env\.$VAR_NAME" src/ --include="*.ts" --include="*.tsx"
340
-
341
- # Variable is in validation schema (if using zod/etc for env)
342
- grep -E "$VAR_NAME" src/env.ts src/env.mjs 2>/dev/null
343
- ```
344
-
345
- </environment_config>
346
-
347
- <wiring_verification>
348
-
349
- ## Wiring Verification Patterns
350
-
351
- Wiring verification checks that components actually communicate. This is where most stubs hide.
352
-
353
- ### Pattern: Component → API
354
-
355
- **Check:** Does the component actually call the API?
356
-
357
- ```bash
358
- # Find the fetch/axios call
359
- grep -E "fetch\(['\"].*$api_path|axios\.(get|post).*$api_path" "$component_path"
360
-
361
- # Verify it's not commented out
362
- grep -E "fetch\(|axios\." "$component_path" | grep -v "^.*//.*fetch"
363
-
364
- # Check the response is used
365
- grep -E "await.*fetch|\.then\(|setData|setState" "$component_path"
366
- ```
367
-
368
- **Red flags:**
369
- ```typescript
370
- // Fetch exists but response ignored:
371
- fetch('/api/messages') // No await, no .then, no assignment
372
-
373
- // Fetch in comment:
374
- // fetch('/api/messages').then(r => r.json()).then(setMessages)
375
-
376
- // Fetch to wrong endpoint:
377
- fetch('/api/message') // Typo - should be /api/messages
378
- ```
379
-
380
- ### Pattern: API → Database
381
-
382
- **Check:** Does the API route actually query the database?
383
-
384
- ```bash
385
- # Find the database call
386
- grep -E "prisma\.$model|db\.query|Model\.find" "$route_path"
387
-
388
- # Verify it's awaited
389
- grep -E "await.*prisma|await.*db\." "$route_path"
390
-
391
- # Check result is returned
392
- grep -E "return.*json.*data|res\.json.*result" "$route_path"
393
- ```
394
-
395
- **Red flags:**
396
- ```typescript
397
- // Query exists but result not returned:
398
- await prisma.message.findMany()
399
- return Response.json({ ok: true }) // Returns static, not query result
400
-
401
- // Query not awaited:
402
- const messages = prisma.message.findMany() // Missing await
403
- return Response.json(messages) // Returns Promise, not data
404
- ```
405
-
406
- ### Pattern: Form → Handler
407
-
408
- **Check:** Does the form submission actually do something?
409
-
410
- ```bash
411
- # Find onSubmit handler
412
- grep -E "onSubmit=\{|handleSubmit" "$component_path"
413
-
414
- # Check handler has content
415
- grep -A 10 "onSubmit.*=" "$component_path" | grep -E "fetch|axios|mutate|dispatch"
416
-
417
- # Verify not just preventDefault
418
- grep -A 5 "onSubmit" "$component_path" | grep -v "only.*preventDefault" -i
419
- ```
420
-
421
- **Red flags:**
422
- ```typescript
423
- // Handler only prevents default:
424
- onSubmit={(e) => e.preventDefault()}
425
-
426
- // Handler only logs:
427
- const handleSubmit = (data) => {
428
- console.log(data)
429
- }
430
-
431
- // Handler is empty:
432
- onSubmit={() => {}}
433
- ```
434
-
435
- ### Pattern: State → Render
436
-
437
- **Check:** Does the component render state, not hardcoded content?
438
-
439
- ```bash
440
- # Find state usage in JSX
441
- grep -E "\{.*messages.*\}|\{.*data.*\}|\{.*items.*\}" "$component_path"
442
-
443
- # Check map/render of state
444
- grep -E "\.map\(|\.filter\(|\.reduce\(" "$component_path"
445
-
446
- # Verify dynamic content
447
- grep -E "\{[a-zA-Z_]+\." "$component_path" # Variable interpolation
448
- ```
449
-
450
- **Red flags:**
451
- ```tsx
452
- // Hardcoded instead of state:
453
- return <div>
454
- <p>Message 1</p>
455
- <p>Message 2</p>
456
- </div>
457
-
458
- // State exists but not rendered:
459
- const [messages, setMessages] = useState([])
460
- return <div>No messages</div> // Always shows "no messages"
461
-
462
- // Wrong state rendered:
463
- const [messages, setMessages] = useState([])
464
- return <div>{otherData.map(...)}</div> // Uses different data
465
- ```
466
-
467
- </wiring_verification>
468
-
469
- <verification_checklist>
470
-
471
- ## Quick Verification Checklist
472
-
473
- For each artifact type, run through this checklist:
474
-
475
- ### Component Checklist
476
- - [ ] File exists at expected path
477
- - [ ] Exports a function/const component
478
- - [ ] Returns JSX (not null/empty)
479
- - [ ] No placeholder text in render
480
- - [ ] Uses props or state (not static)
481
- - [ ] Event handlers have real implementations
482
- - [ ] Imports resolve correctly
483
- - [ ] Used somewhere in the app
484
-
485
- ### API Route Checklist
486
- - [ ] File exists at expected path
487
- - [ ] Exports HTTP method handlers
488
- - [ ] Handlers have more than 5 lines
489
- - [ ] Queries database or service
490
- - [ ] Returns meaningful response (not empty/placeholder)
491
- - [ ] Has error handling
492
- - [ ] Validates input
493
- - [ ] Called from frontend
494
-
495
- ### Schema Checklist
496
- - [ ] Model/table defined
497
- - [ ] Has all expected fields
498
- - [ ] Fields have appropriate types
499
- - [ ] Relationships defined if needed
500
- - [ ] Migrations exist and applied
501
- - [ ] Client generated
502
-
503
- ### Hook/Utility Checklist
504
- - [ ] File exists at expected path
505
- - [ ] Exports function
506
- - [ ] Has meaningful implementation (not empty returns)
507
- - [ ] Used somewhere in the app
508
- - [ ] Return values consumed
509
-
510
- ### Wiring Checklist
511
- - [ ] Component → API: fetch/axios call exists and uses response
512
- - [ ] API → Database: query exists and result returned
513
- - [ ] Form → Handler: onSubmit calls API/mutation
514
- - [ ] State → Render: state variables appear in JSX
515
-
516
- </verification_checklist>
517
-
518
- <automated_verification_script>
519
-
520
- ## Automated Verification Approach
521
-
522
- For the verification subagent, use this pattern:
523
-
524
- ```bash
525
- # 1. Check existence
526
- check_exists() {
527
- [ -f "$1" ] && echo "EXISTS: $1" || echo "MISSING: $1"
528
- }
529
-
530
- # 2. Check for stub patterns
531
- check_stubs() {
532
- local file="$1"
533
- local stubs=$(grep -c -E "TODO|FIXME|placeholder|not implemented" "$file" 2>/dev/null || echo 0)
534
- [ "$stubs" -gt 0 ] && echo "STUB_PATTERNS: $stubs in $file"
535
- }
536
-
537
- # 3. Check wiring (component calls API)
538
- check_wiring() {
539
- local component="$1"
540
- local api_path="$2"
541
- grep -q "$api_path" "$component" && echo "WIRED: $component → $api_path" || echo "NOT_WIRED: $component → $api_path"
542
- }
543
-
544
- # 4. Check substantive (more than N lines, has expected patterns)
545
- check_substantive() {
546
- local file="$1"
547
- local min_lines="$2"
548
- local pattern="$3"
549
- local lines=$(wc -l < "$file" 2>/dev/null || echo 0)
550
- local has_pattern=$(grep -c -E "$pattern" "$file" 2>/dev/null || echo 0)
551
- [ "$lines" -ge "$min_lines" ] && [ "$has_pattern" -gt 0 ] && echo "SUBSTANTIVE: $file" || echo "THIN: $file ($lines lines, $has_pattern matches)"
552
- }
553
- ```
554
-
555
- Run these checks against each must-have artifact. Aggregate results into VERIFICATION.md.
556
-
557
- </automated_verification_script>
558
-
559
- <human_verification_triggers>
560
-
561
- ## When to Require Human Verification
562
-
563
- Some things can't be verified programmatically. Flag these for human testing:
564
-
565
- **Always human:**
566
- - Visual appearance (does it look right?)
567
- - User flow completion (can you actually do the thing?)
568
- - Real-time behavior (WebSocket, SSE)
569
- - External service integration (Stripe, email sending)
570
- - Error message clarity (is the message helpful?)
571
- - Performance feel (does it feel fast?)
572
-
573
- **Human if uncertain:**
574
- - Complex wiring that grep can't trace
575
- - Dynamic behavior depending on state
576
- - Edge cases and error states
577
- - Mobile responsiveness
578
- - Accessibility
579
-
580
- **Format for human verification request:**
581
- ```markdown
582
- ## Human Verification Required
583
-
584
- ### 1. Chat message sending
585
- **Test:** Type a message and click Send
586
- **Expected:** Message appears in list, input clears
587
- **Check:** Does message persist after refresh?
588
-
589
- ### 2. Error handling
590
- **Test:** Disconnect network, try to send
591
- **Expected:** Error message appears, message not lost
592
- **Check:** Can retry after reconnect?
593
- ```
594
-
595
- </human_verification_triggers>
596
-
597
- <checkpoint_automation_reference>
598
-
599
- ## Pre-Checkpoint Automation
600
-
601
- For automation-first checkpoint patterns, server lifecycle management, CLI installation handling, and error recovery protocols, see:
602
-
603
- **@/home/qualia/.claude/qualia-framework/references/checkpoints.md** → `<automation_reference>` section
604
-
605
- Key principles:
606
- - Claude sets up verification environment BEFORE presenting checkpoints
607
- - Users never run CLI commands (visit URLs only)
608
- - Server lifecycle: start before checkpoint, handle port conflicts, keep running for duration
609
- - CLI installation: auto-install where safe, checkpoint for user choice otherwise
610
- - Error handling: fix broken environment before checkpoint, never present checkpoint with failed setup
611
-
612
- </checkpoint_automation_reference>