Atoll-compliant FastAPI backend for Carapace (trunk). Replaces the retired claude_viewer Flask service as of the Phase 6 cutover 2026-04-21.
Entry point: /home/gandalf/.virtualenvs/carapace_api/bin/carapace-api (pip entry point from carapace/packages/server/pyproject.toml). Working dir: /home/gandalf/trunk/carapace/packages/server (synced via vivo 'carapace api trunk (source)' rule). Config: /home/gandalf/trunk/carapace/packages/server/config/settings-trunk-ironclad.json Systemd: carapace-api-trunk.service + carapace-api-trunk-watcher.{service,path}. Path watcher restarts the service on edits to src/carapace_api/ or the trunk config. Caddy: reverse_proxy 127.0.0.1:47121 via carapace-api-trunk.internal (tls internal). Secrets: carapace.atoll_service_token in ~/trunk/secrets.json (aud=carapace).
Routers under src/carapace_api/api/: briefs, projects, ideas, stats, metrics, files, harvest, health, sync, tessera, system. All JWT-protected via AtollAuth except /health, /ping, and /api/health/ingest (static bearer — phone origin has no Atoll login).
Shute event types registered at startup: carapace.brief.updated, carapace.project.updated, carapace.idea.promoted, carapace.harvest.finished. Emits brief.updated on PUT /api/briefs/