[
  {
    "url": "https://agentriders.com/logs/security-audit-of-the-agentriders-repo-fixes-shipped-to-prod/",
    "title": "Security audit of the AgentRiders repo, fixes shipped to prod",
    "date": "2026-10-16",
    "rider": "maxcr",
    "mount": "Claude Code",
    "model": "claude-opus-5-5",
    "harness": "Claude Code",
    "task": "code",
    "duration": "37m",
    "cost_usd": 6.89,
    "outcome": "landed",
    "burns": [
      {
        "what": "Pushed the fix commit to a public repo before deploy; its message described the unclaimed 'example' handle takeover.",
        "recovery": "Merged and deployed within the hour, then checked live site-state: no placeholder handle had been claimed.",
        "cost_usd": 0
      },
      {
        "what": "astro check stalled on an install prompt and ate a 5-minute timeout.",
        "recovery": "Stopped it; verified with npm test, astro build, and a local wrangler pages dev header check instead.",
        "cost_usd": 0
      }
    ],
    "lesson": "Read the code that assigns ownership, not just the code that checks it. The auth gates were solid; the hole was a background reconcile job handing published logs to whoever claimed a matching handle. And a confirm: true the model sets is advice, not consent: human approval has to come from outside the model.",
    "reins": {
      "scope": "agentriders repo (server, CLI, MCP): read-only audit first, then fixes on a branch; merge only when the rider asked",
      "budget": "No dollar cap set",
      "kill_switch": "Rider interrupts in the terminal; nothing merged without an explicit ask",
      "autonomy": "Bypass-permissions mode; asked before fixing and again before merging"
    }
  },
  {
    "url": "https://agentriders.com/logs/shipped-agentriders-phase-2/",
    "title": "Shipped AgentRiders Phase 2",
    "date": "2026-10-16",
    "rider": "maxcr",
    "mount": "Claude Code",
    "model": "Claude Fable 5 for planning and Opus 4.8 for coding",
    "harness": "Claude Code on the web (cloud session)",
    "task": "code",
    "duration": "5h",
    "cost_usd": 550,
    "outcome": "landed",
    "burns": [
      {
        "what": "The first M2 submission pipeline reached the review stage with an IDOR (any rider could hijack or lock another rider’s published log through the edit path) and a stored XSS (rider markdown rendered as raw HTML).",
        "recovery": "A 46-agent adversarial review caught both before merge; fixed at every trust boundary and re-verified with a 23-step end-to-end run.",
        "cost_usd": 0
      },
      {
        "what": "The admin allowlist was hardcoded to the handle max, but the owner claimed @maxcr — the admin surface would have 404'd for its own admin.",
        "recovery": "Corrected the allowlist on the branch before merge and granted is_admin in D1.",
        "cost_usd": 0
      },
      {
        "what": "A local dev-server kill script repeatedly matched and killed the agent’s own shell (exit 144), stalling test runs.",
        "recovery": "Ran the kill from a file and by port instead of an inline process-name pattern.",
        "cost_usd": 0
      }
    ],
    "lesson": "\"Tests pass\" is not \"safe to ship\": agent-written code needs an adversarial review pass before merge — ours caught an IDOR and a stored XSS that 38 green tests missed.",
    "reins": {
      "scope": "maxfain/agentriders only — feature-branch PRs into main; Cloudflare account via a scoped API token; production D1 + Pages",
      "budget": "subscription",
      "kill_switch": "on — human merges each milestone PR manually; secrets and infra changes gated on the owner",
      "autonomy": "High — autonomous build across milestones M0–M2, with human approval at every merge"
    }
  }
]
