more-is-less — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited more-is-less (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Some code is cheaper written long now than cheap today. At a structural boundary — a schema, a data model, an integration or variant seam, a contract — the lazy shape looks smaller but bills you later as a migration, a backfill, or shotgun surgery across the generic layer. This skill is the disciplined case for paying that cost up front: build the seam, the extension point, the value type now, so the next variant is additive instead of surgery.
It is the deliberate counterweight to lazy minimalism — and it refines, never overrides, bardak:less-is-more. The split is sharp: structure at a boundary is built right; runtime machinery is deferred.
Announce at start: "Using more-is-less — investing structure now at this boundary so the next change is additive."
Invest in structure now exactly when the cheap version would cost a future migration — and the future need is named, not imagined. Defer runtime machinery (caches, locks, retries, guards) until a real failure demands it.
Under-abstraction and over-abstraction are equally defects. This skill targets only the first, and only at a boundary.
if type == "x" dispatch, a handler table keyed by variant, the generic/shared layer importing a concrete one, stringly-typed or positional-tuple boundaries.If any fails, you are over-engineering — stop, and let bardak:less-is-more and the minimal default govern.
When a recurring shape appears, name it and reach for the form that is already battle-tested: it states intent and is cheaper to maintain than a clever bespoke version. The shapes worth knowing:
if provider == …, switch on kind) → one port: an interface/Protocol the generic layer talks to, with concrete implementations registering themselves behind a registry/factory. Adding a variant becomes additive — no edit to the generic layer.str (a UserId is not a str).For machinery you have justified, reach for a well-tested library over a hand-rolled version (a retry/backoff/circuit-breaker lib beats a bespoke loop).
The generic core stays generic: shared/core models, services, and hot paths carry no variant-specific fields or logic — those live behind the port. The tell that a boundary leaked is not only a column; it is an import or an equality check. If the generic layer imports a concrete variant or compares against its name, the seam is already broken.
| Thought | Reality |
|---|---|
| "Make it generic in case we need it" | No named need = speculation. Build it when the need is named; stay minimal until then. |
| "Add a lock/retry/guard to be safe" | Runtime machinery. Defer until a failure is measured. |
| "This abstraction is elegant" | Elegance isn't a justification. Name the future cost it buys down, or drop it. |
| "Fold these three refactors into this PR" | Investment isn't scope creep. Split orthogonal refactors out. |
| "It needs a migration and a backfill, but it works" | Ceremony is a design smell. A different shape likely removes the need — reconsider the design first. |
| Thought | Reality |
|---|---|
"Just one more if type == … branch" | That branch is the smell. If N+1 edits the generic layer, build the port now. Don't cite YAGNI to dodge a real seam. |
| "Ship the small schema now, migrate later" | "Later" is a backfill and a reparent. If the future shape is named, build the additive shape now. |
| "Return a tuple, it's fewer lines" | An order-swap is a silent bug. A named record is the cheaper one. |
Pairs with: bardak:less-is-more (the counterweight it refines — that one governs runtime complexity and reduction, this one governs structure at a boundary), bardak:no-silent-errors (the typed seams and named records here exist so a failure cannot be expressed silently), and bardak:adr (record the structural choice and the named future need that justified it).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.