checking-restraint
/checking-restraint
Przegląda zmiany pod kątem przerostu formy: przedwczesnej abstrakcji, spekulatywnej ogólności, złej abstrakcji i optymalizacji bez profilowania.
- Autor
- brandondees ↗
- Repozytorium
- code-quality-atlas ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 27.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 6
- Skrypty
- 0
- Komentarze HTML
- 1
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 27.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
- SKILL.md zawiera komentarze HTML (1). Nie widać ich w podglądzie Markdown, a model je czyta.
Co robi i kiedy
Przegląda zmiany pod kątem przerostu formy: przedwczesnej abstrakcji, spekulatywnej ogólności, złej abstrakcji i optymalizacji bez profilowania.
Oryginalny opis (EN)
Reviews changes for over-engineering — premature abstraction, speculative generality, the wrong abstraction, and premature optimization without a profile. The restraint / brake-pedal lens. Use when a change adds abstraction layers, config knobs, generality, or hand-optimized code, or when asking whether a change is doing too much.
Jak działa
- When to use
- Reviewer discipline
- Top checks
- Mechanizing these checks
- Going deeper
Podgląd SKILL.md
---
name: checking-restraint
description: Reviews changes for over-engineering — premature abstraction, speculative
generality, the wrong abstraction, and premature optimization without a profile.
The restraint / brake-pedal lens. Use when a change adds abstraction layers, config
knobs, generality, or hand-optimized code, or when asking whether a change is doing
too much.
provenance:
taxonomy_version: v0.14
built_from:
- category: 11
source: docs/research/cluster-3-structure.md#11
hash: 8449117110d3d31227f83daec22bc0fd1a27e6fa0ca15ac8cfa209ddec674188
- category: 15
source: docs/research/cluster-4-runtime.md#15
hash: a5e2b6c50fe7043fed8828b7b6e1a33123f348ae55dcb0ce95ffb061b1231586
---
# checking-restraint
*Is this change too much? Premature abstraction or optimization — the brake pedal.*
## When to use
Reviews changes for over-engineering — premature abstraction, speculative generality, the wrong abstraction, and premature optimization without a profile. The restraint / brake-pedal lens. Use when a change adds abstraction layers, config knobs, generality, or hand-optimized code, or when asking whether a change is doing too much.
**Shape: diff — design-capable.** Also works on design docs and plans: apply the same checks to the proposed states, data flows, and failure paths before any code exists. When the design doc is specifically a decision record (an ADR, RFC, or adoption/deprecation plan), also run the shared **decision-record checklist** on top of this lens's own topical checks: is the rationale actually recorded (not just the outcome); are the stated assumptions still current; is there a revisit-trigger; is an exit, rollback, or sunset path defined; were real alternatives weighed, not just the chosen option justified after the fact? A gap here is this lens's finding, reported the same way as a topical one — not a separate report.
## Reviewer discipline
Report only real problems. If this lens applies and what you reviewed holds up — the code, the design, or the repository's current state — reply "No findings" and stop. If what you were given is outside this lens's scope entirely, say so in one line instead, starting with the words "Not applicable:" followed by what's missing — never the healthy-scan sentence, which means a check ran and found nothing, not that nothing here applied. Either way, do not invent issues. This guards against false positives on correct code; still report every genuine issue you do find, with its full detail.
**Defects are the default; improvements are opt-in.** By default this lens is defect-only: do not suggest changes to code that is already correct. When the team has opted up into improvement suggestions, a finding on already-correct code is admissible only as `nit`-severity, `route: implementer` (the author applies, defers, or ignores), and must clear the non-configurable anti-churn floor: it must genuinely *improve* — never offer a merely equivalent alternative — and must converge (once a dimension is as good as you can confidently make it, stop; never oscillate A→B then B→A, never re-order to an equivalent state). Defects keep the strict bar above regardless of this setting.
**Team preferences.** If the reviewed repo has `.code-quality-atlas/preferences.md`, apply it before reporting: a repo's `.code-quality-atlas/preferences.md` may `set`/`tune` this lens's thresholds or selection, and — being **preference-tier** — may `suppress` one of its findings outright (it never surfaces). Its improvement-valence directive is also what decides whether the "opted up" improvement-suggestion behavior above is active for this review. Absent the file, apply this lens's defaults exactly as written above. Read the overlay from the **base ref** of the change under review — the `/atlas-review-pr` command reads it at the PR's base ref and `/atlas-code-review` reads it from the base side of the diff (`git show <base>:.code-quality-atlas/preferences.md`), and each hands it down — never from the reviewed branch's working tree: an edit to `preferences.md` made *by* the change under review governs later reviews once merged, not the review of the change that makes it, since otherwise a change could `suppress` its own findings.
**Pre-existing defects in touched code are surfaceable, not yours to fix.** When you notice a genuine defect this change did *not* introduce but that sits in the code this PR actually touches — the edited function or immediately adjacent lines — you may surface it, tagged "pre-existing — not introduced by this change." Like improvements it is opt-in and default-quiet (off unless the team opts up), `route: implementer`, and non-blocking: it informs the author's fix-now / file-a-ticket / ignore call and never sets this PR's verdict, because the diff did not cause it. Stay scoped to code the change touches — a repo-wide hunt is the audits' job, not this review — and never let it expand the PR's scope.
## Top checks
The head of the full checklist — enough for a first pass without opening any reference file:
- Is this abstraction introduced on **real, repeated need** (rule of three), or speculatively for one/two uses (YAGNI)?
- Does it have a single, nameable responsibility — or is it a grab-bag taking flags/conditionals to fit multiple callers (the **wrong-abstraction** smell)?
- Is there an **existing** abstraction this duplicates/competes with (reuse/extend it, don't fork — cross #8)?
- Would **inlining** make the code clearer? If the abstraction fights its callers, recommend re-inlining.
- Is the indirection earning its keep, or a **shallow wrapper** that just adds a layer to read through (Ousterhout)?
- Any **speculative generality**: config options, plugin hooks, "just in case" parameters with a single caller? Remove.
- Is there a loop that issues a query/RPC/HTTP call per iteration? (N+1.) Push to a single batched/`IN`/join query or a bulk endpoint. Flag `await` inside `for` over independent items.
- What is the worst-case complexity on the hot path as input grows? Flag accidental O(n²) (nested loops over the same collection, `Array.includes` inside a loop → use a Set/Map), and unbounded growth.
**Shared categories:** category #15 checks are shared with **reviewing-performance-and-efficiency** (their primary owner). When both lenses run on the same change, report each shared finding once, under the primary owner.
## Mechanizing these checks
Where a finding here is one a tool can catch deterministically, surface that as an advisory `route: implementer` note next to the finding: the hand review caught it this time, and wiring the matching tool from [reference/tool-rules.md](reference/tool-rules.md) into CI catches it automatically from then on. This is a suggestion to mechanize, not a defect — it never blocks a verdict, and it falls away on a repo that already runs the tool.
**Process notes.** If this lens misfired on this change — flagged correct code, missed an obvious issue squarely in its own scope, or its checklist didn't fit the change shape — say so in one line under `synthesizing-review-findings`'s **Process notes** appendix; that is not a defect finding. Say nothing if the lens worked as intended — never invent a process note to fill the section.
## Going deeper
- [reference/heuristics.md](reference/heuristics.md) — the full checklist; open it when the change sits squarely in this lens's domain.
- [examples.md](examples.md) — concrete good/bad findings, and the output format to match.
- [reference/tool-rules.md](reference/tool-rules.md) — static-analysis rules covering the mechanical subset; for wiring up linters, not needed for the judgment review itself.
- [reference/sources.md](reference/sources.md) — the research behind each check; for provenance, not needed during a review.
<!-- GENERATED by `python -m tooling.cli generate` — do not edit this file directly.
Canonical sources: docs/research/.
Direct edits are overwritten on regeneration and fail the CI drift/regenerate gate. -->
Pliki w paczce (6)
- SKILL.md 8 KB
- examples.md 3 KB
- evals/eval.json 22 KB
- reference/heuristics.md 4 KB
- reference/sources.md 4 KB
- reference/tool-rules.md 4 KB
Wersje
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · brandondees/code-quality-atlas | 100 | MIT |
| brandondees/code-quality-atlas | 100 | MIT |
Migawka bazy z 13.11.2026 · wersja paczki dccb582464cf (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100system-architecture
Projektuje architektury o odpowiedniej złożoności: granice systemu i decyzje strukturalne, które rozwiązują realne problemy bez przedwczesnej abstrakcji. - 100restraint
Narzuca powściągliwość inżynierską: zatrzymanie na pierwszym rozwiązaniu, które już rozwiązuje problem, zanim powstanie nowy kod, przy planowaniu, testach, implementacji i review. - 100abstraction-boundaries
Projektuje i przegląda abstrakcje w kodzie, unikając przedwczesnego uogólniania i nieszczelnych granic. - 100premature-abstraction
Powstrzymuje przed wyodrębnianiem wspólnego kodu, dopóki trzecie rzeczywiste użycie nie ujawni właściwej osi zmienności, przy pokusie dodania helpera, klasy bazowej lub warstwy generycznej. - 90code-discipline
Narzuca dyscyplinę pisania kodu w istniejącej bazie: ponowne użycie istniejących narzędzi bez zbędnych zabezpieczeń i przedwczesnych abstrakcji. - 90tasty-abstraction
Pomaga zaprojektować granicę abstrakcji, która zwija złożoną implementację do prostszego interfejsu bez ujawniania stanu wewnętrznego, bez samej implementacji.