From lich-skills
Drives AI coding agents through gated Spec → Plan → Build → Test → Review → Ship workflow for non-trivial features, refactors, or multi-file projects.
npx claudepluginhub lichamnesia/lich-skills --plugin lich-skillsThis skill uses the workspace's default tool permissions.
A gated, six-phase workflow for shipping real software with an AI coding
Guides full SDLC workflow with planning, TDD implementation, self-review, CI shepherding, and deployment for features, bugs, refactoring, testing, releasing.
Guides GitHub Spec-Kit CLI integration for 7-phase constitution-based spec-driven feature development, managing .specify/specs/ directories with phases: Constitution, Specify, Clarify, Plan, Tasks, Analyze, Implement.
Orchestrates all code-modifying development tasks like bug fixes, enhancements, and new features using adaptive phases for analysis, specs, TDD, implementation, and verification.
Share bugs, ideas, or general feedback.
A gated, six-phase workflow for shipping real software with an AI coding agent. Each phase has a goal, exit criteria, and a rationalization table for the excuses an agent will invent to skip it. Do not advance until the current gate is closed.
If unsure, do the spec phase anyway. A 10-minute spec is cheap insurance.
SPEC ──▶ PLAN ──▶ BUILD ──▶ TEST ──▶ REVIEW ──▶ SHIP
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
What & Tasks & Thin Prove it Five-axis Deploy,
why order slices works quality observe,
by test gate roll back
│ │ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴───────────┘
human or reviewer approves each gate
Rules of the gate:
SPEC.md,
PLAN.md, code + tests, a review note / PR description, a launch + rollback note.Goal. Turn a vague request into a written contract that answers what, why, for whom, and how we know it is done. Surface assumptions before they become bugs.
Inputs. User request, existing codebase, any prior specs, constraints.
Steps.
ASSUMPTIONS: web app, Postgres, session cookies. Correct me or I proceed.templates/spec.md and save it in the repo.Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "It's obvious what to build" | If it were, two engineers would write the same code. They won't. |
| "I'll write the spec after the code works" | That's documentation, not specification. It can no longer change the design. |
| "The user told me what they want" | Users describe symptoms, not contracts. Extract the contract. |
| "Requirements will change anyway" | That's exactly why you write them down — so the change is visible. |
Goal. Convert the spec into an ordered list of small, verifiable tasks with an explicit dependency graph. No code is written in this phase.
Inputs. Approved spec, relevant source files, existing conventions.
Steps.
templates/plan.md. Each task fits one focused session
and touches ~5 files or fewer.Task sizing.
| Size | Files | Example |
|---|---|---|
| XS | 1 | Add a validation rule |
| S | 1–2 | One endpoint, one component |
| M | 3–5 | One vertical feature slice |
| L | 5–8 | Multi-component feature (split if possible) |
| XL | 8+ | Too big. Break it down. |
Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "I'll figure it out as I go" | That's how tangled diffs are born. Ten minutes planning saves hours untangling. |
| "Planning is overhead" | Planning is the work. Implementation without a plan is just typing. |
| "I can hold it in my head" | Context windows are finite. Compaction will eat it. |
Goal. Implement the plan in thin, compilable, revertible increments. Every increment leaves the tree green.
Inputs. Approved plan, the current task.
The increment cycle: implement → test → verify → commit → next slice
Rules.
Exit criteria for each increment.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "Faster to do it all at once" | It feels faster until something breaks in 500 changed lines. |
| "Too small to commit separately" | Small commits are free. Large commits hide bugs. |
| "Let me just quickly add this too" | Scope creep wearing a disguise. |
| "This refactor is small enough to include" | Mixing refactor with feature makes both harder to review. |
Goal. Prove the code works with tests that will survive refactoring. "Seems to work" is not done.
Inputs. Built code, spec's success criteria, bug reports (if any).
Steps.
it('sets completedAt when task is completed').Exit criteria.
<test command>Common Rationalizations
| Excuse | Reality |
|---|---|
| "I'll write tests after it works" | You won't. And post-hoc tests test implementation, not behavior. |
| "I tested it manually" | Manual testing does not persist. Tomorrow's change will silently break it. |
| "Tests slow me down" | They slow you now; they speed you up every time you change this code. |
| "All tests pass" (unverified) | "Passes" without output is a claim, not a fact. Run them. |
Goal. A five-axis quality gate. Nothing merges without it — including code you wrote yourself.
Inputs. Built, tested code. The spec. The plan.
The five axes.
Findings must carry severity. Label every comment so the author knows what is required vs optional:
| Prefix | Meaning |
|---|---|
| Critical: | Blocks merge — security, data loss, correctness |
| (no prefix) | Required before merge |
| Consider: / Optional: | Suggestion |
| Nit: | Style or formatting preference |
| FYI: | Informational only |
Approval standard. Approve when the change improves overall code health,
even if not how you would have written it. Do not block on preference. Do not
rubber-stamp either. Use templates/review.md as the checklist.
Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "It works, good enough" | Working + unreadable + insecure = debt that compounds. |
| "Tests pass, therefore good" | Tests do not catch architecture or security. Review does. |
| "AI-generated, probably fine" | AI output is confident and plausibly wrong. Scrutinize more, not less. |
| "We'll clean it up later" | Later never comes. Clean up before merge or file a tracked bug. |
Goal. Deploy safely. Every launch must be reversible, observable, and incremental.
Inputs. Reviewed, merged code. A rollback plan. A monitoring plan.
Steps.
templates/ship.md (code quality,
security, performance, accessibility, infra, docs).staging → prod (flag off) → team → 5% → 25% → 50% → 100%Exit criteria.
Common Rationalizations
| Excuse | Reality |
|---|---|
| "Works in staging, will work in prod" | Prod has different data, traffic, and edge cases. Monitor after deploy. |
| "We don't need a flag for this" | Every feature benefits from a kill switch. Even simple ones break things. |
| "We'll add monitoring later" | You cannot debug what you cannot see. Add it before launch. |
| "Rolling back is admitting failure" | Rolling back is responsible engineering. Shipping broken is the failure. |
| "It's Friday afternoon, let's ship it" | No. |
PLAN.md tasks that say "implement the feature" and nothing elseIf you see any of these, return to the most recent unpassed gate and redo it.
Before declaring the workflow done:
templates/spec.md — write this in Phase 1templates/plan.md — write this in Phase 2templates/review.md — use this in Phase 5templates/ship.md — use this in Phase 6This workflow is intentionally coarse. Reach for focused skills for depth on individual phases (planning, TDD, code review, shipping). This skill is the spine; others are the organs.