← ClaudeAtlas

addlisted

Create a new backlog item (Initiative / Epic / Feature / Story / Defect / Event / Risk) — V2 local-first. ID allocated from id_counters.yaml, parent hierarchy validated by MCP edpa_item_create, YAML written under .edpa/backlog/, auto-committed. No GitHub calls at create time; PR-derived signals arrive separately via the contribution-sync workflow.
technomaton/edpa · ★ 0 · AI & Automation · score 78
Install: claude install-skill technomaton/edpa
# EDPA Add — Create Backlog Item ## What this does V2 local-first add. No `gh` calls. 1. `id_counter.next_id(type)` from `.edpa/config/id_counters.yaml` → next available number, atomic via file lock + `max(counter, fs_scan)`. 2. EDPA ID = `{prefix}-{num}` → `I-3`, `E-15`, `F-8`, `S-42`, `D-7`, `EV-2`, `R-1`. 3. MCP `edpa_item_create` handler validates parent type hierarchy in-process (Story→Feature, Feature→Epic, Epic→Initiative). 4. Writes `.edpa/backlog/<type>/{ID}.md` directly via `_md_frontmatter.save_md`. 5. `git commit -m "feat({ID}): <title>"`. PR-derived signals (pr_author, pr_reviewer, issue_comment) arrive asynchronously via the CI workflow at `.github/workflows/edpa-contribution-sync.yml` — see `/edpa:setup --with-ci` and `docs/v2/decisions.md` ADR-012. ## Parallel ID allocation — collision handling ID allocation is **local-first** (no central coordinator). If two devs both pull `main` when last Story is `S-4` and both run `/edpa:add Story`, both will get `S-5` locally — the collision surfaces at PR merge time. EDPA detects + resolves this via four defense layers: - **Pre-commit hook** (`validate_ids.py --staged`) — local staged consistency - **Pre-push hook** (`validate_ids.py --pre-push`) — blocks push if local ID already exists on `origin/main` - **CI workflow** (`edpa-collision-check.yml`) — comments on PR + fails check when collision detected - **Manual recovery** (`renumber_collisions.py --apply`) — renames local file, rewrites `id:`