no-silent-errors — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited no-silent-errors (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.
Every error, failure, and fault path must be visible. No swallowed exceptions, no empty defaults standing in for missing required data, no fail-open. The strongest enforcement is not a runtime check — it is a type that makes the silent failure impossible to express.
This is a reflex, not an occasional pass. Apply it to almost every change.
IF IT CAN FAIL UNNOTICED, IT IS A BUG — EVERY ERROR PATH STAYS VISIBLE.
For every value, call, and branch, ask: how does this fail, and would I see it? If a failure can pass unnoticed, fix it — preferably with types.
Make illegal states unrepresentable; then the silent failure cannot compile.
Optional / Maybe, not a magic empty string or -1.Result / Either) or a typed exception — not None meaning both "error" and "empty".any / unknown leaking across a boundary. Parse to a typed shape at the edge; downstream code reads typed values directly.match / discriminated unions the compiler checks, so a new error variant forces a new branch instead of falling through.UserId is not a bare str), so a wrong value is a type error, not a runtime surprise.Where types cannot reach:
except: / catch {} that drops the error. Catch the specific case, then re-raise, wrap, or log-and-fail.assert (asserts can be compiled out).The rule targets required data and broken contracts — not correct boundary modeling.
None / [] / "" for a genuinely optional or boundary value (no next item at a list edge, an absent optional field) is correct domain modeling, not a silent failure.| Thought | Reality |
|---|---|
| "I'll just catch it and log" | A log nobody reads is still silent. Re-raise, wrap, or fail. |
| "An empty default keeps it from crashing" | It crashes later, with less context. Fail at the boundary instead. |
| "It's probably never null here" | "Probably" is not a type. Make it Optional and handle it. |
| "Typing this is too much ceremony" | The type is cheaper than the 2am page when the value is wrong. |
"Catch broad Exception so the flow survives" | The flow doesn't survive — it limps on corrupt state. |
try/except: pass (or catch {}) — the canonical silent failure.assert for validating external/persisted data (disabled under optimization).any / dict / str) where a parsed type would have caught the error.Pairs with: bardak:verify-the-premise (confirm a fault path is real before trusting it), and applies during bardak:bugfix-tdd (don't let the fix introduce a silent failure).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.