1.7 KiB
1.7 KiB
11. Redundant defensive guarding check
meta: id: pygienium-11 feature: pygienium priority: P2 depends_on: [pygienium-06] tags: [check]
objective:
- Implement the redundant-defensive-guarding check: remove excessive null checks, unnecessary try/catch, fallback paths that mask bugs, defensive code guarding invariants the type system already guarantees.
deliverables:
src/checks/defensive-guards.ts:CheckDefinitionwith scan + fix tasks- Rubric: redundant null/undefined checks where types are non-nullable, try/catch that only rethrows or swallows, fallback values that hide errors, defensive guards on already-validated input, compatibility fallbacks (engineering rule: remove, don't layer)
/pygienium-defensive-guardsruns E2E
steps:
- Author
buildScanTask: agent identifies defensive smells, writespygienium/checks/defensive-guards/findings.md - Author
buildFixTask: remove redundant guards; preserve guards that protect real external boundaries (user input, IO, parsing); write changes.md distinguishing removed vs kept-with-reason - Register the check
tests:
- Integration: temp file with a null check on a typed-non-null param + a try/catch that swallows; run
--fix; assert removed; assert a JSON.parse guard is preserved
acceptance_criteria:
- findings.md separates redundant guards from legitimate boundary guards
--fixremoves redundant guards and keeps boundary guards (IO, parsing, untrusted input)
validation:
- Inspect
pygienium/checks/defensive-guards/{findings.md,changes.md}
notes:
- Key judgment: guarding external boundaries (IO, untrusted input, parsing) is correct; guarding internal invariants the type system guarantees is noise
- Engineering rule: no compatibility layers or fallbacks meant to be replaced later