Skip to content
Back to skills

Review Failure Injection

ASecurity

Adversarially review a change for how it behaves when things go WRONG — malformed input, IO/network errors, partial writes, resource exhaustion, and teardown. Use when reviewing parsers, file/IO, persistence, untrusted input, long-running or resource-holding code, or any error/failure path. Do NOT use for general code health (use review-code), documentation (use review-docs), contract/rename parity (use review-contract-drift), or release packaging (use review-release-readiness).

  • 13 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 8, 2026
developmentrustgoapisecurityperformancedocumentation

Works with

  • api

Security analysis

A100/100

Scanned October 8, 2026

npx -y skills add zoolok17/agenttalk --skill review-failure-injection --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Review Failure Injection?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Review Failure Injection
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/zoolok17-review-failure-injection/badge)](https://www.skillsdirectory.com/skills/zoolok17-review-failure-injection)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: review-failure-injection
description: >-
  Adversarially review a change for how it behaves when things go WRONG — malformed
  input, IO/network errors, partial writes, resource exhaustion, and teardown. Use
  when reviewing parsers, file/IO, persistence, untrusted input, long-running or
  resource-holding code, or any error/failure path. Do NOT use for general code
  health (use review-code), documentation (use review-docs), contract/rename parity
  (use review-contract-drift), or release packaging (use review-release-readiness).
reviewed-against: "0.43"
category: assurance
evidence-profile:
  - review-result
---

# review-failure-injection

Ordinary review asks "does the happy path work?". This asks "what happens when it
DOESN'T?". Inject failures mentally (and with a repro where you can) and confirm the
code degrades safely. Ground every finding in the actual code; never approve a
failure path you only assumed.

## INJECT — the failure catalogue
Walk each that the change touches; quote the exact lines for any finding.
1. [ ] **Malformed / hostile input** — truncated, oversized, wrong-type, wrong-encoding,
       injection, deeply nested, empty, duplicate keys. Is it rejected, not crashed?
2. [ ] **IO / network failures** — file missing, permission denied, disk full, partial
       read/write, timeout, connection drop mid-stream, retry storms. Errors handled,
       not swallowed?
3. [ ] **Persistence integrity** — a crash mid-write must not corrupt state. Atomic
       write / temp-then-rename? Reload after a torn write fail CLOSED, not silently?
4. [ ] **Resource limits** — unbounded buffers/queues/caches/recursion; leaked handles,
       file descriptors, connections, locks across BOTH success AND error paths.
5. [ ] **Concurrency** — races, double-consume, lost updates, deadlock if two callers
       hit the same path; reentrancy on retry.
6. [ ] **Cleanup / teardown** — does `finally` / context-manager / defer actually run on
       every exit, including early return and exception? Is partial work rolled back?
7. [ ] **Fail direction** — when uncertain, does it fail CLOSED (deny/HOLD) rather than
       open (allow/GO)? A false success is worse than a clean error.

## VERIFY — adversarially
- [ ] For each claim, read the surrounding/unchanged-but-affected code, confirm the
      symbols/APIs exist, and run a minimal repro or the test that exercises the path.
      No finding rests on "this is probably handled".

## REPORT
- [ ] Severity-tag each finding `[blocker]/[major]/[minor]/[nit]` with file:line and the
      exact failure that triggers it. A data-loss or fail-open path is `[blocker]`.

## EMIT — close-compatible evidence
Produce a `kind=review-result` the P2/P3 `agenttalk close` consumes:
- **ACCEPT** → `--meta status=approved --meta risk_class=<primary> --meta
  release_blocker=yes|no|unknown --meta tests_referenced=<…|n/a> --meta
  tests_executed=<actual command + result/exit, or a CI run id|n/a> --meta
  residual_risk=<…|n/a> --meta evidence=<artifact/pointer>`, plus `--meta
  na_reason=<why>` for any `n/a` field.
- **COUNTER (changes needed)** → `--meta status=rejected --meta risk_class=<primary>
  --meta release_blocker=<yes|unknown>` + evidence/artifacts + a concrete findings list
  so the lead can record a close counter + remediation.
- **NA (lens does not apply)** → the lightweight-approved shape: `--meta status=approved
  --meta risk_class=none --meta release_blocker=no` + n/a evidence fields + `--meta
  na_reason=<why it does not apply>`.

Pick the **primary** `risk_class` by the worst failure mode found —
`persistence` (corruption/torn write), `security` (hostile input / fail-open),
`performance` (resource exhaustion), else `quality`.

**HONESTY (hard rule):** `tests_executed` is what you ACTUALLY ran (the real command
+ its observed result/exit code, or a CI run id); `tests_referenced` is what you only
inspected. NEVER record execution you did not perform — if you only referenced, set
`tests_executed=n/a` + `na_reason`. Anything **release-blocking** must anchor to an
`automation_ci` gate, not self-report.

**RISK (hard rule):** choose ONE primary `risk_class` for the validator, but LIST every
touched/secondary risk class in the body. You do NOT decide the close's risk — the
lead-owned risk inventory is authoritative for P3 routing; your `risk_class` is an input.

## Evidence

Emit the `review-result` profile (full rules + bus-validated vs skill-policy: ../_shared/references/evidence.md).

Required fields:

- `risk_class`
- `release_blocker`
- `tests_referenced`
- `tests_executed`
- `residual_risk`
- `evidence`
- `status`
- `reviewed_ref`
- `scope`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.