505 lines
15 KiB
Markdown
505 lines
15 KiB
Markdown
# Example: Sequential Build Delegation
|
|
|
|
This example shows how to coordinate dependent implementation tasks that must execute sequentially.
|
|
|
|
## Scenario
|
|
|
|
**User Request:** "Implement JWT authentication for our REST API"
|
|
|
|
## Task Decomposition
|
|
|
|
```
|
|
Original Task: Implement JWT authentication for REST API
|
|
|
|
Activities Identified:
|
|
1. Design authentication database schema
|
|
- Expertise: Database design
|
|
- Output: Schema design document
|
|
- Dependencies: None
|
|
|
|
2. Create database migration
|
|
- Expertise: Database implementation
|
|
- Output: Migration files
|
|
- Dependencies: Activity 1 (schema design)
|
|
|
|
3. Implement authentication middleware
|
|
- Expertise: Backend development
|
|
- Output: JWT middleware code
|
|
- Dependencies: Activity 2 (tables must exist)
|
|
|
|
4. Create auth endpoints (login/logout)
|
|
- Expertise: Backend development
|
|
- Output: Auth routes and controllers
|
|
- Dependencies: Activity 3 (middleware needed)
|
|
|
|
5. Add tests for auth flow
|
|
- Expertise: Test automation
|
|
- Output: Integration tests
|
|
- Dependencies: Activity 4 (endpoints must work)
|
|
|
|
Execution Strategy: Sequential
|
|
Reasoning: Each activity depends on the previous one's output. No parallelization possible in this chain.
|
|
|
|
Dependency Chain: 1 → 2 → 3 → 4 → 5
|
|
```
|
|
|
|
## Agent Prompts Generated
|
|
|
|
### Agent 1: Schema Design (First)
|
|
|
|
```
|
|
DISCOVERY_FIRST: Before starting, understand the environment:
|
|
- Check existing database structure: ls migrations/ or db/schema/
|
|
- Identify database system: PostgreSQL, MySQL, SQLite?
|
|
- Review existing table patterns: user-related tables
|
|
- Note naming conventions: snake_case, camelCase, PascalCase?
|
|
|
|
FOCUS: Design database schema for JWT authentication
|
|
- Users table (if not exists) with email, password_hash
|
|
- Sessions table for active JWT tokens
|
|
- Include created_at, updated_at timestamps
|
|
- Design appropriate indexes for performance
|
|
- Plan foreign key relationships
|
|
|
|
EXCLUDE:
|
|
- Don't create the migration yet (next task)
|
|
- Don't implement OAuth tables (separate feature)
|
|
- Don't modify existing user table if it exists
|
|
- Don't add two-factor auth tables (not in scope)
|
|
|
|
CONTEXT: Building JWT authentication for REST API.
|
|
- From security requirements: bcrypt hashing, cost factor 12
|
|
- Session expiry: 24 hours
|
|
- Email must be unique
|
|
- Follow project database conventions exactly
|
|
|
|
OUTPUT: Schema design document at docs/patterns/auth-database-schema.md
|
|
- Table definitions with column types
|
|
- Indexes and constraints
|
|
- Foreign key relationships
|
|
- Example data
|
|
|
|
SUCCESS: Schema designed and documented
|
|
- All required fields included
|
|
- Performance indexes identified
|
|
- Follows project conventions
|
|
- Ready for migration implementation
|
|
|
|
TERMINATION:
|
|
- Design complete and documented
|
|
- Blocked by missing existing schema info
|
|
```
|
|
|
|
### Agent 2: Database Migration (After Agent 1)
|
|
|
|
```
|
|
DISCOVERY_FIRST: Before starting, understand the environment:
|
|
- Check migration system: Knex, Sequelize, TypeORM, raw SQL?
|
|
- Find migration directory location
|
|
- Review existing migration file format
|
|
- Note up/down pattern used
|
|
|
|
FOCUS: Create database migration for authentication tables
|
|
- Implement users table from schema design
|
|
- Implement sessions table from schema design
|
|
- Add all indexes from schema design
|
|
- Create both up (create) and down (drop) migrations
|
|
- Follow migration naming conventions
|
|
|
|
EXCLUDE:
|
|
- Don't run the migration yet (separate step)
|
|
- Don't seed data (separate concern)
|
|
- Don't modify existing migrations
|
|
- Don't add tables not in schema design
|
|
|
|
CONTEXT: Implementing schema designed in previous step.
|
|
- Schema document: docs/patterns/auth-database-schema.md
|
|
- Tables: users (email, password_hash, created_at, updated_at)
|
|
- Tables: sessions (id, user_id, token_hash, expires_at, created_at)
|
|
- Indexes: users.email (unique), sessions.token_hash, sessions.user_id
|
|
|
|
OUTPUT: Migration file at [DISCOVERED_MIGRATION_PATH]/[timestamp]_create_auth_tables.js
|
|
- Up migration creates tables and indexes
|
|
- Down migration drops tables cleanly
|
|
- Follows project migration format
|
|
|
|
SUCCESS: Migration created and ready to run
|
|
- Matches schema design exactly
|
|
- Both up and down work correctly
|
|
- Follows project patterns
|
|
- No syntax errors
|
|
|
|
TERMINATION:
|
|
- Migration file created successfully
|
|
- Blocked by unclear migration system
|
|
- Migration format doesn't match project (document issue)
|
|
```
|
|
|
|
### Agent 3: JWT Middleware (After Agent 2)
|
|
|
|
```
|
|
DISCOVERY_FIRST: Before starting, understand the environment:
|
|
- Find existing middleware location: src/middleware/ or app/middleware/?
|
|
- Check JWT library in use: jsonwebtoken, jose, other?
|
|
- Review existing middleware patterns
|
|
- Note error handling style used
|
|
|
|
FOCUS: Implement JWT authentication middleware
|
|
- Verify JWT token from Authorization header
|
|
- Decode and validate token
|
|
- Check token against sessions table (not blacklisted)
|
|
- Attach user object to request
|
|
- Handle missing/invalid/expired tokens appropriately
|
|
|
|
EXCLUDE:
|
|
- Don't implement login/logout endpoints (next task)
|
|
- Don't implement token refresh (not in scope)
|
|
- Don't add rate limiting (separate concern)
|
|
- Don't implement permission checking (just authentication)
|
|
|
|
CONTEXT: JWT middleware for REST API authentication.
|
|
- JWT secret: from environment variable JWT_SECRET
|
|
- Token expiry: 24 hours
|
|
- Sessions table: check if token_hash exists and not expired
|
|
- Error responses: 401 for invalid/missing token
|
|
- Follow project error handling patterns
|
|
|
|
OUTPUT: Middleware file at [DISCOVERED_LOCATION]/auth.middleware.ts
|
|
- verifyJWT function (main middleware)
|
|
- Helper functions (decode, validate, etc.)
|
|
- Error handling for all cases
|
|
- TypeScript types if applicable
|
|
|
|
SUCCESS: Middleware implemented and ready to use
|
|
- Verifies JWT correctly
|
|
- Checks session validity
|
|
- Attaches user to request
|
|
- Handles all error cases
|
|
- Follows project patterns
|
|
|
|
TERMINATION:
|
|
- Middleware complete
|
|
- Blocked by missing JWT library
|
|
- Database connection pattern unclear
|
|
```
|
|
|
|
### Agent 4: Auth Endpoints (After Agent 3)
|
|
|
|
```
|
|
DISCOVERY_FIRST: Before starting, understand the environment:
|
|
- Find routes directory: src/routes/ or app/routes/?
|
|
- Check router library: Express, Fastify, Koa?
|
|
- Review existing route patterns
|
|
- Note controller/handler organization
|
|
|
|
FOCUS: Implement authentication endpoints
|
|
- POST /api/auth/login (email, password → JWT token)
|
|
- POST /api/auth/logout (invalidate current session)
|
|
- Use auth middleware from previous step
|
|
- Create sessions table entry on login
|
|
- Remove sessions table entry on logout
|
|
|
|
EXCLUDE:
|
|
- Don't implement registration (separate feature)
|
|
- Don't implement password reset (separate feature)
|
|
- Don't add OAuth endpoints (separate feature)
|
|
- Don't implement GET /me endpoint (separate task)
|
|
|
|
CONTEXT: Auth endpoints using JWT middleware implemented in previous step.
|
|
- Middleware location: [from Agent 3 OUTPUT]
|
|
- Login validates: email format, password against bcrypt hash
|
|
- Login creates: session entry, JWT token with user_id claim
|
|
- Logout requires: valid JWT (use middleware)
|
|
- Logout invalidates: session entry in database
|
|
|
|
OUTPUT:
|
|
- Routes file at [DISCOVERED_LOCATION]/auth.routes.ts
|
|
- Controller file at [DISCOVERED_LOCATION]/auth.controller.ts
|
|
- Follow project route organization pattern
|
|
|
|
SUCCESS: Endpoints implemented and functional
|
|
- Login validates credentials correctly
|
|
- Login returns valid JWT
|
|
- Logout requires authentication
|
|
- Logout invalidates session
|
|
- All errors handled appropriately
|
|
- Follows project patterns
|
|
|
|
TERMINATION:
|
|
- Endpoints complete
|
|
- Blocked by unclear auth middleware interface
|
|
- bcrypt usage pattern unclear
|
|
```
|
|
|
|
### Agent 5: Integration Tests (After Agent 4)
|
|
|
|
```
|
|
DISCOVERY_FIRST: Before starting, understand the environment:
|
|
- Find test directory: tests/, __tests__/, spec/?
|
|
- Identify test framework: Jest, Mocha, Vitest?
|
|
- Review existing test patterns
|
|
- Note test database setup approach
|
|
|
|
FOCUS: Create integration tests for authentication flow
|
|
- Test successful login (valid credentials → JWT returned)
|
|
- Test failed login (invalid credentials → 401)
|
|
- Test logout (valid JWT → session invalidated)
|
|
- Test protected route with valid JWT (→ 200)
|
|
- Test protected route with invalid JWT (→ 401)
|
|
- Test protected route with no JWT (→ 401)
|
|
|
|
EXCLUDE:
|
|
- Don't test registration (not implemented)
|
|
- Don't test password reset (not implemented)
|
|
- Don't unit test internal functions (integration tests only)
|
|
- Don't test OAuth flows (not implemented)
|
|
|
|
CONTEXT: Testing JWT authentication implemented in previous steps.
|
|
- Endpoints: POST /api/auth/login, POST /api/auth/logout
|
|
- Middleware: JWT verification from auth.middleware.ts
|
|
- Test database: Use test database, clean between tests
|
|
- Follow project testing patterns exactly
|
|
|
|
OUTPUT: Test file at [DISCOVERED_LOCATION]/auth.integration.test.ts
|
|
- All test cases listed in FOCUS
|
|
- Setup and teardown (database, test user)
|
|
- Clear test descriptions
|
|
- Assertions verify correct behavior
|
|
|
|
SUCCESS: Complete test coverage for auth flow
|
|
- All tests pass
|
|
- Tests are independent (can run in any order)
|
|
- Database cleanup works correctly
|
|
- Follows project test patterns
|
|
- Coverage includes happy path and error cases
|
|
|
|
TERMINATION:
|
|
- Tests complete and passing
|
|
- Blocked by test framework unclear
|
|
- Test database setup pattern unclear
|
|
```
|
|
|
|
## Execution Flow
|
|
|
|
### Phase 1: Schema Design (Agent 1)
|
|
|
|
```
|
|
🚀 Launching Agent 1: Schema Design
|
|
|
|
Status: RUNNING
|
|
Time: 15 minutes
|
|
|
|
Agent 1: COMPLETE ✅
|
|
Output: docs/patterns/auth-database-schema.md
|
|
|
|
Deliverables:
|
|
- Users table design (5 columns + indexes)
|
|
- Sessions table design (5 columns + indexes)
|
|
- Foreign key relationship documented
|
|
- Performance considerations noted
|
|
|
|
Validation: ✅ Ready for migration implementation
|
|
```
|
|
|
|
### Phase 2: Database Migration (Agent 2)
|
|
|
|
```
|
|
🚀 Launching Agent 2: Database Migration
|
|
Dependencies: Agent 1 complete ✅
|
|
|
|
Context provided:
|
|
- Schema document from Agent 1
|
|
- Table definitions and indexes
|
|
|
|
Status: RUNNING
|
|
Time: 20 minutes
|
|
|
|
Agent 2: COMPLETE ✅
|
|
Output: migrations/20250124120000_create_auth_tables.js
|
|
|
|
Deliverables:
|
|
- Up migration creates both tables
|
|
- Down migration drops cleanly
|
|
- All indexes included
|
|
- Follows Knex migration pattern
|
|
|
|
Validation: ✅ Ready for middleware implementation
|
|
```
|
|
|
|
### Phase 3: JWT Middleware (Agent 3)
|
|
|
|
```
|
|
🚀 Launching Agent 3: JWT Middleware
|
|
Dependencies: Agent 2 complete ✅
|
|
|
|
Context provided:
|
|
- Migration created tables
|
|
- Database schema known
|
|
|
|
Status: RUNNING
|
|
Time: 30 minutes
|
|
|
|
Agent 3: COMPLETE ✅
|
|
Output: src/middleware/auth.middleware.ts
|
|
|
|
Deliverables:
|
|
- verifyJWT middleware function
|
|
- Token validation logic
|
|
- Session checking against database
|
|
- Error handling for all cases
|
|
|
|
Validation: ✅ Ready for endpoint implementation
|
|
```
|
|
|
|
### Phase 4: Auth Endpoints (Agent 4)
|
|
|
|
```
|
|
🚀 Launching Agent 4: Auth Endpoints
|
|
Dependencies: Agent 3 complete ✅
|
|
|
|
Context provided:
|
|
- Middleware from Agent 3
|
|
- Function signatures and usage
|
|
|
|
Status: RUNNING
|
|
Time: 35 minutes
|
|
|
|
Agent 4: COMPLETE ✅
|
|
Output:
|
|
- src/routes/auth.routes.ts
|
|
- src/controllers/auth.controller.ts
|
|
|
|
Deliverables:
|
|
- POST /api/auth/login endpoint
|
|
- POST /api/auth/logout endpoint
|
|
- Integration with middleware
|
|
- Error responses
|
|
|
|
Validation: ✅ Ready for testing
|
|
```
|
|
|
|
### Phase 5: Integration Tests (Agent 5)
|
|
|
|
```
|
|
🚀 Launching Agent 5: Integration Tests
|
|
Dependencies: Agent 4 complete ✅
|
|
|
|
Context provided:
|
|
- All endpoints from Agent 4
|
|
- Middleware from Agent 3
|
|
- Expected behavior
|
|
|
|
Status: RUNNING
|
|
Time: 25 minutes
|
|
|
|
Agent 5: COMPLETE ✅
|
|
Output: tests/integration/auth.test.ts
|
|
|
|
Deliverables:
|
|
- 6 integration tests
|
|
- Database setup/teardown
|
|
- All tests passing ✅
|
|
- 95% coverage of auth flow
|
|
|
|
Validation: ✅ Feature complete and tested
|
|
```
|
|
|
|
## Results
|
|
|
|
### Total Time: 125 minutes (sequential)
|
|
|
|
**Sequential necessary:** Each task depends on previous
|
|
**No parallelization possible** in this dependency chain
|
|
|
|
### Context Accumulation
|
|
|
|
Each agent received growing context:
|
|
|
|
- Agent 1: Fresh start
|
|
- Agent 2: Agent 1's schema design
|
|
- Agent 3: Agent 2's migration + Agent 1's schema
|
|
- Agent 4: Agent 3's middleware + all prior context
|
|
- Agent 5: All previous implementations
|
|
|
|
### Deliverables
|
|
|
|
```
|
|
📁 Project structure:
|
|
├── docs/patterns/
|
|
│ └── auth-database-schema.md (Agent 1)
|
|
├── migrations/
|
|
│ └── 20250124120000_create_auth_tables.js (Agent 2)
|
|
├── src/
|
|
│ ├── middleware/
|
|
│ │ └── auth.middleware.ts (Agent 3)
|
|
│ ├── routes/
|
|
│ │ └── auth.routes.ts (Agent 4)
|
|
│ └── controllers/
|
|
│ └── auth.controller.ts (Agent 4)
|
|
└── tests/integration/
|
|
└── auth.test.ts (Agent 5)
|
|
```
|
|
|
|
## Lessons Learned
|
|
|
|
### What Worked Well
|
|
|
|
✅ **Clear dependency chain:** Each agent knew exactly what it needed
|
|
✅ **Context accumulation:** Prior outputs informed each subsequent agent
|
|
✅ **DISCOVERY_FIRST:** Ensured consistency with project patterns
|
|
✅ **Validation at each step:** Caught issues before they propagated
|
|
|
|
### Challenges Encountered
|
|
|
|
⚠️ **Agent 2 Issue:** Initial migration didn't match project format
|
|
- **Solution:** Retry with more specific Knex pattern in CONTEXT
|
|
- **Lesson:** DISCOVERY_FIRST examples critical
|
|
|
|
⚠️ **Agent 3 Issue:** Used wrong JWT library (jose instead of jsonwebtoken)
|
|
- **Solution:** More explicit in EXCLUDE and CONTEXT
|
|
- **Lesson:** Specify exact libraries when project uses specific ones
|
|
|
|
⚠️ **Agent 5 Issue:** Tests didn't clean up database properly
|
|
- **Solution:** Retry with explicit teardown requirements
|
|
- **Lesson:** Test isolation must be explicit in SUCCESS criteria
|
|
|
|
### Improvements for Next Time
|
|
|
|
1. **Specify exact libraries** in CONTEXT (don't assume agent will discover)
|
|
2. **Include output of previous agent** verbatim in next agent's CONTEXT
|
|
3. **Validation step between agents** to catch issues before next dependency
|
|
4. **Checkpoint approach:** Allow user to review after each agent before launching next
|
|
|
|
## Reusable Template
|
|
|
|
This pattern works for any sequential build:
|
|
|
|
```
|
|
1. Identify dependency chain (what depends on what)
|
|
2. Order activities by dependencies
|
|
3. Each agent's CONTEXT includes prior agent outputs
|
|
4. Launch sequentially, validate each before next
|
|
5. Accumulate context as you go
|
|
```
|
|
|
|
**Use when:**
|
|
- Building implementation layers (DB → Logic → API → UI)
|
|
- Pipeline-style workflows (Design → Build → Test → Deploy)
|
|
- Learning workflows (Research → Design → Implement → Validate)
|
|
- Any task where B genuinely needs A's output
|
|
|
|
## Comparison: What If We Tried Parallel?
|
|
|
|
**Attempted parallel (would fail):**
|
|
|
|
```
|
|
Agent 2 (Migration): Needs Agent 1's schema design → BLOCKED
|
|
Agent 3 (Middleware): Needs Agent 2's tables to exist → BLOCKED
|
|
Agent 4 (Endpoints): Needs Agent 3's middleware → BLOCKED
|
|
Agent 5 (Tests): Needs Agent 4's endpoints → BLOCKED
|
|
|
|
Result: All agents blocked or produce incorrect results
|
|
```
|
|
|
|
**Lesson:** Don't force parallelization when dependencies exist. Sequential is correct here.
|