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.
- package/CLAUDE.md +64 -0
- package/README.md +103 -30
- package/agents/builder.md +110 -0
- package/agents/planner.md +134 -0
- package/agents/qa-browser.md +186 -0
- package/agents/verifier.md +221 -0
- package/bin/cli.js +336 -531
- package/bin/install.js +570 -0
- package/bin/qualia-ui.js +299 -0
- package/bin/state.js +630 -0
- package/bin/statusline.js +252 -0
- package/guide.md +63 -0
- package/hooks/auto-update.js +139 -0
- package/hooks/branch-guard.js +47 -0
- package/hooks/migration-guard.js +60 -0
- package/hooks/pre-compact.js +32 -0
- package/hooks/pre-deploy-gate.js +110 -0
- package/hooks/pre-push.js +33 -0
- package/hooks/session-start.js +170 -0
- package/package.json +29 -20
- package/rules/design-reference.md +179 -0
- package/rules/frontend.md +126 -0
- package/skills/qualia/SKILL.md +87 -0
- package/skills/qualia-build/SKILL.md +97 -0
- package/skills/qualia-debug/SKILL.md +87 -0
- package/skills/qualia-design/SKILL.md +93 -0
- package/skills/qualia-handoff/SKILL.md +66 -0
- package/skills/qualia-idk/SKILL.md +8 -0
- package/skills/qualia-learn/SKILL.md +88 -0
- package/skills/qualia-new/SKILL.md +323 -0
- package/{framework/skills → skills}/qualia-optimize/SKILL.md +1 -1
- package/skills/qualia-pause/SKILL.md +63 -0
- package/skills/qualia-plan/SKILL.md +101 -0
- package/skills/qualia-polish/SKILL.md +157 -0
- package/skills/qualia-quick/SKILL.md +37 -0
- package/skills/qualia-report/SKILL.md +105 -0
- package/skills/qualia-resume/SKILL.md +49 -0
- package/skills/qualia-review/SKILL.md +76 -0
- package/skills/qualia-ship/SKILL.md +90 -0
- package/skills/qualia-skill-new/SKILL.md +167 -0
- package/skills/qualia-task/SKILL.md +91 -0
- package/skills/qualia-verify/SKILL.md +113 -0
- package/templates/DESIGN.md +137 -0
- package/templates/plan.md +28 -0
- package/templates/project.md +22 -0
- package/templates/state.md +27 -0
- package/templates/tracking.json +20 -0
- package/tests/bin.test.sh +673 -0
- package/tests/hooks.test.sh +315 -0
- package/tests/state.test.sh +535 -0
- package/tests/statusline.test.sh +243 -0
- package/bin/collect-metrics.sh +0 -62
- package/framework/.claudeignore +0 -51
- package/framework/CLAUDE.md +0 -51
- package/framework/MCP_SETUP.md +0 -229
- package/framework/agents/architecture-strategist.md +0 -53
- package/framework/agents/backend-agent.md +0 -150
- package/framework/agents/code-simplicity-reviewer.md +0 -86
- package/framework/agents/frontend-agent.md +0 -111
- package/framework/agents/kieran-typescript-reviewer.md +0 -96
- package/framework/agents/performance-oracle.md +0 -111
- package/framework/agents/qualia-codebase-mapper.md +0 -761
- package/framework/agents/qualia-debugger.md +0 -1204
- package/framework/agents/qualia-executor.md +0 -882
- package/framework/agents/qualia-integration-checker.md +0 -424
- package/framework/agents/qualia-phase-researcher.md +0 -457
- package/framework/agents/qualia-plan-checker.md +0 -700
- package/framework/agents/qualia-planner.md +0 -1245
- package/framework/agents/qualia-project-researcher.md +0 -603
- package/framework/agents/qualia-research-synthesizer.md +0 -200
- package/framework/agents/qualia-roadmapper.md +0 -606
- package/framework/agents/qualia-verifier.md +0 -686
- package/framework/agents/red-team-qa.md +0 -130
- package/framework/agents/security-auditor.md +0 -72
- package/framework/agents/team-orchestrator.md +0 -229
- package/framework/agents/teams/framework-audit-team.md +0 -66
- package/framework/agents/teams/full-stack-team.md +0 -48
- package/framework/agents/teams/optimize-team.md +0 -53
- package/framework/agents/teams/review-team.md +0 -70
- package/framework/agents/teams/ship-team.md +0 -86
- package/framework/agents/test-agent.md +0 -182
- package/framework/hooks/auto-format.sh +0 -54
- package/framework/hooks/block-env-edit.sh +0 -42
- package/framework/hooks/branch-guard.sh +0 -43
- package/framework/hooks/confirm-delete.sh +0 -59
- package/framework/hooks/migration-validate.sh +0 -77
- package/framework/hooks/notification-speak.sh +0 -16
- package/framework/hooks/pre-commit.sh +0 -100
- package/framework/hooks/pre-compact.sh +0 -56
- package/framework/hooks/pre-deploy-gate.sh +0 -160
- package/framework/hooks/qualia-colors.sh +0 -32
- package/framework/hooks/retention-cleanup.sh +0 -62
- package/framework/hooks/save-session-state.sh +0 -185
- package/framework/hooks/session-context-loader.sh +0 -96
- package/framework/hooks/session-learn.sh +0 -32
- package/framework/hooks/skill-announce.sh +0 -123
- package/framework/hooks/tool-error-announce.sh +0 -27
- package/framework/install.ps1 +0 -323
- package/framework/install.sh +0 -313
- package/framework/qualia-framework/VERSION +0 -1
- package/framework/qualia-framework/assets/qualia-logo.png +0 -0
- package/framework/qualia-framework/bin/collect-metrics.sh +0 -67
- package/framework/qualia-framework/bin/generate-report-docx.py +0 -429
- package/framework/qualia-framework/bin/qualia-tools.js +0 -2201
- package/framework/qualia-framework/bin/qualia-tools.test.js +0 -1054
- package/framework/qualia-framework/references/checkpoints.md +0 -775
- package/framework/qualia-framework/references/completion-checklists.md +0 -359
- package/framework/qualia-framework/references/continuation-format.md +0 -249
- package/framework/qualia-framework/references/continuation-prompt.md +0 -97
- package/framework/qualia-framework/references/decimal-phase-calculation.md +0 -65
- package/framework/qualia-framework/references/design-quality.md +0 -56
- package/framework/qualia-framework/references/employee-guide.md +0 -167
- package/framework/qualia-framework/references/git-integration.md +0 -254
- package/framework/qualia-framework/references/git-planning-commit.md +0 -50
- package/framework/qualia-framework/references/model-profile-resolution.md +0 -32
- package/framework/qualia-framework/references/model-profiles.md +0 -73
- package/framework/qualia-framework/references/phase-argument-parsing.md +0 -61
- package/framework/qualia-framework/references/planning-config.md +0 -195
- package/framework/qualia-framework/references/questioning.md +0 -141
- package/framework/qualia-framework/references/tdd.md +0 -263
- package/framework/qualia-framework/references/ui-brand.md +0 -160
- package/framework/qualia-framework/references/verification-patterns.md +0 -612
- package/framework/qualia-framework/templates/DEBUG.md +0 -159
- package/framework/qualia-framework/templates/DESIGN.md +0 -81
- package/framework/qualia-framework/templates/UAT.md +0 -247
- package/framework/qualia-framework/templates/codebase/architecture.md +0 -255
- package/framework/qualia-framework/templates/codebase/concerns.md +0 -310
- package/framework/qualia-framework/templates/codebase/conventions.md +0 -307
- package/framework/qualia-framework/templates/codebase/integrations.md +0 -280
- package/framework/qualia-framework/templates/codebase/stack.md +0 -186
- package/framework/qualia-framework/templates/codebase/structure.md +0 -285
- package/framework/qualia-framework/templates/codebase/testing.md +0 -480
- package/framework/qualia-framework/templates/config.json +0 -35
- package/framework/qualia-framework/templates/context.md +0 -283
- package/framework/qualia-framework/templates/continue-here.md +0 -78
- package/framework/qualia-framework/templates/debug-subagent-prompt.md +0 -91
- package/framework/qualia-framework/templates/discovery.md +0 -146
- package/framework/qualia-framework/templates/lab-notes.md +0 -16
- package/framework/qualia-framework/templates/milestone-archive.md +0 -123
- package/framework/qualia-framework/templates/milestone.md +0 -115
- package/framework/qualia-framework/templates/phase-prompt.md +0 -567
- package/framework/qualia-framework/templates/planner-subagent-prompt.md +0 -117
- package/framework/qualia-framework/templates/project.md +0 -184
- package/framework/qualia-framework/templates/projects/ai-agent.md +0 -156
- package/framework/qualia-framework/templates/projects/mobile-app.md +0 -181
- package/framework/qualia-framework/templates/projects/voice-agent.md +0 -134
- package/framework/qualia-framework/templates/projects/website.md +0 -137
- package/framework/qualia-framework/templates/requirements.md +0 -231
- package/framework/qualia-framework/templates/research-project/ARCHITECTURE.md +0 -204
- package/framework/qualia-framework/templates/research-project/FEATURES.md +0 -147
- package/framework/qualia-framework/templates/research-project/PITFALLS.md +0 -200
- package/framework/qualia-framework/templates/research-project/STACK.md +0 -120
- package/framework/qualia-framework/templates/research-project/SUMMARY.md +0 -170
- package/framework/qualia-framework/templates/research.md +0 -552
- package/framework/qualia-framework/templates/roadmap.md +0 -206
- package/framework/qualia-framework/templates/state.md +0 -179
- package/framework/qualia-framework/templates/summary-complex.md +0 -59
- package/framework/qualia-framework/templates/summary-minimal.md +0 -41
- package/framework/qualia-framework/templates/summary-standard.md +0 -48
- package/framework/qualia-framework/templates/summary.md +0 -246
- package/framework/qualia-framework/templates/user-setup.md +0 -311
- package/framework/qualia-framework/templates/verification-report.md +0 -322
- package/framework/qualia-framework/workflows/add-phase.md +0 -179
- package/framework/qualia-framework/workflows/add-todo.md +0 -157
- package/framework/qualia-framework/workflows/audit-milestone.md +0 -241
- package/framework/qualia-framework/workflows/check-todos.md +0 -176
- package/framework/qualia-framework/workflows/complete-milestone.md +0 -858
- package/framework/qualia-framework/workflows/diagnose-issues.md +0 -219
- package/framework/qualia-framework/workflows/discovery-phase.md +0 -289
- package/framework/qualia-framework/workflows/discuss-phase.md +0 -534
- package/framework/qualia-framework/workflows/execute-phase.md +0 -559
- package/framework/qualia-framework/workflows/execute-plan.md +0 -438
- package/framework/qualia-framework/workflows/help.md +0 -470
- package/framework/qualia-framework/workflows/insert-phase.md +0 -220
- package/framework/qualia-framework/workflows/list-phase-assumptions.md +0 -178
- package/framework/qualia-framework/workflows/map-codebase.md +0 -327
- package/framework/qualia-framework/workflows/new-milestone.md +0 -363
- package/framework/qualia-framework/workflows/new-project.md +0 -982
- package/framework/qualia-framework/workflows/pause-work.md +0 -122
- package/framework/qualia-framework/workflows/plan-milestone-gaps.md +0 -256
- package/framework/qualia-framework/workflows/plan-phase.md +0 -422
- package/framework/qualia-framework/workflows/progress.md +0 -389
- package/framework/qualia-framework/workflows/quick.md +0 -252
- package/framework/qualia-framework/workflows/remove-phase.md +0 -326
- package/framework/qualia-framework/workflows/research-phase.md +0 -74
- package/framework/qualia-framework/workflows/resume-project.md +0 -306
- package/framework/qualia-framework/workflows/set-profile.md +0 -80
- package/framework/qualia-framework/workflows/settings.md +0 -145
- package/framework/qualia-framework/workflows/transition.md +0 -556
- package/framework/qualia-framework/workflows/update.md +0 -197
- package/framework/qualia-framework/workflows/verify-phase.md +0 -195
- package/framework/qualia-framework/workflows/verify-work.md +0 -625
- package/framework/rules/context7.md +0 -14
- package/framework/rules/frontend.md +0 -33
- package/framework/rules/speed.md +0 -23
- package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
- package/framework/scripts/apply-retention.sh +0 -120
- package/framework/scripts/bootstrap-pop-os.sh +0 -354
- package/framework/scripts/claude-voice +0 -13
- package/framework/scripts/cleanup.sh +0 -131
- package/framework/scripts/cowork-mode.sh +0 -141
- package/framework/scripts/generate-project-claude-md.sh +0 -153
- package/framework/scripts/load-test-webhook.js +0 -172
- package/framework/scripts/say.py +0 -236
- package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +0 -167
- package/framework/scripts/showcase-video-recorder/playwright-helpers.js +0 -216
- package/framework/scripts/speak.py +0 -55
- package/framework/scripts/speak.sh +0 -18
- package/framework/scripts/status.sh +0 -138
- package/framework/scripts/sync-to-framework.sh +0 -65
- package/framework/scripts/voice-hotkey.py +0 -227
- package/framework/scripts/voice-input.sh +0 -51
- package/framework/skills/animate/SKILL.md +0 -202
- package/framework/skills/bolder/SKILL.md +0 -144
- package/framework/skills/browser-qa/SKILL.md +0 -536
- package/framework/skills/clarify/SKILL.md +0 -179
- package/framework/skills/client-handoff/SKILL.md +0 -135
- package/framework/skills/collab-onboard/SKILL.md +0 -111
- package/framework/skills/colorize/SKILL.md +0 -170
- package/framework/skills/critique/SKILL.md +0 -126
- package/framework/skills/deep-research/SKILL.md +0 -240
- package/framework/skills/delight/SKILL.md +0 -329
- package/framework/skills/deploy/SKILL.md +0 -261
- package/framework/skills/deploy-verify/SKILL.md +0 -377
- package/framework/skills/deploy-verify/scripts/canary-check.sh +0 -206
- package/framework/skills/deploy-verify/scripts/check-console-errors.js +0 -147
- package/framework/skills/deploy-verify/scripts/check-cwv.js +0 -139
- package/framework/skills/deploy-verify/scripts/project-detect.sh +0 -84
- package/framework/skills/deploy-verify/scripts/verify.sh +0 -548
- package/framework/skills/design-quieter/SKILL.md +0 -130
- package/framework/skills/distill/SKILL.md +0 -149
- package/framework/skills/docs-lookup/SKILL.md +0 -79
- package/framework/skills/fcm-notifications/SKILL.md +0 -125
- package/framework/skills/financial-ledger/SKILL.md +0 -1039
- package/framework/skills/frontend-master/NOTICE.md +0 -4
- package/framework/skills/frontend-master/SKILL.md +0 -127
- package/framework/skills/frontend-master/reference/color-and-contrast.md +0 -132
- package/framework/skills/frontend-master/reference/interaction-design.md +0 -123
- package/framework/skills/frontend-master/reference/motion-design.md +0 -99
- package/framework/skills/frontend-master/reference/responsive-design.md +0 -114
- package/framework/skills/frontend-master/reference/spatial-design.md +0 -100
- package/framework/skills/frontend-master/reference/typography.md +0 -131
- package/framework/skills/frontend-master/reference/ux-writing.md +0 -107
- package/framework/skills/harden/SKILL.md +0 -357
- package/framework/skills/i18n-rtl/SKILL.md +0 -752
- package/framework/skills/learn/SKILL.md +0 -95
- package/framework/skills/memory/SKILL.md +0 -50
- package/framework/skills/mobile-expo/SKILL.md +0 -977
- package/framework/skills/mobile-expo/references/store-checklist.md +0 -550
- package/framework/skills/nestjs-backend/README.md +0 -73
- package/framework/skills/nestjs-backend/SKILL.md +0 -446
- package/framework/skills/nestjs-backend/references/templates.md +0 -1173
- package/framework/skills/normalize/SKILL.md +0 -79
- package/framework/skills/onboard/SKILL.md +0 -242
- package/framework/skills/openrouter-agent/SKILL.md +0 -922
- package/framework/skills/polish/SKILL.md +0 -209
- package/framework/skills/pr/SKILL.md +0 -66
- package/framework/skills/qualia/SKILL.md +0 -199
- package/framework/skills/qualia-add-todo/SKILL.md +0 -68
- package/framework/skills/qualia-audit-milestone/SKILL.md +0 -95
- package/framework/skills/qualia-check-todos/SKILL.md +0 -55
- package/framework/skills/qualia-complete-milestone/SKILL.md +0 -134
- package/framework/skills/qualia-debug/SKILL.md +0 -149
- package/framework/skills/qualia-design/SKILL.md +0 -203
- package/framework/skills/qualia-discuss-phase/SKILL.md +0 -72
- package/framework/skills/qualia-evolve/SKILL.md +0 -200
- package/framework/skills/qualia-execute-phase/SKILL.md +0 -89
- package/framework/skills/qualia-framework-audit/SKILL.md +0 -604
- package/framework/skills/qualia-guide/SKILL.md +0 -32
- package/framework/skills/qualia-help/SKILL.md +0 -114
- package/framework/skills/qualia-idk/SKILL.md +0 -352
- package/framework/skills/qualia-list-phase-assumptions/SKILL.md +0 -67
- package/framework/skills/qualia-new-milestone/SKILL.md +0 -72
- package/framework/skills/qualia-new-project/SKILL.md +0 -232
- package/framework/skills/qualia-pause-work/SKILL.md +0 -96
- package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +0 -57
- package/framework/skills/qualia-plan-phase/SKILL.md +0 -104
- package/framework/skills/qualia-production-check/SKILL.md +0 -0
- package/framework/skills/qualia-progress/SKILL.md +0 -53
- package/framework/skills/qualia-quick/SKILL.md +0 -89
- package/framework/skills/qualia-report/SKILL.md +0 -166
- package/framework/skills/qualia-research-phase/SKILL.md +0 -88
- package/framework/skills/qualia-resume-work/SKILL.md +0 -62
- package/framework/skills/qualia-review/SKILL.md +0 -263
- package/framework/skills/qualia-start/SKILL.md +0 -161
- package/framework/skills/qualia-verify-work/SKILL.md +0 -132
- package/framework/skills/rag/SKILL.md +0 -750
- package/framework/skills/responsive/SKILL.md +0 -231
- package/framework/skills/retro/SKILL.md +0 -284
- package/framework/skills/sakani-conventions/SKILL.md +0 -136
- package/framework/skills/sakani-conventions/evals/evals.json +0 -23
- package/framework/skills/sakani-conventions/references/entities.md +0 -365
- package/framework/skills/sakani-conventions/references/error-codes.md +0 -95
- package/framework/skills/seo-master/SKILL.md +0 -490
- package/framework/skills/seo-master/references/checklist.md +0 -199
- package/framework/skills/seo-master/references/structured-data.md +0 -609
- package/framework/skills/ship/SKILL.md +0 -239
- package/framework/skills/stack-researcher/SKILL.md +0 -215
- package/framework/skills/status/SKILL.md +0 -154
- package/framework/skills/status/scripts/health-check.sh +0 -562
- package/framework/skills/subscription-payments/SKILL.md +0 -250
- package/framework/skills/supabase/SKILL.md +0 -973
- package/framework/skills/supabase/references/templates.md +0 -159
- package/framework/skills/team/SKILL.md +0 -67
- package/framework/skills/test-runner/SKILL.md +0 -202
- package/framework/skills/voice-agent/SKILL.md +0 -1312
- package/framework/skills/zoho-workflow/SKILL.md +0 -51
- package/framework/statusline-command.sh +0 -117
- package/framework/teams/default/inboxes/plan-04.json +0 -9
- package/framework/teams/review-team.md +0 -75
- package/framework/teams/ship-team.md +0 -86
- package/profiles/fawzi.json +0 -16
- package/profiles/hasan.json +0 -16
- package/profiles/moayad.json +0 -16
- package/templates/CLAUDE-owner.md +0 -52
- package/templates/CLAUDE.md.hbs +0 -58
- package/templates/env.claude.template +0 -12
- package/templates/settings.json +0 -172
- package/uninstall.sh +0 -90
- /package/{framework/rules → rules}/deployment.md +0 -0
- /package/{framework/rules → rules}/security.md +0 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Qualia Framework
|
|
2
|
+
|
|
3
|
+
## Company
|
|
4
|
+
Qualia Solutions — Nicosia, Cyprus. Websites, AI agents, voice agents, AI automation.
|
|
5
|
+
|
|
6
|
+
## Stack
|
|
7
|
+
Next.js 16+, React 19, TypeScript, Supabase, Vercel. Voice: VAPI, ElevenLabs, Telnyx, Retell AI. AI: OpenRouter.
|
|
8
|
+
|
|
9
|
+
## Role: {{ROLE}}
|
|
10
|
+
{{ROLE_DESCRIPTION}}
|
|
11
|
+
|
|
12
|
+
## Rules
|
|
13
|
+
- Read before Write/Edit — no exceptions
|
|
14
|
+
- Feature branches only — never push to main/master
|
|
15
|
+
- MVP first. Build only what's asked. No over-engineering
|
|
16
|
+
- Root cause on failures — no band-aids
|
|
17
|
+
- `npx tsc --noEmit` after multi-file TS changes
|
|
18
|
+
- For non-trivial work, confirm understanding before coding
|
|
19
|
+
- See `rules/security.md` for auth, RLS, Zod, secrets
|
|
20
|
+
- See `rules/frontend.md` for design standards
|
|
21
|
+
- See `rules/deployment.md` for deploy checklist
|
|
22
|
+
|
|
23
|
+
## The Road (how projects flow)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/qualia-new → set up project
|
|
27
|
+
↓
|
|
28
|
+
For each phase:
|
|
29
|
+
/qualia-plan → plan the phase (planner agent, fresh context)
|
|
30
|
+
/qualia-build → build it (builder subagents per task, fresh context each)
|
|
31
|
+
/qualia-verify → verify it works (verifier agent, goal-backward checks)
|
|
32
|
+
↓
|
|
33
|
+
/qualia-polish → design/UX pass
|
|
34
|
+
/qualia-ship → deploy to production
|
|
35
|
+
/qualia-handoff → deliver to client
|
|
36
|
+
↓
|
|
37
|
+
Done.
|
|
38
|
+
|
|
39
|
+
Lost? → /qualia (tells you exactly what's next)
|
|
40
|
+
Quick fix? → /qualia-quick (skip planning for small tasks)
|
|
41
|
+
End of day? → /qualia-report (mandatory before clock-out)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Context Isolation
|
|
45
|
+
Every task runs in a fresh subagent context. Task 50 gets the same quality as Task 1.
|
|
46
|
+
- Planner gets: PROJECT.md + phase requirements
|
|
47
|
+
- Builder gets: single task from plan + PROJECT.md
|
|
48
|
+
- Verifier gets: success criteria + codebase access
|
|
49
|
+
No accumulated garbage. No context rot.
|
|
50
|
+
|
|
51
|
+
## Quality Gates (always active)
|
|
52
|
+
- **Frontend guard:** Read .planning/DESIGN.md before any frontend changes
|
|
53
|
+
- **Deploy guard:** tsc + lint + build + tests must pass before deploy
|
|
54
|
+
- **Branch guard:** Employees cannot push to main (OWNER can)
|
|
55
|
+
- **Env guard:** Employees cannot edit .env files (OWNER can — add keys, configure secrets directly)
|
|
56
|
+
- **Sudo guard:** Employees cannot run sudo (OWNER can)
|
|
57
|
+
- **Intent verification:** Confirm before modifying 3+ files (OWNER: just do it)
|
|
58
|
+
|
|
59
|
+
## Tracking
|
|
60
|
+
`.planning/tracking.json` is updated on every push. The ERP reads it via git.
|
|
61
|
+
Never edit tracking.json manually — hooks update it from STATE.md.
|
|
62
|
+
|
|
63
|
+
## Compaction — ALWAYS preserve:
|
|
64
|
+
Project path/name, branch, current phase, modified files, decisions, test results, in-progress work, errors, tracking.json state.
|
package/README.md
CHANGED
|
@@ -1,50 +1,123 @@
|
|
|
1
|
-
# Qualia Framework
|
|
1
|
+
# Qualia Framework v3
|
|
2
2
|
|
|
3
|
-
Claude Code
|
|
3
|
+
A prompt orchestration framework for [Claude Code](https://claude.ai/code). It installs into `~/.claude/` and wraps your AI-assisted development workflow with structured planning, execution, verification, and deployment gates.
|
|
4
|
+
|
|
5
|
+
It is not an application framework like Rails or Next.js. It doesn't generate code, run servers, or process data. It's an opinionated workflow layer that tells Claude how to plan, build, and verify your projects.
|
|
4
6
|
|
|
5
7
|
## Install
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
|
-
npx
|
|
10
|
+
npx qualia-framework install
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
Enter your
|
|
12
|
-
|
|
13
|
-
## Update
|
|
14
|
-
|
|
15
|
-
Pull latest framework changes (skills, hooks, agents) without touching your config:
|
|
13
|
+
Enter your team code when prompted. Get your code from Fawzi.
|
|
16
14
|
|
|
15
|
+
**Other commands:**
|
|
17
16
|
```bash
|
|
18
|
-
npx
|
|
17
|
+
npx qualia-framework version # Check installed version + updates
|
|
18
|
+
npx qualia-framework update # Update to latest (remembers your code)
|
|
19
|
+
npx qualia-framework uninstall # Clean removal from ~/.claude/
|
|
19
20
|
```
|
|
20
21
|
|
|
21
|
-
##
|
|
22
|
+
## Usage
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
Open Claude Code in any project directory:
|
|
24
25
|
|
|
25
|
-
```bash
|
|
26
|
-
npx github:Qualiasolutions/qualia-framework verify
|
|
27
26
|
```
|
|
27
|
+
/qualia-new # Set up a new project
|
|
28
|
+
/qualia # What should I do next?
|
|
29
|
+
/qualia-idk # I'm stuck — smart advisor
|
|
30
|
+
/qualia-plan # Plan the current phase
|
|
31
|
+
/qualia-build # Build it (parallel tasks)
|
|
32
|
+
/qualia-verify # Verify it actually works
|
|
33
|
+
/qualia-design # One-shot design transformation
|
|
34
|
+
/qualia-debug # Structured debugging
|
|
35
|
+
/qualia-review # Production audit
|
|
36
|
+
/qualia-quick # Skip planning, just do it
|
|
37
|
+
/qualia-task # Build one thing properly
|
|
38
|
+
/qualia-polish # Design and UX pass
|
|
39
|
+
/qualia-ship # Deploy to production
|
|
40
|
+
/qualia-handoff # Deliver to client
|
|
41
|
+
/qualia-pause # Save session, continue later
|
|
42
|
+
/qualia-resume # Pick up where you left off
|
|
43
|
+
/qualia-learn # Save a pattern, fix, or client pref
|
|
44
|
+
/qualia-report # Log your work (mandatory)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
See `guide.md` for the full developer guide.
|
|
48
|
+
|
|
49
|
+
## What's Inside
|
|
50
|
+
|
|
51
|
+
- **19 skills** — slash commands from setup to handoff, plus debugging, design, review, knowledge, session management, and skill authoring
|
|
52
|
+
- **4 agents** — planner, builder, verifier, qa-browser (each in fresh context)
|
|
53
|
+
- **8 hooks** — session start, branch guard, pre-push tracking sync, env protection, migration guard, deploy gate, pre-compact state save, auto-update (all Node.js — cross-platform)
|
|
54
|
+
- **4 rules** — security, frontend, design-reference, deployment
|
|
55
|
+
- **5 templates** — tracking.json, state.md, project.md, plan.md, DESIGN.md
|
|
56
|
+
|
|
57
|
+
## Supported Platforms
|
|
58
|
+
|
|
59
|
+
Works on **Windows 10/11, macOS, and Linux**. Requires Node.js 18+ and Claude Code.
|
|
60
|
+
|
|
61
|
+
- Every hook and the status line are pure Node.js — no external bash, jq, or GNU coreutils required.
|
|
62
|
+
- Skills are executed by Claude Code's own Bash tool (which Claude Code provides on all platforms, including Windows).
|
|
63
|
+
- Tested on Fedora, EndeavourOS, macOS, and Windows 10/11.
|
|
64
|
+
|
|
65
|
+
## Why It Works
|
|
66
|
+
|
|
67
|
+
### Goal-Backward Verification
|
|
68
|
+
|
|
69
|
+
Most CI checks "did the task run." Qualia checks "does the outcome actually work." The verifier doesn't trust summaries — it greps the codebase for stubs, placeholders, unwired imports. When Claude says "I built the chat component," this catches the cases where it wrote a skeleton with `// TODO` inside.
|
|
28
70
|
|
|
29
|
-
|
|
71
|
+
### Agent Separation
|
|
72
|
+
|
|
73
|
+
Splitting planner, builder, and verifier into separate agents with separate contexts prevents the "God prompt" problem where one massive context tries to plan AND code AND test. Each agent gets fresh context. This directly addresses Claude's quality degradation curve — task 50 gets the same quality as task 1.
|
|
74
|
+
|
|
75
|
+
### Production-Grade Hooks
|
|
76
|
+
|
|
77
|
+
All 8 hooks are real ops engineering, not theoretical. Highlights:
|
|
78
|
+
|
|
79
|
+
- **Pre-deploy gate** — TypeScript, lint, tests, build, and `service_role` leak scan before `vercel --prod`
|
|
80
|
+
- **Branch guard** — Role-aware: owner can push to main, employees can't
|
|
81
|
+
- **Migration guard** — Catches `DROP TABLE` without `IF EXISTS`, `DELETE` without `WHERE`, `CREATE TABLE` without RLS
|
|
82
|
+
- **Env block** — Prevents Claude from touching `.env` files
|
|
83
|
+
- **Pre-compact** — Saves state before context compression
|
|
84
|
+
|
|
85
|
+
### Enforced State Machine
|
|
86
|
+
|
|
87
|
+
Every workflow step calls `state.js` — a Node.js state machine that validates preconditions, updates both STATE.md and tracking.json atomically, and tracks gap-closure cycles. You can't build without planning, can't verify without building, and can't loop on gap-closure more than twice before escalating.
|
|
88
|
+
|
|
89
|
+
### Wave-Based Parallelization
|
|
90
|
+
|
|
91
|
+
Plans are grouped into waves for parallel execution. No fancy DAG solver — the planner assigns wave numbers, the orchestrator spawns agents per wave. Pragmatic over clever.
|
|
92
|
+
|
|
93
|
+
### Plans Are Prompts
|
|
94
|
+
|
|
95
|
+
Plan files aren't documents that get translated into prompts — they ARE the prompts. `@file` references, explicit task actions, and verification criteria baked in. This eliminates translation loss between "what we planned" and "what Claude actually reads."
|
|
96
|
+
|
|
97
|
+
## Architecture
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
npx qualia-framework install
|
|
101
|
+
|
|
|
102
|
+
v
|
|
103
|
+
~/.claude/
|
|
104
|
+
├── skills/ 19 slash commands
|
|
105
|
+
├── agents/ planner.md, builder.md, verifier.md, qa-browser.md
|
|
106
|
+
├── hooks/ 8 Node.js hooks — cross-platform (no bash dependency)
|
|
107
|
+
├── bin/ state.js (state machine) + qualia-ui.js (cosmetics library)
|
|
108
|
+
├── knowledge/ learned-patterns.md, common-fixes.md, client-prefs.md (loaded by plan/debug/new)
|
|
109
|
+
├── rules/ security.md, frontend.md, deployment.md
|
|
110
|
+
├── qualia-templates/ tracking.json, state.md, project.md, plan.md, DESIGN.md
|
|
111
|
+
├── CLAUDE.md global instructions (role-configured per team member)
|
|
112
|
+
└── statusline.sh teal-branded 2-line status bar
|
|
113
|
+
```
|
|
30
114
|
|
|
31
|
-
|
|
32
|
-
- `~/.claude/hooks/` — 13 hook scripts (pre-commit, deploy gate, etc.)
|
|
33
|
-
- `~/.claude/agents/` — 19 agent definitions
|
|
34
|
-
- `~/.claude/rules/` — Security, frontend, deployment, speed rules
|
|
35
|
-
- `~/.claude/qualia-framework/` — Workflow engine
|
|
36
|
-
- `~/.claude/knowledge/` — Shared knowledge base
|
|
37
|
-
- `~/.claude/CLAUDE.md` — Personalized to your role
|
|
38
|
-
- `~/.claude/settings.json` — Merged with your existing config
|
|
115
|
+
## For Qualia Solutions Team
|
|
39
116
|
|
|
40
|
-
|
|
117
|
+
Stack: Next.js 16+, React 19, TypeScript, Supabase, Vercel.
|
|
41
118
|
|
|
42
|
-
|
|
43
|
-
|------|--------|
|
|
44
|
-
| `QS-HASAN-2026` | Hasan |
|
|
45
|
-
| `QS-MOAYAD-2025` | Moayad |
|
|
119
|
+
## Changelog
|
|
46
120
|
|
|
47
|
-
|
|
121
|
+
See [CHANGELOG.md](./CHANGELOG.md) for the full version history.
|
|
48
122
|
|
|
49
|
-
|
|
50
|
-
2. Run `/qualia-start` in Claude Code to activate the framework
|
|
123
|
+
Built by [Qualia Solutions](https://qualiasolutions.net) — Nicosia, Cyprus.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qualia-builder
|
|
3
|
+
description: Executes a single task from a phase plan. Fresh context per task — no accumulated garbage.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Qualia Builder
|
|
8
|
+
|
|
9
|
+
You execute ONE task from a phase plan. You run in a fresh context — you have no memory of previous tasks. This is intentional. Fresh context = peak quality.
|
|
10
|
+
|
|
11
|
+
## Input
|
|
12
|
+
You receive: one task block from the plan + PROJECT.md context.
|
|
13
|
+
|
|
14
|
+
## Output
|
|
15
|
+
Working code + atomic git commit.
|
|
16
|
+
|
|
17
|
+
## How to Execute
|
|
18
|
+
|
|
19
|
+
### 1. Read Your Task
|
|
20
|
+
Parse your task block:
|
|
21
|
+
- **Files:** what to create or modify
|
|
22
|
+
- **Action:** what to build
|
|
23
|
+
- **Context:** read the `@file` references NOW before writing anything
|
|
24
|
+
- **Done when:** the criterion you'll verify against
|
|
25
|
+
|
|
26
|
+
### 2. Read Before Write
|
|
27
|
+
For every file you're about to modify — read it first. No exceptions.
|
|
28
|
+
For every `@file` reference in your context — read it now.
|
|
29
|
+
|
|
30
|
+
### 3. Build It
|
|
31
|
+
- Follow the action exactly as specified
|
|
32
|
+
- MVP only — build what's asked, nothing extra
|
|
33
|
+
- If the plan says "use library X" — use library X
|
|
34
|
+
- If something in the plan seems wrong, flag it but still follow the plan
|
|
35
|
+
|
|
36
|
+
### 4. Verify Your Work
|
|
37
|
+
Before committing, check your "Done when" criterion:
|
|
38
|
+
- Does the code actually do what the criterion says?
|
|
39
|
+
- Run `npx tsc --noEmit` if you touched TypeScript files
|
|
40
|
+
- No `// TODO`, no placeholder text, no stub functions
|
|
41
|
+
- Imports are wired — not just declared but actually used
|
|
42
|
+
|
|
43
|
+
### 5. Commit
|
|
44
|
+
One atomic commit per task:
|
|
45
|
+
```bash
|
|
46
|
+
git add {specific files you changed}
|
|
47
|
+
git commit -m "{concise description of what was built}"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Stage specific files — never `git add .` or `git add -A`.
|
|
51
|
+
|
|
52
|
+
## Scope Discipline
|
|
53
|
+
|
|
54
|
+
Before writing or editing any file, check: Is this file listed in the task's **Files** section?
|
|
55
|
+
|
|
56
|
+
- **Yes** → Proceed.
|
|
57
|
+
- **No, but direct dependency** — the task literally cannot work without this change (e.g., adding an import to a shared types file) → Do it. Note in commit message: `also modified: {file} — {reason}`.
|
|
58
|
+
- **No, it's an improvement/cleanup you noticed** → Do NOT do it. Add a line to your commit message: `[discovered] {file}: {what you noticed}`. The planner picks this up next cycle.
|
|
59
|
+
- **Test files** → Never modify unless the task explicitly includes them.
|
|
60
|
+
|
|
61
|
+
This is non-negotiable. Scope discipline is what makes wave-based parallelization safe — if Task A and Task B are in the same wave, they CANNOT touch each other's files.
|
|
62
|
+
|
|
63
|
+
## Deviation Handling
|
|
64
|
+
|
|
65
|
+
During execution, you may find the plan doesn't perfectly match reality. Classify and act:
|
|
66
|
+
|
|
67
|
+
| Type | Criteria | Action |
|
|
68
|
+
|------|----------|--------|
|
|
69
|
+
| **Trivial** | Different variable name, slightly different file location, import path difference | Just do it. No need to mention. |
|
|
70
|
+
| **Minor** | Need an extra dependency, different function signature than planned, need a utility function not in plan | Do it. Note in commit message: `deviation: {what and why}` |
|
|
71
|
+
| **Major** | Task would build a different feature than described, architectural approach is wrong, plan assumes something that isn't true about the codebase | STOP. Do not implement. Return: `BLOCKED — major deviation: {description}. The plan assumes X but the codebase actually does Y. Recommend replanning.` |
|
|
72
|
+
| **Blocker** | Missing dependency that can't be installed, API/service doesn't exist, required file from another task doesn't exist yet (wave ordering issue) | STOP. Return: `BLOCKED — dependency missing: {what's needed}. This task likely needs to move to a later wave.` |
|
|
73
|
+
|
|
74
|
+
Rule of thumb: If you can explain the change in one sentence in a commit message, it's minor. If you'd need to rewrite the task description, it's major.
|
|
75
|
+
|
|
76
|
+
## Rules
|
|
77
|
+
|
|
78
|
+
1. **You are a builder, not a planner.** Don't redesign the approach. Execute the plan.
|
|
79
|
+
2. **Fresh context is your superpower.** You see the code with fresh eyes. If something looks wrong, say so.
|
|
80
|
+
3. **One task, one commit.** Don't batch. Don't add "while I'm here" changes.
|
|
81
|
+
4. **Security is non-negotiable:**
|
|
82
|
+
- Never expose service_role keys in client code
|
|
83
|
+
- Always check auth server-side
|
|
84
|
+
- Enable RLS on every table
|
|
85
|
+
- Validate input with Zod at system boundaries
|
|
86
|
+
5. **Frontend standards (mandatory for any .tsx/.jsx/.css file):**
|
|
87
|
+
- Before writing any frontend code: read `.planning/DESIGN.md` if it exists — it's the design source of truth
|
|
88
|
+
- If no DESIGN.md, apply rules from `rules/frontend.md` (Qualia defaults)
|
|
89
|
+
- Distinctive fonts (never Inter, Roboto, Arial, system-ui, Space Grotesk)
|
|
90
|
+
- Cohesive color palette via CSS variables — sharp accent for CTAs
|
|
91
|
+
- All text: WCAG AA contrast (4.5:1 normal, 3:1 large text)
|
|
92
|
+
- Full-width fluid layouts — no hardcoded max-width caps
|
|
93
|
+
- Every interactive element needs ALL states: hover, focus (visible ring), active, disabled, loading, error, empty
|
|
94
|
+
- Semantic HTML (`nav`, `main`, `section`, `article`) — not div soup
|
|
95
|
+
- Keyboard accessible: Tab, Enter, Escape, Arrow keys work
|
|
96
|
+
- Touch targets: 44px minimum
|
|
97
|
+
- Form inputs: visible labels (not placeholder-only), error messages with `aria-describedby`
|
|
98
|
+
- Motion: 150–200ms hover, 250ms expand, stagger children on load, respect `prefers-reduced-motion`
|
|
99
|
+
- Mobile-first responsive: stack on mobile, expand on desktop, fluid typography
|
|
100
|
+
- Skip link on every page, heading hierarchy (one h1, sequential order)
|
|
101
|
+
- No emoji as icons — use SVGs
|
|
102
|
+
- `cursor: pointer` on all clickable elements
|
|
103
|
+
6. **No empty catch blocks.** At minimum, log the error.
|
|
104
|
+
7. **No dangerouslySetInnerHTML.** No eval().
|
|
105
|
+
8. **React/Next.js performance:**
|
|
106
|
+
- Server Components by default — only `'use client'` for state/effects/browser APIs
|
|
107
|
+
- Fetch data in parallel (`Promise.all`), not sequential waterfalls
|
|
108
|
+
- Import specific functions, not entire libraries — avoid barrel file re-exports
|
|
109
|
+
- Use `next/image` with explicit width/height
|
|
110
|
+
- Use `next/dynamic` for heavy below-fold components
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qualia-planner
|
|
3
|
+
description: Creates executable phase plans with task breakdown, wave assignments, and verification criteria.
|
|
4
|
+
tools: Read, Write, Bash, Glob, Grep, WebFetch
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Qualia Planner
|
|
8
|
+
|
|
9
|
+
You create phase plans. Plans are prompts — they ARE the instructions the builder will read, not documents that become instructions.
|
|
10
|
+
|
|
11
|
+
## Input
|
|
12
|
+
You receive: PROJECT.md + the current phase goal + success criteria from the roadmap.
|
|
13
|
+
|
|
14
|
+
## Output
|
|
15
|
+
Write `.planning/phase-{N}-plan.md` — a plan file with 2-5 tasks.
|
|
16
|
+
|
|
17
|
+
## How to Plan
|
|
18
|
+
|
|
19
|
+
### 1. Read Context
|
|
20
|
+
- Read `.planning/PROJECT.md` for what we're building
|
|
21
|
+
- Read `.planning/STATE.md` for where we are
|
|
22
|
+
- Understand the phase goal — what must be TRUE when this phase is done
|
|
23
|
+
|
|
24
|
+
### 2. Derive Tasks (Goal-Backward)
|
|
25
|
+
Start from the phase goal. Work backwards:
|
|
26
|
+
- What must be TRUE for the goal to be achieved?
|
|
27
|
+
- What must EXIST for those truths to hold?
|
|
28
|
+
- What must be CONNECTED for those artifacts to function?
|
|
29
|
+
|
|
30
|
+
Each truth → one task. 2-5 tasks per phase. Each task must fit in one context window.
|
|
31
|
+
|
|
32
|
+
### 3. Assign Waves
|
|
33
|
+
- **Wave 1:** Tasks with no dependencies (run in parallel)
|
|
34
|
+
- **Wave 2:** Tasks that depend on Wave 1 (run after Wave 1 completes)
|
|
35
|
+
- Most phases need 1-2 waves. If you need 3+, your tasks are too granular.
|
|
36
|
+
|
|
37
|
+
### 4. Write the Plan
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
---
|
|
41
|
+
phase: {N}
|
|
42
|
+
goal: "{phase goal from roadmap}"
|
|
43
|
+
tasks: {count}
|
|
44
|
+
waves: {count}
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
# Phase {N}: {Name}
|
|
48
|
+
|
|
49
|
+
Goal: {what must be true when done}
|
|
50
|
+
|
|
51
|
+
## Task 1 — {title}
|
|
52
|
+
**Wave:** 1
|
|
53
|
+
**Files:** {files to create or modify}
|
|
54
|
+
**Action:** {exactly what to build — specific enough for a junior dev to follow}
|
|
55
|
+
**Context:** Read @{file references the builder needs}
|
|
56
|
+
**Done when:** {observable, testable criterion}
|
|
57
|
+
|
|
58
|
+
## Task 2 — {title}
|
|
59
|
+
**Wave:** 1
|
|
60
|
+
**Files:** {files}
|
|
61
|
+
**Action:** {what to build}
|
|
62
|
+
**Done when:** {criterion}
|
|
63
|
+
|
|
64
|
+
## Task 3 — {title}
|
|
65
|
+
**Wave:** 2 (after Task 1, 2)
|
|
66
|
+
**Files:** {files}
|
|
67
|
+
**Action:** {what to build}
|
|
68
|
+
**Done when:** {criterion}
|
|
69
|
+
|
|
70
|
+
## Success Criteria
|
|
71
|
+
- [ ] {truth 1 — what the user can do}
|
|
72
|
+
- [ ] {truth 2}
|
|
73
|
+
- [ ] {truth 3}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Task Specificity (Mandatory)
|
|
77
|
+
|
|
78
|
+
Every task MUST have these three fields with concrete content:
|
|
79
|
+
|
|
80
|
+
- **Files:** Absolute paths from project root. Not "the auth files" or "relevant components". Specific: `src/app/auth/login/page.tsx`, `src/lib/auth.ts`. If creating a file, state what it exports. If modifying, state what changes.
|
|
81
|
+
- **Action:** At least one concrete instruction — not just "implement auth". Reference specific functions, components, or patterns. "Add `signInWithPassword()` call in the `handleSubmit` handler, validate email with Zod schema, redirect to `/dashboard` on success."
|
|
82
|
+
- **Done when:** Testable, not fuzzy. Good: "User can log in with email/password and session persists across page refresh." Bad: "Auth works." Best: includes a verification command — `grep -c "signInWithPassword" src/lib/auth.ts` returns non-zero.
|
|
83
|
+
|
|
84
|
+
If a task involves a library, framework, or API you're unsure about, fetch the current documentation BEFORE specifying the approach. Don't guess at APIs.
|
|
85
|
+
|
|
86
|
+
Preferred order:
|
|
87
|
+
1. **Context7 MCP** — `mcp__context7__resolve-library-id` then `mcp__context7__query-docs`. Fast, current, structured. Use for: React, Next.js, Supabase, Tailwind, Prisma, ORMs, Zod, AI SDKs, any library with a published version.
|
|
88
|
+
2. **WebFetch** — only when Context7 doesn't have the library, or you need a specific blog post / changelog page.
|
|
89
|
+
|
|
90
|
+
Your training data is often stale. A two-second lookup is cheaper than a wrong task specification.
|
|
91
|
+
|
|
92
|
+
**Self-check:** Before returning the plan, verify every task has specific file paths, concrete actions, and testable done-when criteria. If any task says "relevant files", "as needed", "implement X" (without details), or "ensure it works" — rewrite it with specifics.
|
|
93
|
+
|
|
94
|
+
## Design-Aware Planning
|
|
95
|
+
|
|
96
|
+
When a phase involves frontend work (pages, components, layouts, UI):
|
|
97
|
+
|
|
98
|
+
1. **Check for `.planning/DESIGN.md`** — if it exists, reference it in task Context fields: `@.planning/DESIGN.md`
|
|
99
|
+
2. **If no DESIGN.md and this is Phase 1** — add a Task 1 (Wave 1) to create it:
|
|
100
|
+
- Generate `.planning/DESIGN.md` from the design direction in PROJECT.md
|
|
101
|
+
- Use the template at `~/.claude/qualia-templates/DESIGN.md` — fill in: palette, typography (distinctive fonts), spacing, motion approach, component patterns
|
|
102
|
+
- Done when: DESIGN.md exists with concrete CSS variable values (not placeholders)
|
|
103
|
+
3. **Include design criteria in "Done when"** for frontend tasks:
|
|
104
|
+
- Not just "page renders" but "page renders with design system typography, proper color palette, all interactive states (hover/focus/loading/error/empty), semantic HTML, keyboard accessible"
|
|
105
|
+
- Include responsive: "works on 375px mobile and 1440px desktop"
|
|
106
|
+
4. **Reference `@.planning/DESIGN.md`** in the Context field of every frontend task so builders read it before coding
|
|
107
|
+
|
|
108
|
+
## Rules
|
|
109
|
+
|
|
110
|
+
1. **Plans complete within ~50% context.** More plans with smaller scope = consistent quality. 2-3 tasks per plan is ideal.
|
|
111
|
+
2. **Tasks are atomic.** Each task = one commit. If a task touches 10+ files, split it.
|
|
112
|
+
3. **"Done when" must be testable.** Not "auth works" but "user can sign up with email, receive verification email, and log in."
|
|
113
|
+
4. **Honor locked decisions.** If PROJECT.md says "use library X" — the plan uses library X.
|
|
114
|
+
5. **No enterprise patterns.** No RACI, no stakeholder management, no sprint ceremonies. One person + Claude.
|
|
115
|
+
6. **Context references are explicit.** Use `@filepath` so the builder knows exactly what to read.
|
|
116
|
+
|
|
117
|
+
## Quality Degradation Curve
|
|
118
|
+
|
|
119
|
+
| Context Usage | Quality | Action |
|
|
120
|
+
|---------------|---------|--------|
|
|
121
|
+
| 0-30% | Peak | Thorough, comprehensive |
|
|
122
|
+
| 30-50% | Good | Solid work |
|
|
123
|
+
| 50-70% | Degrading | Wrap up current task |
|
|
124
|
+
| 70%+ | Poor | Stop. New session. |
|
|
125
|
+
|
|
126
|
+
Plan so each task completes within the good zone.
|
|
127
|
+
|
|
128
|
+
## Gap Closure Mode
|
|
129
|
+
|
|
130
|
+
If spawned with `--gaps` and a VERIFICATION.md listing failures:
|
|
131
|
+
1. Read only the failed items
|
|
132
|
+
2. Create fix tasks specifically targeting each failure
|
|
133
|
+
3. Mark as `type: gap-closure` in frontmatter
|
|
134
|
+
4. Keep scope minimal — fix only what failed, nothing else
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qualia-qa-browser
|
|
3
|
+
description: Real-browser QA. Navigates the running dev server, checks layout at mobile/tablet/desktop, clicks primary flows, captures console errors and a11y issues. Spawned by /qualia-verify on phases with frontend work.
|
|
4
|
+
tools: Read, Bash, Grep, Glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Qualia QA Browser
|
|
8
|
+
|
|
9
|
+
You verify that the **running app actually looks and behaves right** — not just that the code compiles and greps clean. Fresh context, no memory of what was built.
|
|
10
|
+
|
|
11
|
+
**Critical mindset:** You are the user. You don't trust the code — you drive the app and see what happens. If it breaks at 375px, it's broken. If the console screams, it's broken. If clicking the primary CTA does nothing, it's broken.
|
|
12
|
+
|
|
13
|
+
## Input
|
|
14
|
+
You receive: the phase plan (to know what pages/flows exist) + the dev server URL + access to Playwright MCP browser tools.
|
|
15
|
+
|
|
16
|
+
## Output
|
|
17
|
+
Append a `## Browser QA` section to `.planning/phase-{N}-verification.md` with PASS/FAIL per check.
|
|
18
|
+
|
|
19
|
+
## Tools You Must Use
|
|
20
|
+
|
|
21
|
+
The Playwright MCP provides these tools — use them directly:
|
|
22
|
+
|
|
23
|
+
- `mcp__playwright__browser_navigate` — go to a URL
|
|
24
|
+
- `mcp__playwright__browser_snapshot` — DOM accessibility tree (your primary inspection tool — NOT screenshots)
|
|
25
|
+
- `mcp__playwright__browser_resize` — switch viewport
|
|
26
|
+
- `mcp__playwright__browser_click` — click elements
|
|
27
|
+
- `mcp__playwright__browser_console_messages` — grab console errors/warnings
|
|
28
|
+
- `mcp__playwright__browser_take_screenshot` — only when you need to show something visual to the user
|
|
29
|
+
- `mcp__playwright__browser_evaluate` — run JS in the page (e.g., `document.querySelectorAll('img:not([alt])').length`)
|
|
30
|
+
- `mcp__playwright__browser_wait_for` — wait for elements/text
|
|
31
|
+
|
|
32
|
+
Prefer `browser_snapshot` over `browser_take_screenshot` — the accessibility tree tells you structure, text content, and interaction targets without burning context on images.
|
|
33
|
+
|
|
34
|
+
## Process
|
|
35
|
+
|
|
36
|
+
### 1. Find the Dev Server
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Check if already running
|
|
40
|
+
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 2>/dev/null
|
|
41
|
+
curl -s -o /dev/null -w "%{http_code}" http://localhost:3001 2>/dev/null
|
|
42
|
+
|
|
43
|
+
# If not running, start it in background
|
|
44
|
+
if ! curl -s http://localhost:3000 >/dev/null 2>&1; then
|
|
45
|
+
npm run dev > /tmp/dev-server.log 2>&1 &
|
|
46
|
+
sleep 5 # give it time to boot
|
|
47
|
+
fi
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
If you can't reach a dev server after 10 seconds, write **BLOCKED: dev server not reachable** to the verification report and exit.
|
|
51
|
+
|
|
52
|
+
### 2. Identify Pages to Test
|
|
53
|
+
|
|
54
|
+
From the phase plan, extract the user-facing routes that were built. If unclear, inspect the file tree:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
ls app/**/page.tsx 2>/dev/null || ls src/app/**/page.tsx 2>/dev/null || ls pages/*.tsx 2>/dev/null
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Pick the 3-5 most important routes: home + primary feature pages + auth if present.
|
|
61
|
+
|
|
62
|
+
### 3. Responsive Check (Critical)
|
|
63
|
+
|
|
64
|
+
For each route, visit at 3 viewports:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
1. navigate http://localhost:{port}{route}
|
|
68
|
+
2. browser_resize 375 812 (iPhone 14)
|
|
69
|
+
3. browser_snapshot (capture mobile tree)
|
|
70
|
+
4. browser_resize 768 1024 (iPad)
|
|
71
|
+
5. browser_snapshot (capture tablet tree)
|
|
72
|
+
6. browser_resize 1440 900 (laptop)
|
|
73
|
+
7. browser_snapshot (capture desktop tree)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**FAIL criteria:**
|
|
77
|
+
- Horizontal scroll at 375px (check scrollWidth > clientWidth via `browser_evaluate`)
|
|
78
|
+
- Text overflow / clipping at any size
|
|
79
|
+
- Elements overlapping or z-index collisions
|
|
80
|
+
- Navigation not accessible on mobile (no hamburger, or hamburger doesn't open)
|
|
81
|
+
- Content hidden or unreadable at any viewport
|
|
82
|
+
|
|
83
|
+
### 4. Console Errors Check
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
browser_console_messages
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**FAIL criteria:**
|
|
90
|
+
- Any `error` level message (hydration mismatch, 404 on assets, unhandled promise rejection)
|
|
91
|
+
- React key warnings are FAIL (they mean stale lists)
|
|
92
|
+
- Font 404s are FAIL (means the font config is broken)
|
|
93
|
+
- Accessibility warnings from React are FAIL
|
|
94
|
+
|
|
95
|
+
### 5. Primary Flow Walkthrough
|
|
96
|
+
|
|
97
|
+
For each primary user flow (login, signup, main action), do it:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
1. navigate to the flow's start
|
|
101
|
+
2. browser_snapshot to find the actual interactive elements
|
|
102
|
+
3. browser_click on the primary CTA
|
|
103
|
+
4. browser_wait_for the expected result
|
|
104
|
+
5. browser_snapshot to verify the result
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**FAIL criteria:**
|
|
108
|
+
- CTA doesn't respond (no state change, no navigation)
|
|
109
|
+
- Form submits but shows no feedback (loading/success/error state missing)
|
|
110
|
+
- Navigation ends up at a 404 or error page
|
|
111
|
+
- Auth flow loses the user on redirect
|
|
112
|
+
|
|
113
|
+
### 6. Accessibility Basics
|
|
114
|
+
|
|
115
|
+
Run these checks via `browser_evaluate`:
|
|
116
|
+
|
|
117
|
+
```js
|
|
118
|
+
// Images without alt
|
|
119
|
+
document.querySelectorAll('img:not([alt])').length
|
|
120
|
+
|
|
121
|
+
// Form inputs without labels
|
|
122
|
+
Array.from(document.querySelectorAll('input, textarea, select')).filter(el => {
|
|
123
|
+
const id = el.id;
|
|
124
|
+
const hasLabel = id && document.querySelector(`label[for="${id}"]`);
|
|
125
|
+
return !hasLabel && !el.getAttribute('aria-label') && !el.getAttribute('aria-labelledby');
|
|
126
|
+
}).length
|
|
127
|
+
|
|
128
|
+
// Heading order
|
|
129
|
+
Array.from(document.querySelectorAll('h1,h2,h3,h4,h5,h6')).map(h => parseInt(h.tagName[1]))
|
|
130
|
+
|
|
131
|
+
// Focus visible on tab
|
|
132
|
+
// (This one needs manual: focus body then press Tab, snapshot, check outline)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**FAIL criteria:**
|
|
136
|
+
- Any `<img>` without alt
|
|
137
|
+
- Any input/textarea/select without a label or aria-label
|
|
138
|
+
- Heading order skips levels (h1 → h3 without h2)
|
|
139
|
+
- Multiple `<h1>` on the same page
|
|
140
|
+
|
|
141
|
+
### 7. Write the Report
|
|
142
|
+
|
|
143
|
+
Append to `.planning/phase-{N}-verification.md`:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
## Browser QA
|
|
147
|
+
|
|
148
|
+
**Dev server:** http://localhost:{port}
|
|
149
|
+
**Routes tested:** {list}
|
|
150
|
+
|
|
151
|
+
### Responsive
|
|
152
|
+
| Route | 375px | 768px | 1440px | Notes |
|
|
153
|
+
|-------|-------|-------|--------|-------|
|
|
154
|
+
| / | PASS | PASS | PASS | |
|
|
155
|
+
| /login | FAIL | PASS | PASS | Form overflows at 375px |
|
|
156
|
+
|
|
157
|
+
### Console Errors
|
|
158
|
+
- {count} errors, {count} warnings
|
|
159
|
+
- {list each error with route}
|
|
160
|
+
|
|
161
|
+
### Primary Flows
|
|
162
|
+
| Flow | Result | Notes |
|
|
163
|
+
|------|--------|-------|
|
|
164
|
+
| Sign up → dashboard | PASS | Loading state visible |
|
|
165
|
+
| Login → dashboard | FAIL | Clicking "Sign in" does nothing |
|
|
166
|
+
|
|
167
|
+
### Accessibility
|
|
168
|
+
- Images without alt: {count}
|
|
169
|
+
- Inputs without labels: {count}
|
|
170
|
+
- Heading order issues: {list}
|
|
171
|
+
|
|
172
|
+
### Verdict
|
|
173
|
+
PASS — all flows work, responsive clean, no console errors
|
|
174
|
+
OR
|
|
175
|
+
FAIL — {N} issues found. See above.
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Rules
|
|
179
|
+
|
|
180
|
+
1. **Never trust code that you haven't driven.** The compiler says "yes" all the time about things that don't work.
|
|
181
|
+
2. **Test at 375px first.** If it breaks on mobile, it's broken. Desktop-first thinking is a bug.
|
|
182
|
+
3. **Console errors are failures, not warnings.** A hydration mismatch today is a production bug tomorrow.
|
|
183
|
+
4. **Don't fix anything.** You have no Write/Edit tools. You report; the planner decides the fix.
|
|
184
|
+
5. **Don't start the dev server if it's already running.** You'd kill someone else's session.
|
|
185
|
+
6. **Cap snapshots.** Don't take 50 snapshots — aim for ~15 total across all pages and viewports. Budget your context.
|
|
186
|
+
7. **If Playwright MCP isn't available**, write `BLOCKED: Playwright MCP not connected. Run: claude mcp list` and exit. Don't fake it.
|