ADR-0027 — Paperclip como source-of-truth de trabalho (Paperclip-first)
20/05/2026 · Accepted
docs/adr/ADR-0027-paperclip-first-source-of-truth.md
ADR-0027 — Paperclip como source-of-truth de trabalho (Paperclip-first)
Status: Accepted Data: 2026-05-20 Autor: Marcelo Lermen + CC (sessão #17) Supersedes: ADR-0014 §Princípio 4 (queue em GitHub Issues), ADR-0017 §Fase 2 inteira (cc-autopilot self-hosted), parcialmente ADR-0026 §2.7 (Paperclip "backend transparente" → vira source-of-truth) Não muda: ADR-0014 §Princípio 1 (chat única porta humana), ADR-0014 §Princípio 2 (sub-agents Camada 3 obrigatórios), ADR-0014 §Princípio 3 → ADR-0022 (ROI substitui cap)
Contexto
Em 2026-05-20 (sessão #17), com Paperclip em produção e 8 agents criados, revisamos a arquitetura. O modelo vigente tinha 3 camadas:
Marcelo → Chat Tynna → CC → GitHub Issue (com label cc-can-execute)
↓
cc-autopilot.yml (cron 9h/21h BRT, serial concurrency)
↓
claude -p execução no VPS
Paperclip era usado como "backend transparente" (ADR-0026 §2.7): backup tooling, não source-of-truth.
Problema identificado: 3 camadas + duplicação de estado (GH labels vs Paperclip status) + workflow cc-autopilot.yml com 233 linhas reimplementando o que Paperclip já tem nativo (issue queue, agent assignment, concurrency, scheduling, approvals).
Decisão
Paperclip vira source-of-truth do trabalho a partir desta sessão (#17, 2026-05-20).
Marcelo → Chat Tynna → CC → Paperclip Issue + assigneeAgent → run
↓
GitHub Issues = só bug reports externos (user-facing)
Migração imediata — sem fase paralela. cc-autopilot.yml renomeado pra .yml.disabled na mesma PR.
Pontos da decisão
- Issues do trabalho Tynna moram no Paperclip (
companies/{cid}/issues). CC cria via API quando Marcelo descreve intenção. - Sub-agents Tynna são employees Paperclip (Sprint C, sessão #17). 7 employees criados: QA Reviewer, Security Reviewer, UX Reviewer, Test Writer, Root Cause Analyst, Doc Writer, Eval Runner.
- cc-autopilot.yml desabilitado — Paperclip routines + agent heartbeat substituem cron + concurrency.
- GitHub Issues = público externo apenas — bug reports de usuários terceiros (quando houver), CI alerts (runner:auth-expired), Dependabot. Trabalho interno NÃO vai mais pra GH Issues.
.claude/agents/*.mdarquivados — instruções já estão duplicadas comoinstructionsBundlenos employees Paperclip. Diretório vira leitura histórica.- dev-standards §17.7-§17.12 atualizado —
cc-can-executelabel não existe mais. Trabalho é dispatched via Paperclip API ou UI /m/queue.
Implicações operacionais
- OAuth bridge expira 36h vira P0 — sem chat working, não há porta humana. Task #63 auto-refresh é blocker pra Paperclip-first.
/m/queueganha ações — criar issue, dispatch, pause, edit (#71).- Disponibilidade Paperclip = disponibilidade da fábrica — se Paperclip cair, agents não trabalham. Mitigação: VPS neo já tem uptime monitor (UptimeRobot setup runbook PR #70).
- Paralelismo aumenta — cc-autopilot era serial (1 issue por vez). Paperclip pode rodar 8 agents simultâneos com
maxConcurrentRuns: 3cada (~24 issues concorrentes teóricas). - Custo: sem mudança. Adapter
claude_localusa mesma quota Max.
Trade-offs
Mantido:
- Chat como única porta humana (Princípio 1 ADR-0014)
- Quota Max R$ ~100/mês como cap
- Sub-agents Camada 3 obrigatórios em paths sensíveis (Princípio 2 ADR-0014)
Aceito como risco:
- Paperclip < 30d em produção (maturidade baixa)
- Decisão unidirecional — voltar pra cc-autopilot exige restaurar workflow
- Issues GH histórico permanece em GH (não vai migrar bulk)
Ganho:
- 1 source-of-truth (sem sync GH ↔ Paperclip)
- 233 linhas YAML cc-autopilot deletadas
- Paralelismo 8x
/m/queuedeixa de ser read-only- Status tracking nativo (todo/in_progress/review/done) substitui labels frágeis
- Routines com cron via API substituem workflow_dispatch
Mudanças concretas nesta PR
- Este ADR-0027 documenta a decisão
cc-autopilot.yml→cc-autopilot.yml.disabled(preservado pra referência)- CLAUDE.md root atualizado com novo workflow CC
- dev-standards.md §17.7-§17.12 marcado como SUPERSEDED
.claude/agents/README.mdadiciona nota "instructions agora em Paperclip employees"
Fora desta PR (follow-ups)
- #63 Auto-refresh OAuth bridge (CRÍTICO — Paperclip-first depende de chat estável)
- #68 Sprint B+ ativar gh CLI no user paperclip pra agents poderem dar push em PRs
- #71 UI /m/queue ações (criar/dispatch)
- #46/#47 Cowork knowledge migration (paralelo, não bloqueia)
- Migration bulk de Issues GH abertas com
cc-can-executepra Paperclip (manual, baixo volume)
Histórico de decisões superseded
| ADR | Seção | Era | Agora |
|---|---|---|---|
| 0014 | §Princípio 4 | "Queue de trabalho em GitHub Issues, label cc-can-execute" | SUPERSEDED — Queue em Paperclip Issues |
| 0017 | §Fase 2 inteira | "cc-autopilot.yml self-hosted runner VPS, cron 9h/21h" | DEPRECATED — Substituído por Paperclip routines + agent heartbeat |
| 0026 | §2.7 | "Paperclip backend transparente" | EVOLVED — Paperclip source-of-truth |
Critério de sucesso
Em 30 dias (2026-06-20):
- 0 Issues GH abertas com label
cc-can-execute(label vira deprecated) - ≥10 Issues Paperclip executadas com sucesso pelos 7 employees
- 0 invocações de
cc-autopilot.yml.disabled(confirma deprecation) /m/queueé primária pra Marcelo gerenciar work
Se não atingir → revisar e considerar rollback parcial (restaurar cc-autopilot como fallback).
Só leitura. Toda mudança nestes documentos é pull request.