null-as-error-cclisted
Install: claude install-skill bengous/claude-code-plugins
# null-as-error
Detect silent error swallowing in Effect codebases. The antipattern:
`catchAll(() => Effect.succeed(null))` collapses real errors (disk full, permissions)
into sentinel values (`null`, `[]`, `false`) that callers cannot distinguish from
normal absence.
## Project context
- effect_posture: !`~/.claude/skills/null-as-error-cc/scripts/probe-effect.sh`
## Workflow
### Phase 1 -- Gate on Effect
If the probe above shows `effect="false"`, stop immediately:
> This project does not use Effect. The null-as-error scanner targets Effect-specific
> patterns (catchAll, Effect.succeed, Effect.ignore). Nothing to scan.
### Phase 2 -- Run scanner
Execute the scanner script. The user may provide a scope (directory path) as an argument;
default to `src/`.
```bash
bun ~/.claude/skills/null-as-error-cc/scripts/scan.ts [scope] --json
```
Capture the JSON output. If `meta.hitsFound` is 0:
> No silent error swallowing patterns found in [scope]. Clean.
Stop here.
### Phase 3 -- Semantic analysis
The scanner found hits. Spawn the auditor subagent to classify each one:
```
Agent({
subagent_type: "null-as-error-auditor",
prompt: <see below>
})
```
The auditor task prompt must include:
- The full scanner JSON output
- Reference file paths for the auditor to read:
- `~/.claude/skills/null-as-error-cc/references/patterns.md`
- `~/.claude/skills/null-as-error-cc/references/fixes.md`
- `~/.claude/skills/null-as-error-cc/references/guardrails.md`
### Phase 4 -- Repo