seed-list · v1.0.2 · 2026-09-30 · sha256 ee01607a9b3148d0

seed-list v1.0.2A

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

---
name: seed-list
description: Evaluate all pending seed trigger conditions against current project state and show which ideas are ready to promote and which are still waiting
version: 1.0.2
user-invocable: true
command: $seed list
author: "CocoPlus"
tags:
  - cocoplus
feature: CocoSeed (Feature 29)
---

# $seed list

Evaluate all stored seeds against current project state. Shows two sections: seeds Ready to Promote (trigger has fired) and seeds Waiting (trigger not yet met).

## Preconditions

- `.cocoplus/` must be initialized
- `.cocoplus/seeds/` directory may be empty (outputs "No pending seeds" if so)

## Step-by-Step Behavior

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

2. **Read all seed files:** Load all `.yaml` files from `.cocoplus/seeds/` with `status: pending` or `status: triggered`. Skip seeds with `status: promoted` or `status: discarded`.

3. **If no seeds found:** Output: "No pending seeds. Add ideas with `$seed add`." and exit.

4. **Evaluate each trigger condition** against current project state:

   **Filesystem presence checks:**
   - "when coco-map.json exists" / "when CocoMap is committed" → check `.cocoplus/map/coco-map.json`
   - "when [feature] is active" → check corresponding mode flag in `.cocoplus/modes/`
   - "when [filename] exists" → check for that file in `.cocoplus/`

   **Lifecycle phase checks:**
   - "when Build phase completes" → read `.cocoplus/lifecycle/meta.json`, check if `build` phase is in completed phases
   - "when Ship phase completes" → check if lifecycle phase is "shipped"
   - "when [phase] phase begins" → check current phase field

   **Mode flag checks:**
   - "when [feature] is enabled" → check `.cocoplus/modes/[feature].on`

   **Manual conditions** (plain language not matching above patterns):
   - Always show as "pending manual confirmation" — do not auto-trigger

5. **Update triggered status:** For any seed whose condition just fired (was `pending`, now evaluates as triggered), update its `.yaml` file: set `status: triggered`, add `triggered_date: [ISO8601]`.

6. **Display output** in two sections:

```
Seeds Ready to Promote ([N]):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[seed-id] — [idea]
  Triggered: [trigger condition that fired]
  Captured during: [captured_phase] phase on [captured_date]
  Promote with: $seed promote [seed-id]

[repeat for each triggered seed]

Seeds Waiting ([N]):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[seed-id] — [idea]
  Waiting for: [trigger condition]
  Status: [not yet / pending manual confirmation]
  Captured during: [captured_phase] phase on [captured_date]

[repeat for each waiting seed]
```

7. **If no triggered seeds:** Display only the Waiting section with message: "No seeds are ready yet. Trigger conditions are still pending."

## Error Cases

- **Seeds directory missing:** Output "No seeds directory found. Add ideas with `$seed add`." and exit
- **Corrupt YAML file:** Skip and warn: "Could not read [filename]. Check file format."

## Exit Criteria

This skill is complete when:
- All seeds are evaluated against current state
- Triggered seeds have been updated in their YAML files
- Two-section display is shown to developer

## Anti-Rationalization

Do NOT:
- Automatically promote any seed — that is always `$seed promote`
- Create any git commit
- Modify seed content (idea or trigger) — only `status` and `triggered_date` are updated