seed-promote · v1.0.2 · 2026-09-30 · sha256 8626de29e2e0b1c0

seed-promote v1.0.2A

Immutable. This exact content never changes and is served at /api/v1/blob/8626de29e2e0b1c0.

---
name: seed-promote
description: Move a triggered seed idea into the CocoBrew spec backlog — writes it to lifecycle/spec.md under a Backlog Items section and marks the seed as promoted
version: 1.0.2
user-invocable: true
command: $seed promote <id>
author: "CocoPlus"
tags:
  - cocoplus
feature: CocoSeed (Feature 29)
---

# $seed promote \<id\>

Move a triggered seed into the CocoBrew planning cycle by writing it to `lifecycle/spec.md` under a "Backlog Items" section. Marks the seed as promoted.

## Preconditions

- `.cocoplus/` must be initialized
- Seed `<id>` must exist and have `status: triggered` (not pending, promoted, or discarded)
- `lifecycle/spec.md` should exist (creates Backlog Items section if file exists; warns if spec.md does not yet exist)

## Arguments

- `<id>` (required): The seed ID to promote (e.g., `seed-20260505-143200`)

## Step-by-Step Behavior

1. **Verify initialization:** Check `.cocoplus/` exists. If not, output: "CocoPlus not initialized. Run `$pod init` first." and exit.

2. **Validate seed ID:** Read `.cocoplus/seeds/[id].yaml`.
   - If file does not exist, output: "No seed with ID [id]. Run `$seed list` to see available seeds." and exit.
   - If `status` is `pending`, output: "Seed [id] has not triggered yet. Trigger condition: [condition]. Use `$seed list` to check status." and exit.
   - If `status` is `promoted`, output: "Seed [id] was already promoted on [promoted_date]." and exit.
   - If `status` is `discarded`, output: "Seed [id] was discarded. If you want to re-activate it, add it again with `$seed add`." and exit.

3. **Read idea and metadata:** Extract from YAML: `idea`, `trigger`, `captured_phase`, `captured_date`, `triggered_date`.

4. **Write to spec.md:** Open `.cocoplus/lifecycle/spec.md`.
   - If `spec.md` does not exist, output: "Warning: `spec.md` not found. Run `$spec` first to create the specification. Seed saved as triggered — promote again after completing `$spec`." and exit.
   - If `spec.md` exists: check if a `## Backlog Items` section already exists.
     - If yes: append the idea as a new bullet under that section.
     - If no: append a new `## Backlog Items` section at the end of the file with the idea as the first bullet.

   Backlog item format:
   ```markdown
   ## Backlog Items

   - **[seed-id]:** [idea text]
     _(Captured during [captured_phase] phase — triggered: [trigger condition] on [triggered_date])_
   ```

5. **Update seed status:** Write updated YAML with `status: promoted` and `promoted_date: [ISO8601]`.

6. **Confirm to developer:**
   ```
   ✓ Seed [seed-id] promoted to spec backlog.
   
   Idea: [idea text]
   Added to: .cocoplus/lifecycle/spec.md → Backlog Items
   
   Run $spec to incorporate it into the next spec cycle.
   ```

## Error Cases

- **Seed file not found:** Output message with suggestion to run `$seed list`
- **Seed not triggered:** Output status and trigger condition; do not promote
- **spec.md not found:** Warn and exit without promoting; seed remains `triggered` for re-promotion
- **Cannot write to spec.md:** Output filesystem error; do not update seed status

## Exit Criteria

This skill is complete when:
- Idea is appended to `spec.md` under Backlog Items
- Seed YAML file is updated with `status: promoted`
- Developer has received confirmation

## Anti-Rationalization

Do NOT:
- Automatically run `$spec` after promotion — that is always an explicit developer action
- Delete the seed file — it stays with `status: promoted` as a record
- Create a standalone git commit — spec.md changes are committed with the next `$spec` invocation