Start here
as of 2026-09-19
Two ways in. Pick the one that matches why you arrived.
If you arrived with a symptom
Find your symptom in the left column. The right column is the entry that answers it — one file, self-contained, with a reproduction you can run.
| What you are seeing | Entry |
|---|---|
| The test suite passed, but you are no longer sure any test ran | SF-001 · Zero items collected, exit 0 |
| A test silently stops checking when a precondition is not met | SF-002 · Early return as an implicit skip |
A try/except was added “for robustness” and now nothing fails |
SF-003 · Swallowed exception |
Errors come back as 0.0, "" or [], so a bug looks like a poor result |
SF-004 · Sentinel value on failure |
Required data is missing and the script exits 0 anyway |
SF-005 · Neutral marker not counted |
| The validator only checks what is declared — so a missing declaration is invisible | SF-006 · Undeclared means unchecked |
| A required field is empty, and empty breaks nothing observable | SF-007 · Empty value is silent |
| The artifact loaded, so everyone assumed it was applied | SF-008 · Loading artifact as evidence of use |
| Reach or impressions were counted as adoption | SF-009 · Exposure counted as usage |
| CI is green locally but the published artifact is wrong | SF-010 · Local green is not remote green |
| A check that has never once failed, in its entire life | SF-011 · The always-green oracle |
| A failure is reported, but blamed on the wrong cause | SF-012 · Misattributed failure |
| The check ran against a stale copy of the thing it was checking | SF-013 · Stale copy contaminates the check |
| The process is alive and doing nothing | SF-014 · Zombie process looks alive |
Nothing matches? That is a gap in this catalog, and a gap is worth reporting — see docs/take-the-challenge.md § Tier 1.
If you arrived looking for a tool
| You want | Run |
|---|---|
| To know whether one of your own scripts can pass without checking anything | python tools/gate-lint.py your_gate.py |
To know whether gate-lint itself still works |
python tools/gate-lint.py --selftest |
| To verify you hold an unmodified copy of this catalog | python tools/make-manifest.py --check |
| To see every pattern in one table | failures/README.md |
What this catalog is not
| Not this | Why |
|---|---|
| A list of bugs | It covers only failures that wear the costume of success. A crash is an ordinary bug |
| A tool comparison | It names patterns, not products. “Tool X does this” is a bug report, not a pattern |
| A standards document | No entry claims conformance with anything. Where a technique maps to established practice — mutation testing, negative controls, test oracles — the established source is linked, not restated |
| A blog | Every entry carries a reproduction and a negative control, and is re-checked against a manifest of raw bytes |
The two rules everything here reduces to
1. Missing must enter the exit code. If “required but absent” is recorded as a neutral note — a log line, a
⚪, a skip, a warning — then a required-but-absent state producesexit 0, and the check is blind exactly where it matters most.2. No negative control means no evidence. A check that has never been observed failing has not been shown to be capable of failing.
Every one of the fourteen entries above is these two rules, applied at a different layer.
Who maintains this, and what else is published
| This catalog | silent-failure-catalog — silent failure modes, with detection recipes |
| Sibling project | agent-skills — a zero-dependency skill library for AI-agent governance and tooling |
| Project hub (总入口) | zhaoxinghua09-cell.github.io/lgd-hub — what else exists, and which problem each project answers |
| Channels, citation rules, and what we decline to do | docs/where-to-find-us.md |
If you found this repository through any one of our projects, the hub above is the way back to all of them — and the fastest way to tell whether a different problem of yours is already solved somewhere in the set.