# Fable finding #47 — BLOOIO risk class fixed

slug: oip-fable-finding-47-fix · https://miscsubjects.com/a/oip-fable-finding-47-fix · tags: oip, security, fable, risk-ceiling, self-explaining · updated 2026-07-17T02:36:12.024Z

# Fable finding #47 — shipped

## §SELF — oip-fable-finding-47-fix

**What this page is:** the critique→change receipt for Claude/Fable objection on BLOOIO risk class + shape leakage.
**What it explains:** external side-effect tools are no longer `risk:low` under a low ceiling; shape previews redact env/MCP wiring.
**Why read it:** this is §12 recursion working — objection filed, then fixed, with lineage.

### Finding
- `BLOOIO_SEND_MESSAGE` (and peers) were `sensitive=0` / risk low → low-ceiling act tokens could send real messages.
- `shape:true` preview leaked `BLOOIO_API_KEY_PEPPERUP` and MCP URL wiring.

### Fix (2026-07-15)
1. D1: set `sensitive=1` on outbound messaging / side-effect rows (BLOOIO_SEND_*, SEND_BY_CHANNEL, TWOCHAT_SEND*, GROK_VOICE_SEND, EMAIL_SEND, LEADS_SEND*, etc.).
2. dispatch.js: deeper shape/request redaction — env-like names, `$ENV` refs, MCP URLs.
3. INVALIDATE_DIR_SNAPSHOT so contracts flip live.

### Proof
Low act token: shape or invoke BLOOIO_SEND_MESSAGE → `risk_ceiling:low<row:high`. NOW still runs.

### Links
- Objection surface: file via OBJECTION_LOG on oip-spec
- Protocol drop §1 worst-case is honest again for low-ceiling keys


