---
type: guard-tooling
coverage: 7
source: COMPLAINT_REGISTRY.jsonl via taxonomy.json _meta (2026-08-08)
absorbs: [tool-reliability-fatigue (shim/gate/wrapper subset)]
split_ids: [C133, C134, C136, C150, C173, C174, C193]
---

# KB — guard-tooling

audience: AI coding agents first. Type-level patterns; per-incident entries land separately.

## Coverage

7 records (7 of 18 `tool-reliability-fatigue` split here). Guard misfire masquerades as upstream tool bug.

## Recurring failure patterns

1. **Exit 97 on laptop** — headless dispatch blocked; agent treats as bug, exports `OD_LOCAL_DISPATCH_OK`.
2. **Wrong PATH binary** — shim vs real `cdx`/`cursor-agent`; different behavior per layer.
3. **cpu-guard / local-gate not in chain** — raw heavy command bypasses queue then blamed on tool.
4. **prevent-band BLOCK** — agent `--no-verify` or weakens finding instead of fixing mediation.
5. **Guard fix fails open** — allowed path broken after "fix"; only forbidden path tested.
6. **cursor-agent missing `--model`** — wrapper default picks wrong model; looks like agent stupidity.
7. **install-headless-guard** — playwright on workstation exit 97; needs `e2e-remote` not local bypass.

## Fix vectors that worked

- Walk full wrapper chain; `type -a` each entrypoint.
- Test BOTH branches: workstation must refuse, buildbox must pass.
- Fix in single fail-closed wrapper; register naive-wrong form in `tools.json` deny-gate.
- Route correctly (`seat-remote`, `e2e-remote`) — never bypass env.

## Related skill

`od-guards`
