agentleFS
mik2winmik2win/foureyes/skills/epic-status/SKILL.md

epic-status

Skill2 starsChanged 3 months agoMITView on GitHub

Read-only progress dashboard over a wave-structured decomposition (one epic = one <backlog>/<task-name>/ directory from /prepare Phase 6): which subtasks are done/in-progress/blocked, which wave is current, the next safe wave to launch (all Deps merged, Owns pairwise disjoint), what can launch in parallel right now, and whether running parallel sessions collide on ownership. Where a parent RUN-ORDER exists it is read as the execution truth and reported against plan frontmatter as drift. Reports and recommends — never edits, commits, or launches. TRIGGER when: "where is this epic", "what's the next wave", "can I start these in parallel", "epic status", or before launching concurrent /implement sessions. TRIGGER ALSO on the same question phrased as plain work, with this skill unnamed — "how far along is <backlog>/<name>", "what's left in this epic", "which of these are safe to run at once", "did wave N land", "is this finished", "check if the epic is done? <backlog>/<name>". Those last two are cheap status questions and land HERE, not in /close-epic: answering them is a read of what is on disk, not an end-to-end verification contract. Only escalate to /close-epic when the ask is to verify and archive ("run the verification steps from the overview", "can this be archived"). DO NOT TRIGGER when: grooming single issues (use /triage), creating the decomposition (use /prepare), or snapshotting one session's live state (use /handoff).

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read .claude/PROJECT.md. If missing or profile_status: TEMPLATE, fall back to the root CLAUDE.md (always in context) when it carries the …

    line 42
  2. Distinctive:

    If the evidence conflicts (e.g.

    line 84
  3. Distinctive:

    Every claim in the report must be citable to a file and line (or a git command's output).

    line 148
  4. Very specific:

    Strictly read-only: Never edit a status field, never write or archive files, never run git add/commit, never launch sessions.

    line 152
  5. Very specific:

    Evidence only: Every status comes from frontmatter, logs, 00-overview.md, or git output on disk — never from conversational memory.

    line 156

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Epic Status: $ARGUMENTS

A strictly read-only dashboard over one epic — a <backlog>/<task-name>/ directory produced by /prepare Phase 6 (see skills/prepare/reference/parallel-wave-execution.md for the wave model this skill reads). It answers: where does the epic stand, which wave is current, what is the next safe wave, and do any running sessions collide on ownership. It changes nothing: statuses are stamped by /implement and reconciled by the user; this skill only reports and recommends.

This skill carries only invariant logic. The backlog location and commands come from .claude/PROJECT.md. Bash is for read-only inspection (git log, git status, ls) — never mutation.

If PROJECT.md → Commands carries an epic:status entry, run it first and quote its output as the mechanical half of this answer. A script decides Owns overlap, dangling dependencies and status drift deterministically; this skill's judgement is the other half, and it is worth more when it is not also being the parser. The kit ships one such tool (tools/lint-board.py status / lint) for wave-structured boards. No entry, or the command fails → say so in one clause and do the whole reading yourself; never present a skipped tool as a clean run.

Phase 0 — Load profile & resolve the epic

  1. Read .claude/PROJECT.md. If missing or profile_status: TEMPLATE, fall back to the root CLAUDE.md (always in context) when it carries the backlog location and commands — note you're running without a kit profile — and only STOP → run /bootstrap first if neither has them. Resolve Plans / backlog location (and the Archive on done location, if any).
  2. $ARGUMENTS names the epic — a directory under the backlog location, or its name. If empty, glob the backlog location for directories containing a 00-overview.md, list them, and ask which epic to report on. Do not guess.
  3. Parent RUN-ORDER — look, never require. Walk up from the epic directory toward the program directory for a RUN-ORDER.md (the artifact is described in skills/prepare/reference/parallel-wave-execution.md). Found → it is the execution truth for ordering and parallel-safety; Phase 2 reconciles it against plan frontmatter. Not found → report exactly as before and say nothing about it. Absence is the normal case for a standalone epic, not a gap — and this skill never creates one.

Phase 1 — Gather evidence (read everything, assume nothing)

Status comes only from what is on disk — never from memory of past sessions. Checklist:

  • 00-overview.md — summary, subtask table, dependency graph, wave schedule, and file-ownership matrix (Owns / Reads / Shared edits per task).
  • Every NN-<subtask>.md — the header line (Wave · Owns · Reads · Deps · Shared edits · Solo), the status frontmatter if /implement stamped one (DONE | PARTIAL | BLOCKED, completed_at, notes), and any appended ## Implementation Log sections.
  • The archive location — a subtask file moved there counts as done.
  • implementation-prompts.md — the per-session /implement briefs, grouped by wave.
  • The parent RUN-ORDER.md, if Phase 0 found one — this epic's row(s): Mode, Model, ∥ marks, Owns, the Status cell, any inline cross-row collision note, and the Follow-ups section. Status cells carry what the plans do not: commit SHAs, E2E counts, measured deltas, re-pricings, and what spun out.
  • git status --short and git log --oneline -15 -- <owned files> — uncommitted or recent activity on a subtask's Owns files signals an in-progress or freshly merged session.

Derive each subtask's status from this evidence, cited as path:line:

EvidenceStatus
Frontmatter status: DONE / PARTIAL, or file archiveddone (PARTIAL: note the deviations)
Frontmatter status: BLOCKEDblocked — quote the notes
Implementation Log present but no final status, or uncommitted working-tree changes on its Owns filesin-progress
None of the abovenot started

If the evidence conflicts (e.g. log says done, no status stamped), report the drift verbatim and propose the exact fix — do not apply it.

Phase 2 — Wave math

  1. Current wave — the earliest wave in the schedule with any subtask not yet done.
  2. Deps landed? — per pending subtask, every Deps entry must be done and merged (committed — verify via git log; uncommitted done-work does not count as landed).
  3. Next safe wave — the earliest wave whose subtasks are all not-started, all Deps landed, and — re-verified from the Owns declarations, not trusted from the schedule — pairwise-disjoint on Owns with ≤1 editor per Shared edits file. Honor (solo) waves: a solo subtask runs alone, never alongside siblings.
  4. Collision check — for everything currently in-progress (plus anything you're about to recommend): verify all Owns sets are pairwise disjoint and no shared file has two editors. Two in-progress subtasks sharing an Owns file is a COLLISION — flag it loudly, name both subtasks and the file, and recommend pausing one. Never recommend a launch into a collision.
  5. RUN-ORDER reconciliation (only when Phase 0 found one). The RUN-ORDER is the execution truth; plan frontmatter is what the sessions actually stamped. Report the drift between them, each side cited:

    • a row marked done whose plan carries no terminal status, or the reverse;
    • a row whose Mode/Model/wave position the plans contradict;
    • a Follow-ups row with no card file behind it, or a card with no row.

    Propose the exact edit for each drift item — never apply it, and never write into RUN-ORDER.md: it is a serialization point with exactly one writer.

  6. What can launch in parallel right now. Answer from the RUN-ORDER's ∥ marks and the Owns sets when a RUN-ORDER exists — not from the dependency DAG alone; the ∥ marks encode cross-card facts the DAG cannot see, and inline notes ("F2.7 and F2.8 both edit <file> — run them in order") override a ∥ mark. Re-verify disjointness yourself before recommending; a ∥ mark that the current Owns sets contradict is drift, and drift loses to evidence.

Phase 3 — Report (fixed contract)

## Epic: <task-name> — <N> subtasks · <done> done · <in-progress> in-progress · <blocked> blocked · <left> not started

| Wave | Subtask | Status | Owns | Deps met? |
|------|---------|--------|------|-----------|
| W1   | 01 — <name> | done (00-overview.md:12, 01-<name>.md:3) | <files> | — |
| W2   | 03 — <name> | in-progress (git: uncommitted) | <files> | yes (01 merged) |

### Current wave: W<k> — <what's still open in it>
### Collision check: OK — in-progress Owns pairwise disjoint
   (or) ⚠️ **COLLISION**: 03 and 04 both own `<file>` (03-<name>.md:2 · 04-<name>.md:2) — pause one.
### Next safe wave: W<k+1> — SAFE / NOT SAFE (<unmet dep / collision / blocked upstream>)
Launch when ready (briefs in implementation-prompts.md, "Wave W<k+1>" section):
- Session 05: /implement <backlog>/<task>/05-<name>.md   (solo: no · owns <files>)
### Blockers / drift
- 06 BLOCKED — <notes> (06-<name>.md:4)
- Drift: 02 has an Implementation Log but no status stamp — suggest `status: DONE` (user applies).

Only when a parent RUN-ORDER exists, add these two sections — omit them entirely otherwise (no "no RUN-ORDER found" line):

### RUN-ORDER: <path> — rows for this epic
| # | Row | Mode | Model | ∥ | RUN-ORDER says | Plans say |
|---|-----|------|-------|---|----------------|-----------|
| 2.3 | 05-<name> | I | default | ∥ | done (RUN-ORDER.md:41) | no status stamp (05-<name>.md:2) — **drift** |
### Parallel-safe right now: 05 ∥ 07  (∥ marks + Owns re-verified disjoint)
   (or) 05 only — 07's ∥ mark contradicts its Owns (`<file>` shared with 05); RUN-ORDER row is stale.

Every claim in the report must be citable to a file and line (or a git command's output).

Hard rules

  • Strictly read-only. Never edit a status field, never write or archive files, never run git add/commit, never launch sessions. You recommend; the user launches and /triage/ /implement own the state changes. A RUN-ORDER is never written or created here — drift is reported with the exact proposed edit; the operator applies it.
  • Evidence only. Every status comes from frontmatter, logs, 00-overview.md, or git output on disk — never from conversational memory. Unknown is reported as unknown.
  • Collisions are loud. A shared Owns file between in-progress subtasks is a headline finding, not a footnote — and disqualifies any wave recommendation that worsens it.
  • Re-verify, don't trust. The next-wave verdict is recomputed from the Owns/Deps declarations, not read off the wave schedule table — or off a RUN-ORDER ∥ mark, which is a claim about ownership, not proof of it.
  • Facts from PROJECT.md. Backlog and archive locations come from the profile — never hardcoded.

See also

  • /prepare — creates the wave-structured decomposition this skill reads (and its reference/parallel-wave-execution.md, the canonical layout).
  • /implement — runs one subtask session; stamps status and appends the Implementation Log.
  • /triage — grooming of single backlog issues (not epics).
  • /handoff — snapshot of one session's live state (not the whole epic).
  • /close-epic — the terminal counterpart. Escalate here only when the ask is to verify and archive; "is the epic done?" is answered by this skill.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.