Ponytail — Laziness Ladder Audit
Purpose
Catch over-engineering: unnecessary abstractions, unused dependencies pulled in for
one-liners, reinvented stdlib/native-platform features, dead code, and premature
generalization. This is the review half of ponytail; the generation half (the
ladder itself) is always active via USER_RULES.txt → STATIC PRINCIPLES, so every
diff should already be reasonably lean — this skill is for the cases that slip through
or for auditing code this agent did not just write.
When to activate
- User asks to "review this diff for over-engineering", "does this need to exist",
"simplify this", "audit the repo for bloat/dead code".
- Explicit command:
/ponytail_review (diff) — see commands/ponytail_review.md.
- Post-implementation self-check before marking a task done, when the diff touched
more files/lines than the request implied.
The ladder (source of truth — also in USER_RULES.txt)
Before writing code, stop at the first rung that holds:
- Does this need to exist? → no: skip it (YAGNI).
- Already in this codebase? → reuse it, don't rewrite.
- Stdlib does it? → use it.
- Native platform/language feature? → use it.
- Installed dependency already covers it? → use it.
- Fits in one line? → one line.
- Only then: the minimum code that works.
Never on the chopping block: trust-boundary validation, data-loss handling,
security checks, accessibility. Lazy about the solution, never about reading the
problem — trace the real flow before picking a rung.
Audit procedure
- Scope
- Diff mode:
git diff (staged+unstaged) or the PR's changed files.
- Repo mode: walk source directories, excluding generated/vendored paths
(
node_modules/, dist/, build/, .venv/, lockfiles).
- Flag candidates
- New dependency added for something stdlib/native/one-line already covers.
- New class/module/interface with a single call site and no stated extension need.
- Wrapper components/functions that just forward to the thing they wrap.
- Config options, feature flags, or parameters with no caller passing non-default values.
- Dead code: unused exports, unreachable branches, commented-out blocks.
- Duplicated logic that could reuse an existing in-repo utility (check before
proposing a new one — pairs with
repo-grounding).
- Do not flag
- Validation, error handling, security, accessibility, or anything load-bearing for
correctness even if it adds lines.
- Abstractions with a real second caller or an explicit near-term requirement.
- Report — a delete-list, not a rewrite:
- Table: file:line, what it is, why it's excess, suggested replacement (often
"delete" or "inline").
- Do not apply deletions without confirmation unless invoked as part of
/cleanup
with explicit APPLY.
Debt ledger (optional, lightweight)
If the user defers a ponytail:-style shortcut comment (e.g. a native feature used
today that will need a real component later at scale), note it in the PR description
or a TODO with an owner/trigger condition — don't let "later" become "never" silently.
Do not create a dedicated ledger file unless the user asks for one (matches DOC HYGIENE:
no orphan tracking files).
Output contract
- Delete-list table (file:line, issue, suggested fix).
- One-line verdict: how many rungs of the ladder the diff/repo violates, if any.
- If invoked mid-implementation (self-check), apply the obvious deletions inline before
calling the task done; if invoked as a standalone audit, propose only — apply after
confirmation.
1---2name: ponytail3description: On-demand over-engineering review/audit using the "laziness ladder" (DietrichGebert/ponytail) — the always-on rung is already in USER_RULES.txt STATIC PRINCIPLES; this skill is for deep diff/repo audits and debt tracking. Use when the user asks to review a diff or repo for over-engineering, unnecessary abstractions, unused dependencies, or dead code, or invokes /ponytail_review.4---5
6# Ponytail — Laziness Ladder Audit
7
8## Purpose
9Catch over-engineering: unnecessary abstractions, unused dependencies pulled in for
10one-liners, reinvented stdlib/native-platform features, dead code, and premature
11generalization. This is the *review* half of ponytail; the *generation* half (the
12ladder itself) is always active via `USER_RULES.txt` → STATIC PRINCIPLES, so every
13diff should already be reasonably lean — this skill is for the cases that slip through
14or for auditing code this agent did not just write.
15
16## When to activate
17- User asks to "review this diff for over-engineering", "does this need to exist",
18 "simplify this", "audit the repo for bloat/dead code".
19- Explicit command: `/ponytail_review` (diff) — see [`commands/ponytail_review.md`](../../commands/ponytail_review.md).
20- Post-implementation self-check before marking a task done, when the diff touched
21 more files/lines than the request implied.
22
23## The ladder (source of truth — also in USER_RULES.txt)
24Before writing code, stop at the first rung that holds:
251. Does this need to exist? → no: skip it (YAGNI).
262. Already in this codebase? → reuse it, don't rewrite.
273. Stdlib does it? → use it.
284. Native platform/language feature? → use it.
295. Installed dependency already covers it? → use it.
306. Fits in one line? → one line.
317. Only then: the minimum code that works.
32
33**Never on the chopping block:** trust-boundary validation, data-loss handling,
34security checks, accessibility. Lazy about the *solution*, never about *reading the
35problem* — trace the real flow before picking a rung.
36
37## Audit procedure
381. **Scope**
39 - Diff mode: `git diff` (staged+unstaged) or the PR's changed files.
40 - Repo mode: walk source directories, excluding generated/vendored paths
41 (`node_modules/`, `dist/`, `build/`, `.venv/`, lockfiles).
422. **Flag candidates**
43 - New dependency added for something stdlib/native/one-line already covers.
44 - New class/module/interface with a single call site and no stated extension need.
45 - Wrapper components/functions that just forward to the thing they wrap.
46 - Config options, feature flags, or parameters with no caller passing non-default values.
47 - Dead code: unused exports, unreachable branches, commented-out blocks.
48 - Duplicated logic that could reuse an existing in-repo utility (check before
49 proposing a new one — pairs with `repo-grounding`).
503. **Do not flag**
51 - Validation, error handling, security, accessibility, or anything load-bearing for
52 correctness even if it adds lines.
53 - Abstractions with a real second caller or an explicit near-term requirement.
544. **Report** — a delete-list, not a rewrite:
55 - Table: file:line, what it is, why it's excess, suggested replacement (often
56 "delete" or "inline").
57 - Do not apply deletions without confirmation unless invoked as part of `/cleanup`
58 with explicit APPLY.
59
60## Debt ledger (optional, lightweight)
61If the user defers a `ponytail:`-style shortcut comment (e.g. a native feature used
62today that will need a real component later at scale), note it in the PR description
63or a TODO with an owner/trigger condition — don't let "later" become "never" silently.
64Do not create a dedicated ledger file unless the user asks for one (matches DOC HYGIENE:
65no orphan tracking files).
66
67## Output contract
68- Delete-list table (file:line, issue, suggested fix).
69- One-line verdict: how many rungs of the ladder the diff/repo violates, if any.
70- If invoked mid-implementation (self-check), apply the obvious deletions inline before
71 calling the task done; if invoked as a standalone audit, propose only — apply after
72 confirmation.