Execute frontend task implementation with TDD...
Before generating any content, check aico.json in project root for language field to determine the output language. If not set, default to English.
Read task file (MANDATORY):
docs/reference/frontend/tasks/story-{story-name}.md with task numberstandalone-{task-name}.md with task numberRead constraints FIRST (before any code):
docs/reference/frontend/design-system.md - Colors, typography, spacingdocs/reference/frontend/constraints.md - Tech stack, patternsdocs/reference/frontend/designs/{name}.mdExecute implementation steps:
After all steps:
Update task status:
- [ ] → - [x]pending to completedNotify completion:
> **Story**: field from file headerdocs/reference/pm/stories/- [x]See Task File Template for complete structure.
Both story-based and standalone tasks use the same file structure - the only difference is the filename:
story-{story-name}.md (from PM story breakdown)standalone-{task-name}.md (from plan/ad-hoc requirements)Usage Examples:
implement story-user-profile Task 1implement standalone-fix-login Task 1Read Task File
↓
Read Constraints (design-system.md, constraints.md, designs/)
↓
Execute Step 1 → Verify → Pass? → Continue
↓
Fail → Fix → Retry
↓
Execute Step 2 → Verify → Pass? → Continue
↓
...
↓
Run Unit Tests
↓
Run Build Check
↓
Update Task File (mark AC completed, update status)
↓
Show Completion Summary
// ❌ Wrong: Ignore design system
<button className="bg-blue-500 text-white">
// ✅ Right: Use design tokens
<button className="bg-primary text-primary-foreground">
Each step has a Verify section - MUST run it and confirm expected output before moving on.
npm test [component]npm run build- [x]completed| Error Type | Action |
|---|---|
| TypeScript error | Fix type issues, re-verify |
| Test failure | Debug test, fix implementation or test |
| Build failure | Check imports, fix errors |
| Constraint violation | Re-read constraints, align code |
After successful implementation, update the task file. Both story-based and standalone use the same update process:
1. Mark Task's Acceptance Criteria as Completed
## Task 1: Setup Component
> **Status**: completed ← Changed from pending
### Acceptance Criteria
- [x] Logo displays correctly ← Changed from [ ]
- [x] Title uses correct typography ← Changed from [ ]
- [x] Header is responsive ← Changed from [ ]
2. Update Progress Section
## Progress
- Total tasks: 5
- Completed: 1 ← Changed from 0
- In progress: 0
- Pending: 4 ← Changed from 5
**Next task**: Task 2: Implement Header ← Update this
3. Update Story File Checkboxes (story-based only)
If this is a story-based task, update the PM story file at docs/reference/pm/stories/:
### Frontend Tasks
- [x] Task 1: Setup Component ← Changed from [ ]
- [ ] Task 2: Implement Header
- [ ] Task 3: Add Tests
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
Write code before the test? Delete it. Start over.
RED → Verify Fails → GREEN → Verify Passes → REFACTOR → Repeat
test('Button shows loading state when clicked', async () => {
render(<SubmitButton onClick={mockSubmit} />)
await userEvent.click(screen.getByRole('button'))
expect(screen.getByRole('button')).toBeDisabled()
expect(screen.getByTestId('spinner')).toBeInTheDocument()
})
npm test -- --watch ComponentName
Write simplest code to pass the test. Don't add features not in test.
Only after green. Keep tests passing.
getByRole - accessible by everyonegetByLabelText - form fieldsgetByText - non-interactive elementsgetByTestId - last resort| Component Type | Required Tests |
|---|---|
| UI Component | Render, props, variants |
| Form | Validation, submit, error states |
| Interactive | User events, callbacks |
| Data Display | Loading, error, empty states |
querySelector everywhere# User: "Implement story-user-profile Task 1"
# (Works the same for standalone: "Implement standalone-fix-login Task 1")
1. ✓ Read task file: docs/reference/frontend/tasks/story-user-profile.md
- Extract Task 1 section from the file
2. ✓ Read constraints:
- design-system.md
- constraints.md
- designs/user-profile.md (if referenced)
3. ✓ Execute Step 1: Create component file
→ Run: npm run typecheck
→ ✓ Pass
4. ✓ Execute Step 2: Implement layout
→ Run: npm run dev
→ ✓ Pass
5. ✓ Execute Step 3: Add tests
→ Run: npm test Component
→ ✓ 3 tests passed
6. ✓ Run full test suite
→ Run: npm test
→ ✓ All tests passed
7. ✓ Run build
→ Run: npm run build
→ ✓ Build successful
8. ✓ Update task file:
- Updated Task 1 section
- Marked all AC as completed
- Status: completed
- Updated Progress: 1/5 completed
9. ✓ Update Story file (story-based only):
- Marked Task 1 checkbox in PM story file
10. ✓ Task completed! Progress: 1/5 tasks
NO CODE WITHOUT TASK FILE
This rule is non-negotiable. Before writing code:
| Excuse | Reality |
|---|---|
| "It's a simple change" | Simple changes often have hidden complexity |
| "I'll document after coding" | Post-hoc documentation is always incomplete |
| "Tests can wait until later" | Untested code is broken code |
| "I know what needs to be done" | Assumptions without validation cause bugs |