Finishing — What The Change Still Owes

SkillDev tools

Apply when the question is what a change still owes, "are we missing anything", "is this done", "what else does this need", the `/finishing` command, or the end of any change, at any point in the work, finished or not. The completeness audit inside the finishing ritual, one row per thing a change can owe beside its code, each answered by the skill that owns it, each reported with a verdict including "nothing owed" and "not yet", and none of them restated here.

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the Finishing skill

What this skill tells your AI

The instructions your AI receives, as published by esposter/esposter in .agents/skills/finishing/SKILL.md and read by ahel’s review.

Working is not finished. This page answers one question: what this change owes beside its code, and whether it has been paid. It states no rule of its own. Every row names an owner, the owner decides, and the row reports what the owner said.

Settled — do not re-propose

  • Gating the audit on the change being finished. It is asked most often mid-change, as a reminder; a row the window cannot answer yet is not yet, and refusing the whole table over it would make the one moment it is most useful the one moment it does nothing.
  • A third lane inside code-review. The review lanes settle code by reading it; most rows here have no diff to read at all — an unwritten test, an unswept ledger row, a diagram nobody updated — and folding them in would give the review skill a second topic, which is a split rather than a lane (skill-authoring, references/splitting-a-skill.md).
  • Restating a row's rule here. Every row is a pointer by construction; the moment one explains its owner's rule there are two copies of it, and this is the page that goes stale first (skill-authoring, references/one-owner-per-topic.md).
  • A row for the checks. pnpm format, typecheck, lint:fix and the tests are mechanical, batched once at the end, and owned by running-checks — an audit row for them would be a second place to forget them.

When it runs

The order of the ritual, and the commit and push that close it, are CLAUDE.md's "Finishing a change". This is the audit inside its review, test and docs steps — the ones before the checks.

It runs at any point, and it is a reminder before it is a gate. Asked mid-change it reports what is owed so far and marks the rows the window cannot answer yet as not yet — never a refusal to run, and never a demand that the change be finished first. Asked at the end it is the same table with every row answered. Run it unprompted at the end of a change; run it on request whenever.

Scope the audit to the same window a review would take (code-review, references/diff-window.md). A row is asked of that window, never of the repository.

The audit

The change may oweAskOwner
A review, both lanesquality and correctness over the windowcode-review
A regression test — and the deletion of the ones it made redundantwhat earns a test at all, and what no longer doestesting, test-values
A refactor the change exposedthe twin helper, the constant restated in two files, the special case that belonged in the mechanismcode-review quality lane, file-organization
Placement and costwhere the work runs and how it is shaped, not how fast the unit isruntime-efficiency
Docs prose and its diagramsthe owning page, and every diagram whose edge or box the change made falsedocs
A READMEan inventory, a script table or a typedoc link the change made incompletereadme-standards
A skilla convention this change settled, or a skill claim it proved staleskill-authoring
A bench reportwhether a benched unit changed, so its committed report is stale until the bench rerunsbench
An open ledger row over the files touchedwhether a sweep still lists this unit unswept, which is a commit ahead of the changesweeps
An @TODO added, or one the change endedwhether a workaround waits on something external, and whether a bump or a closed issue ended onetodos
An enforcer instead of a repeated findingwhether the same finding has now been written twicesweeps, oxlint
An enforcer the change made unnecessarywhether a lint rule or test now guards something deleted, or a shape that can no longer be writteninvariants
An open proposal the change built, or moved the ground underwhether it shipped one, and whether it edited a file an open proposal's Key files table namesbuilding-proposals, product-review
A decision the change made and left unwrittena larger part it knowingly left out, or an idea it declined, that the next pass would find as a gapdocs, building-proposals
A finding the change did not fixwhether a review finding it declined or deferred has a home the next session will readcode-review

A behaviour change and a diagram have no name to grep and are missed for it: the stale sentence fails nothing and is found from the code instead (CLAUDE.md, "Finishing a change", the docs step), and a diagram's edge labels are read by no sweep (docs, references/diagrams.md). Both rows are only the reminder to run their owner's lookup.

Report every row, including the empty ones

A row is answered with a verdict, never with silence — "nothing owed" is a result, and an unmentioned row reads as an unasked one. Report the table, one line per row, then do the work the verdicts name.

The rows are independent, so an owner that finds nothing does not excuse the next: a change can be clean in both review lanes and still owe a diagram.

Signals

GitHub stars
23
Forks
3
Last commit
Sep 2026
Advanced
Item type
skill
Key
finishing
Source
github.com/esposter/esposter