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.
- package/README.md +50 -0
- package/bin/cli.js +519 -0
- package/framework/agents/architecture-strategist.md +53 -0
- package/framework/agents/backend-agent.md +150 -0
- package/framework/agents/code-simplicity-reviewer.md +86 -0
- package/framework/agents/frontend-agent.md +111 -0
- package/framework/agents/kieran-typescript-reviewer.md +96 -0
- package/framework/agents/performance-oracle.md +111 -0
- package/framework/agents/qualia-codebase-mapper.md +760 -0
- package/framework/agents/qualia-debugger.md +1203 -0
- package/framework/agents/qualia-executor.md +881 -0
- package/framework/agents/qualia-integration-checker.md +423 -0
- package/framework/agents/qualia-phase-researcher.md +453 -0
- package/framework/agents/qualia-plan-checker.md +699 -0
- package/framework/agents/qualia-planner.md +1241 -0
- package/framework/agents/qualia-project-researcher.md +602 -0
- package/framework/agents/qualia-research-synthesizer.md +236 -0
- package/framework/agents/qualia-roadmapper.md +605 -0
- package/framework/agents/qualia-verifier.md +685 -0
- package/framework/agents/team-orchestrator.md +228 -0
- package/framework/agents/teams/full-stack-team.md +48 -0
- package/framework/agents/teams/optimize-team.md +53 -0
- package/framework/agents/teams/review-team.md +62 -0
- package/framework/agents/teams/ship-team.md +86 -0
- package/framework/agents/test-agent.md +182 -0
- package/framework/askpass.sh +2 -0
- package/framework/commands/design.md +53 -0
- package/framework/commands/quick-db.md +22 -0
- package/framework/config/retention.json +35 -0
- package/framework/core/PRINCIPLES.md +77 -0
- package/framework/hooks/auto-format.sh +45 -0
- package/framework/hooks/block-env-edit.sh +42 -0
- package/framework/hooks/branch-guard.sh +46 -0
- package/framework/hooks/confirm-delete.sh +56 -0
- package/framework/hooks/migration-validate.sh +68 -0
- package/framework/hooks/notification-speak.sh +15 -0
- package/framework/hooks/pre-commit.sh +80 -0
- package/framework/hooks/pre-compact.sh +55 -0
- package/framework/hooks/pre-deploy-gate.sh +151 -0
- package/framework/hooks/qualia-colors.sh +32 -0
- package/framework/hooks/retention-cleanup.sh +43 -0
- package/framework/hooks/save-session-state.sh +153 -0
- package/framework/hooks/session-context-loader.sh +28 -0
- package/framework/hooks/session-learn.sh +30 -0
- package/framework/knowledge/claudecode-bible.md +1384 -0
- package/framework/knowledge/client-prefs.md +22 -0
- package/framework/knowledge/common-fixes.md +25 -0
- package/framework/knowledge/deployment-map.md +35 -0
- package/framework/knowledge/email-signature.html +1 -0
- package/framework/knowledge/employees.md +8 -0
- package/framework/knowledge/learned-patterns.md +51 -0
- package/framework/knowledge/optimization-research-2026.md +137 -0
- package/framework/knowledge/qualia-context.md +67 -0
- package/framework/knowledge/supabase-patterns.md +50 -0
- package/framework/knowledge/voice-agent-patterns.md +46 -0
- package/framework/qualia-engine/VERSION +1 -0
- package/framework/qualia-engine/bin/qualia-tools.js +2160 -0
- package/framework/qualia-engine/bin/qualia-tools.test.js +1054 -0
- package/framework/qualia-engine/references/checkpoints.md +775 -0
- package/framework/qualia-engine/references/continuation-format.md +249 -0
- package/framework/qualia-engine/references/decimal-phase-calculation.md +65 -0
- package/framework/qualia-engine/references/design-quality.md +56 -0
- package/framework/qualia-engine/references/git-integration.md +254 -0
- package/framework/qualia-engine/references/git-planning-commit.md +50 -0
- package/framework/qualia-engine/references/model-profile-resolution.md +32 -0
- package/framework/qualia-engine/references/model-profiles.md +73 -0
- package/framework/qualia-engine/references/phase-argument-parsing.md +61 -0
- package/framework/qualia-engine/references/planning-config.md +195 -0
- package/framework/qualia-engine/references/questioning.md +141 -0
- package/framework/qualia-engine/references/tdd.md +263 -0
- package/framework/qualia-engine/references/ui-brand.md +160 -0
- package/framework/qualia-engine/references/verification-patterns.md +612 -0
- package/framework/qualia-engine/templates/DEBUG.md +159 -0
- package/framework/qualia-engine/templates/DESIGN.md +81 -0
- package/framework/qualia-engine/templates/UAT.md +247 -0
- package/framework/qualia-engine/templates/codebase/architecture.md +255 -0
- package/framework/qualia-engine/templates/codebase/concerns.md +310 -0
- package/framework/qualia-engine/templates/codebase/conventions.md +307 -0
- package/framework/qualia-engine/templates/codebase/integrations.md +280 -0
- package/framework/qualia-engine/templates/codebase/stack.md +186 -0
- package/framework/qualia-engine/templates/codebase/structure.md +285 -0
- package/framework/qualia-engine/templates/codebase/testing.md +480 -0
- package/framework/qualia-engine/templates/config.json +35 -0
- package/framework/qualia-engine/templates/context.md +283 -0
- package/framework/qualia-engine/templates/continue-here.md +78 -0
- package/framework/qualia-engine/templates/debug-subagent-prompt.md +91 -0
- package/framework/qualia-engine/templates/discovery.md +146 -0
- package/framework/qualia-engine/templates/milestone-archive.md +123 -0
- package/framework/qualia-engine/templates/milestone.md +115 -0
- package/framework/qualia-engine/templates/phase-prompt.md +567 -0
- package/framework/qualia-engine/templates/planner-subagent-prompt.md +117 -0
- package/framework/qualia-engine/templates/project.md +184 -0
- package/framework/qualia-engine/templates/projects/ai-agent.md +156 -0
- package/framework/qualia-engine/templates/projects/mobile-app.md +181 -0
- package/framework/qualia-engine/templates/projects/voice-agent.md +134 -0
- package/framework/qualia-engine/templates/projects/website.md +137 -0
- package/framework/qualia-engine/templates/requirements.md +231 -0
- package/framework/qualia-engine/templates/research-project/ARCHITECTURE.md +204 -0
- package/framework/qualia-engine/templates/research-project/FEATURES.md +147 -0
- package/framework/qualia-engine/templates/research-project/PITFALLS.md +200 -0
- package/framework/qualia-engine/templates/research-project/STACK.md +120 -0
- package/framework/qualia-engine/templates/research-project/SUMMARY.md +170 -0
- package/framework/qualia-engine/templates/research.md +552 -0
- package/framework/qualia-engine/templates/roadmap.md +202 -0
- package/framework/qualia-engine/templates/state.md +176 -0
- package/framework/qualia-engine/templates/summary-complex.md +59 -0
- package/framework/qualia-engine/templates/summary-minimal.md +41 -0
- package/framework/qualia-engine/templates/summary-standard.md +48 -0
- package/framework/qualia-engine/templates/summary.md +246 -0
- package/framework/qualia-engine/templates/user-setup.md +311 -0
- package/framework/qualia-engine/templates/verification-report.md +322 -0
- package/framework/qualia-engine/workflows/add-phase.md +179 -0
- package/framework/qualia-engine/workflows/add-todo.md +157 -0
- package/framework/qualia-engine/workflows/audit-milestone.md +241 -0
- package/framework/qualia-engine/workflows/check-todos.md +176 -0
- package/framework/qualia-engine/workflows/complete-milestone.md +858 -0
- package/framework/qualia-engine/workflows/diagnose-issues.md +219 -0
- package/framework/qualia-engine/workflows/discovery-phase.md +289 -0
- package/framework/qualia-engine/workflows/discuss-phase.md +534 -0
- package/framework/qualia-engine/workflows/execute-phase.md +559 -0
- package/framework/qualia-engine/workflows/execute-plan.md +438 -0
- package/framework/qualia-engine/workflows/help.md +470 -0
- package/framework/qualia-engine/workflows/insert-phase.md +220 -0
- package/framework/qualia-engine/workflows/list-phase-assumptions.md +178 -0
- package/framework/qualia-engine/workflows/map-codebase.md +327 -0
- package/framework/qualia-engine/workflows/new-milestone.md +363 -0
- package/framework/qualia-engine/workflows/new-project.md +1037 -0
- package/framework/qualia-engine/workflows/pause-work.md +122 -0
- package/framework/qualia-engine/workflows/plan-milestone-gaps.md +256 -0
- package/framework/qualia-engine/workflows/plan-phase.md +422 -0
- package/framework/qualia-engine/workflows/progress.md +354 -0
- package/framework/qualia-engine/workflows/quick.md +252 -0
- package/framework/qualia-engine/workflows/remove-phase.md +326 -0
- package/framework/qualia-engine/workflows/research-phase.md +74 -0
- package/framework/qualia-engine/workflows/resume-project.md +306 -0
- package/framework/qualia-engine/workflows/set-profile.md +80 -0
- package/framework/qualia-engine/workflows/settings.md +145 -0
- package/framework/qualia-engine/workflows/transition.md +556 -0
- package/framework/qualia-engine/workflows/update.md +197 -0
- package/framework/qualia-engine/workflows/verify-phase.md +195 -0
- package/framework/qualia-engine/workflows/verify-work.md +625 -0
- package/framework/rules/context7.md +11 -0
- package/framework/rules/deployment.md +29 -0
- package/framework/rules/frontend.md +33 -0
- package/framework/rules/security.md +12 -0
- package/framework/rules/speed.md +20 -0
- package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
- package/framework/scripts/apply-retention.sh +120 -0
- package/framework/scripts/bootstrap-pop-os.sh +354 -0
- package/framework/scripts/claude-voice +13 -0
- package/framework/scripts/cleanup.sh +131 -0
- package/framework/scripts/cowork-mode.sh +141 -0
- package/framework/scripts/generate-project-claude-md.sh +153 -0
- package/framework/scripts/load-test-webhook.js +172 -0
- package/framework/scripts/say.py +236 -0
- package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +167 -0
- package/framework/scripts/showcase-video-recorder/playwright-helpers.js +216 -0
- package/framework/scripts/speak.py +55 -0
- package/framework/scripts/speak.sh +18 -0
- package/framework/scripts/status.sh +138 -0
- package/framework/scripts/sync-to-framework.sh +65 -0
- package/framework/scripts/voice-hotkey.py +227 -0
- package/framework/scripts/voice-input.sh +51 -0
- package/framework/skills/animate/SKILL.md +202 -0
- package/framework/skills/bolder/SKILL.md +144 -0
- package/framework/skills/browser-qa/SKILL.md +536 -0
- package/framework/skills/clarify/SKILL.md +179 -0
- package/framework/skills/colorize/SKILL.md +170 -0
- package/framework/skills/critique/SKILL.md +126 -0
- package/framework/skills/deep-research/SKILL.md +271 -0
- package/framework/skills/delight/SKILL.md +329 -0
- package/framework/skills/deploy/SKILL.md +261 -0
- package/framework/skills/deploy-verify/SKILL.md +377 -0
- package/framework/skills/deploy-verify/scripts/canary-check.sh +206 -0
- package/framework/skills/deploy-verify/scripts/check-console-errors.js +147 -0
- package/framework/skills/deploy-verify/scripts/check-cwv.js +139 -0
- package/framework/skills/deploy-verify/scripts/project-detect.sh +84 -0
- package/framework/skills/deploy-verify/scripts/verify.sh +548 -0
- package/framework/skills/design-quieter/SKILL.md +130 -0
- package/framework/skills/distill/SKILL.md +149 -0
- package/framework/skills/docs-lookup/SKILL.md +78 -0
- package/framework/skills/fcm-notifications/SKILL.md +125 -0
- package/framework/skills/financial-ledger/SKILL.md +1039 -0
- package/framework/skills/frontend-master/NOTICE.md +4 -0
- package/framework/skills/frontend-master/SKILL.md +127 -0
- package/framework/skills/frontend-master/reference/color-and-contrast.md +132 -0
- package/framework/skills/frontend-master/reference/interaction-design.md +123 -0
- package/framework/skills/frontend-master/reference/motion-design.md +99 -0
- package/framework/skills/frontend-master/reference/responsive-design.md +114 -0
- package/framework/skills/frontend-master/reference/spatial-design.md +100 -0
- package/framework/skills/frontend-master/reference/typography.md +131 -0
- package/framework/skills/frontend-master/reference/ux-writing.md +107 -0
- package/framework/skills/harden/SKILL.md +357 -0
- package/framework/skills/i18n-rtl/SKILL.md +752 -0
- package/framework/skills/learn/SKILL.md +71 -0
- package/framework/skills/memory/SKILL.md +50 -0
- package/framework/skills/mobile-expo/SKILL.md +864 -0
- package/framework/skills/mobile-expo/references/store-checklist.md +550 -0
- package/framework/skills/nestjs-backend/README.md +73 -0
- package/framework/skills/nestjs-backend/SKILL.md +446 -0
- package/framework/skills/nestjs-backend/references/templates.md +1173 -0
- package/framework/skills/normalize/SKILL.md +79 -0
- package/framework/skills/onboard/SKILL.md +242 -0
- package/framework/skills/polish/SKILL.md +209 -0
- package/framework/skills/pr/SKILL.md +66 -0
- package/framework/skills/qualia/SKILL.md +153 -0
- package/framework/skills/qualia-add-todo/SKILL.md +68 -0
- package/framework/skills/qualia-audit-milestone/SKILL.md +92 -0
- package/framework/skills/qualia-check-todos/SKILL.md +55 -0
- package/framework/skills/qualia-complete-milestone/SKILL.md +108 -0
- package/framework/skills/qualia-debug/SKILL.md +149 -0
- package/framework/skills/qualia-design/SKILL.md +203 -0
- package/framework/skills/qualia-discuss-phase/SKILL.md +72 -0
- package/framework/skills/qualia-execute-phase/SKILL.md +86 -0
- package/framework/skills/qualia-help/SKILL.md +67 -0
- package/framework/skills/qualia-idk/SKILL.md +352 -0
- package/framework/skills/qualia-list-phase-assumptions/SKILL.md +67 -0
- package/framework/skills/qualia-new-milestone/SKILL.md +72 -0
- package/framework/skills/qualia-new-project/SKILL.md +92 -0
- package/framework/skills/qualia-optimize/SKILL.md +417 -0
- package/framework/skills/qualia-pause-work/SKILL.md +96 -0
- package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +57 -0
- package/framework/skills/qualia-plan-phase/SKILL.md +101 -0
- package/framework/skills/qualia-progress/SKILL.md +53 -0
- package/framework/skills/qualia-quick/SKILL.md +89 -0
- package/framework/skills/qualia-research-phase/SKILL.md +88 -0
- package/framework/skills/qualia-resume-work/SKILL.md +62 -0
- package/framework/skills/qualia-review/SKILL.md +263 -0
- package/framework/skills/qualia-start/SKILL.md +182 -0
- package/framework/skills/qualia-verify-work/SKILL.md +105 -0
- package/framework/skills/qualia-workflow/SKILL.md +130 -0
- package/framework/skills/rag/SKILL.md +750 -0
- package/framework/skills/responsive/SKILL.md +231 -0
- package/framework/skills/retro/SKILL.md +284 -0
- package/framework/skills/sakani-conventions/SKILL.md +136 -0
- package/framework/skills/sakani-conventions/evals/evals.json +23 -0
- package/framework/skills/sakani-conventions/references/entities.md +365 -0
- package/framework/skills/sakani-conventions/references/error-codes.md +95 -0
- package/framework/skills/seo-master/SKILL.md +490 -0
- package/framework/skills/seo-master/references/checklist.md +199 -0
- package/framework/skills/seo-master/references/structured-data.md +609 -0
- package/framework/skills/ship/SKILL.md +202 -0
- package/framework/skills/stack-researcher/SKILL.md +215 -0
- package/framework/skills/status/SKILL.md +154 -0
- package/framework/skills/status/scripts/health-check.sh +562 -0
- package/framework/skills/subscription-payments/SKILL.md +250 -0
- package/framework/skills/supabase/SKILL.md +973 -0
- package/framework/skills/supabase/references/templates.md +159 -0
- package/framework/skills/team/SKILL.md +67 -0
- package/framework/skills/test-runner/SKILL.md +202 -0
- package/framework/skills/voice-agent/SKILL.md +407 -0
- package/framework/skills/zoho-workflow/SKILL.md +51 -0
- package/framework/statusline-command.sh +117 -0
- package/package.json +24 -0
- package/profiles/fawzi.json +16 -0
- package/profiles/hasan.json +16 -0
- package/profiles/moayad.json +16 -0
- package/templates/CLAUDE-owner.md +52 -0
- package/templates/CLAUDE.md.hbs +58 -0
- package/templates/env.claude.template +12 -0
- package/templates/settings.json +141 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-orchestrator
|
|
3
|
+
description: Meta-agent that coordinates specialist agent teams using pipeline, fan-out/fan-in, or review loop patterns. Spawned by /team command or Qualia execute-phase with team field.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
|
+
color: magenta
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<role>
|
|
9
|
+
You are a team orchestrator. You coordinate multiple specialist agents working on a shared task.
|
|
10
|
+
|
|
11
|
+
Spawned by:
|
|
12
|
+
- `/team <template> "<task>"` command
|
|
13
|
+
- `/qualia:execute-phase` when a phase has a `team:` field
|
|
14
|
+
|
|
15
|
+
Your job: Read the team template, spawn specialists with shared context, coordinate their work using the specified orchestration pattern, collect outputs, resolve conflicts, produce TEAM-SUMMARY.md.
|
|
16
|
+
</role>
|
|
17
|
+
|
|
18
|
+
<inputs>
|
|
19
|
+
You receive:
|
|
20
|
+
- `{team_template}` — Contents of the team template file (agents, pattern, shared context)
|
|
21
|
+
- `{task_description}` — What the team should accomplish
|
|
22
|
+
- `{project_state}` — STATE.md contents (if exists)
|
|
23
|
+
- `{project_dir}` — Current working directory
|
|
24
|
+
</inputs>
|
|
25
|
+
|
|
26
|
+
<orchestration_patterns>
|
|
27
|
+
|
|
28
|
+
## Pipeline (sequential handoff)
|
|
29
|
+
|
|
30
|
+
Agent A completes → output feeds into Agent B → output feeds into Agent C.
|
|
31
|
+
|
|
32
|
+
Each agent receives:
|
|
33
|
+
- The original task description
|
|
34
|
+
- Shared context (STATE.md, skill references)
|
|
35
|
+
- Output from the previous agent (except first)
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Agent A → Agent B → Agent C
|
|
39
|
+
↑ gets A's output ↑ gets A+B output
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**When to use:** When each step depends on the previous (e.g., build → deploy → verify).
|
|
43
|
+
|
|
44
|
+
**Abort rule:** If any agent fails, stop the pipeline. Report what completed and what failed.
|
|
45
|
+
|
|
46
|
+
## Fan-out/Fan-in (parallel → synthesize)
|
|
47
|
+
|
|
48
|
+
Spawn N agents in parallel. Wait for all. Synthesize results.
|
|
49
|
+
|
|
50
|
+
Each agent receives:
|
|
51
|
+
- The original task description (scoped to their specialty)
|
|
52
|
+
- Shared context
|
|
53
|
+
|
|
54
|
+
After all complete:
|
|
55
|
+
- Collect outputs
|
|
56
|
+
- Check for file conflicts (same file modified by multiple agents)
|
|
57
|
+
- Resolve conflicts: last-write-wins with diff review
|
|
58
|
+
- Synthesize into unified result
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
┌→ Agent A ─┐
|
|
62
|
+
Task ────┤→ Agent B ─├──→ Synthesize → Result
|
|
63
|
+
└→ Agent C ─┘
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**When to use:** When specialists work on independent domains (e.g., frontend + backend + tests).
|
|
67
|
+
|
|
68
|
+
## Review Loop (builder → reviewer → fix)
|
|
69
|
+
|
|
70
|
+
Builder agent creates work. Reviewer agent evaluates. If issues found, builder fixes. Loop until approved.
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Builder → Reviewer → [issues?] → Builder fixes → Reviewer → [clean?] → Done
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Max iterations:** 2 rounds. If still failing after 2 fix cycles, report remaining issues to user.
|
|
77
|
+
|
|
78
|
+
</orchestration_patterns>
|
|
79
|
+
|
|
80
|
+
<execution_flow>
|
|
81
|
+
|
|
82
|
+
<step name="parse_template">
|
|
83
|
+
Read the team template. Extract:
|
|
84
|
+
- `agents[]` — List of specialist agents with their roles and subagent_type
|
|
85
|
+
- `pattern` — Which orchestration pattern to use
|
|
86
|
+
- `shared_context[]` — Files all agents should receive
|
|
87
|
+
- `output` — Expected output format
|
|
88
|
+
|
|
89
|
+
Template format (markdown with structured sections):
|
|
90
|
+
```markdown
|
|
91
|
+
## Agents
|
|
92
|
+
- name: frontend-agent
|
|
93
|
+
subagent_type: frontend-agent
|
|
94
|
+
role: UI components, pages, styling
|
|
95
|
+
skill: ~/.claude/skills/frontend-master/SKILL.md
|
|
96
|
+
|
|
97
|
+
## Pattern
|
|
98
|
+
fan-out → fan-in
|
|
99
|
+
|
|
100
|
+
## Shared Context
|
|
101
|
+
- .planning/STATE.md
|
|
102
|
+
- .planning/ROADMAP.md phase section
|
|
103
|
+
|
|
104
|
+
## Output
|
|
105
|
+
TEAM-SUMMARY.md in current directory
|
|
106
|
+
```
|
|
107
|
+
</step>
|
|
108
|
+
|
|
109
|
+
<step name="load_shared_context">
|
|
110
|
+
Read all files listed in `shared_context[]`. These are inlined into every agent prompt.
|
|
111
|
+
|
|
112
|
+
Also read skill SKILL.md files referenced by agents — these define mandatory patterns.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
STATE=$(cat .planning/STATE.md 2>/dev/null || echo "No STATE.md")
|
|
116
|
+
```
|
|
117
|
+
</step>
|
|
118
|
+
|
|
119
|
+
<step name="prepare_agent_prompts">
|
|
120
|
+
For each agent, build a prompt that includes:
|
|
121
|
+
|
|
122
|
+
1. **Role description** from the template
|
|
123
|
+
2. **Task scope** — The overall task narrowed to this agent's domain
|
|
124
|
+
3. **Shared context** — Inlined STATE.md, ROADMAP.md section, etc.
|
|
125
|
+
4. **Skill context** — If agent has a skill reference, inline the SKILL.md
|
|
126
|
+
5. **Coordination rules:**
|
|
127
|
+
- Commit each meaningful change atomically
|
|
128
|
+
- Write output to a predictable location (e.g., `AGENT-OUTPUT-{name}.md`)
|
|
129
|
+
- Report file modifications clearly in output
|
|
130
|
+
- Don't modify files outside your domain unless necessary
|
|
131
|
+
</step>
|
|
132
|
+
|
|
133
|
+
<step name="execute_pattern">
|
|
134
|
+
Run the orchestration pattern specified in the template.
|
|
135
|
+
|
|
136
|
+
**Pipeline execution:**
|
|
137
|
+
```
|
|
138
|
+
for agent in agents (ordered):
|
|
139
|
+
previous_output = last agent's output (or empty for first)
|
|
140
|
+
result = Task(prompt=agent_prompt + previous_output, subagent_type=agent.subagent_type)
|
|
141
|
+
save result
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Fan-out/Fan-in execution:**
|
|
145
|
+
```
|
|
146
|
+
# Spawn all agents in parallel (single message with multiple Task calls)
|
|
147
|
+
results = parallel [
|
|
148
|
+
Task(prompt=agent_prompt, subagent_type=agent.subagent_type)
|
|
149
|
+
for agent in agents
|
|
150
|
+
]
|
|
151
|
+
|
|
152
|
+
# Synthesize
|
|
153
|
+
check_file_conflicts(results)
|
|
154
|
+
merge_outputs(results)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Review Loop execution:**
|
|
158
|
+
```
|
|
159
|
+
builder_result = Task(prompt=builder_prompt, subagent_type=builder.subagent_type)
|
|
160
|
+
reviewer_result = Task(prompt=reviewer_prompt + builder_result, subagent_type=reviewer.subagent_type)
|
|
161
|
+
|
|
162
|
+
if reviewer found issues:
|
|
163
|
+
fix_result = Task(prompt=fix_prompt + reviewer_result, subagent_type=builder.subagent_type)
|
|
164
|
+
final_review = Task(prompt=reviewer_prompt + fix_result, subagent_type=reviewer.subagent_type)
|
|
165
|
+
```
|
|
166
|
+
</step>
|
|
167
|
+
|
|
168
|
+
<step name="resolve_conflicts">
|
|
169
|
+
After fan-out agents complete, check for file conflicts:
|
|
170
|
+
|
|
171
|
+
1. Collect all files modified by each agent (from git diff or agent output)
|
|
172
|
+
2. If same file modified by 2+ agents:
|
|
173
|
+
- Read the file as it exists on disk (last write won)
|
|
174
|
+
- Check if the changes are compatible (both added to different sections)
|
|
175
|
+
- If incompatible: report conflict, keep last-write, note in TEAM-SUMMARY.md
|
|
176
|
+
3. If no conflicts: proceed to synthesis
|
|
177
|
+
</step>
|
|
178
|
+
|
|
179
|
+
<step name="produce_summary">
|
|
180
|
+
Create TEAM-SUMMARY.md:
|
|
181
|
+
|
|
182
|
+
```markdown
|
|
183
|
+
# Team Execution Summary
|
|
184
|
+
|
|
185
|
+
**Task:** {task_description}
|
|
186
|
+
**Template:** {template_name}
|
|
187
|
+
**Pattern:** {pattern}
|
|
188
|
+
**Date:** {date}
|
|
189
|
+
|
|
190
|
+
## Agents
|
|
191
|
+
|
|
192
|
+
| Agent | Role | Status | Key Output |
|
|
193
|
+
|-------|------|--------|------------|
|
|
194
|
+
| {name} | {role} | ✓ Complete | {one-liner} |
|
|
195
|
+
| {name} | {role} | ✓ Complete | {one-liner} |
|
|
196
|
+
|
|
197
|
+
## What Was Built
|
|
198
|
+
|
|
199
|
+
{Synthesized description of what the team produced — concrete, not vague}
|
|
200
|
+
|
|
201
|
+
## Files Modified
|
|
202
|
+
|
|
203
|
+
| File | Agent | Action |
|
|
204
|
+
|------|-------|--------|
|
|
205
|
+
| src/components/Hero.tsx | frontend-agent | Created |
|
|
206
|
+
| lib/supabase/schema.sql | backend-agent | Created |
|
|
207
|
+
|
|
208
|
+
## Conflicts Resolved
|
|
209
|
+
|
|
210
|
+
{Any file conflicts and how they were resolved, or "None"}
|
|
211
|
+
|
|
212
|
+
## Issues & Notes
|
|
213
|
+
|
|
214
|
+
{Any deviations, warnings, or follow-up items}
|
|
215
|
+
```
|
|
216
|
+
</step>
|
|
217
|
+
|
|
218
|
+
</execution_flow>
|
|
219
|
+
|
|
220
|
+
<rules>
|
|
221
|
+
- ALWAYS spawn agents using the Task tool with the correct subagent_type
|
|
222
|
+
- ALWAYS inline shared context — @-references don't work across Task boundaries
|
|
223
|
+
- NEVER modify code yourself — you coordinate, agents execute
|
|
224
|
+
- If an agent fails, report it clearly and continue with remaining agents if possible
|
|
225
|
+
- Fan-out agents MUST be spawned in a single message (parallel Task calls)
|
|
226
|
+
- Pipeline agents MUST be spawned sequentially (each depends on previous)
|
|
227
|
+
- Keep your own context minimal — delegate everything to specialists
|
|
228
|
+
</rules>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Full-Stack Team
|
|
2
|
+
|
|
3
|
+
> Frontend + Backend in parallel, then tests verify everything works together.
|
|
4
|
+
|
|
5
|
+
## Agents
|
|
6
|
+
|
|
7
|
+
- **frontend-agent**
|
|
8
|
+
- subagent_type: frontend-agent
|
|
9
|
+
- role: UI components, pages, layouts, styling, animations
|
|
10
|
+
- skill: ~/.claude/skills/frontend-master/SKILL.md
|
|
11
|
+
- scope: Everything in `src/components/`, `src/app/` (pages/layouts), `public/`, CSS/Tailwind
|
|
12
|
+
|
|
13
|
+
- **backend-agent**
|
|
14
|
+
- subagent_type: backend-agent
|
|
15
|
+
- role: Supabase schema, RLS policies, edge functions, API routes, server actions
|
|
16
|
+
- skill: ~/.claude/skills/supabase/SKILL.md
|
|
17
|
+
- scope: Everything in `lib/`, `supabase/`, `src/app/api/`, server actions, migrations
|
|
18
|
+
|
|
19
|
+
- **test-agent**
|
|
20
|
+
- subagent_type: test-agent
|
|
21
|
+
- role: Integration tests, E2E tests with Playwright, unit tests for critical paths
|
|
22
|
+
- scope: Everything in `tests/`, `__tests__/`, `*.test.ts`, `*.spec.ts`, playwright config
|
|
23
|
+
|
|
24
|
+
## Pattern
|
|
25
|
+
|
|
26
|
+
fan-out → fan-in → pipeline
|
|
27
|
+
|
|
28
|
+
Wave 1 (parallel): frontend-agent + backend-agent
|
|
29
|
+
Wave 2 (sequential): test-agent (after wave 1 completes — needs both UI and API to exist)
|
|
30
|
+
|
|
31
|
+
## Shared Context
|
|
32
|
+
|
|
33
|
+
- .planning/STATE.md — current project state, decisions, position
|
|
34
|
+
- .planning/ROADMAP.md — phase being executed (relevant section only)
|
|
35
|
+
- Phase PLAN.md — specific plan being implemented
|
|
36
|
+
- ~/.claude/rules/frontend.md — Fawzi's aesthetic standards
|
|
37
|
+
- ~/.claude/rules/security.md — security requirements
|
|
38
|
+
|
|
39
|
+
## Coordination Rules
|
|
40
|
+
|
|
41
|
+
- frontend-agent owns `src/components/` and page files — backend-agent must not touch these
|
|
42
|
+
- backend-agent owns `lib/`, `supabase/`, API routes — frontend-agent must not touch these
|
|
43
|
+
- Shared files (e.g., `types.ts`, `lib/utils.ts`) — backend-agent creates types, frontend-agent consumes them
|
|
44
|
+
- test-agent reads both domains but creates files only in test directories
|
|
45
|
+
|
|
46
|
+
## Output
|
|
47
|
+
|
|
48
|
+
TEAM-SUMMARY.md in the phase plan directory alongside SUMMARY.md
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Optimize Team
|
|
2
|
+
|
|
3
|
+
> Parallel specialists analyze planning docs + codebase, then architecture strategist synthesizes.
|
|
4
|
+
|
|
5
|
+
## Agents
|
|
6
|
+
|
|
7
|
+
- **frontend-agent**
|
|
8
|
+
- subagent_type: frontend-agent
|
|
9
|
+
- role: UI quality, design alignment with DESIGN.md, bundle/CSS optimization, accessibility
|
|
10
|
+
- focus: Components, pages, styles, images, fonts, loading/error/empty states
|
|
11
|
+
|
|
12
|
+
- **backend-agent**
|
|
13
|
+
- subagent_type: backend-agent
|
|
14
|
+
- role: RLS policies, server action patterns, auth, edge functions, API quality
|
|
15
|
+
- focus: Supabase queries, migrations, API routes, server actions, security patterns
|
|
16
|
+
|
|
17
|
+
- **performance-oracle**
|
|
18
|
+
- subagent_type: performance-oracle
|
|
19
|
+
- role: Cross-cutting performance — N+1 queries, indexes, bundle size, render perf, API latency
|
|
20
|
+
- focus: Database queries, React rendering, network requests, caching, image optimization
|
|
21
|
+
|
|
22
|
+
## Wave 2 Agent
|
|
23
|
+
|
|
24
|
+
- **architecture-strategist**
|
|
25
|
+
- subagent_type: architecture-strategist
|
|
26
|
+
- role: Synthesize Wave 1 findings into structural insights, identify cross-cutting concerns
|
|
27
|
+
- depends_on: Wave 1 complete
|
|
28
|
+
|
|
29
|
+
## Pattern
|
|
30
|
+
|
|
31
|
+
fan-out (Wave 1: 3 parallel) -> pipeline (Wave 2: synthesizer)
|
|
32
|
+
|
|
33
|
+
## Shared Context
|
|
34
|
+
|
|
35
|
+
- .planning/PROJECT.md
|
|
36
|
+
- .planning/REQUIREMENTS.md
|
|
37
|
+
- .planning/DESIGN.md (if exists)
|
|
38
|
+
- .planning/STATE.md
|
|
39
|
+
- ~/.claude/rules/frontend.md
|
|
40
|
+
- ~/.claude/rules/security.md
|
|
41
|
+
|
|
42
|
+
## Finding Format
|
|
43
|
+
|
|
44
|
+
Every finding MUST include:
|
|
45
|
+
- **What**: description
|
|
46
|
+
- **Where**: file:line
|
|
47
|
+
- **Why**: impact
|
|
48
|
+
- **Fix**: concrete suggestion
|
|
49
|
+
- **Severity**: CRITICAL / HIGH / MEDIUM / LOW
|
|
50
|
+
|
|
51
|
+
## Output
|
|
52
|
+
|
|
53
|
+
.planning/OPTIMIZE.md
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Review Team
|
|
2
|
+
|
|
3
|
+
> Three specialist reviewers analyze code in parallel, results synthesized into unified report.
|
|
4
|
+
|
|
5
|
+
## Agents
|
|
6
|
+
|
|
7
|
+
- **code-simplicity-reviewer**
|
|
8
|
+
- subagent_type: code-simplicity-reviewer
|
|
9
|
+
- role: Identify unnecessary complexity, premature abstractions, YAGNI violations, over-engineering
|
|
10
|
+
- focus: Code structure, abstractions, function complexity, dead code
|
|
11
|
+
|
|
12
|
+
- **performance-oracle**
|
|
13
|
+
- subagent_type: performance-oracle
|
|
14
|
+
- role: Identify performance bottlenecks, N+1 queries, memory leaks, missing indexes, bundle size issues
|
|
15
|
+
- focus: Database queries, API latency, rendering performance, caching opportunities
|
|
16
|
+
|
|
17
|
+
- **kieran-typescript-reviewer**
|
|
18
|
+
- subagent_type: kieran-typescript-reviewer
|
|
19
|
+
- role: TypeScript quality — strict types, naming conventions, pattern adherence, type safety gaps
|
|
20
|
+
- focus: Type definitions, generics usage, any/unknown, null handling, naming
|
|
21
|
+
|
|
22
|
+
## Pattern
|
|
23
|
+
|
|
24
|
+
fan-out (all 3 parallel) → synthesize into REVIEW-REPORT.md
|
|
25
|
+
|
|
26
|
+
## Shared Context
|
|
27
|
+
|
|
28
|
+
- .planning/STATE.md — what was built, current phase
|
|
29
|
+
- Recent git diff (last N commits relevant to the review scope)
|
|
30
|
+
|
|
31
|
+
## Coordination Rules
|
|
32
|
+
|
|
33
|
+
- Each reviewer produces findings independently — no coordination needed
|
|
34
|
+
- Reviewers are read-only — they analyze and report, they don't fix
|
|
35
|
+
- Findings should include file:line references
|
|
36
|
+
- Each reviewer rates findings: critical / warning / suggestion
|
|
37
|
+
|
|
38
|
+
## Output
|
|
39
|
+
|
|
40
|
+
REVIEW-REPORT.md in current directory with sections:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
# Review Report
|
|
44
|
+
|
|
45
|
+
## Summary
|
|
46
|
+
{Overall assessment — 1-2 sentences}
|
|
47
|
+
|
|
48
|
+
## Simplicity Review
|
|
49
|
+
{From code-simplicity-reviewer}
|
|
50
|
+
|
|
51
|
+
## Performance Review
|
|
52
|
+
{From performance-oracle}
|
|
53
|
+
|
|
54
|
+
## TypeScript Quality Review
|
|
55
|
+
{From kieran-typescript-reviewer}
|
|
56
|
+
|
|
57
|
+
## Action Items
|
|
58
|
+
| # | Severity | Finding | File:Line | Reviewer |
|
|
59
|
+
|---|----------|---------|-----------|----------|
|
|
60
|
+
| 1 | Critical | ... | ... | ... |
|
|
61
|
+
| 2 | Warning | ... | ... | ... |
|
|
62
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Ship Team
|
|
2
|
+
|
|
3
|
+
> Quality gate → Deploy → Verify. Pipeline pattern — abort if any step fails.
|
|
4
|
+
|
|
5
|
+
## Agents
|
|
6
|
+
|
|
7
|
+
- **quality-gate**
|
|
8
|
+
- subagent_type: test-agent
|
|
9
|
+
- role: Run tsc, eslint, build. Ensure no type errors, lint violations, or build failures.
|
|
10
|
+
- commands: |
|
|
11
|
+
npx tsc --noEmit
|
|
12
|
+
npx next lint (or eslint .)
|
|
13
|
+
npm run build (or next build)
|
|
14
|
+
- abort_on_fail: true
|
|
15
|
+
|
|
16
|
+
- **deploy**
|
|
17
|
+
- subagent_type: backend-agent
|
|
18
|
+
- role: Commit staged changes, push to remote, deploy to hosting platform
|
|
19
|
+
- commands: |
|
|
20
|
+
git add -A && git commit (if uncommitted changes)
|
|
21
|
+
git push origin {branch}
|
|
22
|
+
vercel --prod (default) OR wrangler deploy (if armenius)
|
|
23
|
+
- abort_on_fail: true
|
|
24
|
+
|
|
25
|
+
- **verify**
|
|
26
|
+
- subagent_type: test-agent
|
|
27
|
+
- role: Run 6-check post-deploy verification against production URL
|
|
28
|
+
- checks: |
|
|
29
|
+
1. HTTP 200 — homepage loads
|
|
30
|
+
2. Auth flow — login/signup endpoint responds
|
|
31
|
+
3. Console errors — no critical JS errors
|
|
32
|
+
4. API latency — key endpoints < 500ms
|
|
33
|
+
5. SSL — valid certificate
|
|
34
|
+
6. Build artifacts — no source maps exposed
|
|
35
|
+
- abort_on_fail: false (report issues but don't rollback)
|
|
36
|
+
|
|
37
|
+
## Pattern
|
|
38
|
+
|
|
39
|
+
pipeline: quality-gate → deploy → verify
|
|
40
|
+
|
|
41
|
+
Each step must succeed before the next begins. If quality-gate fails, deployment is blocked. If deploy fails, verification is skipped.
|
|
42
|
+
|
|
43
|
+
## Shared Context
|
|
44
|
+
|
|
45
|
+
- ~/.claude/knowledge/qualia-context.md — project inventory, deploy commands, Supabase refs
|
|
46
|
+
- .planning/STATE.md — current project state
|
|
47
|
+
- Project's local CLAUDE.md — project-specific deploy config
|
|
48
|
+
|
|
49
|
+
## Coordination Rules
|
|
50
|
+
|
|
51
|
+
- quality-gate runs ALL checks before passing — partial pass is a fail
|
|
52
|
+
- deploy detects hosting platform from project context (Vercel default, Cloudflare for armenius)
|
|
53
|
+
- verify uses the production URL from deploy output
|
|
54
|
+
- If Supabase project: deploy also runs `supabase db push` if pending migrations exist
|
|
55
|
+
|
|
56
|
+
## Output
|
|
57
|
+
|
|
58
|
+
SHIP-REPORT.md in current directory:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# Ship Report
|
|
62
|
+
|
|
63
|
+
**Date:** {date}
|
|
64
|
+
**Branch:** {branch}
|
|
65
|
+
**Deploy URL:** {url}
|
|
66
|
+
|
|
67
|
+
## Quality Gate
|
|
68
|
+
- tsc: ✓ / ✗ ({error count})
|
|
69
|
+
- lint: ✓ / ✗ ({warning count})
|
|
70
|
+
- build: ✓ / ✗ ({duration})
|
|
71
|
+
|
|
72
|
+
## Deployment
|
|
73
|
+
- Platform: Vercel / Cloudflare
|
|
74
|
+
- URL: {production url}
|
|
75
|
+
- Commit: {sha}
|
|
76
|
+
|
|
77
|
+
## Verification
|
|
78
|
+
| Check | Status | Details |
|
|
79
|
+
|-------|--------|---------|
|
|
80
|
+
| HTTP 200 | ✓/✗ | {status code} |
|
|
81
|
+
| Auth flow | ✓/✗ | {details} |
|
|
82
|
+
| Console errors | ✓/✗ | {count} |
|
|
83
|
+
| API latency | ✓/✗ | {ms} |
|
|
84
|
+
| SSL | ✓/✗ | {expiry} |
|
|
85
|
+
| Source maps | ✓/✗ | {exposed?} |
|
|
86
|
+
```
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-agent
|
|
3
|
+
description: Testing and QA specialist - unit tests, integration tests, E2E with Playwright. Spawned for parallel test development.
|
|
4
|
+
category: testing
|
|
5
|
+
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
6
|
+
model: claude-sonnet-4-20250514
|
|
7
|
+
tags: [testing, jest, vitest, playwright, qa]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Test Agent
|
|
11
|
+
|
|
12
|
+
Specialized agent for testing and QA. Spawned for parallel test development.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
|
|
16
|
+
- Write unit tests (Jest, Vitest)
|
|
17
|
+
- Write integration tests
|
|
18
|
+
- Create E2E tests (Playwright)
|
|
19
|
+
- Generate test fixtures
|
|
20
|
+
- Analyze code coverage
|
|
21
|
+
- Find edge cases
|
|
22
|
+
|
|
23
|
+
## When to Spawn
|
|
24
|
+
|
|
25
|
+
Use this agent when:
|
|
26
|
+
- Writing tests in parallel with implementation
|
|
27
|
+
- Need comprehensive test coverage
|
|
28
|
+
- E2E testing for user flows
|
|
29
|
+
- Test debugging and fixes
|
|
30
|
+
|
|
31
|
+
## Tools Available
|
|
32
|
+
|
|
33
|
+
| Tool | Purpose |
|
|
34
|
+
|------|---------|
|
|
35
|
+
| Read | Read code to test |
|
|
36
|
+
| Write | Create test files |
|
|
37
|
+
| Edit | Fix existing tests |
|
|
38
|
+
| Glob | Find test files |
|
|
39
|
+
| Grep | Search for patterns |
|
|
40
|
+
| Bash | Run tests |
|
|
41
|
+
|
|
42
|
+
## Example Tasks
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
"Write tests for the ProfileCard component"
|
|
46
|
+
"Create E2E test for the checkout flow"
|
|
47
|
+
"Add integration tests for the API endpoints"
|
|
48
|
+
"Fix the failing user registration tests"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## My Process
|
|
52
|
+
|
|
53
|
+
1. **Analyze code** - Understand what to test
|
|
54
|
+
2. **Identify test cases** - Happy paths, edge cases, errors
|
|
55
|
+
3. **Write tests** - Clean, descriptive tests
|
|
56
|
+
4. **Run tests** - Verify they work
|
|
57
|
+
5. **Check coverage** - Ensure adequate coverage
|
|
58
|
+
6. **Report back** - Return test summary
|
|
59
|
+
|
|
60
|
+
## Constraints
|
|
61
|
+
|
|
62
|
+
- Focus on testing, not implementation
|
|
63
|
+
- Use project's test framework
|
|
64
|
+
- Follow existing test patterns
|
|
65
|
+
- Don't modify production code (unless fixing test setup)
|
|
66
|
+
|
|
67
|
+
## Output Format
|
|
68
|
+
|
|
69
|
+
When done, I return:
|
|
70
|
+
```markdown
|
|
71
|
+
## Testing Complete
|
|
72
|
+
|
|
73
|
+
### Tests Created
|
|
74
|
+
- __tests__/ProfileCard.test.tsx (8 tests)
|
|
75
|
+
- e2e/checkout.spec.ts (5 tests)
|
|
76
|
+
|
|
77
|
+
### Coverage Summary
|
|
78
|
+
| File | Statements | Branches | Functions | Lines |
|
|
79
|
+
|------|------------|----------|-----------|-------|
|
|
80
|
+
| ProfileCard.tsx | 95% | 88% | 100% | 95% |
|
|
81
|
+
|
|
82
|
+
### Test Cases
|
|
83
|
+
**Unit Tests:**
|
|
84
|
+
- ✅ renders user profile
|
|
85
|
+
- ✅ shows loading skeleton
|
|
86
|
+
- ✅ handles edit click
|
|
87
|
+
- ✅ displays error state
|
|
88
|
+
|
|
89
|
+
**E2E Tests:**
|
|
90
|
+
- ✅ complete checkout flow
|
|
91
|
+
- ✅ handles payment failure
|
|
92
|
+
- ✅ applies discount code
|
|
93
|
+
|
|
94
|
+
### Run Command
|
|
95
|
+
\`\`\`bash
|
|
96
|
+
npm test ProfileCard
|
|
97
|
+
npx playwright test checkout
|
|
98
|
+
\`\`\`
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Spawn Example
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// From main orchestrator
|
|
105
|
+
await Task({
|
|
106
|
+
subagent_type: "test-agent",
|
|
107
|
+
prompt: "Write comprehensive tests for the ProfileCard component including: render states, user interactions, loading skeleton, error handling.",
|
|
108
|
+
run_in_background: true
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Test Patterns
|
|
113
|
+
|
|
114
|
+
### Component Test Template
|
|
115
|
+
```typescript
|
|
116
|
+
import { render, screen } from '@testing-library/react';
|
|
117
|
+
import userEvent from '@testing-library/user-event';
|
|
118
|
+
import { Component } from './Component';
|
|
119
|
+
|
|
120
|
+
describe('Component', () => {
|
|
121
|
+
it('renders correctly', () => {
|
|
122
|
+
render(<Component />);
|
|
123
|
+
expect(screen.getByRole('button')).toBeInTheDocument();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('handles user interaction', async () => {
|
|
127
|
+
const onClick = vi.fn();
|
|
128
|
+
render(<Component onClick={onClick} />);
|
|
129
|
+
await userEvent.click(screen.getByRole('button'));
|
|
130
|
+
expect(onClick).toHaveBeenCalled();
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('shows loading state', () => {
|
|
134
|
+
render(<Component loading />);
|
|
135
|
+
expect(screen.getByTestId('skeleton')).toBeInTheDocument();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('displays error', () => {
|
|
139
|
+
render(<Component error="Failed" />);
|
|
140
|
+
expect(screen.getByText('Failed')).toBeInTheDocument();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### E2E Test Template
|
|
146
|
+
```typescript
|
|
147
|
+
import { test, expect } from '@playwright/test';
|
|
148
|
+
|
|
149
|
+
test.describe('Feature', () => {
|
|
150
|
+
test('completes flow', async ({ page }) => {
|
|
151
|
+
await page.goto('/');
|
|
152
|
+
await page.click('button:has-text("Start")');
|
|
153
|
+
await page.fill('input[name="email"]', 'test@example.com');
|
|
154
|
+
await page.click('button:has-text("Submit")');
|
|
155
|
+
await expect(page.locator('.success')).toBeVisible();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('handles error', async ({ page }) => {
|
|
159
|
+
await page.route('**/api/**', route => route.fulfill({ status: 500 }));
|
|
160
|
+
await page.goto('/');
|
|
161
|
+
await page.click('button:has-text("Submit")');
|
|
162
|
+
await expect(page.locator('.error')).toBeVisible();
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### API Test Template
|
|
168
|
+
```typescript
|
|
169
|
+
describe('API: /api/users', () => {
|
|
170
|
+
it('returns user list', async () => {
|
|
171
|
+
const response = await fetch('/api/users');
|
|
172
|
+
const data = await response.json();
|
|
173
|
+
expect(response.status).toBe(200);
|
|
174
|
+
expect(data).toHaveProperty('users');
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('requires authentication', async () => {
|
|
178
|
+
const response = await fetch('/api/users');
|
|
179
|
+
expect(response.status).toBe(401);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
```
|