Skip to content
Back to skills

Approve Spec

ASecurity

Approve a specification and export it to beads as an epic with tasks. Creates the epic, child tasks, dependencies, and agent assignment labels. Use after reviewing the spec from /start-discovery.

  • 27 stars
  • 0 votes
  • 1 copy
  • 18 views
  • Added June 14, 2026
testingtypescriptgoswiftbashsqltestingrefactoringapidatabaseperformance

Works with

  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned June 14, 2026

npx -y skills add JeremyKalmus/parade --skill approve-spec --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Approve Spec?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Approve Spec
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jeremykalmus-approve-spec/badge)](https://www.skillsdirectory.com/skills/jeremykalmus-approve-spec)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: approve-spec
description: Approve a specification and export it to beads as an epic with tasks. Creates the epic, child tasks, dependencies, and agent assignment labels. Use after reviewing the spec from /start-discovery.
---

# Approve Spec Skill

## Purpose

Convert an approved specification into actionable beads:
1. Create an epic for the feature
2. Create child tasks from the task breakdown
3. Set up dependencies between tasks
4. Assign agent labels for execution
5. Add close-up checklist task (final task depends on all others)
6. Link back to discovery.db

## When to Use

- User approves a spec after `/start-discovery`
- User says "approve", "looks good", "let's do it"
- Spec status is 'review'

## Arguments

```
/approve-spec <spec-id>
```

---

## ⚡ Performance Notes

**IMPORTANT**: This skill should complete in under 30 seconds. To ensure fast execution:

1. **Use `--no-daemon` flag** on all `bd` commands to skip daemon startup (saves ~5s per command)
2. **Batch operations** where possible using `&&` chains
3. **No code generation** happens here - only metadata/task creation

If this skill is taking longer than expected, check:
- Daemon issues: `bd doctor`
- Context compaction: PreCompact hook should preserve beads context

---

## Process Overview

### Step 0a: Path Detection

Determine the location of discovery.db to support both new `.parade/` structure and legacy project root:

```bash
# Path detection for .parade/ structure
if [ -f ".parade/discovery.db" ]; then
  DISCOVERY_DB=".parade/discovery.db"
else
  DISCOVERY_DB="./discovery.db"
fi
```

All subsequent database operations in this skill use `$DISCOVERY_DB` instead of hardcoded `discovery.db`.

### Step 0b: Load Project Configuration

Check for `project.yaml` to determine testing commands and TDD mode:

```bash
if [ -f "project.yaml" ]; then
  # Parse for:
  # - stacks.<type>.testing.commands (test, lint, build)
  # - workflow.tdd_enabled
fi
```

**Default values if not configured:**
- test: `npm test`
- lint: `npm run lint`
- build: `npm run build`
- tdd_enabled: `false`

### Step 1: Load Spec

```bash
sqlite3 -json "$DISCOVERY_DB" "SELECT * FROM specs WHERE id = '<spec-id>';"
```

Verify spec exists and status is 'review'. Also load the associated brief.

### Step 2: Create Epic

```bash
bd --no-daemon create "<spec-title>" \
  --type epic \
  --description "<spec-description>" \
  --acceptance "<acceptance-criteria-formatted>"
```

Capture epic ID (e.g., `bd-a1b2`).

### Step 3: Parse Task Breakdown

The spec's `task_breakdown` is a JSON array with structure:
```json
[
  {
    "title": "Task title",
    "description": "Task description",
    "agent": "sql|typescript|swift|test|context-builder",
    "depends_on": [0, 1],  // Indices of blocking tasks
    "skip_tests": false     // Optional: skip TDD for this task
  }
]
```

See [beads-patterns.md](docs/beads-patterns.md#task-breakdown-json-schema) for full schema.

### Step 4: Create Tasks (Optimized)

**Option A: Batch Creation (Preferred)**

Generate a temporary markdown file with all tasks, then create in one command:

```bash
# Write tasks to temp file
cat > /tmp/tasks.md << 'EOF'
# Task: <task-1-title>
Type: task
Parent: <epic-id>
Labels: agent:<agent-type>
Description: <task-1-description>

---

# Task: <task-2-title>
Type: task
Parent: <epic-id>
Labels: agent:<agent-type>
Description: <task-2-description>
EOF

# Create all tasks at once
bd --no-daemon create -f /tmp/tasks.md
```

**Option B: Sequential with --no-daemon**

If batch isn't feasible, use `--no-daemon` on each command:

```bash
bd --no-daemon create "<task-title>" \
  --parent <epic-id> \
  --type task \
  --description "<task-description>" \
  --labels "agent:<agent-type>"
```

**Verification criteria** based on agent type and project.yaml config:

| Agent Type | Verification |
|------------|-------------|
| sql | Run migrations, verify schema |
| typescript | `<test_command>` + `<lint_command>` |
| swift | `<test_command>` |
| test | Full test suite |

Track mapping: `task_index → bead_id`

Example:
```
0 → bd-a1b2.1 (Database schema)
1 → bd-a1b2.2 (API endpoint)
2 → bd-a1b2.3 (iOS integration)
```

### Step 4a: Create Test Tasks (TDD Mode)

**Only if `workflow.tdd_enabled: true` in project.yaml:**

For each implementation task (except tasks with `skip_tests` or `agent:test-writer`):

1. Create test task with naming convention: `"Write tests for: <impl-task-title>"`
2. Add `agent:test-writer` label
3. Store bidirectional metadata in notes:
   ```bash
   bd update <impl-task-id> --notes "test_task_id: <test-task-id>"
   bd update <test-task-id> --notes "impl_task_id: <impl-task-id>"
   ```
4. Add dependency (test blocks implementation):
   ```bash
   bd dep add <impl-task-id> <test-task-id>
   ```

**Test task naming:** Use `.Nt` suffix (e.g., `bd-a1b2.2t`)

See [beads-patterns.md](docs/beads-patterns.md#tdd-mode-patterns) for full TDD patterns.

### Step 5: Add Dependencies (Batched)

For each task with `depends_on` indices, resolve to bead IDs and create dependencies.

**Batch with `&&` chains:**

```bash
# Chain multiple dep adds in one command
bd --no-daemon dep add <id-1> <dep-1> && \
bd --no-daemon dep add <id-2> <dep-2> && \
bd --no-daemon dep add <id-3> <dep-3>
```

**Note:** Test task dependencies are already added in Step 4a. Original task dependencies from spec breakdown are still applied.

See [beads-patterns.md](docs/beads-patterns.md#dependency-patterns) for dependency patterns.

### Step 6: Add Agent Labels (Batched)

**Note:** If using batch creation (Step 4 Option A), labels are included in the markdown file. Otherwise:

```bash
# Chain label adds
bd --no-daemon label add <task-1> agent:sql && \
bd --no-daemon label add <task-2> agent:typescript && \
bd --no-daemon label add <task-3> agent:swift
```

Test task labels (`agent:test-writer`) are already added in Step 4a.

See [beads-patterns.md](docs/beads-patterns.md#agent-label-conventions) for label conventions.

### Step 6a: Add Close-Up Checklist Task

Create a final close-up task that runs after all other tasks complete:

```bash
bd --no-daemon create "Epic close-up checklist" \
  --parent <epic-id> \
  --type task \
  --labels "agent:test" \
  --description "Final verification, documentation review, and pattern extraction before closing the epic. See: .claude/skills/approve-spec/docs/closeup-checklist.md" \
  --acceptance "All checklist items verified. Close-up report generated."
```

**Add dependencies on ALL other tasks (batched):**

```bash
# Chain all dependency adds
bd --no-daemon dep add <closeup-id> <task-1> && \
bd --no-daemon dep add <closeup-id> <task-2> && \
bd --no-daemon dep add <closeup-id> <task-3>
# ... etc for all tasks
```

The close-up task ensures:
- All tests pass and build succeeds
- Code review and refactoring complete
- Documentation is updated
- Patterns are extracted to shared utilities/agents
- No integration regressions
- Cleanup of temporary artifacts

See [closeup-checklist.md](docs/closeup-checklist.md) for the full checklist.

### Step 7: Update Discovery.db

Mark spec as approved and export epic reference:

```sql
UPDATE specs
SET status = 'approved',
    approved_at = datetime('now'),
    exported_epic_id = '<epic-id>'
WHERE id = '<spec-id>';

UPDATE briefs
SET status = 'exported',
    exported_epic_id = '<epic-id>',
    updated_at = datetime('now')
WHERE id = (SELECT brief_id FROM specs WHERE id = '<spec-id>');

INSERT INTO workflow_events (brief_id, event_type, details)
VALUES (
  (SELECT brief_id FROM specs WHERE id = '<spec-id>'),
  'exported',
  '{"epic_id": "<epic-id>", "task_count": <n>}'
);
```

### Step 8: Display Summary

**Without TDD:**
```
## Spec Approved and Exported to Beads

Epic: <epic-id> - <title>

Tasks created:
- <bd-a1b2.1>: Database schema [agent:sql]
- <bd-a1b2.2>: API endpoint [agent:typescript] → depends on .1
- <bd-a1b2.3>: iOS integration [agent:swift] → depends on .1, .2
- <bd-a1b2.final>: Epic close-up checklist [agent:test] → depends on ALL

Ready work (no blockers):
- <bd-a1b2.1>: Database schema

---

To start execution: /run-tasks
To view in Kanban: Open Parade app
```

**With TDD enabled:**
```
## Spec Approved and Exported to Beads (TDD Mode)

Epic: <epic-id> - <title>

Tasks created (with test-first pairing):
- <bd-a1b2.1>: Database schema [agent:sql]
- <bd-a1b2.2t>: Write tests for: API endpoint [agent:test-writer]
- <bd-a1b2.2>: API endpoint [agent:typescript] → depends on .1, .2t
- <bd-a1b2.3t>: Write tests for: iOS integration [agent:test-writer]
- <bd-a1b2.3>: iOS integration [agent:swift] → depends on .1, .2, .3t
- <bd-a1b2.final>: Epic close-up checklist [agent:test] → depends on ALL

Test/Impl Pairings:
- bd-a1b2.2t ⟷ bd-a1b2.2 (test blocks impl)
- bd-a1b2.3t ⟷ bd-a1b2.3 (test blocks impl)

Ready work (no blockers):
- <bd-a1b2.1>: Database schema [agent:sql]
- <bd-a1b2.2t>: Write tests for: API endpoint [agent:test-writer]
- <bd-a1b2.3t>: Write tests for: iOS integration [agent:test-writer]

---

To start execution: /run-tasks
To view in Kanban: Open Parade app

TDD Workflow: Test tasks will run first (RED), then implementation (GREEN), then refactor
Close-Up: Final checklist runs after all tasks complete
```

---

## Core Export Logic

The skill implements this conversion flow:

```
Spec (discovery.db)
  ↓ Parse task_breakdown JSON
Tasks Array with Indices
  ↓ Create beads tasks
Index → Bead ID Mapping
  ↓ Resolve dependencies
Dependencies Added
  ↓ Assign agent labels
Tasks Ready for Execution
  ↓ (Optional: TDD Mode)
Test/Impl Task Pairs
  ↓ Add close-up checklist task
Final Task Depends on All
  ↓ Update discovery.db
Spec Approved, Epic Exported
```

### Skip Tests Logic

Tasks can opt-out of TDD test creation by setting `skip_tests: true` in the task breakdown JSON. Common use cases:
- Database schema tasks (verified through migrations)
- Documentation tasks
- Configuration tasks
- One-time migration tasks

When `skip_tests` is set, no companion test task is created even in TDD mode.

### Backward Compatibility

- **TDD disabled** (default): Standard task creation, no test tasks, no metadata
- **TDD enabled**: Test tasks created with metadata, fully backward compatible with existing specs

---

## Reference Documentation

For detailed patterns, examples, and command reference:
- [beads-patterns.md](docs/beads-patterns.md) - Complete beads command patterns, dependency examples, label conventions, TDD workflows, and full examples

---

## Output

After successful execution:
- Epic created in beads with full description
- All tasks created as children of epic
- Test tasks created (if TDD enabled) with proper pairing
- **Close-up checklist task created** (depends on all other tasks)
- Dependencies set up correctly (including test → impl if TDD)
- Agent labels applied (including agent:test-writer if TDD)
- Metadata stored for test/impl tracking (if TDD)
- Spec marked as approved in discovery.db
- Brief marked as exported
- User knows which tasks are ready to start

Next step: `/run-tasks` to begin orchestrated execution

Files in this skill

  • SKILL.md10.9 KB
  • docs/beads-patterns.md8.3 KB
  • docs/closeup-checklist.md5.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.