2025-09-18 23:03:01 -07:00
---
description : Execute the implementation plan by processing and executing all tasks defined in tasks.md
scripts :
2025-09-20 11:19:47 -07:00
sh : scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks
ps : scripts/powershell/check-prerequisites.ps1 -Json -RequireTasks -IncludeTasks
2025-09-18 23:03:01 -07:00
---
2025-10-03 21:31:58 -07:00
## User Input
2025-09-21 00:02:33 -07:00
2025-10-03 21:31:58 -07:00
```text
$ARGUMENTS
```
2025-09-21 00:02:33 -07:00
2025-10-03 21:31:58 -07:00
You **MUST** consider the user input before proceeding (if not empty).
2026-03-04 08:16:31 -06:00
## Pre-Execution Checks
**Check for extension hooks (before implementation)** :
- Check if `.specify/extensions.yml` exists in the project root.
- If it exists, read it and look for entries under the `hooks.before_implement` key
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
2026-03-19 04:37:03 -07:00
- Filter out hooks where `enabled` is explicitly `false` . Treat hooks without an `enabled` field as enabled by default.
2026-03-04 08:16:31 -06:00
- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
- If the hook has no `condition` field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty `condition` , skip the hook and leave condition evaluation to the HookExecutor implementation
- For each executable hook, output the following based on its `optional` flag:
- **Optional hook** (`optional: true` ):
```
## Extension Hooks
**Optional Pre-Hook**: {extension}
Command: ` /{command}`
Description: {description}
Prompt: {prompt}
To execute: ` /{command}`
` ``
- **Mandatory hook** (` optional: false`):
` ``
## Extension Hooks
**Automatic Pre-Hook**: {extension}
Executing: ` /{command}`
EXECUTE_COMMAND: {command}
Wait for the result of the hook command before proceeding to the Outline.
` ``
- If no hooks are registered or ` .specify/extensions.yml` does not exist, skip silently
2025-10-03 21:31:58 -07:00
## Outline
2025-09-18 23:03:01 -07:00
2025-10-08 18:00:14 +03:00
1. Run ` {SCRIPT}` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot").
2025-09-18 23:03:01 -07:00
2025-10-03 19:30:15 -07:00
2. **Check checklists status** (if FEATURE_DIR/checklists/ exists):
- Scan all checklist files in the checklists/ directory
- For each checklist, count:
2025-10-21 15:12:33 -07:00
- Total items: All lines matching ` - [ ]` or ` - [X]` or ` - [x]`
- Completed items: Lines matching ` - [X]` or ` - [x]`
- Incomplete items: Lines matching ` - [ ]`
2025-10-03 19:30:15 -07:00
- Create a status table:
2025-10-21 15:12:33 -07:00
2025-10-20 00:49:15 +02:00
` ``text
2025-10-03 19:30:15 -07:00
| Checklist | Total | Completed | Incomplete | Status |
|-----------|-------|-----------|------------|--------|
| ux.md | 12 | 12 | 0 | ✓ PASS |
| test.md | 8 | 5 | 3 | ✗ FAIL |
| security.md | 6 | 6 | 0 | ✓ PASS |
` ``
2025-10-21 15:12:33 -07:00
2025-10-03 19:30:15 -07:00
- Calculate overall status:
2025-10-21 15:12:33 -07:00
- **PASS**: All checklists have 0 incomplete items
- **FAIL**: One or more checklists have incomplete items
2025-10-03 19:30:15 -07:00
- **If any checklist is incomplete**:
2025-10-21 15:12:33 -07:00
- Display the table with incomplete item counts
- **STOP** and ask: "Some checklists are incomplete. Do you want to proceed with implementation anyway? (yes/no)"
- Wait for user response before continuing
- If user says "no" or "wait" or "stop", halt execution
- If user says "yes" or "proceed" or "continue", proceed to step 3
2025-10-03 19:30:15 -07:00
- **If all checklists are complete**:
2025-10-21 15:12:33 -07:00
- Display the table showing all checklists passed
- Automatically proceed to step 3
2025-10-03 19:30:15 -07:00
3. Load and analyze the implementation context:
2025-09-18 23:03:01 -07:00
- **REQUIRED**: Read tasks.md for the complete task list and execution plan
- **REQUIRED**: Read plan.md for tech stack, architecture, and file structure
- **IF EXISTS**: Read data-model.md for entities and relationships
- **IF EXISTS**: Read contracts/ for API specifications and test requirements
- **IF EXISTS**: Read research.md for technical decisions and constraints
2026-05-06 06:56:59 -05:00
- **IF EXISTS**: Read /memory/constitution.md for governance constraints
2025-09-18 23:03:01 -07:00
- **IF EXISTS**: Read quickstart.md for integration scenarios
2025-10-10 10:11:06 +01:00
4. **Project Setup Verification**:
- **REQUIRED**: Create/verify ignore files based on actual project setup:
2025-10-21 15:12:33 -07:00
2025-10-10 10:11:06 +01:00
**Detection & Creation Logic**:
2025-10-10 11:05:16 -07:00
- Check if the following command succeeds to determine if the repository is a git repo (create/verify .gitignore if so):
` ``sh
git rev-parse --git-dir 2>/dev/null
` ``
2025-10-21 15:12:33 -07:00
2025-10-10 10:11:06 +01:00
- Check if Dockerfile* exists or Docker in plan.md → create/verify .dockerignore
2025-10-28 09:47:52 +11:00
- Check if .eslintrc* exists → create/verify .eslintignore
- Check if eslint.config.* exists → ensure the config's ` ignores` entries cover required patterns
2025-10-10 10:11:06 +01:00
- Check if .prettierrc* exists → create/verify .prettierignore
- Check if .npmrc or package.json exists → create/verify .npmignore (if publishing)
- Check if terraform files (*.tf) exist → create/verify .terraformignore
- Check if .helmignore needed (helm charts present) → create/verify .helmignore
2025-10-21 15:12:33 -07:00
2025-10-10 10:11:06 +01:00
**If ignore file already exists**: Verify it contains essential patterns, append missing critical patterns only
**If ignore file missing**: Create with full pattern set for detected technology
2025-10-21 15:12:33 -07:00
2025-10-10 10:11:06 +01:00
**Common Patterns by Technology** (from plan.md tech stack):
2025-10-21 21:18:57 +08:00
- **Node.js/JavaScript/TypeScript**: ` node_modules/`, ` dist/`, ` build/`, ` *.log`, ` .env*`
2025-10-10 10:11:06 +01:00
- **Python**: ` __pycache__/`, ` *.pyc`, ` .venv/`, ` venv/`, ` dist/`, ` *.egg-info/`
- **Java**: ` target/`, ` *.class`, ` *.jar`, ` .gradle/`, ` build/`
- **C#/.NET**: ` bin/`, ` obj/`, ` *.user`, ` *.suo`, ` packages/`
- **Go**: ` *.exe`, ` *.test`, ` vendor/`, ` *.out`
2025-10-15 23:15:39 +08:00
- **Ruby**: ` .bundle/`, ` log/`, ` tmp/`, ` *.gem`, ` vendor/bundle/`
- **PHP**: ` vendor/`, ` *.log`, ` *.cache`, ` *.env`
- **Rust**: ` target/`, ` debug/`, ` release/`, ` *.rs.bk`, ` *.rlib`, ` *.prof*`, ` .idea/`, ` *.log`, ` .env*`
2025-10-15 23:55:00 +08:00
- **Kotlin**: ` build/`, ` out/`, ` .gradle/`, ` .idea/`, ` *.class`, ` *.jar`, ` *.iml`, ` *.log`, ` .env*`
2025-10-15 23:15:39 +08:00
- **C++**: ` build/`, ` bin/`, ` obj/`, ` out/`, ` *.o`, ` *.so`, ` *.a`, ` *.exe`, ` *.dll`, ` .idea/`, ` *.log`, ` .env*`
2026-03-04 09:08:04 -05:00
- **C**: ` build/`, ` bin/`, ` obj/`, ` out/`, ` *.o`, ` *.a`, ` *.so`, ` *.exe`, ` *.dll`, ` autom4te.cache/`, ` config.status`, ` config.log`, ` .idea/`, ` *.log`, ` .env*`
2025-10-21 21:27:46 +08:00
- **Swift**: ` .build/`, ` DerivedData/`, ` *.swiftpm/`, ` Packages/`
2025-10-21 21:18:57 +08:00
- **R**: ` .Rproj.user/`, ` .Rhistory`, ` .RData`, ` .Ruserdata`, ` *.Rproj`, ` packrat/`, ` renv/`
2025-10-10 10:11:06 +01:00
- **Universal**: ` .DS_Store`, ` Thumbs.db`, ` *.tmp`, ` *.swp`, ` .vscode/`, ` .idea/`
2025-10-21 15:12:33 -07:00
2025-10-10 10:11:06 +01:00
**Tool-Specific Patterns**:
2025-10-10 11:05:38 -07:00
- **Docker**: ` node_modules/`, ` .git/`, ` Dockerfile*`, ` .dockerignore`, ` *.log*`, ` .env*`, ` coverage/`
2025-10-10 10:11:06 +01:00
- **ESLint**: ` node_modules/`, ` dist/`, ` build/`, ` coverage/`, ` *.min.js`
- **Prettier**: ` node_modules/`, ` dist/`, ` build/`, ` coverage/`, ` package-lock.json`, ` yarn.lock`, ` pnpm-lock.yaml`
- **Terraform**: ` .terraform/`, ` *.tfstate*`, ` *.tfvars`, ` .terraform.lock.hcl`
2025-10-21 21:18:57 +08:00
- **Kubernetes/k8s**: ` *.secret.yaml`, ` secrets/`, ` .kube/`, ` kubeconfig*`, ` *.key`, ` *.crt`
2025-10-10 10:11:06 +01:00
5. Parse tasks.md structure and extract:
2025-09-18 23:03:01 -07:00
- **Task phases**: Setup, Tests, Core, Integration, Polish
- **Task dependencies**: Sequential vs parallel execution rules
- **Task details**: ID, description, file paths, parallel markers [P]
- **Execution flow**: Order and dependency requirements
2025-10-10 10:11:06 +01:00
6. Execute implementation following the task plan:
2025-09-18 23:03:01 -07:00
- **Phase-by-phase execution**: Complete each phase before moving to the next
- **Respect dependencies**: Run sequential tasks in order, parallel tasks [P] can run together
- **Follow TDD approach**: Execute test tasks before their corresponding implementation tasks
- **File-based coordination**: Tasks affecting the same files must run sequentially
- **Validation checkpoints**: Verify each phase completion before proceeding
2025-10-10 10:11:06 +01:00
7. Implementation execution rules:
2025-09-18 23:03:01 -07:00
- **Setup first**: Initialize project structure, dependencies, configuration
- **Tests before code**: If you need to write tests for contracts, entities, and integration scenarios
- **Core development**: Implement models, services, CLI commands, endpoints
- **Integration work**: Database connections, middleware, logging, external services
- **Polish and validation**: Unit tests, performance optimization, documentation
2025-10-10 10:11:06 +01:00
8. Progress tracking and error handling:
2025-09-18 23:03:01 -07:00
- Report progress after each completed task
- Halt execution if any non-parallel task fails
- For parallel tasks [P], continue with successful tasks, report failed ones
- Provide clear error messages with context for debugging
- Suggest next steps if implementation cannot proceed
- **IMPORTANT** For completed tasks, make sure to mark the task off as [X] in the tasks file.
2025-10-10 10:11:06 +01:00
9. Completion validation:
2025-09-18 23:03:01 -07:00
- Verify all required tasks are completed
- Check that implemented features match the original specification
- Validate that tests pass and coverage meets requirements
- Confirm the implementation follows the technical plan
2026-04-24 10:04:14 -05:00
Note: This command assumes a complete task breakdown exists in tasks.md. If tasks are incomplete or missing, suggest running ` __SPECKIT_COMMAND_TASKS__` first to regenerate the task list.
2026-03-04 08:16:31 -06:00
2026-05-26 16:57:03 -05:00
## Mandatory Post-Execution Hooks
2026-03-04 08:16:31 -06:00
2026-05-26 16:57:03 -05:00
**You MUST complete this section before reporting completion to the user.**
2026-03-04 08:16:31 -06:00
2026-05-26 16:57:03 -05:00
Check if ` .specify/extensions.yml` exists in the project root.
- If it does not exist, or no hooks are registered under ` hooks.after_implement`, skip to the Completion Report.
- If it exists, read it and look for entries under the ` hooks.after_implement` key.
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue to the Completion Report.
- Filter out hooks where ` enabled` is explicitly ` false`. Treat hooks without an ` enabled` field as enabled by default.
- For each remaining hook, do **not** attempt to interpret or evaluate hook ` condition` expressions:
- If the hook has no ` condition` field, or it is null/empty, treat the hook as executable
- If the hook defines a non-empty ` condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
- For each executable hook, output the following based on its ` optional` flag:
- **Mandatory hook** (` optional: false`) — **You MUST emit ` EXECUTE_COMMAND:` for each mandatory hook**:
` ``
## Extension Hooks
2026-03-04 08:16:31 -06:00
2026-05-26 16:57:03 -05:00
**Automatic Hook**: {extension}
Executing: ` /{command}`
EXECUTE_COMMAND: {command}
` ``
- **Optional hook** (` optional: true`):
` ``
## Extension Hooks
**Optional Hook**: {extension}
Command: ` /{command}`
Description: {description}
Prompt: {prompt}
To execute: ` /{command}`
` ``
## Completion Report
Report final status with summary of completed work.
## Done When
- [ ] All tasks in tasks.md completed and marked ` [X]`
- [ ] Implementation validated against specification, plan, and test coverage
- [ ] Extension hooks dispatched or skipped according to the rules in Mandatory Post-Execution Hooks above
- [ ] Completion reported to user with summary of completed work