overbuild-review-lens · git:20260802.071a44a · 2026-08-02 · sha256 2982268df961fa28
overbuild-review-lens git:20260802.071a44aA
Immutable. This exact content is served forever at /api/v1/blob/2982268df961fa28.
---
model_tier: high
name: overbuild-review-lens
description: "Use when a diff builds more than the task needs — code that should not exist, a dependency the platform already covers, or a clever form where a flat one reads better. Deletion-hunting, not quality."
personas:
- senior-engineer
domain: quality
workspaces:
- engineering
packs:
- engineering-base
---
# overbuild-review-lens
> A deletion-hunting lens. It asks one question the other judges never
> ask: **should this code exist at all?** Sibling of
> [`architecture-review-lens`](../architecture-review-lens/SKILL.md) and
> the `judge-*` family — never overlaps with them.
## When to use
- A diff adds a helper, a wrapper, a config layer, an abstraction, or a
dependency.
- A rewrite, v2, or large refactor landed — the peak over-build context
(see [`minimal-safe-diff-mechanics`](../../../docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md)
§ The sanctioned-rewrite trap).
- A reviewer asks "is all of this needed?", "could the platform do
this?", or "why is this so clever?".
Do NOT use when:
- The concern is whether the code is **correct** — route to
[`judge-bug-hunter`](../judge-bug-hunter/SKILL.md).
- The concern is **security** — route to
[`judge-security-auditor`](../judge-security-auditor/SKILL.md).
- The concern is **naming, single-responsibility, or convention fit** of
code whose existence is not in question — route to
[`judge-code-quality`](../judge-code-quality/SKILL.md). That judge asks
*is this code malformed*; this lens asks *should it exist*.
- The concern is **performance** — route to
[`performance`](../performance/SKILL.md). Speed is out of scope here.
- The diff is documentation-only or formatting-only.
## The scope fence — read this before the first finding
```
CORRECTNESS, SECURITY AND PERFORMANCE ARE OUT OF SCOPE FOR THIS LENS.
THE MINIMUM RUNNABLE CHECK IS NEVER FLAGGED FOR DELETION.
A SIZE REDUCTION THAT DROPS A GUARD IS A LOSS, NOT A FINDING.
```
The measured failure mode this fence exists for: a bare "make it
simpler" critic was the only arm in a controlled comparison that dropped
a safety guard — the three lines it saved were a path-traversal check.
Tests, validation, authorization checks, tenant scoping, and error paths
that can actually occur are **not** over-build. If removing something
would reduce coverage of a real case, it is not a finding here.
## Procedure
### 1. Establish what the task actually asked for
Read the ticket / prompt, not just the diff. Over-build is measured
against the **requirement**, not against your taste. Anything the diff
adds beyond the requirement is a candidate; anything the requirement
demands is not, however large.
### 2. Walk each addition down the solution-size ladder
For every new unit (function, class, module, config key, dependency),
find the highest rung that would have carried it — see
[`agent-interaction-and-decision-quality`](../../../docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md)
§ 8b-ladder:
| Tag | Meaning | The evidence that makes it a finding |
|---|---|---|
| `delete:` | This should not exist at all | A fence line (see § 3) — mandatory |
| `stdlib:` | The language stdlib or framework already does it | Name the exact API and show it is equivalent |
| `native:` | The OS / runtime / browser / database already does it | Name the platform capability and its availability floor |
| `yagni:` | Built for a requirement nobody stated | Quote the requirement it exceeds |
| `shrink:` | Must exist, but smaller | Name the lines that carry no requirement |
| `flatten:` | Must exist, but in a **simpler form** | Name the cognitive cost, not the line count |
`flatten:` is the shape-axis inverse of `shrink:` — same logic, simpler
form, **even when that costs a line or two**. Without it the lens only
ever argues downward and becomes a golfing engine. A nested ternary
replaced by an `if` block is a valid `flatten:` finding even though the
diff grows.
### 3. Every `delete:` carries a fence line — no exceptions
Chesterton's Fence, operationalised. Agents are documented as
especially fence-blind: complex code reads as an invitation to simplify
when the complexity may exist for a reason the reader has no context
for. This does not restate
[`minimal-safe-diff`](../../../src/rules/minimal-safe-diff.md)'s "never
delete code that *looks* dead without proof" — it is the output contract
that makes the proof visible.
The fence line has three fields, all required:
```
Fence: why=<why the code existed — blame, test, issue, or "unknown">
safe=<the evidence that removal is safe>
covered=<yes|no|partial — was the removed path under test?>
```
- `why=unknown` is a legal value and it is **not** a pass. It downgrades
the finding to a question for the author, never an instruction.
- `covered=` is the one machine-checkable input to an otherwise
archaeological judgement (the Beyoncé rule: if you liked it, you put a
test on it). Deleting *tested* behaviour trips a test and is visible;
deleting *untested* behaviour breaks silently — so `covered=no` is
surfaced as **higher** risk, not as equivalent.
### 4. Emit the null when there is nothing to cut
```
A LENS THAT CANNOT SAY "NOTHING TO CUT" IS A FINDING GENERATOR.
```
A lean diff must produce the honest null, not an invented finding. This
is the load-bearing output, not a fallback: a reviewer who sees findings
on every diff stops reading them.
### 5. Validate before emitting
- Every finding has a `file:line` and exactly one tag from § 2.
- Every `delete:` has all three fence fields.
- No finding restates a correctness, security, or performance concern.
- The net-lines summary counts `flatten:` findings honestly, including
the ones that **add** lines.
- Zero findings → emit the null block, not an empty issues list.
## Output format
The verdict block carries these ordered fields:
1. `Lens:` — fixed value `overbuild-review-lens`
2. `Target:` — the diff range or file set reviewed
3. `Verdict:` — exactly one of `lean` / `trim` / `overbuilt`
4. `Findings:` — one line per finding: tag, `file:line`, one sentence;
`delete:` findings carry their `Fence:` line directly beneath
5. `Net:` — lines removable if every finding is applied, stated as a
signed number so a line-adding `flatten:` is visible
```
Lens: overbuild-review-lens
Target: <branch / diff range>
Verdict: lean | trim | overbuilt
Findings:
1. stdlib: src/util/uuid.ts:1 Hand-rolled v4 generator; crypto.randomUUID covers it.
2. delete: src/config/flags.ts:12 Flag read by nothing since the feature shipped.
Fence: why=guarded the 2026-03 rollout safe=zero readers, grep clean covered=no
3. flatten: src/parser.ts:88 Nested ternary; an if/else reads flat (+2 lines).
Net: -34 lines
```
The null, when there is nothing to cut — emit verbatim, do not
paraphrase:
```
Lens: overbuild-review-lens
Target: <branch / diff range>
Verdict: lean
Findings: none — nothing in this diff exceeds the stated requirement.
Net: 0 lines
```
## Gotcha
- **The requirement is the yardstick, not your preference.** A large
diff that the ticket demanded is not over-built. Say so and emit the
null.
- **`covered=no` makes a deletion riskier, not more attractive.** The
absence of a test is the absence of a tripwire.
- **A `flatten:` finding that saves lines is suspicious.** If it is
shorter *and* simpler it is probably a `shrink:`; `flatten:` exists
for the cases where simplicity costs length.
- **Never flag the minimum runnable check.** One happy-path test is not
over-build; it is the floor.
- **Do not count `delete:` lines that git already removed.** The net
figure is about the diff as proposed, not the diff's own deletions.
## Do NOT
- Do NOT emit a `delete:` finding without all three fence fields — the
output contract rejects it.
- Do NOT invent a finding to avoid an empty report.
- Do NOT review correctness, security, or performance — other surfaces
own those, and a size argument against a guard is the canonical
failure this lens is fenced against.
- Do NOT report a size number as a score. A size metric is a
measurement, never a target.