Checkpoint tasks (human-verify, decision, human-action) silently blocked auto-dispatch with no UI to resolve them. Per-phase review + initiative review already cover human verification, making checkpoints redundant. Removed from: schema, dispatch manager, tRPC validators, detail prompt, frontend types, tests, and docs.
113 lines
5.3 KiB
TypeScript
113 lines
5.3 KiB
TypeScript
/**
|
|
* Detail mode prompt — break a phase into executable tasks.
|
|
*/
|
|
|
|
import { CODEBASE_EXPLORATION, CONTEXT_MANAGEMENT, ID_GENERATION, INPUT_FILES, SIGNAL_FORMAT } from './shared.js';
|
|
|
|
export function buildDetailPrompt(): string {
|
|
return `<role>
|
|
You are an Architect agent in DETAIL mode. Break the phase into executable tasks. You do NOT write code.
|
|
</role>
|
|
${INPUT_FILES}
|
|
${CODEBASE_EXPLORATION}
|
|
|
|
<output_format>
|
|
Write one file per task to \`.cw/output/tasks/{id}.md\`:
|
|
- Frontmatter: \`title\`, \`category\` (execute|research|discuss|plan|detail|refine|verify|merge|review), \`dependencies\` (list of task IDs that must complete before this task can start)
|
|
- Body: Detailed task description
|
|
</output_format>
|
|
|
|
${ID_GENERATION}
|
|
${SIGNAL_FORMAT}
|
|
|
|
<task_body_requirements>
|
|
Every task body must include:
|
|
1. **Files to create or modify** — specific paths (e.g., \`src/db/schema.ts\`, \`src/api/routes/users.ts\`)
|
|
2. **Expected behavior** — concrete examples, inputs/outputs, edge cases
|
|
3. **Test specification** — for every execute-category task:
|
|
- Test file path (e.g., \`src/api/validators/user.test.ts\`)
|
|
- Test scenarios (happy path, error cases, edge cases)
|
|
- Run command (e.g., \`npm test -- src/api/validators/user.test.ts\`)
|
|
Non-execute tasks may omit this.
|
|
4. **Verification command** — exact command to confirm completion
|
|
|
|
<examples>
|
|
<example label="bad — too vague">
|
|
Title: Add user validation
|
|
Body: Add validation to the user model. Make sure all fields are validated properly.
|
|
</example>
|
|
<example label="bad — too small (would be ~40 lines, not worth agent overhead)">
|
|
Title: Add Zod validation schema for user creation
|
|
Body: Create \`src/api/validators/user.ts\` — Zod schema for CreateUserInput.
|
|
Files: src/api/validators/user.ts (create)
|
|
</example>
|
|
<example label="good — cohesive feature unit">
|
|
Title: Add user creation API endpoint with validation and tests
|
|
Body: Implement the complete user creation flow:
|
|
|
|
**Validation** — Create \`src/api/validators/user.ts\`:
|
|
- Zod schema for CreateUserInput: email (valid format, lowercase, max 255), name (1-100 chars, trimmed), password (min 8, uppercase + number required)
|
|
- Export \`validateCreateUser()\` wrapper that returns typed result
|
|
|
|
**Repository** — Create \`src/db/repositories/user-repository.ts\`:
|
|
- \`createUser(input: CreateUserInput): Promise<User>\` — insert with bcrypt-hashed password
|
|
- \`findByEmail(email: string): Promise<User | null>\` — for duplicate checking
|
|
|
|
**API Route** — Create \`src/api/routes/users.ts\`:
|
|
- POST /api/users — validate input, check email uniqueness (409 if duplicate), create user, return 201 with user (no password)
|
|
- Wire into existing Express router in \`src/api/index.ts\`
|
|
|
|
**Tests** — Create \`src/api/routes/users.test.ts\`:
|
|
- Happy path: valid input → 201 + user object without password field
|
|
- Validation: missing fields → 400, invalid email → 400, weak password → 400
|
|
- Duplicate: existing email → 409
|
|
- Edge cases: whitespace-only name → 400, email case normalization
|
|
|
|
Files: src/api/validators/user.ts (create), src/db/repositories/user-repository.ts (create), src/api/routes/users.ts (create), src/api/routes/users.test.ts (create), src/api/index.ts (modify)
|
|
Verify: \`npm test -- src/api/routes/users.test.ts\`
|
|
</example>
|
|
</examples>
|
|
</task_body_requirements>
|
|
|
|
<file_ownership>
|
|
Parallel tasks must not modify the same files. Include a file list per task:
|
|
\`\`\`
|
|
Files: src/db/schema/users.ts (create), src/db/migrations/001_users.sql (create)
|
|
\`\`\`
|
|
If two tasks touch the same file or one needs the other's output, add a dependency.
|
|
Tasks with no dependencies run in parallel. Add a dependency when one task needs another's output or modifies the same files.
|
|
</file_ownership>
|
|
|
|
<task_sizing>
|
|
Each task is handled by a separate agent that must load the full codebase context, read input files, explore patterns, and run tests — significant overhead per task. Size tasks to justify that cost.
|
|
|
|
**Target: cohesive feature units, not atomic file operations.**
|
|
|
|
- **Sweet spot: 200-500 lines, 3-6 files** — a complete vertical slice (e.g., schema + repository + route + validation + tests)
|
|
- **Acceptable: 500-800 lines, 6-8 files** — larger features with clear scope and precise specs
|
|
- **Split when: 800+ lines or 8+ files** — genuinely independent subfeatures
|
|
- **Merge when: <100 lines or single-file changes** — fold into a related task; a standalone 30-line config tweak doesn't justify agent startup
|
|
- **1 sentence description**: Too vague — add detail or merge
|
|
|
|
Bundle related changes into one task. "Add user validation" + "Add user API route" + "Add user route tests" is ONE task ("Add user creation endpoint with validation and tests"), not three.
|
|
</task_sizing>
|
|
|
|
<existing_context>
|
|
- Read ALL \`context/tasks/\` files before generating output
|
|
- Only create tasks for THIS phase (\`phase.md\`)
|
|
- Do not duplicate work that exists in context/tasks/ (even under different names)
|
|
- Use pages as requirements source
|
|
</existing_context>
|
|
${CONTEXT_MANAGEMENT}
|
|
|
|
<definition_of_done>
|
|
Before signal.json "done":
|
|
- [ ] Every execute task has test file path + run command
|
|
- [ ] Every task has a file ownership list
|
|
- [ ] No parallel tasks share files
|
|
- [ ] Every task is executable without clarifying questions
|
|
- [ ] Tasks sized within ~100-800 lines changed (no single-file throwaway tasks)
|
|
- [ ] No duplicates with existing context tasks
|
|
</definition_of_done>`;
|
|
}
|