qualia-framework 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 (261) hide show
  1. package/README.md +50 -0
  2. package/bin/cli.js +519 -0
  3. package/framework/agents/architecture-strategist.md +53 -0
  4. package/framework/agents/backend-agent.md +150 -0
  5. package/framework/agents/code-simplicity-reviewer.md +86 -0
  6. package/framework/agents/frontend-agent.md +111 -0
  7. package/framework/agents/kieran-typescript-reviewer.md +96 -0
  8. package/framework/agents/performance-oracle.md +111 -0
  9. package/framework/agents/qualia-codebase-mapper.md +760 -0
  10. package/framework/agents/qualia-debugger.md +1203 -0
  11. package/framework/agents/qualia-executor.md +881 -0
  12. package/framework/agents/qualia-integration-checker.md +423 -0
  13. package/framework/agents/qualia-phase-researcher.md +453 -0
  14. package/framework/agents/qualia-plan-checker.md +699 -0
  15. package/framework/agents/qualia-planner.md +1241 -0
  16. package/framework/agents/qualia-project-researcher.md +602 -0
  17. package/framework/agents/qualia-research-synthesizer.md +236 -0
  18. package/framework/agents/qualia-roadmapper.md +605 -0
  19. package/framework/agents/qualia-verifier.md +685 -0
  20. package/framework/agents/team-orchestrator.md +228 -0
  21. package/framework/agents/teams/full-stack-team.md +48 -0
  22. package/framework/agents/teams/optimize-team.md +53 -0
  23. package/framework/agents/teams/review-team.md +62 -0
  24. package/framework/agents/teams/ship-team.md +86 -0
  25. package/framework/agents/test-agent.md +182 -0
  26. package/framework/askpass.sh +2 -0
  27. package/framework/commands/design.md +53 -0
  28. package/framework/commands/quick-db.md +22 -0
  29. package/framework/config/retention.json +35 -0
  30. package/framework/core/PRINCIPLES.md +77 -0
  31. package/framework/hooks/auto-format.sh +45 -0
  32. package/framework/hooks/block-env-edit.sh +42 -0
  33. package/framework/hooks/branch-guard.sh +46 -0
  34. package/framework/hooks/confirm-delete.sh +56 -0
  35. package/framework/hooks/migration-validate.sh +68 -0
  36. package/framework/hooks/notification-speak.sh +15 -0
  37. package/framework/hooks/pre-commit.sh +80 -0
  38. package/framework/hooks/pre-compact.sh +55 -0
  39. package/framework/hooks/pre-deploy-gate.sh +151 -0
  40. package/framework/hooks/qualia-colors.sh +32 -0
  41. package/framework/hooks/retention-cleanup.sh +43 -0
  42. package/framework/hooks/save-session-state.sh +153 -0
  43. package/framework/hooks/session-context-loader.sh +28 -0
  44. package/framework/hooks/session-learn.sh +30 -0
  45. package/framework/knowledge/claudecode-bible.md +1384 -0
  46. package/framework/knowledge/client-prefs.md +22 -0
  47. package/framework/knowledge/common-fixes.md +25 -0
  48. package/framework/knowledge/deployment-map.md +35 -0
  49. package/framework/knowledge/email-signature.html +1 -0
  50. package/framework/knowledge/employees.md +8 -0
  51. package/framework/knowledge/learned-patterns.md +51 -0
  52. package/framework/knowledge/optimization-research-2026.md +137 -0
  53. package/framework/knowledge/qualia-context.md +67 -0
  54. package/framework/knowledge/supabase-patterns.md +50 -0
  55. package/framework/knowledge/voice-agent-patterns.md +46 -0
  56. package/framework/qualia-engine/VERSION +1 -0
  57. package/framework/qualia-engine/bin/qualia-tools.js +2160 -0
  58. package/framework/qualia-engine/bin/qualia-tools.test.js +1054 -0
  59. package/framework/qualia-engine/references/checkpoints.md +775 -0
  60. package/framework/qualia-engine/references/continuation-format.md +249 -0
  61. package/framework/qualia-engine/references/decimal-phase-calculation.md +65 -0
  62. package/framework/qualia-engine/references/design-quality.md +56 -0
  63. package/framework/qualia-engine/references/git-integration.md +254 -0
  64. package/framework/qualia-engine/references/git-planning-commit.md +50 -0
  65. package/framework/qualia-engine/references/model-profile-resolution.md +32 -0
  66. package/framework/qualia-engine/references/model-profiles.md +73 -0
  67. package/framework/qualia-engine/references/phase-argument-parsing.md +61 -0
  68. package/framework/qualia-engine/references/planning-config.md +195 -0
  69. package/framework/qualia-engine/references/questioning.md +141 -0
  70. package/framework/qualia-engine/references/tdd.md +263 -0
  71. package/framework/qualia-engine/references/ui-brand.md +160 -0
  72. package/framework/qualia-engine/references/verification-patterns.md +612 -0
  73. package/framework/qualia-engine/templates/DEBUG.md +159 -0
  74. package/framework/qualia-engine/templates/DESIGN.md +81 -0
  75. package/framework/qualia-engine/templates/UAT.md +247 -0
  76. package/framework/qualia-engine/templates/codebase/architecture.md +255 -0
  77. package/framework/qualia-engine/templates/codebase/concerns.md +310 -0
  78. package/framework/qualia-engine/templates/codebase/conventions.md +307 -0
  79. package/framework/qualia-engine/templates/codebase/integrations.md +280 -0
  80. package/framework/qualia-engine/templates/codebase/stack.md +186 -0
  81. package/framework/qualia-engine/templates/codebase/structure.md +285 -0
  82. package/framework/qualia-engine/templates/codebase/testing.md +480 -0
  83. package/framework/qualia-engine/templates/config.json +35 -0
  84. package/framework/qualia-engine/templates/context.md +283 -0
  85. package/framework/qualia-engine/templates/continue-here.md +78 -0
  86. package/framework/qualia-engine/templates/debug-subagent-prompt.md +91 -0
  87. package/framework/qualia-engine/templates/discovery.md +146 -0
  88. package/framework/qualia-engine/templates/milestone-archive.md +123 -0
  89. package/framework/qualia-engine/templates/milestone.md +115 -0
  90. package/framework/qualia-engine/templates/phase-prompt.md +567 -0
  91. package/framework/qualia-engine/templates/planner-subagent-prompt.md +117 -0
  92. package/framework/qualia-engine/templates/project.md +184 -0
  93. package/framework/qualia-engine/templates/projects/ai-agent.md +156 -0
  94. package/framework/qualia-engine/templates/projects/mobile-app.md +181 -0
  95. package/framework/qualia-engine/templates/projects/voice-agent.md +134 -0
  96. package/framework/qualia-engine/templates/projects/website.md +137 -0
  97. package/framework/qualia-engine/templates/requirements.md +231 -0
  98. package/framework/qualia-engine/templates/research-project/ARCHITECTURE.md +204 -0
  99. package/framework/qualia-engine/templates/research-project/FEATURES.md +147 -0
  100. package/framework/qualia-engine/templates/research-project/PITFALLS.md +200 -0
  101. package/framework/qualia-engine/templates/research-project/STACK.md +120 -0
  102. package/framework/qualia-engine/templates/research-project/SUMMARY.md +170 -0
  103. package/framework/qualia-engine/templates/research.md +552 -0
  104. package/framework/qualia-engine/templates/roadmap.md +202 -0
  105. package/framework/qualia-engine/templates/state.md +176 -0
  106. package/framework/qualia-engine/templates/summary-complex.md +59 -0
  107. package/framework/qualia-engine/templates/summary-minimal.md +41 -0
  108. package/framework/qualia-engine/templates/summary-standard.md +48 -0
  109. package/framework/qualia-engine/templates/summary.md +246 -0
  110. package/framework/qualia-engine/templates/user-setup.md +311 -0
  111. package/framework/qualia-engine/templates/verification-report.md +322 -0
  112. package/framework/qualia-engine/workflows/add-phase.md +179 -0
  113. package/framework/qualia-engine/workflows/add-todo.md +157 -0
  114. package/framework/qualia-engine/workflows/audit-milestone.md +241 -0
  115. package/framework/qualia-engine/workflows/check-todos.md +176 -0
  116. package/framework/qualia-engine/workflows/complete-milestone.md +858 -0
  117. package/framework/qualia-engine/workflows/diagnose-issues.md +219 -0
  118. package/framework/qualia-engine/workflows/discovery-phase.md +289 -0
  119. package/framework/qualia-engine/workflows/discuss-phase.md +534 -0
  120. package/framework/qualia-engine/workflows/execute-phase.md +559 -0
  121. package/framework/qualia-engine/workflows/execute-plan.md +438 -0
  122. package/framework/qualia-engine/workflows/help.md +470 -0
  123. package/framework/qualia-engine/workflows/insert-phase.md +220 -0
  124. package/framework/qualia-engine/workflows/list-phase-assumptions.md +178 -0
  125. package/framework/qualia-engine/workflows/map-codebase.md +327 -0
  126. package/framework/qualia-engine/workflows/new-milestone.md +363 -0
  127. package/framework/qualia-engine/workflows/new-project.md +1037 -0
  128. package/framework/qualia-engine/workflows/pause-work.md +122 -0
  129. package/framework/qualia-engine/workflows/plan-milestone-gaps.md +256 -0
  130. package/framework/qualia-engine/workflows/plan-phase.md +422 -0
  131. package/framework/qualia-engine/workflows/progress.md +354 -0
  132. package/framework/qualia-engine/workflows/quick.md +252 -0
  133. package/framework/qualia-engine/workflows/remove-phase.md +326 -0
  134. package/framework/qualia-engine/workflows/research-phase.md +74 -0
  135. package/framework/qualia-engine/workflows/resume-project.md +306 -0
  136. package/framework/qualia-engine/workflows/set-profile.md +80 -0
  137. package/framework/qualia-engine/workflows/settings.md +145 -0
  138. package/framework/qualia-engine/workflows/transition.md +556 -0
  139. package/framework/qualia-engine/workflows/update.md +197 -0
  140. package/framework/qualia-engine/workflows/verify-phase.md +195 -0
  141. package/framework/qualia-engine/workflows/verify-work.md +625 -0
  142. package/framework/rules/context7.md +11 -0
  143. package/framework/rules/deployment.md +29 -0
  144. package/framework/rules/frontend.md +33 -0
  145. package/framework/rules/security.md +12 -0
  146. package/framework/rules/speed.md +20 -0
  147. package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
  148. package/framework/scripts/apply-retention.sh +120 -0
  149. package/framework/scripts/bootstrap-pop-os.sh +354 -0
  150. package/framework/scripts/claude-voice +13 -0
  151. package/framework/scripts/cleanup.sh +131 -0
  152. package/framework/scripts/cowork-mode.sh +141 -0
  153. package/framework/scripts/generate-project-claude-md.sh +153 -0
  154. package/framework/scripts/load-test-webhook.js +172 -0
  155. package/framework/scripts/say.py +236 -0
  156. package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +167 -0
  157. package/framework/scripts/showcase-video-recorder/playwright-helpers.js +216 -0
  158. package/framework/scripts/speak.py +55 -0
  159. package/framework/scripts/speak.sh +18 -0
  160. package/framework/scripts/status.sh +138 -0
  161. package/framework/scripts/sync-to-framework.sh +65 -0
  162. package/framework/scripts/voice-hotkey.py +227 -0
  163. package/framework/scripts/voice-input.sh +51 -0
  164. package/framework/skills/animate/SKILL.md +202 -0
  165. package/framework/skills/bolder/SKILL.md +144 -0
  166. package/framework/skills/browser-qa/SKILL.md +536 -0
  167. package/framework/skills/clarify/SKILL.md +179 -0
  168. package/framework/skills/colorize/SKILL.md +170 -0
  169. package/framework/skills/critique/SKILL.md +126 -0
  170. package/framework/skills/deep-research/SKILL.md +271 -0
  171. package/framework/skills/delight/SKILL.md +329 -0
  172. package/framework/skills/deploy/SKILL.md +261 -0
  173. package/framework/skills/deploy-verify/SKILL.md +377 -0
  174. package/framework/skills/deploy-verify/scripts/canary-check.sh +206 -0
  175. package/framework/skills/deploy-verify/scripts/check-console-errors.js +147 -0
  176. package/framework/skills/deploy-verify/scripts/check-cwv.js +139 -0
  177. package/framework/skills/deploy-verify/scripts/project-detect.sh +84 -0
  178. package/framework/skills/deploy-verify/scripts/verify.sh +548 -0
  179. package/framework/skills/design-quieter/SKILL.md +130 -0
  180. package/framework/skills/distill/SKILL.md +149 -0
  181. package/framework/skills/docs-lookup/SKILL.md +78 -0
  182. package/framework/skills/fcm-notifications/SKILL.md +125 -0
  183. package/framework/skills/financial-ledger/SKILL.md +1039 -0
  184. package/framework/skills/frontend-master/NOTICE.md +4 -0
  185. package/framework/skills/frontend-master/SKILL.md +127 -0
  186. package/framework/skills/frontend-master/reference/color-and-contrast.md +132 -0
  187. package/framework/skills/frontend-master/reference/interaction-design.md +123 -0
  188. package/framework/skills/frontend-master/reference/motion-design.md +99 -0
  189. package/framework/skills/frontend-master/reference/responsive-design.md +114 -0
  190. package/framework/skills/frontend-master/reference/spatial-design.md +100 -0
  191. package/framework/skills/frontend-master/reference/typography.md +131 -0
  192. package/framework/skills/frontend-master/reference/ux-writing.md +107 -0
  193. package/framework/skills/harden/SKILL.md +357 -0
  194. package/framework/skills/i18n-rtl/SKILL.md +752 -0
  195. package/framework/skills/learn/SKILL.md +71 -0
  196. package/framework/skills/memory/SKILL.md +50 -0
  197. package/framework/skills/mobile-expo/SKILL.md +864 -0
  198. package/framework/skills/mobile-expo/references/store-checklist.md +550 -0
  199. package/framework/skills/nestjs-backend/README.md +73 -0
  200. package/framework/skills/nestjs-backend/SKILL.md +446 -0
  201. package/framework/skills/nestjs-backend/references/templates.md +1173 -0
  202. package/framework/skills/normalize/SKILL.md +79 -0
  203. package/framework/skills/onboard/SKILL.md +242 -0
  204. package/framework/skills/polish/SKILL.md +209 -0
  205. package/framework/skills/pr/SKILL.md +66 -0
  206. package/framework/skills/qualia/SKILL.md +153 -0
  207. package/framework/skills/qualia-add-todo/SKILL.md +68 -0
  208. package/framework/skills/qualia-audit-milestone/SKILL.md +92 -0
  209. package/framework/skills/qualia-check-todos/SKILL.md +55 -0
  210. package/framework/skills/qualia-complete-milestone/SKILL.md +108 -0
  211. package/framework/skills/qualia-debug/SKILL.md +149 -0
  212. package/framework/skills/qualia-design/SKILL.md +203 -0
  213. package/framework/skills/qualia-discuss-phase/SKILL.md +72 -0
  214. package/framework/skills/qualia-execute-phase/SKILL.md +86 -0
  215. package/framework/skills/qualia-help/SKILL.md +67 -0
  216. package/framework/skills/qualia-idk/SKILL.md +352 -0
  217. package/framework/skills/qualia-list-phase-assumptions/SKILL.md +67 -0
  218. package/framework/skills/qualia-new-milestone/SKILL.md +72 -0
  219. package/framework/skills/qualia-new-project/SKILL.md +92 -0
  220. package/framework/skills/qualia-optimize/SKILL.md +417 -0
  221. package/framework/skills/qualia-pause-work/SKILL.md +96 -0
  222. package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +57 -0
  223. package/framework/skills/qualia-plan-phase/SKILL.md +101 -0
  224. package/framework/skills/qualia-progress/SKILL.md +53 -0
  225. package/framework/skills/qualia-quick/SKILL.md +89 -0
  226. package/framework/skills/qualia-research-phase/SKILL.md +88 -0
  227. package/framework/skills/qualia-resume-work/SKILL.md +62 -0
  228. package/framework/skills/qualia-review/SKILL.md +263 -0
  229. package/framework/skills/qualia-start/SKILL.md +182 -0
  230. package/framework/skills/qualia-verify-work/SKILL.md +105 -0
  231. package/framework/skills/qualia-workflow/SKILL.md +130 -0
  232. package/framework/skills/rag/SKILL.md +750 -0
  233. package/framework/skills/responsive/SKILL.md +231 -0
  234. package/framework/skills/retro/SKILL.md +284 -0
  235. package/framework/skills/sakani-conventions/SKILL.md +136 -0
  236. package/framework/skills/sakani-conventions/evals/evals.json +23 -0
  237. package/framework/skills/sakani-conventions/references/entities.md +365 -0
  238. package/framework/skills/sakani-conventions/references/error-codes.md +95 -0
  239. package/framework/skills/seo-master/SKILL.md +490 -0
  240. package/framework/skills/seo-master/references/checklist.md +199 -0
  241. package/framework/skills/seo-master/references/structured-data.md +609 -0
  242. package/framework/skills/ship/SKILL.md +202 -0
  243. package/framework/skills/stack-researcher/SKILL.md +215 -0
  244. package/framework/skills/status/SKILL.md +154 -0
  245. package/framework/skills/status/scripts/health-check.sh +562 -0
  246. package/framework/skills/subscription-payments/SKILL.md +250 -0
  247. package/framework/skills/supabase/SKILL.md +973 -0
  248. package/framework/skills/supabase/references/templates.md +159 -0
  249. package/framework/skills/team/SKILL.md +67 -0
  250. package/framework/skills/test-runner/SKILL.md +202 -0
  251. package/framework/skills/voice-agent/SKILL.md +407 -0
  252. package/framework/skills/zoho-workflow/SKILL.md +51 -0
  253. package/framework/statusline-command.sh +117 -0
  254. package/package.json +24 -0
  255. package/profiles/fawzi.json +16 -0
  256. package/profiles/hasan.json +16 -0
  257. package/profiles/moayad.json +16 -0
  258. package/templates/CLAUDE-owner.md +52 -0
  259. package/templates/CLAUDE.md.hbs +58 -0
  260. package/templates/env.claude.template +12 -0
  261. package/templates/settings.json +141 -0
@@ -0,0 +1,261 @@
1
+ ---
2
+ name: deploy
3
+ description: "Quick deploy, troubleshoot, or rollback Vercel deployments. Use --quick for fast push, --fix for troubleshooting, --preview for staging. For full pipeline with quality gates, use /ship instead."
4
+ tags: [deployment, vercel, ci-cd, production]
5
+ ---
6
+
7
+ # Deploy — Quick Deploy & Troubleshooting
8
+
9
+ > For the full production pipeline (quality gates, commit, deploy, verify), use `/ship`.
10
+ > This skill handles quick deploys, troubleshooting, and rollbacks.
11
+
12
+ ## Usage
13
+
14
+ - `/deploy --quick` — Skip tests, just build and push to production
15
+ - `/deploy --preview` — Deploy to preview/staging environment
16
+ - `/deploy --fix` — Troubleshoot a failed deployment
17
+ - `/deploy` — Redirects to `/ship` for full pipeline
18
+
19
+ ## --quick (Fast Deploy)
20
+
21
+ Skip tests, just build and ship:
22
+ ```bash
23
+ npm run build && vercel --prod
24
+ ```
25
+
26
+ ---
27
+
28
+ ## --fix (Troubleshoot Failures)
29
+
30
+ ### Build Failures
31
+
32
+ **Module Not Found:** Check case sensitivity (Linux is case-sensitive). Run `vercel --force` to clear cache.
33
+
34
+ **Memory Issues:** Add to vercel.json:
35
+ ```json
36
+ { "functions": { "app/api/heavy/route.ts": { "maxDuration": 60, "memory": 3008 } } }
37
+ ```
38
+
39
+ **Build Command Issues:**
40
+ ```bash
41
+ vercel --build-env NODE_OPTIONS="--max-old-space-size=4096"
42
+ ```
43
+
44
+ ### Environment Variables
45
+
46
+ ```bash
47
+ vercel env ls # List all env vars
48
+ vercel env add VAR_NAME # Add missing var
49
+ vercel env pull .env.local # Pull to local
50
+ ```
51
+
52
+ **Remember:** `NEXT_PUBLIC_*` for client-side, plain names for server-side only.
53
+
54
+ ### CORS Issues
55
+ Add proper CORS headers in API routes with explicit origin allowlist.
56
+
57
+ ### Function Timeouts
58
+ Increase `maxDuration` in vercel.json (up to 300s on Pro plan).
59
+
60
+ ---
61
+
62
+ ## Rollback
63
+
64
+ ```bash
65
+ vercel ls # List deployments
66
+ vercel rollback # Rollback to previous
67
+ vercel rollback [url] # Rollback to specific deployment
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Domain Management
73
+
74
+ ```bash
75
+ vercel domains add example.com
76
+ vercel domains ls
77
+ vercel certs issue example.com # Force SSL renewal
78
+ ```
79
+
80
+ DNS: A record `@ → 76.76.21.21`, CNAME `www → cname.vercel-dns.com`
81
+
82
+ ---
83
+
84
+ ## vercel.json Reference
85
+
86
+ ```json
87
+ {
88
+ "framework": "nextjs",
89
+ "regions": ["iad1"],
90
+ "headers": [
91
+ {
92
+ "source": "/(.*)",
93
+ "headers": [
94
+ { "key": "X-Frame-Options", "value": "DENY" },
95
+ { "key": "X-Content-Type-Options", "value": "nosniff" },
96
+ { "key": "Strict-Transport-Security", "value": "max-age=63072000; includeSubDomains; preload" }
97
+ ]
98
+ }
99
+ ],
100
+ "crons": [{ "path": "/api/cron/daily", "schedule": "0 0 * * *" }]
101
+ }
102
+ ```
103
+
104
+ ---
105
+
106
+ ## When Things Go Wrong
107
+
108
+ ### Build Fails Locally
109
+
110
+ **TypeScript errors:**
111
+ ```bash
112
+ npx tsc --noEmit 2>&1 | head -40 # See first errors
113
+ npx tsc --noEmit 2>&1 | grep -c "error TS" # Count total errors
114
+ ```
115
+ - Fix type errors before deploying — Vercel will hit the same failures
116
+ - If errors are in node_modules: `rm -rf node_modules && npm install`
117
+ - If errors are in generated types: `supabase gen types typescript --linked > types/supabase.ts`
118
+
119
+ **Missing dependencies:**
120
+ ```bash
121
+ npm ls 2>&1 | grep "MISSING" # Find missing deps
122
+ npm install # Reinstall all
123
+ rm -rf node_modules/.cache && npm run build # Clear build cache
124
+ ```
125
+
126
+ **Environment variables not set:**
127
+ ```bash
128
+ # Check what the build expects
129
+ grep -r "process.env\." --include="*.ts" --include="*.tsx" -h | grep -oP 'process\.env\.\K[A-Z_]+' | sort -u
130
+ # Compare with what's set
131
+ env | grep -E "^(NEXT_|SUPABASE_|VAPI_)" | cut -d= -f1 | sort
132
+ ```
133
+ Fix: Copy from `.env.local` or `vercel env pull .env.local`.
134
+
135
+ ### Build Passes Locally, Fails on Vercel
136
+
137
+ **Different Node version:**
138
+ ```bash
139
+ node -v # Local version
140
+ # Check Vercel: Settings → General → Node.js Version
141
+ ```
142
+ Fix: Add to `package.json`:
143
+ ```json
144
+ { "engines": { "node": ">=20.0.0" } }
145
+ ```
146
+
147
+ **Missing env vars on Vercel:**
148
+ ```bash
149
+ vercel env ls # See what's set per environment
150
+ vercel env ls production # Production-specific
151
+ ```
152
+ Fix: `vercel env add VARIABLE_NAME production` — or use Vercel dashboard → Settings → Environment Variables.
153
+
154
+ Common gotcha: `NEXT_PUBLIC_*` vars must be set at **build time** (not just runtime). If you added one after the last deploy, redeploy.
155
+
156
+ **Case sensitivity:** Linux (Vercel) is case-sensitive, macOS isn't.
157
+ ```bash
158
+ # Find case mismatches in imports
159
+ grep -rn "from ['\"]\./" --include="*.ts" --include="*.tsx" | while read line; do
160
+ file=$(echo "$line" | grep -oP "from ['\"]\.\/\K[^'\"]+")
161
+ # Check if the file exists with exact case
162
+ done
163
+ ```
164
+ Fix: Rename files to match import casing exactly.
165
+
166
+ ### Deploy Succeeds But Site is Broken
167
+
168
+ **White screen (client crash):**
169
+ ```bash
170
+ # Check Vercel function logs
171
+ vercel logs <deployment-url> --follow
172
+ # Check for hydration errors in browser console
173
+ node ~/.claude/skills/deploy-verify/scripts/check-console-errors.js <url>
174
+ ```
175
+ Common causes:
176
+ - `window` or `document` used in server component → wrap in `useEffect` or add `'use client'`
177
+ - Hydration mismatch → check for `Date.now()`, `Math.random()`, or browser-only APIs in SSR
178
+ - Missing `'use client'` directive on component using hooks
179
+
180
+ **500 errors on API routes:**
181
+ ```bash
182
+ vercel logs <deployment-url> 2>&1 | grep -i "error\|500"
183
+ ```
184
+ Common causes:
185
+ - Env var exists locally but not on Vercel (`vercel env ls`)
186
+ - API route importing a server-only module incorrectly
187
+ - Database connection string pointing to localhost
188
+
189
+ **Hydration mismatch:**
190
+ ```bash
191
+ # Search for dynamic content rendered during SSR
192
+ grep -rn "Date.now\|Math.random\|window\.\|document\.\|localStorage" --include="*.tsx" --include="*.ts" app/
193
+ ```
194
+ Fix: Wrap dynamic content in `useEffect` or use `suppressHydrationWarning` on the specific element (not as a blanket fix).
195
+
196
+ **Rollback immediately if production is broken:**
197
+ ```bash
198
+ vercel rollback --prod # Instant rollback
199
+ vercel ls | head -5 # See recent deployments
200
+ vercel inspect <old-deployment-url> # Check what was different
201
+ ```
202
+
203
+ ### Deploy Succeeds But Migrations Weren't Applied
204
+
205
+ Symptoms: New columns/tables don't exist, API returns "column X does not exist".
206
+
207
+ ```bash
208
+ # Check what migrations are pending
209
+ supabase migration list --project-ref <ref>
210
+ # Push pending migrations
211
+ supabase db push --project-ref <ref>
212
+ # Verify the schema
213
+ supabase db dump --schema public --project-ref <ref> | grep "table_name"
214
+ ```
215
+
216
+ Prevention: Add migration push to your deploy flow:
217
+ ```bash
218
+ supabase db push --project-ref <ref> && vercel --prod
219
+ ```
220
+
221
+ ### Vercel Rate Limit or Quota Exceeded
222
+
223
+ Symptoms: `429 Too Many Requests` or deployment stuck in queue.
224
+
225
+ ```bash
226
+ # Check current usage
227
+ vercel teams ls # See team/plan info
228
+ # Wait and retry
229
+ sleep 60 && vercel --prod # Rate limits usually clear in ~60s
230
+ ```
231
+
232
+ If on Hobby plan: max 100 deployments/day. Switch to `--preview` for testing, save `--prod` for real deploys.
233
+
234
+ If build minutes exhausted: Wait for monthly reset, or upgrade plan.
235
+
236
+ ### Domain DNS Not Propagating
237
+
238
+ Symptoms: Site works at `*.vercel.app` but not at custom domain.
239
+
240
+ ```bash
241
+ # Check DNS resolution
242
+ dig A yourdomain.com +short # Should show 76.76.21.21
243
+ dig CNAME www.yourdomain.com +short # Should show cname.vercel-dns.com
244
+ nslookup yourdomain.com # Alternative check
245
+ ```
246
+
247
+ **DNS not pointing to Vercel:**
248
+ ```bash
249
+ vercel domains inspect yourdomain.com # Shows expected DNS records
250
+ ```
251
+ Fix: Update DNS at your registrar. A record → `76.76.21.21`, CNAME → `cname.vercel-dns.com`.
252
+
253
+ **SSL not provisioning:**
254
+ ```bash
255
+ vercel certs ls # Check cert status
256
+ vercel certs issue yourdomain.com # Force re-issue
257
+ ```
258
+ Note: DNS propagation takes 5 min to 48 hours. Check with `dig` — if DNS is correct but SSL isn't ready, wait or force re-issue.
259
+
260
+ **Temporary workaround while DNS propagates:**
261
+ Share the `*.vercel.app` URL with the client until the custom domain resolves.
@@ -0,0 +1,377 @@
1
+ ---
2
+ name: deploy-verify
3
+ description: Run post-deploy 8-check verification and T+2min canary health check against baseline. Run after vercel --prod deployments to verify.
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Deploy Verification
8
+
9
+ Production verification suite — 8 checks with retry logic, auto-detection of the current project, and actionable failure remediation.
10
+
11
+ Invoked automatically after `vercel --prod` (via PostToolUse hook) or manually with `/deploy-verify <URL>`.
12
+
13
+ ## Project Auto-Detection
14
+
15
+ The skill determines which project is being verified:
16
+
17
+ 1. Read the current working directory name
18
+ 2. Match against the project inventory in `~/.claude/knowledge/qualia-context.md`
19
+ 3. Extract: project name, Supabase ref (if any), hosting type, known endpoints
20
+ 4. If no match: run in generic mode (skip Supabase-specific checks)
21
+
22
+ This means you don't need to pass a Supabase ref or project name — it's derived from context.
23
+
24
+ ## The 8 Checks
25
+
26
+ ### Check 1: HTTP Status (CRITICAL)
27
+
28
+ Verify the site loads successfully.
29
+
30
+ - **Endpoints tested:** Root URL (`/`) and `/api/health` (if it exists)
31
+ - **Retry:** 3 attempts with exponential backoff (5s → 15s → 30s)
32
+ - **Follow redirects** (`-L`) — but log the redirect chain
33
+ - **PASS:** HTTP 200 on root URL
34
+ - **WARN:** HTTP 200 but only after redirect (3xx → 200)
35
+ - **FAIL:** Any non-200 final status, timeout, or connection refused
36
+ - **CRITICAL:** If root URL fails all 3 retries, halt verification — nothing else matters
37
+
38
+ ```bash
39
+ # Core logic
40
+ curl -sL -o /dev/null -w "%{http_code}" --max-time 15 "$URL"
41
+ curl -sL -o /dev/null -w "%{http_code}" --max-time 15 "$URL/api/health"
42
+ ```
43
+
44
+ ### Check 2: Auth Flow
45
+
46
+ Verify authentication is functional (if the project uses auth).
47
+
48
+ - **Step 1:** Hit a known protected route (e.g., `/dashboard`, `/admin`, `/app`)
49
+ - Expect: 302/307 redirect to login page OR 401
50
+ - PASS if redirect target contains `/login`, `/auth`, `/sign-in`
51
+ - **Step 2:** Check Supabase auth health (if project has a Supabase ref)
52
+ - Query: `https://<ref>.supabase.co/auth/v1/health`
53
+ - Expect: HTTP 200 with `{"status":"ok"}`
54
+ - **Step 3:** Verify auth callback endpoint exists
55
+ - Check: `/api/auth/callback`, `/auth/callback`
56
+ - Expect: non-404 response
57
+ - **PASS:** Protected route redirects correctly AND Supabase auth is healthy
58
+ - **WARN:** Auth callback exists but protected route test is ambiguous
59
+ - **SKIP:** No auth endpoints detected and no Supabase ref (static site)
60
+ - **FAIL:** Supabase auth unhealthy, or protected route returns 500
61
+
62
+ ```bash
63
+ # Supabase auth health
64
+ curl -s "https://${SUPABASE_REF}.supabase.co/auth/v1/health" | jq -r '.status'
65
+ ```
66
+
67
+ ### Check 3: Console Errors (Headless Browser)
68
+
69
+ Detect client-side JavaScript errors using Playwright.
70
+
71
+ - **How:** Run `scripts/check-console-errors.js` which:
72
+ 1. Launches headless Chromium via Playwright
73
+ 2. Navigates to the URL
74
+ 3. Listens for `console.error` and `pageerror` events
75
+ 4. Waits for `networkidle`
76
+ 5. Returns collected errors
77
+ - **PASS:** Zero console errors
78
+ - **WARN:** Console errors present but all are known benign patterns (e.g., third-party tracking, browser extension noise)
79
+ - **FAIL:** Any console error matching: `TypeError`, `ReferenceError`, `SyntaxError`, `ChunkLoadError`, `Unhandled`, `NEXT_`, `500`, `Internal Server Error`
80
+ - **Fallback:** If Playwright unavailable, fall back to curl-based HTML inspection (check for server error strings in page source — same as the old approach, clearly marked as degraded)
81
+
82
+ ```bash
83
+ node ~/.claude/skills/deploy-verify/scripts/check-console-errors.js "$URL"
84
+ ```
85
+
86
+ ### Check 4: API Latency
87
+
88
+ Measure response times against defined thresholds.
89
+
90
+ - **Endpoints tested:** At minimum the root URL + one API route (auto-detected or `/api/health`)
91
+ - **Thresholds:**
92
+ - `< 500ms` → **PASS** (green)
93
+ - `500ms – 1000ms` → **WARN** (yellow — acceptable but monitor)
94
+ - `> 1000ms` → **FAIL** (red — too slow for production)
95
+ - **Measurement:** `curl -w "%{time_total}"` — measures full request cycle (DNS + connect + TLS + transfer)
96
+ - **Run 3 times** and report the median to avoid outliers
97
+
98
+ ```bash
99
+ # Measure in ms
100
+ curl -sL -o /dev/null -w "%{time_total}" --max-time 15 "$URL" | awk '{printf "%.0f", $1 * 1000}'
101
+ ```
102
+
103
+ ### Check 5: Database Connectivity (NEW)
104
+
105
+ Verify Supabase is reachable and responding.
106
+
107
+ - **Requires:** Supabase ref from qualia-context.md
108
+ - **Method:** Use the Supabase REST API to run a simple health query
109
+ - `GET https://<ref>.supabase.co/rest/v1/?apikey=<anon_key>` — should return non-error
110
+ - OR use `supabase` CLI: `supabase db execute --project-ref <ref> "SELECT 1"`
111
+ - **PASS:** Query returns successfully
112
+ - **WARN:** Query succeeds but latency > 500ms
113
+ - **FAIL:** Connection refused, timeout, or auth error
114
+ - **SKIP:** Project has no Supabase ref (static site)
115
+
116
+ ```bash
117
+ # CLI approach
118
+ supabase db execute --project-ref "$SUPABASE_REF" "SELECT 1 AS health"
119
+ ```
120
+
121
+ ### Check 6: Core Web Vitals (NEW)
122
+
123
+ Measure LCP, CLS, and INP using Google PageSpeed Insights API.
124
+
125
+ - **Method:** Run `scripts/check-cwv.js` which calls the PageSpeed Insights API (no key needed for basic usage)
126
+ - `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=<URL>&strategy=mobile`
127
+ - **Metrics and thresholds** (from Google's standards):
128
+ - **LCP** (Largest Contentful Paint): < 2.5s PASS, 2.5–4s WARN, > 4s FAIL
129
+ - **CLS** (Cumulative Layout Shift): < 0.1 PASS, 0.1–0.25 WARN, > 0.25 FAIL
130
+ - **INP** (Interaction to Next Paint): < 200ms PASS, 200–500ms WARN, > 500ms FAIL
131
+ - **PASS:** All three metrics in green
132
+ - **WARN:** Any metric in yellow range
133
+ - **FAIL:** Any metric in red range
134
+ - **Fallback:** If API is unreachable, mark as SKIP with note
135
+
136
+ ```bash
137
+ node ~/.claude/skills/deploy-verify/scripts/check-cwv.js "$URL"
138
+ ```
139
+
140
+ ### Check 7: Dependency Services (NEW)
141
+
142
+ Verify external services the project depends on.
143
+
144
+ - **Auto-detect dependencies** by reading the project's `.env.local` or `.env` variable names (not values):
145
+ - `NEXT_PUBLIC_SUPABASE_URL` → Supabase (already checked in #5)
146
+ - `VAPI_*` → VAPI API health
147
+ - `OPENROUTER_*` → OpenRouter status
148
+ - `ELEVEN_LABS_*` → ElevenLabs status
149
+ - `RETELL_*` → Retell AI status
150
+ - `STRIPE_*` → Stripe API status
151
+ - `TELNYX_*` → Telnyx status
152
+ - **Method:** HTTP GET to each service's known status/health endpoint
153
+ - **PASS:** All detected services responding
154
+ - **WARN:** A non-critical service is degraded (e.g., analytics)
155
+ - **FAIL:** A critical dependency is down
156
+ - **SKIP:** No external dependencies detected beyond Supabase
157
+
158
+ ### Check 8: SSL Certificate (NEW)
159
+
160
+ Verify TLS certificate validity.
161
+
162
+ - **Method:** `openssl s_client` to inspect the certificate
163
+ - **Check:** Certificate is valid, matches the domain, and has > 30 days until expiry
164
+ - **PASS:** Valid cert, > 30 days remaining
165
+ - **WARN:** Valid cert, 7–30 days remaining
166
+ - **FAIL:** Expired, mismatched domain, or < 7 days remaining
167
+
168
+ ```bash
169
+ echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN:443" 2>/dev/null | openssl x509 -noout -dates -checkend 2592000
170
+ ```
171
+
172
+ ## Retry Logic
173
+
174
+ Applied to **every check** (not just HTTP):
175
+
176
+ | Attempt | Delay Before Retry |
177
+ |---------|-------------------|
178
+ | 1st | Immediate |
179
+ | 2nd | 5 seconds |
180
+ | 3rd | 15 seconds |
181
+ | Final | 30 seconds |
182
+
183
+ - A check only gets status FAIL after **all retries exhausted**
184
+ - Between retries, log: `⟳ Retrying <check> (attempt 2/3, waiting 15s)...`
185
+ - Checks that PASS or WARN on any attempt stop retrying
186
+
187
+ ## Output Format
188
+
189
+ ```
190
+ ══════════════════════════════════════════════════════
191
+ DEPLOY VERIFICATION — projectname
192
+ URL: https://project.vercel.app
193
+ Timestamp: 2026-03-04 17:30:42 UTC
194
+ ══════════════════════════════════════════════════════
195
+
196
+ ✓ PASS HTTP Status 200 OK (142ms)
197
+ ✓ PASS Auth Flow Protected /dashboard → /login redirect, Supabase auth healthy
198
+ ⚠ WARN Console Errors 1 non-critical error (third-party tracking pixel)
199
+ ✓ PASS API Latency Root: 287ms, /api/health: 145ms
200
+ ✓ PASS DB Connectivity Supabase responding (89ms)
201
+ ⚠ WARN Core Web Vitals LCP: 2.1s ✓ CLS: 0.12 ⚠ INP: 95ms ✓
202
+ ✓ PASS Dependencies Stripe ✓ VAPI ✓
203
+ ✓ PASS SSL Certificate Valid, expires in 68 days
204
+
205
+ ──────────────────────────────────────────────────────
206
+ RESULT: 6 PASS · 2 WARN · 0 FAIL
207
+ Total verification time: 34.2s
208
+ ──────────────────────────────────────────────────────
209
+ ```
210
+
211
+ - Each line shows: status icon, check name (padded), and specific detail
212
+ - Timestamps in UTC
213
+ - Total time measured from start to finish
214
+
215
+ ## When Verification Fails
216
+
217
+ ### Decision Tree
218
+
219
+ ```
220
+ ┌─────────────────┐
221
+ │ Run 8 Checks │
222
+ └────────┬────────┘
223
+
224
+ ┌────────────┴────────────┐
225
+ │ │
226
+ All PASS/WARN Any FAIL
227
+ │ │
228
+ ✅ Deploy OK ┌────────┴────────┐
229
+ │ │
230
+ 1 FAIL only 2+ FAIL
231
+ │ │
232
+ Investigate & ROLLBACK
233
+ fix specific immediately
234
+ check │
235
+ ┌─────┴──────┐
236
+ │ │
237
+ HTTP FAIL Other FAIL
238
+ (CRITICAL) │
239
+ │ vercel rollback
240
+ IMMEDIATE --prod
241
+ ROLLBACK │
242
+ │ Re-verify
243
+ vercel rollback previous
244
+ --prod deployment
245
+ ```
246
+
247
+ ### Severity Levels
248
+
249
+ - **CRITICAL** (immediate rollback): HTTP Status fails (site is down)
250
+ - **HIGH** (rollback if can't fix in 10 min): Auth flow broken, DB connectivity lost
251
+ - **MEDIUM** (investigate, no rollback): Console errors, high latency, SSL warning
252
+ - **LOW** (monitor): CWV warnings, dependency warnings
253
+
254
+ ### Rollback Procedure
255
+
256
+ ```bash
257
+ # 1. Rollback to previous deployment
258
+ vercel rollback --prod
259
+
260
+ # 2. Re-run verification on rolled-back version
261
+ bash ~/.claude/skills/deploy-verify/scripts/verify.sh <URL>
262
+
263
+ # 3. Investigate the failed deployment
264
+ vercel inspect <deployment-url>
265
+ vercel logs <deployment-url>
266
+ ```
267
+
268
+ ### What to Check Per Failure
269
+
270
+ | Failed Check | First Step |
271
+ |---------------------|------------------------------------------------------|
272
+ | HTTP Status | `vercel logs <url>` — check for build/runtime errors |
273
+ | Auth Flow | Check Supabase dashboard → Auth → Settings |
274
+ | Console Errors | Open browser DevTools → Console, look for the error |
275
+ | API Latency | `vercel logs <url>` — check for slow queries |
276
+ | DB Connectivity | Supabase dashboard → Database → check if paused |
277
+ | Core Web Vitals | PageSpeed Insights → check largest element, layout shifts |
278
+ | Dependencies | Check service status page for the failing provider |
279
+ | SSL Certificate | Vercel dashboard → Domains → check cert status |
280
+
281
+ ## Scripts
282
+
283
+ All helper scripts live in `~/.claude/skills/deploy-verify/scripts/`:
284
+
285
+ | Script | Purpose |
286
+ |---------------------------|-------------------------------------------|
287
+ | `verify.sh` | Main orchestrator — runs all 8 checks |
288
+ | `check-console-errors.js`| Playwright headless browser console check |
289
+ | `check-cwv.js` | PageSpeed Insights API for Core Web Vitals |
290
+ | `project-detect.sh` | Auto-detect project from cwd |
291
+
292
+ ## Usage
293
+
294
+ ```bash
295
+ # Auto-detect project, run full verification
296
+ bash ~/.claude/skills/deploy-verify/scripts/verify.sh <URL>
297
+
298
+ # The skill is also invoked automatically by the PostToolUse hook
299
+ # after any `vercel --prod` command completes
300
+ ```
301
+
302
+ ## Pre-Deploy Review Check
303
+
304
+ Before running the 8 verification checks, read the review file:
305
+
306
+ 1. Check `.planning/REVIEW.md` then `.review/REVIEW.md`
307
+ 2. If found: parse frontmatter of the most recent entry
308
+ - `status: has_blockers` → **WARN** with list of CRITICAL/HIGH findings. Ask user: "Deploy anyway?" or "Fix first?"
309
+ - `status: clean` → Note "Pre-deploy review: clean" and continue
310
+ 3. If not found → **WARN**: "No `/review` found. Consider running `/review` before deploying." (advisory only, not blocking)
311
+
312
+ Recommended workflow: `/review` → fix findings → `/ship` → (auto-triggers `/deploy-verify`)
313
+
314
+ ## When to Invoke
315
+
316
+ - Automatically after `vercel --prod` (PostToolUse hook)
317
+ - After any production deployment via `/ship`
318
+ - Manually when you want to verify a live deployment
319
+ - After a rollback to confirm the previous version is healthy
320
+
321
+ ## Canary Monitoring (T+2min Post-Deploy)
322
+
323
+ After the 8 verification checks pass, a canary check is automatically scheduled to run 120 seconds later. This catches regressions that manifest after CDN propagation and cache warming.
324
+
325
+ ### What It Checks
326
+
327
+ | Metric | Baseline Source | Regression Threshold |
328
+ |--------|----------------|---------------------|
329
+ | HTTP Status | `canary-baseline.json` | Any status change from baseline |
330
+ | Console Errors | `canary-baseline.json` | Any increase over baseline count |
331
+ | Page Load Time | `canary-baseline.json` | Exceeds 2x baseline time |
332
+
333
+ ### Baseline Management
334
+
335
+ The baseline is stored per-project at `.planning/canary-baseline.json`. It is auto-created on first deploy-verify run (captures current metrics as the known-good state).
336
+
337
+ To manually update the baseline (after intentional performance changes):
338
+
339
+ ```bash
340
+ bash ~/.claude/skills/deploy-verify/scripts/canary-check.sh <URL> --update-baseline --project-dir /path/to/project
341
+ ```
342
+
343
+ ### Consecutive Failure Policy
344
+
345
+ A single canary failure produces a warning but no alert. Only 2 or more consecutive failures trigger a regression flag. This prevents false alarms from transient network issues or CDN cache warming.
346
+
347
+ Consecutive failure state is tracked in `/tmp/.canary-failures-<url-hash>` and resets automatically on any passing canary check.
348
+
349
+ ### Canary Output
350
+
351
+ ```
352
+ ──────────────────────────────────────────────────────
353
+ CANARY CHECK — T+2min post-deploy
354
+ URL: https://project.vercel.app
355
+ Baseline: 2026-03-29T12:00:00Z
356
+ ──────────────────────────────────────────────────────
357
+
358
+ Metric Baseline Current Status
359
+ ──────────────────── ──────────── ──────────── ────────────
360
+ HTTP Status 200 200 OK
361
+ Console Errors 0 0 OK
362
+ Load Time (ms) 287 312 OK (<574ms)
363
+
364
+ CANARY PASS — All metrics within baseline thresholds
365
+ ```
366
+
367
+ ### Scripts
368
+
369
+ | Script | Purpose |
370
+ |--------|---------|
371
+ | `canary-check.sh` | Canary engine — collect metrics, compare to baseline, track failures |
372
+
373
+ ### When Canary Runs
374
+
375
+ - Automatically: 120s after `verify.sh` completes with 0 failures (background process)
376
+ - Manually: `bash ~/.claude/skills/deploy-verify/scripts/canary-check.sh <URL> --project-dir /path`
377
+ - Baseline update: Add `--update-baseline` flag to capture current state as new baseline