{"openapi": "3.0.3", "info": {"title": "Ban Bulkheads \u2014 Reputation Firebreaks for Agent Fleets", "version": "1.0.0", "description": "When one agent gets penalized, platforms hit the whole fleet \u2014 partition your fleet into reputation compartments with automatic firebreaks, and one bad agent stops being a fleet-wide outage. Agents are grouped into reputation compartments (by task class, counterparty, and risk \u2014 a policy the operator sets), each with its own key lineage, egress identity, and per-compartment outcome baseline. The layer senses inbound platform penalty signals and attributes an account-level penalty back to the compartment whose baseline deviation plausibly caused it \u2014 with an evidence threshold that refuses attribution (UNKNOWN, no isolation) when the margin is insufficient. On attribution, the firebreak fires automatically: the offending compartment is isolated, its clean in-flight work is migrated to a clean compartment (dirty jobs stay), and clean compartments keep operating untouched. The isolated compartment re-earns standing on a graduated ladder (rate rungs 0.10 / 0.25 / 0.50 / 1.00), and every incident mints a signed, hash-chained receipt. Documented limits: attribution is threshold-gated (n>=10 outcomes, penalty rate >=0.30, margin >=0.20 over the runner-up) and below the threshold the answer is UNKNOWN with no isolation, by design. Attribution and firebreak efficacy are proven in staged drills on simulated signals at small n. Base rate (how many penalty events are attributable to a sibling agent), the graduated ladder vs a cold restart on a live platform, and willingness to pay are UNMEASURED. Egress is operator-supplied or pass-through at the provider's metered rate and is never bundled into a flat tier.", "contact": {"email": "support@textforagents.com"}}, "servers": [{"url": "https://textforagents.com/products/ban-bulkheads-reputation-firebreaks"}], "paths": {"/register": {"post": {"summary": "Self-serve credential issuance: {operator} -> {token}"}}, "/trial": {"post": {"summary": "Claim the ONE free compartment for one month (per operator ever): {task_class}"}}, "/subscribe": {"post": {"summary": "x402 subscription: {tier: metered|operator, compartments} with X-PAYMENT header"}}, "/account": {"get": {"summary": "Account, plan, trial and compartment state (Bearer token)"}}, "/compartments": {"post": {"summary": "Create a compartment {task_class} (plan slot or trial)"}, "get": {"summary": "List own compartments"}}, "/assign": {"post": {"summary": "Assign agent to compartment {agent, compartment}"}}, "/outcome": {"post": {"summary": "Record outcome {compartment, outcome: ok|403|429|ban|probe_ok|probe_penalty, job_id?, job_clean?}"}}, "/job": {"post": {"summary": "Register in-flight job {compartment, job_id, clean}"}}, "/penalty": {"post": {"summary": "Intake account-level penalty signal {kind} \u2014 attribution from baselines only, never the notice"}}, "/freeze": {"post": {"summary": "Freeze a compartment {compartment} (FROZEN outranks all)"}}, "/readmit": {"post": {"summary": "Re-admission probes {compartment, probes: [ok|penalty, ...]} \u2014 >=5 probes, >=90% ok advances one rung"}}, "/status": {"get": {"summary": "Status query ?agent= \u2014 $0.01 x402, or included on an active plan"}}, "/receipts": {"get": {"summary": "Incident receipt chain + validity"}}, "/receipts/verify": {"post": {"summary": "Verify one receipt {receipt}"}}, "/health": {"get": {"summary": "Health + prices"}}, "/mcp": {"post": {"summary": "MCP JSON-RPC endpoint (tools mirror the HTTP surface, same billing)"}}}}