From plank
Enforce PLANK BLACK project management in AI-assisted workflows. Use when starting or ending a work session, creating or closing tickets, running GC, or managing any project that follows the PLANK BLACK standard. This skill handles STATUS.md sync, Action Log, Stopped-at tracking, and session protocol.
How this skill is triggered — by the user, by Claude, or both
Slash command
/plank:plank-blackThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Canonical spec: [PLANK_BLACK.md](../../PLANK_BLACK.md)
Canonical spec: PLANK_BLACK.md
There is exactly one correct way. Follow it.
Every session begins here. No exceptions.
.plank/STATUS.md.**Stopped at** line.If .plank/STATUS.md does not exist, create it using the format in § STATUS.md.
Scan .plank/issues/ for the highest number with the project prefix, increment by 1. Create {ID}.md:
---
id: {PREFIX}-{NNN}
title: {imperative verb phrase}
status: todo
priority: {critical|high|medium|low}
created: {YYYY-MM-DD}
updated: {YYYY-MM-DD}
---
# {title}
## Description
{What needs to be done and why.}
## Acceptance Criteria
- [ ] {observable, verifiable behavior}
## Action Log
### {YYYY-MM-DD}
- Created ticket
## Description ← REQUIRED
## Acceptance Criteria ← REQUIRED (may be empty only in icebox/todo)
## Action Log ← REQUIRED
## Implementation Notes ← OPTIONAL
## Completion Note ← REQUIRED when deliverable diverged from Description
## Notes ← OPTIONAL
Sections MUST appear in this order. Optional sections may be omitted but MUST NOT appear out of order.
icebox ──> todo ──> in-progress ──┬── review ──> done
│ │ ▲
▼ └───────────────┘
blocked
│
▼
cancelled
| From | To |
|---|---|
icebox | todo, cancelled |
todo | in-progress, cancelled |
in-progress | done, review, blocked, cancelled |
review | done, in-progress, cancelled |
blocked | in-progress, cancelled |
All other transitions are forbidden.
doneBefore marking any ticket done, verify ALL of:
- [ ] in Acceptance Criteria is - [x]updated field is set to today's dateblocked: blocked-by field contains at least one valid issue IDcancelled: Reason is stated in the Action Logdone and cancelled are terminal. Never reopen. Use Regression Protocol instead.
id, title, status, priority, created, updated — all mandatory on every ticket.
updated RuleSet updated to today's date whenever ANY of:
blocked-by — Canonical Directionblocked-by is the source of truth. blocks is derived and optional.
blocked-by: [PROJ-039]
When the blocker is resolved, clear blocked-by on the unblocked ticket.
related — General Cross-Referencesrelated: [PROJ-011, PROJ-045]
Use for regressions, follow-up work, or any ticket sharing context with another.
The Action Log is the primary tool for session continuity. Entries are in reverse chronological order (newest first).
## Action Log
### YYYY-MM-DD
- What was done, decided, or discovered
- **Stopped at**: {exact resumption point}
| Tag | When to use |
|---|---|
[DECISION] | Fork in the road — record chosen, rejected, and why |
[SPAWN] | New ticket discovered — include the new ticket ID |
[SCOPE] | Acceptance Criteria or Description changed |
[API] | A public API contract was added, changed, or removed |
Tags are optional on routine entries.
[DECISION] Format- [DECISION] {topic}
- Chose {option A}: {reason}
- Rejected {option B}: {reason}
A decision MUST record at least one rejected alternative.
**Stopped at** RuleWhen a ticket remains in a non-terminal status at session end, the last Action Log entry MUST end with **Stopped at**:. It MUST be specific enough for someone with no context to find where to continue.
Tickets reaching done or cancelled do not need **Stopped at**.
Good: **Stopped at**: unit test for rate limiter, tests/test_rate_limit.py:45, failing on window reset edge case
Bad: **Stopped at**: rate limiter tests
todo, at least one criterion MUST exist.done, every - [ ] MUST be - [x].[SCOPE] tag.A Completion Note MUST be added when the final deliverable diverges from the original Description. When all ACs are checked and the deliverable matches, it MAY be omitted.
## Completion Note
YYYY-MM-DD
{What was delivered and how it differs from the original Description.}
Deliverables:
- {file path, endpoint, or measurable output}
MUST follow for debugging, diagnosis, or non-obvious technical decisions. RECOMMENDED for straightforward implementation.
OBSERVE ──> DIAGNOSE ──> VALIDATE ──> ACT ──> REFLECT
▲ │
└────────────────────────────────────────────┘
Hard rules:
[OBSERVE], [DIAGNOSE], [VALIDATE], [ACT], [REFLECT].A completed ticket's behavior has broken.
related: [{ORIGINAL-ID}] in frontmatter.Discovered work that belongs in a separate ticket while working on ticket A:
todo or icebox).[SPAWN] {NEW-ID} — {one-line reason}.blocked-by, change A to blocked.At the end of every work session, perform ALL steps in order:
**Stopped at**:.updated to today on every ticket touched..plank/feedbacks/.Last reviewed in STATUS.md is older than 7 days, run the GC Ritual.At the end of an intensive work period (regardless of 7-day timer):
blocked-by references point to existing, non-terminal tickets.# Project Status
Last reviewed: YYYY-MM-DD
## Active
| ID | Title | Status | Stopped at |
|----------|-------------------|-------------|-----------------------------------------|
| PROJ-012 | Add rate limiting | in-progress | unit test `tests/test_rate_limit.py:45` |
| PROJ-015 | Fix auth redirect | blocked | waiting on PROJ-012 |
## Recently Done
| ID | Title | Completed |
|----------|--------------|------------|
| PROJ-011 | DB migration | 2026-03-13 |
Rules:
todo, in-progress, review, blocked tickets. Stopped at mirrors the ticket's latest.Run at least every 7 days, or at Sprint Close.
Perform in order:
done/cancelled to Recently Done.in-progress ticket has an entry within 7 days. If not → blocked or icebox.in-progress, clear blocked-by.blocked-by references point to existing tickets. Remove references to done/cancelled.icebox tickets older than 30 days with no Action Log → promote or cancel.Last reviewed — Set to today.## Issues
| ID | Title | Status |
|----------|-------------------|-------------|
| PROJ-001 | Implement auth | done |
| PROJ-002 | Add rate limiting | in-progress |
## Overview ← REQUIRED
## Issues ← REQUIRED (table format)
## Notes ← OPTIONAL
Epic status is derived from children:
| Children | Epic status |
|---|---|
All icebox | icebox |
Any todo, none in-progress+ | todo |
Any in-progress, review, or blocked | in-progress |
All done or cancelled | done |
Location: .plank/feedbacks/ (or project-level feedbacks/)
---
id: FB-{NNN}
title: {descriptive title}
created: YYYY-MM-DD
---
# {title}
{API gotchas, debugging insights, retrospectives, architectural learnings.}
Write one after discovering non-obvious API behavior, after a productive debugging session, or at Sprint Close.
npx claudepluginhub allen2c/plank --plugin plankManages backlog items through grooming, planning, and closure using GitHub Issues, Projects, Milestones. Interactive browser, auto-mode, resolve/close with evidence, SAM integration.
Syncs session work into GitHub issues and queries track status across repos. Two modes: write (end-of-session sync with issue updates, epics, labels, Project placement) and read (status lookup).
Manages task planning and Plans.md tracking with create, add, update, sync subcommands. Useful for structured plan creation and progress sync.