You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: skills/pb-build/SKILL.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -543,7 +543,7 @@ Use `- [ ]` and `- [x]` inside the task block as evidence checkboxes, not as a s
543
543
-**ALWAYS** run the full test suite after each task.
544
544
-**ALWAYS** run runtime verification for runtime-facing tasks.
545
545
-**ALWAYS** report failures with retry/skip/abort options.
546
-
-**ALWAYS**follow YAGNI — implement only what the task requires.
546
+
-**ALWAYS**apply the ponytail ladder — (1) Does this need to exist? (2) Stdlib? (3) Native? (4) Existing dep? (5) One line? (6) Minimum code. Never simplify away: validation, error handling, security.
547
547
-**ALWAYS** use existing project patterns and conventions.
548
548
-**ALWAYS** file a DCR if the design is infeasible.
549
549
-**ALWAYS** suspend after 3 consecutive failures and escalate with DCR packet.
@@ -566,3 +566,4 @@ Use `- [ ]` and `- [x]` inside the task block as evidence checkboxes, not as a s
566
566
11.**Escalate deterministically.** After 3 failures, route to `pb-refine` with DCR.
567
567
12.**Architecture decisions are binding.**`pb-build` executes the approved design.
568
568
13.**Adaptive evaluation.** Full adversarial for `BDD+TDD`, light review for simple `TDD-only`.
569
+
14.**ponytail ladder.** Before writing code, climb the 6-rung ladder: YAGNI → stdlib → native → existing dep → one-liner → minimum code. The Evaluator checks for over-engineering using the same ladder.
Copy file name to clipboardExpand all lines: skills/pb-build/references/evaluator_prompt.md
+18-1Lines changed: 18 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,7 +72,12 @@ Analyze the git diff against the task contract.
72
72
- Secrets, API keys, or credentials in the code
73
73
- Debug artifacts (`console.log`, `print()`, `debugger`, TODO comments from other tasks)
74
74
- Import of libraries not in the project's dependency manifest
75
-
- Over-engineering (abstractions beyond what the task requires)
75
+
- Over-engineering (ponytail ladder check):
76
+
- Unnecessary abstractions: interfaces with one implementation, factories for one product, configs for values that never change
77
+
- Custom code where stdlib/native suffices
78
+
- Boilerplate "for later" that doesn't serve the current task
79
+
- Missing `ponytail:` comment on deliberate simplifications
80
+
- Code that could be 1 line but isn't
76
81
- Missing error handling for external calls
77
82
78
83
4.**Dependency integrity:**
@@ -137,6 +142,18 @@ Test the implementation beyond what the scenario explicitly requires.
137
142
138
143
**Output:** List every edge case tested and its result.
139
144
145
+
### Check D — Simplicity Audit (Ponytail)
146
+
147
+
Apply the ponytail ladder to the diff:
148
+
149
+
1.**YAGNI:** Does everything in the diff serve the task? No speculative features, no "while I'm here" additions.
150
+
2.**Stdlib:** Could any custom code be replaced by stdlib/native? (e.g., `dataclass` over pydantic for simple DTOs, `pathlib` over os.path, stdlib `http.server` for simple endpoints)
151
+
3.**One-liner:** Are there multi-line implementations that could be one line?
152
+
4.**Abstractions:** Are there interfaces with one implementation? Factories for one product? Config files for values that never change?
153
+
5.**Boilerplate:** Is there scaffolding "for later"? Later can scaffold for itself.
154
+
155
+
**Output:** Flag any over-engineering found. Each issue should reference the specific ponytail ladder rung violated.
Copy file name to clipboardExpand all lines: skills/pb-improve/SKILL.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -175,6 +175,7 @@ Write each spec **for the weakest plausible builder**. That means:
175
175
- A test plan (what new tests to write, where, following which existing test as a pattern).
176
176
- A maintenance note (what future changes will interact with this, what to watch in review).
177
177
- Escape hatches: "if X turns out to be true, STOP and report back instead of improvising."
178
+
-**Ponytail ladder in every spec:** Every generated `design.md` must include the ponytail ladder in its Code Simplification Constraints section. Every generated `tasks.md` must reference the ladder in Simplification Focus fields.
178
179
179
180
#### Step 1: Feature Files (`features/*.feature`) — WRITE FIRST
180
181
@@ -283,9 +284,24 @@ Write ONE `design.md` that consolidates all findings. Structure:
283
284
284
285
## Code Simplification Constraints
285
286
287
+
**Ponytail Ladder (mandatory at every decision point):**
288
+
289
+
1. Does this need to exist at all? Speculative need = skip it. (YAGNI)
290
+
2. Stdlib does it? Use it.
291
+
3. Native platform feature covers it? Use it.
292
+
4. Already-installed dependency? Use it.
293
+
5. One line? One line.
294
+
6. Only then: minimum code that works.
295
+
296
+
**Mark deferrals:** Use `ponytail:` comments for deliberate simplifications with known ceilings.
Copy file name to clipboardExpand all lines: skills/pb-improve/references/audit-playbook.md
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -67,6 +67,19 @@ The goal is not a percentage — it's *which untested code is dangerous*.
67
67
- Inconsistent patterns: three ways of doing data fetching / error handling / styling in the same repo — pick the winner (the one the team converged on most recently) and plan the consolidation.
68
68
- Abstraction mismatches: premature abstractions with a single implementation, or missing abstractions where the same change always requires touching N files in lockstep.
69
69
70
+
### Over-Engineering (Ponytail Ladder)
71
+
72
+
Apply the ponytail ladder to find unnecessary complexity:
73
+
74
+
-**Unnecessary abstractions:** interfaces/protocols with exactly one implementation, abstract base classes with one concrete child, factory functions that only produce one product type.
75
+
-**Config for constants:** configuration files or environment variables for values that never actually change in the deployed system.
76
+
-**Custom vs stdlib:** hand-rolled implementations of what stdlib provides (e.g., custom URL parser when `urllib.parse` exists, custom JSON encoder when `json.dumps` suffices, custom retry when `tenacity` is already installed).
77
+
-**Boilerplate "for later":** scaffolding, interfaces, extension points, plugin systems that nothing currently uses.
78
+
-**Premature optimization:** caching, batching, lazy loading, connection pooling implemented before profiling shows a need.
79
+
-**Ceremony over substance:** more than 3 lines of setup/config/wiring for what could be a one-liner.
80
+
81
+
**Impact metric:** Count the lines removable if the simpler approach were used. This is the "deletion value" of the finding.
82
+
70
83
## 6. Dependencies & Migrations
71
84
72
85
- Major-version lag on core framework/runtime (not every minor bump — the ones with real cost to staying behind: EOL, security-fix cutoffs, ecosystem incompatibility).
Copy file name to clipboardExpand all lines: skills/pb-improve/references/plan-template.md
+18-4Lines changed: 18 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -123,11 +123,25 @@ The facts the builder needs, inlined — never "as discussed" or "see audit":
123
123
124
124
## Code Simplification Constraints
125
125
126
+
**Ponytail Ladder (mandatory at every decision point):**
127
+
128
+
1. Does this need to exist at all? Speculative need = skip it. (YAGNI)
129
+
2. Stdlib does it? Use it.
130
+
3. Native platform feature covers it? Use it.
131
+
4. Already-installed dependency? Use it.
132
+
5. One line? One line.
133
+
6. Only then: minimum code that works.
134
+
135
+
**Mark deferrals:** Use `ponytail:` comments for deliberate simplifications with known ceilings and upgrade paths.
136
+
137
+
**Never simplify away:** input validation at trust boundaries, error handling that prevents data loss, security measures, accessibility basics, anything explicitly requested.
138
+
139
+
**Additional constraints:**
140
+
126
141
-**Behavioral Contract:** Preserve existing behavior unless a listed scenario or requirement explicitly changes it.
127
-
-**Repo Standards:** Use only the coding standards that are actually established by `AGENTS.md`, `CLAUDE.md`, and the existing codebase for this repo.
128
-
-**Readability Priorities:** Prefer explicit control flow, clear names, reduced nesting, and removal of redundant abstractions when that improves maintainability.
129
-
-**Refactor Scope:** Limit cleanup to touched modules unless the design explicitly justifies a broader refactor.
130
-
-**Clarity Guardrails:** Avoid dense or clever rewrites; where relevant, avoid nested ternary operators in favor of clearer branching.
142
+
-**Repo Standards:** Use only the coding standards established by `AGENTS.md`, `CLAUDE.md`, and the existing codebase.
143
+
-**Readability Priorities:** Prefer explicit control flow, clear names, reduced nesting. Avoid dense or clever rewrites.
144
+
-**Refactor Scope:** Limit cleanup to touched modules unless the design explicitly justifies broader refactor.
0 commit comments