@luanpdd/kit-mcp 1.34.0 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +1 -1
  2. package/bin/cli.js +2 -2
  3. package/bin/mcp.js +6 -6
  4. package/bin/ui.js +74 -74
  5. package/gates/ai-prompt-stability.md +120 -120
  6. package/gates/budget-description.md +68 -68
  7. package/gates/confidence.md +29 -29
  8. package/gates/dependency-check.md +33 -33
  9. package/gates/dept-cycle-prevention.md +179 -179
  10. package/gates/golden-signals-coverage.md +133 -133
  11. package/gates/legacy-refactor-safety.md +178 -178
  12. package/gates/multi-tenant-rls-coverage.md +102 -102
  13. package/gates/no-personal-uuid.md +72 -72
  14. package/gates/obs-agents-mcp-supabase.md +86 -86
  15. package/gates/obs-skills-frontmatter.md +76 -76
  16. package/gates/observability-coverage.md +151 -151
  17. package/gates/omm-no-regression.md +83 -83
  18. package/gates/postmortem-template-required.md +127 -127
  19. package/gates/prr-checklist-coverage.md +128 -128
  20. package/gates/regression.md +32 -32
  21. package/gates/release-pipeline-policy.md +132 -132
  22. package/gates/secrets-scan.md +33 -33
  23. package/gates/service-role-not-in-user-facing.md +113 -113
  24. package/gates/skill-must-include.md +71 -71
  25. package/gates/sync-idempotent.md +62 -62
  26. package/gates/verify-phase-goal.md +34 -34
  27. package/kit/agents/designer-ui.md +216 -216
  28. package/kit/agents/workflow-generator.md +537 -0
  29. package/kit/commands/adicionar-backlog.md +1 -1
  30. package/kit/commands/adicionar-fase.md +1 -1
  31. package/kit/commands/adicionar-tarefa.md +1 -1
  32. package/kit/commands/auditar-observabilidade.md +103 -103
  33. package/kit/commands/auditar-toil.md +129 -129
  34. package/kit/commands/caracterizar-prompt.md +195 -195
  35. package/kit/commands/criar-workflow.md +158 -0
  36. package/kit/commands/definir-perfil.md +1 -1
  37. package/kit/commands/definir-slo.md +108 -108
  38. package/kit/commands/fio.md +1 -1
  39. package/kit/commands/golden-signals.md +142 -142
  40. package/kit/commands/instrumentar-fase.md +200 -200
  41. package/kit/commands/investigar-producao.md +162 -162
  42. package/kit/commands/observabilidade.md +118 -118
  43. package/kit/commands/postmortem.md +179 -179
  44. package/kit/commands/prr.md +205 -205
  45. package/kit/commands/publicar-rapido.md +207 -207
  46. package/kit/commands/risk-budget.md +220 -220
  47. package/kit/commands/sre.md +230 -230
  48. package/kit/file-manifest.json +5 -2
  49. package/kit/framework/references/output-style.md +22 -22
  50. package/kit/hooks/post-apply-migration.js +199 -199
  51. package/kit/hooks/sidecar-tool-publisher.js +210 -210
  52. package/kit/skills/_shared-dados-distribuidos/glossary.md +224 -224
  53. package/kit/skills/_shared-legacy/glossary.md +389 -389
  54. package/kit/skills/_shared-multi-tenant/glossary.md +186 -186
  55. package/kit/skills/_shared-observability/glossary.md +396 -396
  56. package/kit/skills/_shared-sre/glossary.md +712 -712
  57. package/kit/skills/_shared-supabase/glossary.md +234 -234
  58. package/kit/skills/blameless-postmortems/SKILL.md +340 -340
  59. package/kit/skills/burn-rate-alerting/SKILL.md +258 -258
  60. package/kit/skills/cascading-failures/SKILL.md +311 -311
  61. package/kit/skills/core-analysis-loop/SKILL.md +352 -352
  62. package/kit/skills/distributed-tracing/SKILL.md +362 -362
  63. package/kit/skills/dynamic-workflow-authoring/SKILL.md +327 -0
  64. package/kit/skills/eliminating-toil/SKILL.md +243 -243
  65. package/kit/skills/event-based-slos/SKILL.md +296 -296
  66. package/kit/skills/four-golden-signals/SKILL.md +314 -314
  67. package/kit/skills/hermetic-builds/SKILL.md +323 -323
  68. package/kit/skills/legacy-monster-methods/SKILL.md +444 -444
  69. package/kit/skills/llm-as-dependency/SKILL.md +436 -436
  70. package/kit/skills/load-shedding-graceful-degradation/SKILL.md +396 -396
  71. package/kit/skills/observability-driven-development/SKILL.md +315 -315
  72. package/kit/skills/observability-maturity-model/SKILL.md +222 -222
  73. package/kit/skills/opentelemetry-standard/SKILL.md +351 -351
  74. package/kit/skills/production-readiness-review/SKILL.md +305 -305
  75. package/kit/skills/release-engineering/SKILL.md +367 -367
  76. package/kit/skills/retry-strategies/SKILL.md +372 -372
  77. package/kit/skills/sre-risk-management/SKILL.md +221 -221
  78. package/kit/skills/structured-events/SKILL.md +265 -265
  79. package/kit/skills/supabase-cron-queues/SKILL.md +275 -275
  80. package/kit/skills/supabase-database-functions/SKILL.md +332 -332
  81. package/kit/skills/supabase-declarative-schema/SKILL.md +183 -183
  82. package/kit/skills/supabase-pgvector-rag/SKILL.md +253 -253
  83. package/kit/skills/supabase-postgres-style/SKILL.md +138 -138
  84. package/kit/skills/supabase-storage/SKILL.md +234 -234
  85. package/kit/skills/telemetry-pipelines/SKILL.md +259 -259
  86. package/kit/skills/telemetry-sampling/SKILL.md +256 -256
  87. package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -261
  88. package/kit/skills/ui-contexto-produto/SKILL.md +248 -248
  89. package/kit/skills/ui-cor-estrategia/SKILL.md +213 -213
  90. package/kit/skills/ui-critica-auditoria/SKILL.md +260 -260
  91. package/kit/skills/ui-motion-funcional/SKILL.md +264 -264
  92. package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -259
  93. package/kit/skills/ui-tipografia/SKILL.md +211 -211
  94. package/package.json +1 -1
  95. package/src/cli/index.js +1114 -1114
  96. package/src/cli/render.js +194 -194
  97. package/src/cli/upgrade-check.js +135 -135
  98. package/src/core/error-redaction.js +76 -76
  99. package/src/core/failures.js +153 -153
  100. package/src/core/gate-runner.js +205 -205
  101. package/src/core/gates.js +82 -82
  102. package/src/core/logger.js +170 -170
  103. package/src/core/manifest-verify.js +174 -174
  104. package/src/core/metrics.js +268 -268
  105. package/src/core/notify.js +60 -60
  106. package/src/core/path-safety.js +141 -141
  107. package/src/core/replays.js +120 -120
  108. package/src/core/ui.js +185 -185
  109. package/src/mcp-server/install.js +149 -149
  110. package/src/mcp-server/roots.js +124 -124
  111. package/src/ui/auto-spawn.js +113 -113
  112. package/src/ui/browser.js +78 -78
  113. package/src/ui/client.js +130 -130
  114. package/src/ui/events.js +65 -65
  115. package/src/ui/lockfile.js +191 -191
  116. package/src/ui/port.js +67 -67
  117. package/src/ui/server.js +547 -547
  118. package/src/ui/wrapper.js +129 -129
@@ -1,712 +1,712 @@
1
- # Glossário SRE — Termos, Comandos e Patterns Canônicos
2
-
3
- > Arquivo de referência compartilhado pelas skills `sre-*`, `four-golden-signals`, `eliminating-toil`, `blameless-postmortems`, `production-readiness-review`. **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas skills via Markdown link relativo.
4
-
5
- > **Material-fonte:** *Site Reliability Engineering: How Google Runs Production Systems* — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016). ISBN 978-1-491-92912-4.
6
-
7
- ---
8
-
9
- ## (a) Termos PT-BR ↔ EN
10
-
11
- ### Risk e Reliability
12
-
13
- > Vocabulário do cap 3 (Embracing Risk). Reliability é tratada como continuum, não absoluto. Custo de "9s" cresce não-linearmente; user perception satura em torno de 99.95%-99.99% para serviços user-facing.
14
-
15
- | EN | PT-BR / Significado |
16
- |---|---|
17
- | **risk continuum** | Continuum de risco — 100% de disponibilidade NÃO é o objetivo; o custo cresce não-linearmente com cada "9". Usuário em smartphone com 99% de disponibilidade não distingue 99.99% de 99.999% no serviço. |
18
- | **as reliable as needs to be, no more** | "Tão confiável quanto precisa ser, não mais" — princípio Google SRE. Sobrar reliability é tão danoso quanto faltar (custa innovation velocity). |
19
- | **99.99% wisdom** | Sabedoria do 99.99% — além desse target o usuário final não percebe melhoria, porque o link "fraco" entre ele e o serviço (smartphone, ISP, Wi-Fi) já dilui qualquer ganho marginal. |
20
- | **availability target** | Alvo de disponibilidade — escolha explícita no balanço risk × innovation × cost. NÃO é meta arbitrária do CTO. |
21
- | **error budget** | Orçamento de erro — `(1 - SLO_target) × total_events`. Fração tolerável de eventos "bad" antes de violar o SLO. Quando esgota, freeze releases. |
22
- | **risk × innovation tradeoff** | Tradeoff risco × inovação — quanto mais inovação, mais risco. O budget é o mediador EXPLÍCITO desse tradeoff, alinhando dev e SRE. |
23
- | **MTTR** | Mean Time To Recovery — tempo médio entre detecção do incident e recovery completo. Métrica chave do OMM Capacidade 1 (Resilience). |
24
- | **MTBF** | Mean Time Between Failures — tempo médio entre falhas consecutivas. Mede estabilidade do serviço em prod. |
25
- | **MTTF** | Mean Time To Failure — tempo médio até primeira falha (sem recovery). Comum em hardware, raro em serviços (que sempre recovery). |
26
-
27
- ### SLI/SLO/SLA
28
-
29
- > Vocabulário do cap 4 (Service Level Objectives). SLI é a métrica; SLO é a meta interna; SLA é o contrato externo. SLA geralmente é menos rígido que SLO (gap = margem de segurança).
30
-
31
- | EN | PT-BR / Significado |
32
- |---|---|
33
- | **SLI** | Service-Level Indicator — métrica que classifica eventos como "good" ou "bad". Sempre **event-based** (não time-based), com numerador/denominador definidos em events. |
34
- | **SLO** | Service-Level Objective — meta interna de SLI (ex: 99.9% das requests good em janela 30d sliding). Drives engineering priorities. |
35
- | **SLA** | Service-Level Agreement — acordo externo com cliente. Geralmente menos rígido que SLO (gap = margem). Violá-lo gera consequências contratuais (refund, credit). |
36
- | **availability** | Disponibilidade — fração de tempo OU eventos em estado utilizável. Definição event-based é canônica (cap 4). |
37
- | **latency** | Latência — tempo de resposta. **Sempre em percentis** (p50, p95, p99, p99.9), nunca em mean. |
38
- | **throughput** | Vazão — requests/segundo OU eventos/minuto. Mede demanda atendida. |
39
- | **correctness** | Correção — resposta certa para input dado. Distinto de availability (sistema "up" pode estar retornando dado errado). |
40
- | **durability** | Durabilidade — dado armazenado sobrevive ao tempo. Storage SLO. |
41
- | **time-to-first-byte** (TTFB) | Tempo até o primeiro byte da resposta — métrica de UX importante para serviços HTTP. |
42
-
43
- ### Four Golden Signals
44
-
45
- > Vocabulário do cap 6 (Monitoring Distributed Systems). Latency + Traffic + Errors + Saturation são os 4 sinais mínimos universais para qualquer serviço user-facing. Originados de SREs operando os serviços do Google.
46
-
47
- | EN | PT-BR / Significado |
48
- |---|---|
49
- | **Latency** | Latência — tempo de resposta. **Latência de success vs failure deve ser medida SEPARADAMENTE** — falhas rápidas mascaram falhas lentas e vice-versa. Sempre em percentis. |
50
- | **Traffic** | Tráfego — volume de demanda no sistema. HTTP requests/s, mensagens/s, bytes/s. Counter monotônico. |
51
- | **Errors** | Erros — taxa de requests falhas. **Explícitas** (5xx), **implícitas** (200 com resposta errada), **políticas** (200 mas latência > SLO). Counter por `error.type`. |
52
- | **Saturation** | Saturação — "quão cheio" o serviço está. Medida do recurso MAIS LIMITADO (CPU, memória, conn pool, IO). Gauge resource-specific. |
53
- | **golden signals** | Sinais dourados — conjunto Latency+Traffic+Errors+Saturation. Universal para qualquer serviço user-facing. Se você só pode medir 4 coisas, meça essas. |
54
- | **black-box monitoring** | Monitoramento caixa-preta — testar o serviço como usuário externo. HTTP probes, synthetic transactions. Detecta sintoma do POV do cliente. |
55
- | **white-box monitoring** | Monitoramento caixa-branca — introspecção interna. Logs, métricas, traces. Detecta causa, não apenas sintoma. |
56
- | **histogram** | Histograma — distribuição com buckets. **Latência sempre em histogram, nunca gauge** — gauge perde long tail. |
57
- | **exponential bucketing** | Bucketing exponencial — buckets crescem em razão `1.5×` ou `2×` (ex: `1, 2, 5, 10, 25, 50, 100, 250...`). Captura long tail sem explodir cardinalidade. |
58
- | **percentile** | Percentil — `p50`, `p95`, `p99`, `p99.9`. Latência SEMPRE em percentis. p99 = "99% das requests respondem em ≤ X ms". |
59
- | **mean** | Média — **anti-pattern para latência**. Long tail invisível: mean = 50ms mas p99 = 5s mascara experiência ruim de 1% dos usuários. |
60
- | **long tail** | Cauda longa — eventos lentos que dominam UX percebida mas somem na média. Captados por p99/p99.9 e por histograms com buckets exponenciais. |
61
-
62
- ### Toil
63
-
64
- > Vocabulário do cap 5 (Eliminating Toil). Toil é o trabalho operacional manual repetitivo automatizável que rouba tempo de engineering durável. Definição canônica Google: 6 critérios.
65
-
66
- | EN | PT-BR / Significado |
67
- |---|---|
68
- | **toil** | Trabalho operacional manual repetitivo, automatizável, tático, sem valor durável, escala linear com tamanho do serviço. **Os 6 critérios canônicos**: manual, repetitivo, automatizável, tático (reativo), sem valor durável, escala linear. |
69
- | **toil ≤ 50% rule** | Regra ≤ 50% — SRE não pode gastar mais que 50% do tempo em toil. Restante é engineering durável (automação, redesign, reliability work). |
70
- | **automation** | Automação — eliminação de toil via código que se executa sem humano. Cron, queue, daemon, script idempotente. |
71
- | **overhead** | Overhead administrativo — reuniões, RH, planning, 1:1s. **NÃO é toil** — é não-eliminável. |
72
- | **grungy work** | Trabalho ingrato — refactor, security cleanup, deprecation migration. **NÃO é toil** — tem valor durável (asset permanente após conclusão). |
73
- | **toil tax** | Imposto de toil — custo oculto que cresce linearmente com o produto. Prevenir > remediar — design para minimizar toil é mais barato que automação retroativa. |
74
-
75
- ### Postmortem
76
-
77
- > Vocabulário do cap 15 (Postmortem Culture). Postmortem é blameless por construção — foca em sistema/processo, não pessoas. Princípio: "no postmortem left unreviewed".
78
-
79
- | EN | PT-BR / Significado |
80
- |---|---|
81
- | **postmortem** | Postmortem — documento escrito após incident registrando timeline, causes, ações. Único deliverable obrigatório de toda Severidade SEV1/SEV2. |
82
- | **blameless** | Sem culpa — foca em sistemas/processos, NÃO em pessoas. Psychological safety é pré-requisito para honesty. Pessoas escondem fatos quando culpadas. |
83
- | **root cause** | Causa raiz — condição mais profunda que, removida, previne recorrência. NÃO é "fulano fez deploy errado" — é "ausência de canary release" ou "RPS limit não documentado". |
84
- | **contributing factors** | Fatores contribuintes — condições que amplificaram impacto mas não foram raiz. Ex: "monitoring lag de 4 min" (impacto), não "deploy ruim" (trigger). |
85
- | **trigger** | Gatilho — evento concreto que iniciou a falha. Geralmente deploy, config change, traffic spike, third-party outage. |
86
- | **detection** | Detecção — como o incident foi descoberto. Alerta SLO burn rate? Cliente reportou? Monitoramento interno? Tempo de detecção (gap trigger → detect) é métrica chave. |
87
- | **resolution** | Resolução — passos tomados para recuperar serviço. Ordem cronológica, com horários UTC. |
88
- | **impact** | Impacto — usuários/revenue/reputação afetados. **Sempre quantificar** — "10K usuários afetados", "$50K revenue impact", "3% violação do SLO mensal". |
89
- | **action items** | Ações pós-postmortem — SMART (specific, measurable, assignable, realistic, time-bound) com owner. P0/P1/P2 + due date. |
90
- | **lessons learned** | Lições aprendidas — insights generalizáveis para outros sistemas/times. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? |
91
- | **Wheel of Misfortune** | Roda da Desgraça — exercício de role-play para training. Uma pessoa narra incident histórico, time pratica response. Cap 15 recomenda quartely. |
92
- | **no postmortem left unreviewed** | Princípio canônico — todo postmortem revisado por par sênior antes de arquivar. Sem review = postmortem morre na gaveta. |
93
-
94
- ### PRR — Production Readiness Review
95
-
96
- > Vocabulário do cap 32 (Evolving SRE Engagement Model). PRR é o checklist conduzido por SREs antes de aceitar serviço em produção. 3 modelos: Simple PRR, Early Engagement, Frameworks/Platform.
97
-
98
- | EN | PT-BR / Significado |
99
- |---|---|
100
- | **PRR** | Production Readiness Review — checklist conduzido por SREs antes de aceitar serviço em produção. Output: PRR-REPORT.md scored em 6 axes. |
101
- | **Simple PRR** | Modelo simples — SRE revisa, time dev implementa. Modelo de entrada para serviços simples. |
102
- | **Early Engagement** | Engagement antecipado — SRE participa desde design. Decisões arquiteturais ganham reliability input antes de escrita de código. |
103
- | **Frameworks/SRE Platform** | Frameworks/plataforma SRE — libs/templates que tornam serviços PRR-ready by default. Codifica reliability como dependência, não como checklist. |
104
- | **production-bound** | Destinado a produção — feature/serviço que será exposto a usuários reais. Disparador de PRR obrigatório. |
105
- | **6 axes of PRR** | 6 eixos do PRR — System Architecture, Instrumentation/Metrics/Monitoring, Emergency Response, Capacity Planning, Change Management, Performance. |
106
- | **engagement model** | Modelo de engagement — como SRE se relaciona com time dev (Simple PRR / Early Engagement / Frameworks). Evolui com maturidade do produto. |
107
- | **handoff readiness** | Prontidão para handoff — ponto em que dev pode entregar serviço ao SRE para operação. PRR scored ≥ threshold em todos os 6 axes. |
108
- | **SRE platform** | Plataforma SRE — conjunto de libs+templates+gates que codifica PRR-readiness. v1.10 do kit-mcp aproxima desse modelo (skills + agents + commands + gates). |
109
-
110
- ---
111
-
112
- ## (b) Comandos canônicos
113
-
114
- ### Template canônico de Postmortem (Markdown)
115
-
116
- > Estrutura canônica do cap 15. Use literal este shape para qualquer postmortem do projeto. 9 headers obrigatórios + frontmatter de metadata.
117
-
118
- ```markdown
119
- # Postmortem: <incident-id> — <título-curto>
120
-
121
- **Data do incident:** YYYY-MM-DD
122
- **Autores:** <nomes>
123
- **Status:** Draft | Reviewed | Final
124
- **Severidade:** SEV1 | SEV2 | SEV3
125
-
126
- ## Summary
127
-
128
- 1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido. Linguagem clara — postmortem deve ser legível para alguém que NÃO estava no incident.
129
-
130
- ## Impact
131
-
132
- - Usuários afetados: <número/percentual>
133
- - Duração: HH:MM
134
- - Revenue/SLO impact: <quantificado>
135
- - Serviços downstream impactados: <lista>
136
-
137
- ## Root Causes
138
-
139
- Condição mais profunda que, removida, previne recorrência. NÃO é "deploy do fulano" — é "ausência de canary release" ou "RPS limit não documentado". Pode haver múltiplas root causes.
140
-
141
- ## Trigger
142
-
143
- Evento concreto que iniciou a falha (deploy X, config change Y, traffic spike Z). Distinto de root cause: trigger é o que acendeu a chama, root cause é a casa cheia de gás.
144
-
145
- ## Resolution
146
-
147
- Passos tomados para recuperar serviço (ordem cronológica, com horários UTC). Inclui ações que NÃO funcionaram — para informar próximos incidents.
148
-
149
- ## Detection
150
-
151
- Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento interno?
152
- Tempo de detecção (gap entre trigger e detecção). Se cliente reportou primeiro = falha de monitoring.
153
-
154
- ## Action Items
155
-
156
- | # | Action | Owner | Priority | Due |
157
- |---|--------|-------|----------|-----|
158
- | 1 | <SMART action> | @user | P0/P1/P2 | YYYY-MM-DD |
159
-
160
- ## Lessons Learned
161
-
162
- Insights generalizáveis. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? Aplicável a OUTROS sistemas/times além do afetado.
163
-
164
- ## Timeline (UTC)
165
-
166
- - HH:MM — <evento>
167
- - HH:MM — <evento>
168
- - HH:MM — <resolution>
169
- ```
170
-
171
- ### Checklist canônico de PRR (6 axes)
172
-
173
- > Checklist conduzido pelo SRE antes de aceitar serviço/feature em produção. Cap 32. Cada axis tem 3-5 itens; score 0-2 por item, total normalizado em 0-100% por axis. Threshold default: ≥ 80% em todos para handoff readiness.
174
-
175
- 1. **System Architecture**
176
- - Redundância: serviço tem replicas em ≥ 2 zonas? failover testado?
177
- - Single point of failure: identificado e mitigado? (DB primary, Redis instance, etc.)
178
- - Failure modes mapeados: cada dependência tem comportamento documentado em caso de falha?
179
- - Load balancing strategy: round-robin? least-conn? consistent-hash? Adequada ao perfil?
180
- - Graceful degradation: serviço opera (modo degradado) se dependência crítica falha?
181
-
182
- 2. **Instrumentation, Metrics, Monitoring**
183
- - 4 golden signals presentes: Latency (histogram), Traffic (counter), Errors (counter), Saturation (gauge)?
184
- - SLI/SLO definidos: ≥ 1 SLI canônico (event-based) com SLO target acordado com stakeholders?
185
- - Alertas SLO burn-rate (não threshold): paginam baseados em consumo de error budget, não CPU%?
186
- - Logs estruturados: JSON com `request.id`, `user.id`, `tenant_id`, `duration_ms`, `error.type`?
187
- - Traces propagados: `traceparent` header preservado cross-service via OTel SDK?
188
-
189
- 3. **Emergency Response**
190
- - Runbook existe e foi testado: documento PT-BR/EN para top-N incidents conhecidos?
191
- - On-call rotation definida: escala via PagerDuty/Opsgenie/equivalente, com follow-the-sun se aplicável?
192
- - Page routing: alerta certo chega na pessoa certa em ≤ 5 min?
193
- - Escalation policy: se primary não ack em 10 min, secondary é paged?
194
- - Wheel of Misfortune realizado nos últimos 90d: time praticou response em incident histórico?
195
-
196
- 4. **Capacity Planning**
197
- - Load test feito: serviço sustenta N% acima do peak observado em últimos 30d?
198
- - RPS limit documentado: capacidade conhecida por endpoint, com hard-stop antes do colapso?
199
- - Auto-scaling testado: regra de scale-up/down disparada em condição realista?
200
- - Quota/rate-limit por tenant: prevenção de noisy-neighbor entre clients?
201
- - Headroom ≥ 30%: utilization atual ≤ 70% para absorver spike?
202
-
203
- 5. **Change Management**
204
- - Canary release: novo deploy expõe a 1-10% antes de 100%?
205
- - Feature flags: changes desacopladas de deploy, rollback sem rebuild?
206
- - Rollback automatizado: SLO burn em canary dispara rollback em ≤ 5 min sem humano?
207
- - CI/CD gates obrigatórios: tests + lint + security scan antes de merge?
208
- - Deploy frequency mensurado: cadência conhecida + correlação com incidents?
209
-
210
- 6. **Performance**
211
- - Latência baseline (p50/p95/p99): valor conhecido + alerta em regressão?
212
- - Error budget definido: budget remanescente visível em dashboard, atualizado em real-time?
213
- - Saturation tracked: CPU/memória/conn pool/IO trackeados como gauge?
214
- - Long tail (p99.9) monitored: percentil extremo medido — não basta p95?
215
-
216
- ### Queries SLI standardized (Postgres)
217
-
218
- > Queries canônicas para materializar SLI events em SLO compliance. Use sobre tabela `observability.events` (precedente v1.9 — `obs.events` ou similar). Ajustar nome do schema/tabela ao projeto.
219
-
220
- ```sql
221
- -- PT-BR: SLI event-based — boa request = HTTP 2xx + duration < 300ms
222
- -- Materializa contagem para alimentar burn rate e SLO compliance
223
- select
224
- count(*) filter (where status_code < 400 and duration_ms < 300) as good,
225
- count(*) filter (where status_code >= 400 or duration_ms >= 300) as bad,
226
- count(*) as total
227
- from observability.events
228
- where service = 'orders-api' and timestamp > now() - interval '30 days';
229
-
230
- -- PT-BR: 4 golden signals em 1 query (Latency p50/p95/p99 + Traffic + Errors + Saturation)
231
- -- Use para dashboard real-time de saúde do serviço
232
- select
233
- date_trunc('minute', timestamp) as minute,
234
- count(*) as traffic_per_min,
235
- count(*) filter (where result_success = false) as errors_per_min,
236
- percentile_cont(0.50) within group (order by duration_ms) as latency_p50,
237
- percentile_cont(0.95) within group (order by duration_ms) as latency_p95,
238
- percentile_cont(0.99) within group (order by duration_ms) as latency_p99,
239
- max(connection_pool_used_pct) as saturation_max
240
- from observability.events
241
- where service = 'orders-api' and timestamp > now() - interval '1 hour'
242
- group by minute
243
- order by minute desc;
244
-
245
- -- PT-BR: latência success vs error separadas (cap 6 — não misturar)
246
- -- Falhas rápidas mascaram falhas lentas; sempre splitar por result.success
247
- select
248
- result_success,
249
- percentile_cont(0.95) within group (order by duration_ms) as p95_ms,
250
- percentile_cont(0.99) within group (order by duration_ms) as p99_ms,
251
- count(*) as n
252
- from observability.events
253
- where service = 'orders-api' and timestamp > now() - interval '1 hour'
254
- group by result_success;
255
- ```
256
-
257
- ### MCP tools relevantes
258
-
259
- > Tools do Supabase MCP usados pelos agentes SRE da Phase 37 (golden-signals-instrumenter, toil-auditor, postmortem-writer, prr-conductor) para conduzir PRR / instrumentação / postmortem com dados reais.
260
-
261
- ```text
262
- mcp__supabase__list_tables — schema review (PRR axis "System Architecture")
263
- mcp__supabase__execute_sql — queries SLI / golden signals / análise de incident
264
- mcp__supabase__get_advisors — security/performance lints (PRR axis "Performance")
265
- mcp__supabase__list_edge_functions — inventário de serviços para PRR
266
- mcp__supabase__get_logs — verificação de instrumentação (PRR axis "Instrumentation")
267
- ```
268
-
269
- ---
270
-
271
- ## (c) Patterns canônicos
272
-
273
- ### Pattern: risk continuum em decisão de SLO target
274
-
275
- > Cap 3. SLO target NÃO é meta arbitrária — é escolha explícita no continuum risk × innovation × cost. Custo cresce não-linearmente; usuário satura em torno de 99.95-99.99% para serviços user-facing (smartphone/ISP/Wi-Fi diluem qualquer melhoria além).
276
-
277
- | Target | Tolerância 30d | Quando usar | Custo relativo |
278
- |---|---|---|---|
279
- | 99% | 7.2 h | Tier free, beta features, internal tools | 1× |
280
- | 99.5% | 3.6 h | Tier free de produção | 2× |
281
- | 99.9% | 43.2 min | Tier paid, paths críticos default | 5× |
282
- | 99.95% | 21.6 min | Tier enterprise / mission-critical | 10× |
283
- | 99.99% | 4.3 min | Apenas se justificado por user perception (raro) | 50×+ |
284
- | 99.999% | 26 s | NUNCA para serviço user-facing (smartphone dilui) | 100×+ |
285
-
286
- **Princípio Google SRE:** "as reliable as needs to be, no more". Sobrar reliability é tão danoso quanto faltar — custa innovation velocity, e o usuário não percebe melhoria além de ~99.95%-99.99%.
287
-
288
- **Como aplicar:**
289
- 1. Identifique o link mais fraco entre serviço e usuário final (ex: Wi-Fi 99% disponível dilui qualquer SLO 99.999%)
290
- 2. Escolha SLO target ≤ 99.95% por default — só suba para 99.99%+ com justificativa documentada
291
- 3. Documente o tradeoff explícito: "este SLO em troca de N% velocity gasto em reliability work"
292
- 4. Revise a cada milestone — risk appetite evolui com produto
293
-
294
- ### Pattern: 4 golden signals em código (OTel SDK)
295
-
296
- > Cap 6. Os 4 sinais mínimos universais aplicados em uma Edge Function/handler via OTel SDK. Latência separada por `result` (success vs error); errors counter por `error.type` (categoria, não message); saturation gauge é resource-specific (geralmente conn pool).
297
-
298
- ```ts
299
- // PT-BR: instrumentação canônica de Edge Function — 4 golden signals
300
- import { trace, metrics } from '@opentelemetry/api'
301
-
302
- const tracer = trace.getTracer('orders-service')
303
- const meter = metrics.getMeter('orders-service')
304
-
305
- // PT-BR: 1. LATENCY — histogram com bucketing exponencial
306
- const latencyHistogram = meter.createHistogram('http_request_duration_ms', {
307
- description: 'Request latency in ms',
308
- unit: 'ms',
309
- // PT-BR: buckets exponenciais cobrem long tail (1ms → 30s)
310
- advice: { explicitBucketBoundaries: [1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 30000] }
311
- })
312
-
313
- // PT-BR: 2. TRAFFIC — counter de requests recebidos
314
- const trafficCounter = meter.createCounter('http_requests_total', {
315
- description: 'Total HTTP requests received'
316
- })
317
-
318
- // PT-BR: 3. ERRORS — counter por error.type (alta cardinalidade controlada)
319
- const errorsCounter = meter.createCounter('http_errors_total', {
320
- description: 'Total HTTP errors by error.type'
321
- })
322
-
323
- // PT-BR: 4. SATURATION — gauge do recurso mais escasso (connection pool em DB)
324
- const saturationGauge = meter.createObservableGauge('db_connection_pool_used_pct', {
325
- description: 'DB connection pool utilization %',
326
- unit: '%'
327
- })
328
-
329
- export async function placeOrder(req: Request) {
330
- const startMs = performance.now()
331
- trafficCounter.add(1, { endpoint: '/api/v1/orders', method: 'POST' })
332
-
333
- return tracer.startActiveSpan('place_order', async (span) => {
334
- try {
335
- const order = await db.insertOrder(req.body)
336
- // PT-BR: latência APENAS de success — separar de error
337
- const durationMs = performance.now() - startMs
338
- latencyHistogram.record(durationMs, { result: 'success', endpoint: '/api/v1/orders' })
339
- return order
340
- } catch (e) {
341
- const durationMs = performance.now() - startMs
342
- // PT-BR: latência de erro — separada
343
- latencyHistogram.record(durationMs, { result: 'error', endpoint: '/api/v1/orders' })
344
- // PT-BR: counter por error.type — categoria, não message
345
- errorsCounter.add(1, { error_type: classify(e), endpoint: '/api/v1/orders' })
346
- throw e
347
- } finally {
348
- span.end()
349
- }
350
- })
351
- }
352
- ```
353
-
354
- **Atributos canônicos das métricas:**
355
- - `endpoint`: path normalizado (`/api/v1/orders`, NÃO `/api/v1/orders/abc-123`)
356
- - `method`: HTTP method (`GET`, `POST`)
357
- - `result`: `success` ou `error` — para latência APENAS
358
- - `error_type`: categoria fechada (`timeout`, `validation`, `auth`, `rate_limit`, `db`, `internal`)
359
-
360
- ### Pattern: classificação de toil (decisão tree)
361
-
362
- > Cap 5. Antes de classificar trabalho como "toil", aplicar os 6 critérios canônicos Google. Trabalho repetitivo NÃO é automaticamente toil — overhead administrativo e grungy work são repetitivos mas têm naturezas diferentes.
363
-
364
- ```text
365
- Tarefa repetitiva detectada → aplicar 6 critérios canônicos:
366
-
367
- 1. Manual? (humano executa cada vez) ────┐
368
- 2. Repetitiva? (já fiz isso 3+ vezes) │
369
- 3. Automatizável? (script/cron resolve) ├── Se TODOS sim → TOIL
370
- 4. Tática? (reage a evento, não planeja) │ → automatizar / eliminar
371
- 5. Sem valor durável? (não cria asset permanente) │ → contar em ≤ 50% rule
372
- 6. Escala linear? (mais users = mais trabalho) ─┘
373
-
374
- Se NÃO for toil mas repetitivo, classificar:
375
- - OVERHEAD (reuniões, RH) → não-eliminável, não conta em ≤ 50%
376
- - GRUNGY WORK (refactor, sec cleanup) → necessário, valor durável → projeto
377
- ```
378
-
379
- **Regra ≤ 50%:** SRE não pode gastar mais que 50% do tempo em toil. Se passa de 50%, é gatilho para:
380
- 1. Pedir mais headcount (toil cresce com produto, não scale linearmente com time)
381
- 2. Engajar projeto de automation com prioridade P0
382
- 3. Renegociar com produto sobre features que adicionam toil
383
-
384
- ### Pattern: postmortem timeline em UTC
385
-
386
- > Cap 15. Timeline padronizado em UTC com horários `HH:MM` em ordem cronológica. Inclui ações que NÃO funcionaram (informa próximos incidents) e gap entre trigger e detection (métrica chave de monitoring quality).
387
-
388
- ```text
389
- ## Timeline (UTC)
390
-
391
- - 14:23 — Deploy v2.3.0 do orders-service mergeado em main
392
- - 14:27 — CI completa, deploy automatizado para prod (canary 10%)
393
- - 14:31 — Alerta SLO burn rate dispara (page on-call)
394
- - 14:33 — On-call ack page; abre incident Slack channel #inc-2026-05-06-01
395
- - 14:38 — Hipótese inicial: deploy v2.3.0 (correlação temporal)
396
- - 14:42 — Rollback canary para 0%; SLO burn cessa
397
- - 14:50 — Confirma: deploy v2.3.0 introduziu N+1 query em /api/v1/orders
398
- - 15:02 — Fix em PR #1234; CI verde em 14 min
399
- - 15:18 — Deploy do fix; canary 10% → 100% sem regressão
400
- - 15:25 — Incident resolvido; SLO compliance retorna a 99.92%
401
- ```
402
-
403
- **Insights derivados desse timeline:**
404
- - **Detection lag:** trigger 14:23 → detect 14:31 = 8 min. Alvo: ≤ 5 min. Action item: alerta de canary regression em 1 min.
405
- - **Resolution time:** 14:31 → 15:25 = 54 min (MTTR). Action item: rollback automatizado em < 5 min via SLO burn detection.
406
- - **Root cause:** "deploy introduziu N+1" é trigger; root cause é "ausência de query plan diff em CI".
407
-
408
- ---
409
-
410
- ## (d) Anti-patterns explícitos
411
-
412
- > Comportamentos comuns que parecem corretos mas são ativamente prejudiciais. Cada um inclui ANTI-PATTERN (comportamento concreto), POR QUÊ É RUIM (consequência sistêmica) e CERTO (substituto canônico). Cap 3, 4, 5, 6, 12, 15.
413
-
414
- ### Alert fatigue
415
-
416
- ```text
417
- ANTI-PATTERN: paginar em todos os sintomas (CPU > 80%, mem < 10%, threads > N,
418
- latência > X em qualquer endpoint, log com "ERROR", etc.).
419
- Mais alertas = "mais cobertura", supostamente.
420
-
421
- POR QUÊ É RUIM: noise mascara real signals; pessoas começam a ignorar pages
422
- ("é o cron job de novo"); psychological habituation;
423
- próximo SEV1 chega no meio do ruído e é perdido.
424
-
425
- CERTO: SLO-based alerting (event burn rate) — alerta só quando customer
426
- impact é mensurável. Deletar alertas threshold sem ação clara.
427
- Regra: cada page deve ter runbook concreto OU ser deletada.
428
- ```
429
-
430
- ### Hero culture
431
-
432
- ```text
433
- ANTI-PATTERN: celebrar quem fica acordado 36h em incident; bonus para
434
- "incident champion"; on-call que "resolve tudo sozinho".
435
- Cultura que premia heroísmo individual.
436
-
437
- POR QUÊ É RUIM: comportamento perverso (esperar pelo herói em vez de
438
- investir em automation); evita investimento sistêmico;
439
- burn-out garantido em 6-12 meses; conhecimento concentrado
440
- em 1 pessoa = bus factor 1.
441
-
442
- CERTO: blameless postmortem foca em sistema; action items > "fulano salvou
443
- o dia"; ≤ 50% toil rule (se 1 pessoa está apagando incêndio, é
444
- sinal de subinvestimento em automation, não falta de heróis).
445
- ```
446
-
447
- ### SLO 99.99%+ default
448
-
449
- ```text
450
- ANTI-PATTERN: definir SLO 99.99% sem justificativa; "queremos ser melhores
451
- que a concorrência"; copiar SLO de cloud provider sem
452
- adaptar ao serviço.
453
-
454
- POR QUÊ É RUIM: tolerância 30d = 4.3 min, sem tempo de reagir;
455
- pressões para "esconder" outages para preservar number;
456
- budget esgota antes do alert ser útil;
457
- custo de innovation velocity 50× maior que SLO 99.9%.
458
-
459
- CERTO: target ≤ 99.95% para SLO real; 99.99%+ apenas com justificativa
460
- explícita de user perception (raro — geralmente smartphone/Wi-Fi
461
- já dilui qualquer ganho marginal); use métricas/dashboards
462
- informativos para tracking de excellence sem comprometer.
463
- ```
464
-
465
- ### Fixed-window error budget
466
-
467
- ```text
468
- ANTI-PATTERN: error budget reseta dia 1 do mês; "tivemos outage dia 31,
469
- reseta amanhã"; calendar-aligned budget tracking.
470
-
471
- POR QUÊ É RUIM: cliente NÃO esquece outage por causa de calendar reset;
472
- pressão para postpone fixes para depois do reset
473
- (behavioral hazard); dificulta planejamento de capacity;
474
- amplifica gaming do sistema.
475
-
476
- CERTO: sliding window 30d. Outage dia 31 fica no budget até dia 30 do
477
- mês seguinte (sai gradualmente). Trata-se de função contínua,
478
- não step function. Mais alinhado com user perception real.
479
- ```
480
-
481
- ### Blame culture (vs blameless)
482
-
483
- ```text
484
- ANTI-PATTERN: postmortem nomeia "fulano fez deploy errado"; root cause
485
- identificada como "human error"; punição/PIP após incident;
486
- postmortem como ferramenta de accountability individual.
487
-
488
- POR QUÊ É RUIM: engineers escondem incidents próximos ao limite;
489
- psychological safety colapsa; replicação garantida
490
- (sistema não muda — só a pessoa); informação importante
491
- some (quem viveu não fala, quem fala não viveu).
492
-
493
- CERTO: postmortem foca em sistema/processo (ausência de canary,
494
- ausência de rollback automatizado, runbook desatualizado);
495
- pessoas são parte do sistema, NÃO o root cause; revisão por par
496
- sênior antes de arquivar; "no postmortem left unreviewed".
497
- ```
498
-
499
- ### Mean-only latency
500
-
501
- ```text
502
- ANTI-PATTERN: alertar/reportar mean latency; dashboard com "average
503
- response time"; SLA com "média mensal de latência";
504
- p99 considerado "muito ruidoso" e descartado.
505
-
506
- POR QUÊ É RUIM: mean = 50ms, mas p99 = 5000ms (long tail invisível);
507
- UX dominada por p99 (1% dos usuários têm experiência
508
- terrível, mas média esconde); mean é métrica enganosa
509
- em qualquer distribuição com cauda longa.
510
-
511
- CERTO: SEMPRE percentis (p50, p95, p99, p99.9); histogram com bucketing
512
- exponencial (não gauge); latência success vs error separadas
513
- (cap 6 — falhas rápidas mascaram falhas lentas); alertas
514
- baseados em p99 ou p99.9, nunca mean.
515
- ```
516
-
517
- ### Monitoring causes não symptoms
518
-
519
- ```text
520
- ANTI-PATTERN: alertar em "CPU > 80%", "memória < 10%", "threads > N",
521
- "disk I/O > X"; mistura "what" (sintoma observável pelo
522
- cliente) com "why" (causa raiz interna).
523
-
524
- POR QUÊ É RUIM: false positives (cron job legítimo dispara CPU alta;
525
- page no domingo de manhã sem causa real);
526
- false negatives (sistema lento sem CPU alta — ex: lock
527
- contention, GC pause, network latency);
528
- normalização do desvio (cap 12 do livro Observability
529
- Engineering — Challenger disaster framing);
530
- acoplamento alert × infra (cada novo serviço = N alertas).
531
-
532
- CERTO: alertar APENAS em SLO burn rate (event-based, customer-impacting).
533
- Decouple "what" de "why" — alert diz que tem dor (SLO burn 4×),
534
- debug descobre porquê (CPU? memória? lock? deploy?). Métricas de
535
- saturação são gauge informativo no dashboard, não trigger de page.
536
- ```
537
-
538
- ---
539
-
540
- ## (f) Vocabulário v1.11 — Cascading Failures (cap 22)
541
-
542
- > Vocabulário do cap 22 (Addressing Cascading Failures). Cascading failure é falha que se amplifica via loops de feedback — primeiro nó cai, traffic flui para outros, eles também caem, etc. Prevenção custa muito menos que recuperação.
543
-
544
- | EN | PT-BR / Significado |
545
- |---|---|
546
- | **cascading failure** | Falha em cascata — failure que se amplifica via loops de feedback. Triggers comuns: server overload, resource exhaustion (CPU/mem/FDs/threads), service unavailability gera retry storm. |
547
- | **retry storm** | Tempestade de retries — clientes retentam após failure simultaneamente, multiplicando carga e prolongando outage. Prevenção: jitter + retry budget + deadline propagation. |
548
- | **thundering herd** | Manada trovejante — N clientes acordam ao mesmo tempo após recovery e batem no servidor recém-recuperado, derrubando-o de novo. Prevenção: jitter em wake-up, slow-start. |
549
- | **load shedding** | Descarte de carga — server intencionalmente rejeita requests quando overloaded (HTTP 503 + Retry-After) em vez de aceitar e cair. Preserva capacidade para subset de tráfego. |
550
- | **graceful degradation** | Degradação graciosa — modo reduzido sob carga (e.g., desligar features não-críticas, retornar cached/stale data, reduzir precision). Preferível a falha total. |
551
- | **circuit breaker** | Disjuntor — pattern: após N failures consecutivas, "abre o circuito" e falha rápido (sem chamar dep) por window T. Protege caller e dep. Estados: closed/open/half-open. |
552
- | **deadline propagation** | Propagação de deadline — request chega com TTL X; cada hop downstream subtrai tempo gasto até aqui e aborta se restante ≤ 0. Evita work zumbi após client desistir. |
553
- | **kill switch** | Chave-mata — flag que desabilita feature inteira via 1 comando (config update / feature flag). Útil em incident pra parar bleed de feature problemática. |
554
- | **throttle** | Estrangular — limitar rate de operações (per-user, per-tenant, global). Diferente de load shedding: throttle é per-policy contínuo; shed é reactive a saturation. |
555
- | **queue management** | Gestão de fila — política sobre o que fazer quando queue lota: drop oldest (LIFO), drop newest (FIFO), drop random, drop by priority. Default `drop oldest` evita starvation. |
556
- | **resource exhaustion** | Esgotamento de recurso — CPU 100%, memory OOM, file descriptors esgotados, threads bloqueadas, conn pool empty. Cada um é trigger comum de cascade. |
557
- | **server overload** | Sobrecarga de servidor — load > capacity. Lab leve sintoma: latency p99 sobe 10×, then errors, then crashes. Detect via Saturation (cap 6). |
558
- | **slow start** | Início lento — após recovery, aceita tráfego gradual (10% → 25% → 50% → 100%) em vez de full blast. Permite caches aquecerem, conn pools abrirem. |
559
- | **degraded mode** | Modo degradado — fallback path quando dep crítica está down (cache stale, default values, simplified algorithm). Distinct de graceful degradation: degraded mode é design-time, not load-driven. |
560
-
561
- ## (g) Vocabulário v1.11 — Release Engineering (cap 8)
562
-
563
- > Vocabulário do cap 8 (Release Engineering). Release engineering é disciplina específica que existe em paralelo a SRE e dev — cuida da pipeline de "código no merge → bits em prod". Foco: reproducibilidade, hermeticidade, policy enforcement.
564
-
565
- | EN | PT-BR / Significado |
566
- |---|---|
567
- | **hermetic build** | Build hermético — build que produz output bit-idêntico em qualquer máquina, qualquer momento, dado mesmo input. Sem network, sem timestamps, sem env vars não-pinadas. |
568
- | **reproducible build** | Build reprodutível — sinônimo de hermetic OU subset (apenas determinismo de output, sem requirement de network isolation). |
569
- | **release pipeline** | Pipeline de release — sequência canônica: source → build → test → package → deploy. Cada estágio com inputs/outputs versionados. |
570
- | **deployment policy** | Política de deploy — regras sobre QUEM pode deployar, QUANDO (freeze windows), ONDE (canary → 100%), COMO (signed commits, required reviewers, CI gates verde). |
571
- | **self-service deployment** | Deploy self-service — engenheiros deployam sozinhos via UI/CLI sem precisar pedir SRE. Pré-requisito: policies enforced em ferramenta, não via aprovação manual. |
572
- | **build provenance** | Proveniência de build — metadata sobre COMO o artefato foi construído (commit SHA, builder ID, build env, deps versions, signature). SLSA framework moderniza. |
573
- | **configuration management** | Gestão de config — config separada de código (12-factor); config versionada, auditável, rollback-able. ConfigMaps, env vars, feature flags. |
574
- | **branching strategy** | Estratégia de branching — Trunk-based (preferred) vs Gitflow. Trunk: main sempre deployable; feature flags para work in progress. Gitflow: branches longos, harder to rollback. |
575
- | **release engineering invariant** | Invariante de release engineering — propriedade que NUNCA é violada, mesmo sob pressão. Examples: "build sem network", "deploy só com CI verde", "rollback < 5min em qualquer release". |
576
- | **continuous build** | Build contínuo — toda commit dispara build automático. Quebra detectada em minutos vs dias. |
577
- | **continuous test** | Teste contínuo — toda commit dispara suite. Failure visível antes de merge (na PR). |
578
- | **continuous deployment** | Deploy contínuo — todo commit que passa CI vai pra prod automaticamente. Distinct de continuous delivery (deploy disponível mas não auto). |
579
- | **canary release** | Release canário — rollout gradual: 1% → 10% → 50% → 100% com SLO check em cada estágio. Limita blast radius de bug. |
580
- | **rollback** | Rollback — reverter para release anterior. Tempo target: < 5 min em qualquer release. Pré-requisito: artefato anterior preservado, schema migrations forward-only OR reversible. |
581
- | **forward-fix** | Forward fix — em vez de rollback, fazer hotfix forward. Preferível quando rollback custaria perda de dado (e.g., schema migration que adicionou coluna NOT NULL). |
582
- | **lockfile** | Arquivo de trava — `package-lock.json`/`pnpm-lock.yaml`/`deno.lock`/`Cargo.lock`/`go.sum`. Pin de TODAS deps transitivas a versões específicas. **Sem lockfile = não-reprodutível.** |
583
- | **frozen-lockfile** | Lockfile congelado — modo CI (`npm ci`, `pnpm install --frozen-lockfile`, `cargo install --locked`) que falha se lockfile não-sincronizado. Garante deterministic install. |
584
- | **config drift** | Drift de config — config em prod divergiu de config em git. Causa: changes ad-hoc via UI/CLI sem PR. Solução: GitOps (config = git, prod = mirror). |
585
- | **no-rollback culture** | Cultura sem rollback — equipe que sempre forward-fixes, nunca rollbacks. Sintoma: rollback "nunca foi testado", quando precisa não funciona. Anti-pattern. |
586
- | **build cache** | Cache de build — output de etapas determinísticas reusado entre runs. Acelera 10-100×. Requirement: hermeticidade (input idêntico → output idêntico → cacheável). |
587
-
588
- ## (h) Anti-patterns v1.11 (cap 22 + 8)
589
-
590
- > Comportamentos comuns que ativamente causam cascade ou release fragility. Format: ANTI-PATTERN / POR QUÊ É RUIM / CERTO.
591
-
592
- ### Retry sem jitter (retry storm trigger)
593
-
594
- ```text
595
- ANTI-PATTERN: client falha → retry após 1s; 1000 clients fazem isso
596
- simultaneamente; servidor recebe 1000 retries no mesmo segundo
597
- após cada delay window.
598
-
599
- POR QUÊ É RUIM: thundering herd. Server cai, recupera, cai de novo no
600
- wake-up coordenado. Outage prolonga indefinidamente.
601
-
602
- CERTO: full jitter — `delayMs = random(0, base * 2^attempt)`. Spread aleatório
603
- distribui carga ao longo da janela. Retry budget global limita N total
604
- de retries por segundo (se exceder = circuit breaker abre).
605
- ```
606
-
607
- ### Retry sem deadline (cascade amplification)
608
-
609
- ```text
610
- ANTI-PATTERN: request chega no nó A com timeout 30s; A chama B com retry 3×
611
- (timeout 30s cada). B chama C com retry 3× (timeout 30s).
612
- Worst-case path: 30s × 3 × 3 = 270s, mas client já desistiu em 30s.
613
-
614
- POR QUÊ É RUIM: 240s de work zumbi após client gone. Recursos consumidos
615
- inutilmente. Cascade amplifica — 1 retry de A vira 9 calls
616
- pra C.
617
-
618
- CERTO: deadline propagation. A recebe TTL=30s. Antes de chamar B, calcula
619
- remaining = 30s - elapsed. Passa remaining como deadline a B (header
620
- grpc-timeout, AbortSignal.timeout). B faz mesmo com C. Quando deadline
621
- chega a 0, falha rápido sem retry. Retry budget também limita amplificação.
622
- ```
623
-
624
- ### Deploy não-hermético (config drift entre environments)
625
-
626
- ```text
627
- ANTI-PATTERN: build em CI usa `npm install` (não `npm ci`). Local dev usa
628
- versão diferente de deps porque resolveu o range diferente.
629
- Deploy passa em CI, falha em prod com NPE em dep transitiva.
630
-
631
- POR QUÊ É RUIM: bug não-reproduzível. Reviewer aprova "no meu ambiente
632
- roda". Prod cai com bug que CI não detectou. Forensics
633
- impossível porque "que versão de X estava em prod naquele
634
- momento?" não tem resposta.
635
-
636
- CERTO: lockfile commitado + `npm ci` (ou `pnpm install --frozen-lockfile`,
637
- `pip install --require-hashes`). Build hermético — input idêntico
638
- (commit SHA + lockfile) → output bit-idêntico. Toda deploy tem
639
- artefato reproducible.
640
- ```
641
-
642
- ### No-rollback culture (acumulação de risk)
643
-
644
- ```text
645
- ANTI-PATTERN: equipe sempre forward-fixes. "Rollback é complicado".
646
- Última vez que rolledback foi há 18 meses. Não está
647
- testado.
648
-
649
- POR QUÊ É RUIM: quando incident grave ocorre, rollback é a opção certa
650
- — mas não funciona porque nunca foi exercitado. Forward-fix
651
- em meio a outage adiciona complexidade. MTTR cresce.
652
-
653
- CERTO: rollback testado em DR exercise mensal. Cada release verifica
654
- que rollback funciona em < 5 min. Schema migrations sempre
655
- reversible (ADD col nullable, never DROP). Artefato N-1 sempre
656
- preservado e re-deployable.
657
- ```
658
-
659
- ### Release pipeline manual (toil + risk)
660
-
661
- ```text
662
- ANTI-PATTERN: deploy = "engineer X faz SSH em prod, copia artefato,
663
- kill+restart". Documentado em runbook de 30 passos.
664
-
665
- POR QUÊ É RUIM: toil (cap 5 — manual + repetitivo + automatizável).
666
- Drift entre runbook e realidade. Erros humanos.
667
- Sem audit trail (quem deployou o quê quando).
668
-
669
- CERTO: deploy = git push tag (ou merge em main). CI/CD pipeline cuida
670
- de build hermético + tests + canary + rollback config. Self-service
671
- deployment com policies enforced. Audit trail automático via CI logs.
672
- ```
673
-
674
- ## (e) Cross-references
675
-
676
- Skills que consultam este glossário:
677
-
678
- - `kit/skills/sre-risk-management/SKILL.md`
679
- - `kit/skills/four-golden-signals/SKILL.md`
680
- - `kit/skills/eliminating-toil/SKILL.md`
681
- - `kit/skills/blameless-postmortems/SKILL.md`
682
- - `kit/skills/production-readiness-review/SKILL.md`
683
- - `kit/skills/cascading-failures/SKILL.md` (v1.11)
684
- - `kit/skills/load-shedding-graceful-degradation/SKILL.md` (v1.11)
685
- - `kit/skills/retry-strategies/SKILL.md` (v1.11)
686
- - `kit/skills/hermetic-builds/SKILL.md` (v1.11)
687
- - `kit/skills/release-engineering/SKILL.md` (v1.11)
688
-
689
- Agentes que consultam este glossário (Phase 37):
690
-
691
- - `kit/agents/golden-signals-instrumenter.md`
692
- - `kit/agents/toil-auditor.md`
693
- - `kit/agents/postmortem-writer.md`
694
- - `kit/agents/prr-conductor.md`
695
-
696
- Comandos que consultam este glossário (Phase 38):
697
-
698
- - `kit/commands/golden-signals.md`
699
- - `kit/commands/auditar-toil.md`
700
- - `kit/commands/postmortem.md`
701
- - `kit/commands/prr.md`
702
- - `kit/commands/risk-budget.md`
703
- - `kit/commands/sre.md` (orquestrador)
704
-
705
- Skills v1.9 que cross-referenciam este glossário (Phase 39 patches):
706
-
707
- - `kit/skills/event-based-slos/SKILL.md` (ganha bloco "Risk continuum")
708
-
709
- ---
710
-
711
- *Glossário criado em 2026-05-07 (Phase 36 do milestone v1.10 SRE Engagement).*
712
- *Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016, ISBN 978-1-491-92912-4). Caps prioritários: 3 (Embracing Risk), 4 (SLOs), 5 (Eliminating Toil), 6 (Monitoring Distributed Systems / Four Golden Signals), 15 (Postmortem Culture), 32 (Evolving SRE Engagement Model / PRR).*
1
+ # Glossário SRE — Termos, Comandos e Patterns Canônicos
2
+
3
+ > Arquivo de referência compartilhado pelas skills `sre-*`, `four-golden-signals`, `eliminating-toil`, `blameless-postmortems`, `production-readiness-review`. **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas skills via Markdown link relativo.
4
+
5
+ > **Material-fonte:** *Site Reliability Engineering: How Google Runs Production Systems* — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016). ISBN 978-1-491-92912-4.
6
+
7
+ ---
8
+
9
+ ## (a) Termos PT-BR ↔ EN
10
+
11
+ ### Risk e Reliability
12
+
13
+ > Vocabulário do cap 3 (Embracing Risk). Reliability é tratada como continuum, não absoluto. Custo de "9s" cresce não-linearmente; user perception satura em torno de 99.95%-99.99% para serviços user-facing.
14
+
15
+ | EN | PT-BR / Significado |
16
+ |---|---|
17
+ | **risk continuum** | Continuum de risco — 100% de disponibilidade NÃO é o objetivo; o custo cresce não-linearmente com cada "9". Usuário em smartphone com 99% de disponibilidade não distingue 99.99% de 99.999% no serviço. |
18
+ | **as reliable as needs to be, no more** | "Tão confiável quanto precisa ser, não mais" — princípio Google SRE. Sobrar reliability é tão danoso quanto faltar (custa innovation velocity). |
19
+ | **99.99% wisdom** | Sabedoria do 99.99% — além desse target o usuário final não percebe melhoria, porque o link "fraco" entre ele e o serviço (smartphone, ISP, Wi-Fi) já dilui qualquer ganho marginal. |
20
+ | **availability target** | Alvo de disponibilidade — escolha explícita no balanço risk × innovation × cost. NÃO é meta arbitrária do CTO. |
21
+ | **error budget** | Orçamento de erro — `(1 - SLO_target) × total_events`. Fração tolerável de eventos "bad" antes de violar o SLO. Quando esgota, freeze releases. |
22
+ | **risk × innovation tradeoff** | Tradeoff risco × inovação — quanto mais inovação, mais risco. O budget é o mediador EXPLÍCITO desse tradeoff, alinhando dev e SRE. |
23
+ | **MTTR** | Mean Time To Recovery — tempo médio entre detecção do incident e recovery completo. Métrica chave do OMM Capacidade 1 (Resilience). |
24
+ | **MTBF** | Mean Time Between Failures — tempo médio entre falhas consecutivas. Mede estabilidade do serviço em prod. |
25
+ | **MTTF** | Mean Time To Failure — tempo médio até primeira falha (sem recovery). Comum em hardware, raro em serviços (que sempre recovery). |
26
+
27
+ ### SLI/SLO/SLA
28
+
29
+ > Vocabulário do cap 4 (Service Level Objectives). SLI é a métrica; SLO é a meta interna; SLA é o contrato externo. SLA geralmente é menos rígido que SLO (gap = margem de segurança).
30
+
31
+ | EN | PT-BR / Significado |
32
+ |---|---|
33
+ | **SLI** | Service-Level Indicator — métrica que classifica eventos como "good" ou "bad". Sempre **event-based** (não time-based), com numerador/denominador definidos em events. |
34
+ | **SLO** | Service-Level Objective — meta interna de SLI (ex: 99.9% das requests good em janela 30d sliding). Drives engineering priorities. |
35
+ | **SLA** | Service-Level Agreement — acordo externo com cliente. Geralmente menos rígido que SLO (gap = margem). Violá-lo gera consequências contratuais (refund, credit). |
36
+ | **availability** | Disponibilidade — fração de tempo OU eventos em estado utilizável. Definição event-based é canônica (cap 4). |
37
+ | **latency** | Latência — tempo de resposta. **Sempre em percentis** (p50, p95, p99, p99.9), nunca em mean. |
38
+ | **throughput** | Vazão — requests/segundo OU eventos/minuto. Mede demanda atendida. |
39
+ | **correctness** | Correção — resposta certa para input dado. Distinto de availability (sistema "up" pode estar retornando dado errado). |
40
+ | **durability** | Durabilidade — dado armazenado sobrevive ao tempo. Storage SLO. |
41
+ | **time-to-first-byte** (TTFB) | Tempo até o primeiro byte da resposta — métrica de UX importante para serviços HTTP. |
42
+
43
+ ### Four Golden Signals
44
+
45
+ > Vocabulário do cap 6 (Monitoring Distributed Systems). Latency + Traffic + Errors + Saturation são os 4 sinais mínimos universais para qualquer serviço user-facing. Originados de SREs operando os serviços do Google.
46
+
47
+ | EN | PT-BR / Significado |
48
+ |---|---|
49
+ | **Latency** | Latência — tempo de resposta. **Latência de success vs failure deve ser medida SEPARADAMENTE** — falhas rápidas mascaram falhas lentas e vice-versa. Sempre em percentis. |
50
+ | **Traffic** | Tráfego — volume de demanda no sistema. HTTP requests/s, mensagens/s, bytes/s. Counter monotônico. |
51
+ | **Errors** | Erros — taxa de requests falhas. **Explícitas** (5xx), **implícitas** (200 com resposta errada), **políticas** (200 mas latência > SLO). Counter por `error.type`. |
52
+ | **Saturation** | Saturação — "quão cheio" o serviço está. Medida do recurso MAIS LIMITADO (CPU, memória, conn pool, IO). Gauge resource-specific. |
53
+ | **golden signals** | Sinais dourados — conjunto Latency+Traffic+Errors+Saturation. Universal para qualquer serviço user-facing. Se você só pode medir 4 coisas, meça essas. |
54
+ | **black-box monitoring** | Monitoramento caixa-preta — testar o serviço como usuário externo. HTTP probes, synthetic transactions. Detecta sintoma do POV do cliente. |
55
+ | **white-box monitoring** | Monitoramento caixa-branca — introspecção interna. Logs, métricas, traces. Detecta causa, não apenas sintoma. |
56
+ | **histogram** | Histograma — distribuição com buckets. **Latência sempre em histogram, nunca gauge** — gauge perde long tail. |
57
+ | **exponential bucketing** | Bucketing exponencial — buckets crescem em razão `1.5×` ou `2×` (ex: `1, 2, 5, 10, 25, 50, 100, 250...`). Captura long tail sem explodir cardinalidade. |
58
+ | **percentile** | Percentil — `p50`, `p95`, `p99`, `p99.9`. Latência SEMPRE em percentis. p99 = "99% das requests respondem em ≤ X ms". |
59
+ | **mean** | Média — **anti-pattern para latência**. Long tail invisível: mean = 50ms mas p99 = 5s mascara experiência ruim de 1% dos usuários. |
60
+ | **long tail** | Cauda longa — eventos lentos que dominam UX percebida mas somem na média. Captados por p99/p99.9 e por histograms com buckets exponenciais. |
61
+
62
+ ### Toil
63
+
64
+ > Vocabulário do cap 5 (Eliminating Toil). Toil é o trabalho operacional manual repetitivo automatizável que rouba tempo de engineering durável. Definição canônica Google: 6 critérios.
65
+
66
+ | EN | PT-BR / Significado |
67
+ |---|---|
68
+ | **toil** | Trabalho operacional manual repetitivo, automatizável, tático, sem valor durável, escala linear com tamanho do serviço. **Os 6 critérios canônicos**: manual, repetitivo, automatizável, tático (reativo), sem valor durável, escala linear. |
69
+ | **toil ≤ 50% rule** | Regra ≤ 50% — SRE não pode gastar mais que 50% do tempo em toil. Restante é engineering durável (automação, redesign, reliability work). |
70
+ | **automation** | Automação — eliminação de toil via código que se executa sem humano. Cron, queue, daemon, script idempotente. |
71
+ | **overhead** | Overhead administrativo — reuniões, RH, planning, 1:1s. **NÃO é toil** — é não-eliminável. |
72
+ | **grungy work** | Trabalho ingrato — refactor, security cleanup, deprecation migration. **NÃO é toil** — tem valor durável (asset permanente após conclusão). |
73
+ | **toil tax** | Imposto de toil — custo oculto que cresce linearmente com o produto. Prevenir > remediar — design para minimizar toil é mais barato que automação retroativa. |
74
+
75
+ ### Postmortem
76
+
77
+ > Vocabulário do cap 15 (Postmortem Culture). Postmortem é blameless por construção — foca em sistema/processo, não pessoas. Princípio: "no postmortem left unreviewed".
78
+
79
+ | EN | PT-BR / Significado |
80
+ |---|---|
81
+ | **postmortem** | Postmortem — documento escrito após incident registrando timeline, causes, ações. Único deliverable obrigatório de toda Severidade SEV1/SEV2. |
82
+ | **blameless** | Sem culpa — foca em sistemas/processos, NÃO em pessoas. Psychological safety é pré-requisito para honesty. Pessoas escondem fatos quando culpadas. |
83
+ | **root cause** | Causa raiz — condição mais profunda que, removida, previne recorrência. NÃO é "fulano fez deploy errado" — é "ausência de canary release" ou "RPS limit não documentado". |
84
+ | **contributing factors** | Fatores contribuintes — condições que amplificaram impacto mas não foram raiz. Ex: "monitoring lag de 4 min" (impacto), não "deploy ruim" (trigger). |
85
+ | **trigger** | Gatilho — evento concreto que iniciou a falha. Geralmente deploy, config change, traffic spike, third-party outage. |
86
+ | **detection** | Detecção — como o incident foi descoberto. Alerta SLO burn rate? Cliente reportou? Monitoramento interno? Tempo de detecção (gap trigger → detect) é métrica chave. |
87
+ | **resolution** | Resolução — passos tomados para recuperar serviço. Ordem cronológica, com horários UTC. |
88
+ | **impact** | Impacto — usuários/revenue/reputação afetados. **Sempre quantificar** — "10K usuários afetados", "$50K revenue impact", "3% violação do SLO mensal". |
89
+ | **action items** | Ações pós-postmortem — SMART (specific, measurable, assignable, realistic, time-bound) com owner. P0/P1/P2 + due date. |
90
+ | **lessons learned** | Lições aprendidas — insights generalizáveis para outros sistemas/times. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? |
91
+ | **Wheel of Misfortune** | Roda da Desgraça — exercício de role-play para training. Uma pessoa narra incident histórico, time pratica response. Cap 15 recomenda quartely. |
92
+ | **no postmortem left unreviewed** | Princípio canônico — todo postmortem revisado por par sênior antes de arquivar. Sem review = postmortem morre na gaveta. |
93
+
94
+ ### PRR — Production Readiness Review
95
+
96
+ > Vocabulário do cap 32 (Evolving SRE Engagement Model). PRR é o checklist conduzido por SREs antes de aceitar serviço em produção. 3 modelos: Simple PRR, Early Engagement, Frameworks/Platform.
97
+
98
+ | EN | PT-BR / Significado |
99
+ |---|---|
100
+ | **PRR** | Production Readiness Review — checklist conduzido por SREs antes de aceitar serviço em produção. Output: PRR-REPORT.md scored em 6 axes. |
101
+ | **Simple PRR** | Modelo simples — SRE revisa, time dev implementa. Modelo de entrada para serviços simples. |
102
+ | **Early Engagement** | Engagement antecipado — SRE participa desde design. Decisões arquiteturais ganham reliability input antes de escrita de código. |
103
+ | **Frameworks/SRE Platform** | Frameworks/plataforma SRE — libs/templates que tornam serviços PRR-ready by default. Codifica reliability como dependência, não como checklist. |
104
+ | **production-bound** | Destinado a produção — feature/serviço que será exposto a usuários reais. Disparador de PRR obrigatório. |
105
+ | **6 axes of PRR** | 6 eixos do PRR — System Architecture, Instrumentation/Metrics/Monitoring, Emergency Response, Capacity Planning, Change Management, Performance. |
106
+ | **engagement model** | Modelo de engagement — como SRE se relaciona com time dev (Simple PRR / Early Engagement / Frameworks). Evolui com maturidade do produto. |
107
+ | **handoff readiness** | Prontidão para handoff — ponto em que dev pode entregar serviço ao SRE para operação. PRR scored ≥ threshold em todos os 6 axes. |
108
+ | **SRE platform** | Plataforma SRE — conjunto de libs+templates+gates que codifica PRR-readiness. v1.10 do kit-mcp aproxima desse modelo (skills + agents + commands + gates). |
109
+
110
+ ---
111
+
112
+ ## (b) Comandos canônicos
113
+
114
+ ### Template canônico de Postmortem (Markdown)
115
+
116
+ > Estrutura canônica do cap 15. Use literal este shape para qualquer postmortem do projeto. 9 headers obrigatórios + frontmatter de metadata.
117
+
118
+ ```markdown
119
+ # Postmortem: <incident-id> — <título-curto>
120
+
121
+ **Data do incident:** YYYY-MM-DD
122
+ **Autores:** <nomes>
123
+ **Status:** Draft | Reviewed | Final
124
+ **Severidade:** SEV1 | SEV2 | SEV3
125
+
126
+ ## Summary
127
+
128
+ 1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido. Linguagem clara — postmortem deve ser legível para alguém que NÃO estava no incident.
129
+
130
+ ## Impact
131
+
132
+ - Usuários afetados: <número/percentual>
133
+ - Duração: HH:MM
134
+ - Revenue/SLO impact: <quantificado>
135
+ - Serviços downstream impactados: <lista>
136
+
137
+ ## Root Causes
138
+
139
+ Condição mais profunda que, removida, previne recorrência. NÃO é "deploy do fulano" — é "ausência de canary release" ou "RPS limit não documentado". Pode haver múltiplas root causes.
140
+
141
+ ## Trigger
142
+
143
+ Evento concreto que iniciou a falha (deploy X, config change Y, traffic spike Z). Distinto de root cause: trigger é o que acendeu a chama, root cause é a casa cheia de gás.
144
+
145
+ ## Resolution
146
+
147
+ Passos tomados para recuperar serviço (ordem cronológica, com horários UTC). Inclui ações que NÃO funcionaram — para informar próximos incidents.
148
+
149
+ ## Detection
150
+
151
+ Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento interno?
152
+ Tempo de detecção (gap entre trigger e detecção). Se cliente reportou primeiro = falha de monitoring.
153
+
154
+ ## Action Items
155
+
156
+ | # | Action | Owner | Priority | Due |
157
+ |---|--------|-------|----------|-----|
158
+ | 1 | <SMART action> | @user | P0/P1/P2 | YYYY-MM-DD |
159
+
160
+ ## Lessons Learned
161
+
162
+ Insights generalizáveis. O que estamos fazendo BEM (reforçar)? O que faltou (corrigir)? Aplicável a OUTROS sistemas/times além do afetado.
163
+
164
+ ## Timeline (UTC)
165
+
166
+ - HH:MM — <evento>
167
+ - HH:MM — <evento>
168
+ - HH:MM — <resolution>
169
+ ```
170
+
171
+ ### Checklist canônico de PRR (6 axes)
172
+
173
+ > Checklist conduzido pelo SRE antes de aceitar serviço/feature em produção. Cap 32. Cada axis tem 3-5 itens; score 0-2 por item, total normalizado em 0-100% por axis. Threshold default: ≥ 80% em todos para handoff readiness.
174
+
175
+ 1. **System Architecture**
176
+ - Redundância: serviço tem replicas em ≥ 2 zonas? failover testado?
177
+ - Single point of failure: identificado e mitigado? (DB primary, Redis instance, etc.)
178
+ - Failure modes mapeados: cada dependência tem comportamento documentado em caso de falha?
179
+ - Load balancing strategy: round-robin? least-conn? consistent-hash? Adequada ao perfil?
180
+ - Graceful degradation: serviço opera (modo degradado) se dependência crítica falha?
181
+
182
+ 2. **Instrumentation, Metrics, Monitoring**
183
+ - 4 golden signals presentes: Latency (histogram), Traffic (counter), Errors (counter), Saturation (gauge)?
184
+ - SLI/SLO definidos: ≥ 1 SLI canônico (event-based) com SLO target acordado com stakeholders?
185
+ - Alertas SLO burn-rate (não threshold): paginam baseados em consumo de error budget, não CPU%?
186
+ - Logs estruturados: JSON com `request.id`, `user.id`, `tenant_id`, `duration_ms`, `error.type`?
187
+ - Traces propagados: `traceparent` header preservado cross-service via OTel SDK?
188
+
189
+ 3. **Emergency Response**
190
+ - Runbook existe e foi testado: documento PT-BR/EN para top-N incidents conhecidos?
191
+ - On-call rotation definida: escala via PagerDuty/Opsgenie/equivalente, com follow-the-sun se aplicável?
192
+ - Page routing: alerta certo chega na pessoa certa em ≤ 5 min?
193
+ - Escalation policy: se primary não ack em 10 min, secondary é paged?
194
+ - Wheel of Misfortune realizado nos últimos 90d: time praticou response em incident histórico?
195
+
196
+ 4. **Capacity Planning**
197
+ - Load test feito: serviço sustenta N% acima do peak observado em últimos 30d?
198
+ - RPS limit documentado: capacidade conhecida por endpoint, com hard-stop antes do colapso?
199
+ - Auto-scaling testado: regra de scale-up/down disparada em condição realista?
200
+ - Quota/rate-limit por tenant: prevenção de noisy-neighbor entre clients?
201
+ - Headroom ≥ 30%: utilization atual ≤ 70% para absorver spike?
202
+
203
+ 5. **Change Management**
204
+ - Canary release: novo deploy expõe a 1-10% antes de 100%?
205
+ - Feature flags: changes desacopladas de deploy, rollback sem rebuild?
206
+ - Rollback automatizado: SLO burn em canary dispara rollback em ≤ 5 min sem humano?
207
+ - CI/CD gates obrigatórios: tests + lint + security scan antes de merge?
208
+ - Deploy frequency mensurado: cadência conhecida + correlação com incidents?
209
+
210
+ 6. **Performance**
211
+ - Latência baseline (p50/p95/p99): valor conhecido + alerta em regressão?
212
+ - Error budget definido: budget remanescente visível em dashboard, atualizado em real-time?
213
+ - Saturation tracked: CPU/memória/conn pool/IO trackeados como gauge?
214
+ - Long tail (p99.9) monitored: percentil extremo medido — não basta p95?
215
+
216
+ ### Queries SLI standardized (Postgres)
217
+
218
+ > Queries canônicas para materializar SLI events em SLO compliance. Use sobre tabela `observability.events` (precedente v1.9 — `obs.events` ou similar). Ajustar nome do schema/tabela ao projeto.
219
+
220
+ ```sql
221
+ -- PT-BR: SLI event-based — boa request = HTTP 2xx + duration < 300ms
222
+ -- Materializa contagem para alimentar burn rate e SLO compliance
223
+ select
224
+ count(*) filter (where status_code < 400 and duration_ms < 300) as good,
225
+ count(*) filter (where status_code >= 400 or duration_ms >= 300) as bad,
226
+ count(*) as total
227
+ from observability.events
228
+ where service = 'orders-api' and timestamp > now() - interval '30 days';
229
+
230
+ -- PT-BR: 4 golden signals em 1 query (Latency p50/p95/p99 + Traffic + Errors + Saturation)
231
+ -- Use para dashboard real-time de saúde do serviço
232
+ select
233
+ date_trunc('minute', timestamp) as minute,
234
+ count(*) as traffic_per_min,
235
+ count(*) filter (where result_success = false) as errors_per_min,
236
+ percentile_cont(0.50) within group (order by duration_ms) as latency_p50,
237
+ percentile_cont(0.95) within group (order by duration_ms) as latency_p95,
238
+ percentile_cont(0.99) within group (order by duration_ms) as latency_p99,
239
+ max(connection_pool_used_pct) as saturation_max
240
+ from observability.events
241
+ where service = 'orders-api' and timestamp > now() - interval '1 hour'
242
+ group by minute
243
+ order by minute desc;
244
+
245
+ -- PT-BR: latência success vs error separadas (cap 6 — não misturar)
246
+ -- Falhas rápidas mascaram falhas lentas; sempre splitar por result.success
247
+ select
248
+ result_success,
249
+ percentile_cont(0.95) within group (order by duration_ms) as p95_ms,
250
+ percentile_cont(0.99) within group (order by duration_ms) as p99_ms,
251
+ count(*) as n
252
+ from observability.events
253
+ where service = 'orders-api' and timestamp > now() - interval '1 hour'
254
+ group by result_success;
255
+ ```
256
+
257
+ ### MCP tools relevantes
258
+
259
+ > Tools do Supabase MCP usados pelos agentes SRE da Phase 37 (golden-signals-instrumenter, toil-auditor, postmortem-writer, prr-conductor) para conduzir PRR / instrumentação / postmortem com dados reais.
260
+
261
+ ```text
262
+ mcp__supabase__list_tables — schema review (PRR axis "System Architecture")
263
+ mcp__supabase__execute_sql — queries SLI / golden signals / análise de incident
264
+ mcp__supabase__get_advisors — security/performance lints (PRR axis "Performance")
265
+ mcp__supabase__list_edge_functions — inventário de serviços para PRR
266
+ mcp__supabase__get_logs — verificação de instrumentação (PRR axis "Instrumentation")
267
+ ```
268
+
269
+ ---
270
+
271
+ ## (c) Patterns canônicos
272
+
273
+ ### Pattern: risk continuum em decisão de SLO target
274
+
275
+ > Cap 3. SLO target NÃO é meta arbitrária — é escolha explícita no continuum risk × innovation × cost. Custo cresce não-linearmente; usuário satura em torno de 99.95-99.99% para serviços user-facing (smartphone/ISP/Wi-Fi diluem qualquer melhoria além).
276
+
277
+ | Target | Tolerância 30d | Quando usar | Custo relativo |
278
+ |---|---|---|---|
279
+ | 99% | 7.2 h | Tier free, beta features, internal tools | 1× |
280
+ | 99.5% | 3.6 h | Tier free de produção | 2× |
281
+ | 99.9% | 43.2 min | Tier paid, paths críticos default | 5× |
282
+ | 99.95% | 21.6 min | Tier enterprise / mission-critical | 10× |
283
+ | 99.99% | 4.3 min | Apenas se justificado por user perception (raro) | 50×+ |
284
+ | 99.999% | 26 s | NUNCA para serviço user-facing (smartphone dilui) | 100×+ |
285
+
286
+ **Princípio Google SRE:** "as reliable as needs to be, no more". Sobrar reliability é tão danoso quanto faltar — custa innovation velocity, e o usuário não percebe melhoria além de ~99.95%-99.99%.
287
+
288
+ **Como aplicar:**
289
+ 1. Identifique o link mais fraco entre serviço e usuário final (ex: Wi-Fi 99% disponível dilui qualquer SLO 99.999%)
290
+ 2. Escolha SLO target ≤ 99.95% por default — só suba para 99.99%+ com justificativa documentada
291
+ 3. Documente o tradeoff explícito: "este SLO em troca de N% velocity gasto em reliability work"
292
+ 4. Revise a cada milestone — risk appetite evolui com produto
293
+
294
+ ### Pattern: 4 golden signals em código (OTel SDK)
295
+
296
+ > Cap 6. Os 4 sinais mínimos universais aplicados em uma Edge Function/handler via OTel SDK. Latência separada por `result` (success vs error); errors counter por `error.type` (categoria, não message); saturation gauge é resource-specific (geralmente conn pool).
297
+
298
+ ```ts
299
+ // PT-BR: instrumentação canônica de Edge Function — 4 golden signals
300
+ import { trace, metrics } from '@opentelemetry/api'
301
+
302
+ const tracer = trace.getTracer('orders-service')
303
+ const meter = metrics.getMeter('orders-service')
304
+
305
+ // PT-BR: 1. LATENCY — histogram com bucketing exponencial
306
+ const latencyHistogram = meter.createHistogram('http_request_duration_ms', {
307
+ description: 'Request latency in ms',
308
+ unit: 'ms',
309
+ // PT-BR: buckets exponenciais cobrem long tail (1ms → 30s)
310
+ advice: { explicitBucketBoundaries: [1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 30000] }
311
+ })
312
+
313
+ // PT-BR: 2. TRAFFIC — counter de requests recebidos
314
+ const trafficCounter = meter.createCounter('http_requests_total', {
315
+ description: 'Total HTTP requests received'
316
+ })
317
+
318
+ // PT-BR: 3. ERRORS — counter por error.type (alta cardinalidade controlada)
319
+ const errorsCounter = meter.createCounter('http_errors_total', {
320
+ description: 'Total HTTP errors by error.type'
321
+ })
322
+
323
+ // PT-BR: 4. SATURATION — gauge do recurso mais escasso (connection pool em DB)
324
+ const saturationGauge = meter.createObservableGauge('db_connection_pool_used_pct', {
325
+ description: 'DB connection pool utilization %',
326
+ unit: '%'
327
+ })
328
+
329
+ export async function placeOrder(req: Request) {
330
+ const startMs = performance.now()
331
+ trafficCounter.add(1, { endpoint: '/api/v1/orders', method: 'POST' })
332
+
333
+ return tracer.startActiveSpan('place_order', async (span) => {
334
+ try {
335
+ const order = await db.insertOrder(req.body)
336
+ // PT-BR: latência APENAS de success — separar de error
337
+ const durationMs = performance.now() - startMs
338
+ latencyHistogram.record(durationMs, { result: 'success', endpoint: '/api/v1/orders' })
339
+ return order
340
+ } catch (e) {
341
+ const durationMs = performance.now() - startMs
342
+ // PT-BR: latência de erro — separada
343
+ latencyHistogram.record(durationMs, { result: 'error', endpoint: '/api/v1/orders' })
344
+ // PT-BR: counter por error.type — categoria, não message
345
+ errorsCounter.add(1, { error_type: classify(e), endpoint: '/api/v1/orders' })
346
+ throw e
347
+ } finally {
348
+ span.end()
349
+ }
350
+ })
351
+ }
352
+ ```
353
+
354
+ **Atributos canônicos das métricas:**
355
+ - `endpoint`: path normalizado (`/api/v1/orders`, NÃO `/api/v1/orders/abc-123`)
356
+ - `method`: HTTP method (`GET`, `POST`)
357
+ - `result`: `success` ou `error` — para latência APENAS
358
+ - `error_type`: categoria fechada (`timeout`, `validation`, `auth`, `rate_limit`, `db`, `internal`)
359
+
360
+ ### Pattern: classificação de toil (decisão tree)
361
+
362
+ > Cap 5. Antes de classificar trabalho como "toil", aplicar os 6 critérios canônicos Google. Trabalho repetitivo NÃO é automaticamente toil — overhead administrativo e grungy work são repetitivos mas têm naturezas diferentes.
363
+
364
+ ```text
365
+ Tarefa repetitiva detectada → aplicar 6 critérios canônicos:
366
+
367
+ 1. Manual? (humano executa cada vez) ────┐
368
+ 2. Repetitiva? (já fiz isso 3+ vezes) │
369
+ 3. Automatizável? (script/cron resolve) ├── Se TODOS sim → TOIL
370
+ 4. Tática? (reage a evento, não planeja) │ → automatizar / eliminar
371
+ 5. Sem valor durável? (não cria asset permanente) │ → contar em ≤ 50% rule
372
+ 6. Escala linear? (mais users = mais trabalho) ─┘
373
+
374
+ Se NÃO for toil mas repetitivo, classificar:
375
+ - OVERHEAD (reuniões, RH) → não-eliminável, não conta em ≤ 50%
376
+ - GRUNGY WORK (refactor, sec cleanup) → necessário, valor durável → projeto
377
+ ```
378
+
379
+ **Regra ≤ 50%:** SRE não pode gastar mais que 50% do tempo em toil. Se passa de 50%, é gatilho para:
380
+ 1. Pedir mais headcount (toil cresce com produto, não scale linearmente com time)
381
+ 2. Engajar projeto de automation com prioridade P0
382
+ 3. Renegociar com produto sobre features que adicionam toil
383
+
384
+ ### Pattern: postmortem timeline em UTC
385
+
386
+ > Cap 15. Timeline padronizado em UTC com horários `HH:MM` em ordem cronológica. Inclui ações que NÃO funcionaram (informa próximos incidents) e gap entre trigger e detection (métrica chave de monitoring quality).
387
+
388
+ ```text
389
+ ## Timeline (UTC)
390
+
391
+ - 14:23 — Deploy v2.3.0 do orders-service mergeado em main
392
+ - 14:27 — CI completa, deploy automatizado para prod (canary 10%)
393
+ - 14:31 — Alerta SLO burn rate dispara (page on-call)
394
+ - 14:33 — On-call ack page; abre incident Slack channel #inc-2026-05-06-01
395
+ - 14:38 — Hipótese inicial: deploy v2.3.0 (correlação temporal)
396
+ - 14:42 — Rollback canary para 0%; SLO burn cessa
397
+ - 14:50 — Confirma: deploy v2.3.0 introduziu N+1 query em /api/v1/orders
398
+ - 15:02 — Fix em PR #1234; CI verde em 14 min
399
+ - 15:18 — Deploy do fix; canary 10% → 100% sem regressão
400
+ - 15:25 — Incident resolvido; SLO compliance retorna a 99.92%
401
+ ```
402
+
403
+ **Insights derivados desse timeline:**
404
+ - **Detection lag:** trigger 14:23 → detect 14:31 = 8 min. Alvo: ≤ 5 min. Action item: alerta de canary regression em 1 min.
405
+ - **Resolution time:** 14:31 → 15:25 = 54 min (MTTR). Action item: rollback automatizado em < 5 min via SLO burn detection.
406
+ - **Root cause:** "deploy introduziu N+1" é trigger; root cause é "ausência de query plan diff em CI".
407
+
408
+ ---
409
+
410
+ ## (d) Anti-patterns explícitos
411
+
412
+ > Comportamentos comuns que parecem corretos mas são ativamente prejudiciais. Cada um inclui ANTI-PATTERN (comportamento concreto), POR QUÊ É RUIM (consequência sistêmica) e CERTO (substituto canônico). Cap 3, 4, 5, 6, 12, 15.
413
+
414
+ ### Alert fatigue
415
+
416
+ ```text
417
+ ANTI-PATTERN: paginar em todos os sintomas (CPU > 80%, mem < 10%, threads > N,
418
+ latência > X em qualquer endpoint, log com "ERROR", etc.).
419
+ Mais alertas = "mais cobertura", supostamente.
420
+
421
+ POR QUÊ É RUIM: noise mascara real signals; pessoas começam a ignorar pages
422
+ ("é o cron job de novo"); psychological habituation;
423
+ próximo SEV1 chega no meio do ruído e é perdido.
424
+
425
+ CERTO: SLO-based alerting (event burn rate) — alerta só quando customer
426
+ impact é mensurável. Deletar alertas threshold sem ação clara.
427
+ Regra: cada page deve ter runbook concreto OU ser deletada.
428
+ ```
429
+
430
+ ### Hero culture
431
+
432
+ ```text
433
+ ANTI-PATTERN: celebrar quem fica acordado 36h em incident; bonus para
434
+ "incident champion"; on-call que "resolve tudo sozinho".
435
+ Cultura que premia heroísmo individual.
436
+
437
+ POR QUÊ É RUIM: comportamento perverso (esperar pelo herói em vez de
438
+ investir em automation); evita investimento sistêmico;
439
+ burn-out garantido em 6-12 meses; conhecimento concentrado
440
+ em 1 pessoa = bus factor 1.
441
+
442
+ CERTO: blameless postmortem foca em sistema; action items > "fulano salvou
443
+ o dia"; ≤ 50% toil rule (se 1 pessoa está apagando incêndio, é
444
+ sinal de subinvestimento em automation, não falta de heróis).
445
+ ```
446
+
447
+ ### SLO 99.99%+ default
448
+
449
+ ```text
450
+ ANTI-PATTERN: definir SLO 99.99% sem justificativa; "queremos ser melhores
451
+ que a concorrência"; copiar SLO de cloud provider sem
452
+ adaptar ao serviço.
453
+
454
+ POR QUÊ É RUIM: tolerância 30d = 4.3 min, sem tempo de reagir;
455
+ pressões para "esconder" outages para preservar number;
456
+ budget esgota antes do alert ser útil;
457
+ custo de innovation velocity 50× maior que SLO 99.9%.
458
+
459
+ CERTO: target ≤ 99.95% para SLO real; 99.99%+ apenas com justificativa
460
+ explícita de user perception (raro — geralmente smartphone/Wi-Fi
461
+ já dilui qualquer ganho marginal); use métricas/dashboards
462
+ informativos para tracking de excellence sem comprometer.
463
+ ```
464
+
465
+ ### Fixed-window error budget
466
+
467
+ ```text
468
+ ANTI-PATTERN: error budget reseta dia 1 do mês; "tivemos outage dia 31,
469
+ reseta amanhã"; calendar-aligned budget tracking.
470
+
471
+ POR QUÊ É RUIM: cliente NÃO esquece outage por causa de calendar reset;
472
+ pressão para postpone fixes para depois do reset
473
+ (behavioral hazard); dificulta planejamento de capacity;
474
+ amplifica gaming do sistema.
475
+
476
+ CERTO: sliding window 30d. Outage dia 31 fica no budget até dia 30 do
477
+ mês seguinte (sai gradualmente). Trata-se de função contínua,
478
+ não step function. Mais alinhado com user perception real.
479
+ ```
480
+
481
+ ### Blame culture (vs blameless)
482
+
483
+ ```text
484
+ ANTI-PATTERN: postmortem nomeia "fulano fez deploy errado"; root cause
485
+ identificada como "human error"; punição/PIP após incident;
486
+ postmortem como ferramenta de accountability individual.
487
+
488
+ POR QUÊ É RUIM: engineers escondem incidents próximos ao limite;
489
+ psychological safety colapsa; replicação garantida
490
+ (sistema não muda — só a pessoa); informação importante
491
+ some (quem viveu não fala, quem fala não viveu).
492
+
493
+ CERTO: postmortem foca em sistema/processo (ausência de canary,
494
+ ausência de rollback automatizado, runbook desatualizado);
495
+ pessoas são parte do sistema, NÃO o root cause; revisão por par
496
+ sênior antes de arquivar; "no postmortem left unreviewed".
497
+ ```
498
+
499
+ ### Mean-only latency
500
+
501
+ ```text
502
+ ANTI-PATTERN: alertar/reportar mean latency; dashboard com "average
503
+ response time"; SLA com "média mensal de latência";
504
+ p99 considerado "muito ruidoso" e descartado.
505
+
506
+ POR QUÊ É RUIM: mean = 50ms, mas p99 = 5000ms (long tail invisível);
507
+ UX dominada por p99 (1% dos usuários têm experiência
508
+ terrível, mas média esconde); mean é métrica enganosa
509
+ em qualquer distribuição com cauda longa.
510
+
511
+ CERTO: SEMPRE percentis (p50, p95, p99, p99.9); histogram com bucketing
512
+ exponencial (não gauge); latência success vs error separadas
513
+ (cap 6 — falhas rápidas mascaram falhas lentas); alertas
514
+ baseados em p99 ou p99.9, nunca mean.
515
+ ```
516
+
517
+ ### Monitoring causes não symptoms
518
+
519
+ ```text
520
+ ANTI-PATTERN: alertar em "CPU > 80%", "memória < 10%", "threads > N",
521
+ "disk I/O > X"; mistura "what" (sintoma observável pelo
522
+ cliente) com "why" (causa raiz interna).
523
+
524
+ POR QUÊ É RUIM: false positives (cron job legítimo dispara CPU alta;
525
+ page no domingo de manhã sem causa real);
526
+ false negatives (sistema lento sem CPU alta — ex: lock
527
+ contention, GC pause, network latency);
528
+ normalização do desvio (cap 12 do livro Observability
529
+ Engineering — Challenger disaster framing);
530
+ acoplamento alert × infra (cada novo serviço = N alertas).
531
+
532
+ CERTO: alertar APENAS em SLO burn rate (event-based, customer-impacting).
533
+ Decouple "what" de "why" — alert diz que tem dor (SLO burn 4×),
534
+ debug descobre porquê (CPU? memória? lock? deploy?). Métricas de
535
+ saturação são gauge informativo no dashboard, não trigger de page.
536
+ ```
537
+
538
+ ---
539
+
540
+ ## (f) Vocabulário v1.11 — Cascading Failures (cap 22)
541
+
542
+ > Vocabulário do cap 22 (Addressing Cascading Failures). Cascading failure é falha que se amplifica via loops de feedback — primeiro nó cai, traffic flui para outros, eles também caem, etc. Prevenção custa muito menos que recuperação.
543
+
544
+ | EN | PT-BR / Significado |
545
+ |---|---|
546
+ | **cascading failure** | Falha em cascata — failure que se amplifica via loops de feedback. Triggers comuns: server overload, resource exhaustion (CPU/mem/FDs/threads), service unavailability gera retry storm. |
547
+ | **retry storm** | Tempestade de retries — clientes retentam após failure simultaneamente, multiplicando carga e prolongando outage. Prevenção: jitter + retry budget + deadline propagation. |
548
+ | **thundering herd** | Manada trovejante — N clientes acordam ao mesmo tempo após recovery e batem no servidor recém-recuperado, derrubando-o de novo. Prevenção: jitter em wake-up, slow-start. |
549
+ | **load shedding** | Descarte de carga — server intencionalmente rejeita requests quando overloaded (HTTP 503 + Retry-After) em vez de aceitar e cair. Preserva capacidade para subset de tráfego. |
550
+ | **graceful degradation** | Degradação graciosa — modo reduzido sob carga (e.g., desligar features não-críticas, retornar cached/stale data, reduzir precision). Preferível a falha total. |
551
+ | **circuit breaker** | Disjuntor — pattern: após N failures consecutivas, "abre o circuito" e falha rápido (sem chamar dep) por window T. Protege caller e dep. Estados: closed/open/half-open. |
552
+ | **deadline propagation** | Propagação de deadline — request chega com TTL X; cada hop downstream subtrai tempo gasto até aqui e aborta se restante ≤ 0. Evita work zumbi após client desistir. |
553
+ | **kill switch** | Chave-mata — flag que desabilita feature inteira via 1 comando (config update / feature flag). Útil em incident pra parar bleed de feature problemática. |
554
+ | **throttle** | Estrangular — limitar rate de operações (per-user, per-tenant, global). Diferente de load shedding: throttle é per-policy contínuo; shed é reactive a saturation. |
555
+ | **queue management** | Gestão de fila — política sobre o que fazer quando queue lota: drop oldest (LIFO), drop newest (FIFO), drop random, drop by priority. Default `drop oldest` evita starvation. |
556
+ | **resource exhaustion** | Esgotamento de recurso — CPU 100%, memory OOM, file descriptors esgotados, threads bloqueadas, conn pool empty. Cada um é trigger comum de cascade. |
557
+ | **server overload** | Sobrecarga de servidor — load > capacity. Lab leve sintoma: latency p99 sobe 10×, then errors, then crashes. Detect via Saturation (cap 6). |
558
+ | **slow start** | Início lento — após recovery, aceita tráfego gradual (10% → 25% → 50% → 100%) em vez de full blast. Permite caches aquecerem, conn pools abrirem. |
559
+ | **degraded mode** | Modo degradado — fallback path quando dep crítica está down (cache stale, default values, simplified algorithm). Distinct de graceful degradation: degraded mode é design-time, not load-driven. |
560
+
561
+ ## (g) Vocabulário v1.11 — Release Engineering (cap 8)
562
+
563
+ > Vocabulário do cap 8 (Release Engineering). Release engineering é disciplina específica que existe em paralelo a SRE e dev — cuida da pipeline de "código no merge → bits em prod". Foco: reproducibilidade, hermeticidade, policy enforcement.
564
+
565
+ | EN | PT-BR / Significado |
566
+ |---|---|
567
+ | **hermetic build** | Build hermético — build que produz output bit-idêntico em qualquer máquina, qualquer momento, dado mesmo input. Sem network, sem timestamps, sem env vars não-pinadas. |
568
+ | **reproducible build** | Build reprodutível — sinônimo de hermetic OU subset (apenas determinismo de output, sem requirement de network isolation). |
569
+ | **release pipeline** | Pipeline de release — sequência canônica: source → build → test → package → deploy. Cada estágio com inputs/outputs versionados. |
570
+ | **deployment policy** | Política de deploy — regras sobre QUEM pode deployar, QUANDO (freeze windows), ONDE (canary → 100%), COMO (signed commits, required reviewers, CI gates verde). |
571
+ | **self-service deployment** | Deploy self-service — engenheiros deployam sozinhos via UI/CLI sem precisar pedir SRE. Pré-requisito: policies enforced em ferramenta, não via aprovação manual. |
572
+ | **build provenance** | Proveniência de build — metadata sobre COMO o artefato foi construído (commit SHA, builder ID, build env, deps versions, signature). SLSA framework moderniza. |
573
+ | **configuration management** | Gestão de config — config separada de código (12-factor); config versionada, auditável, rollback-able. ConfigMaps, env vars, feature flags. |
574
+ | **branching strategy** | Estratégia de branching — Trunk-based (preferred) vs Gitflow. Trunk: main sempre deployable; feature flags para work in progress. Gitflow: branches longos, harder to rollback. |
575
+ | **release engineering invariant** | Invariante de release engineering — propriedade que NUNCA é violada, mesmo sob pressão. Examples: "build sem network", "deploy só com CI verde", "rollback < 5min em qualquer release". |
576
+ | **continuous build** | Build contínuo — toda commit dispara build automático. Quebra detectada em minutos vs dias. |
577
+ | **continuous test** | Teste contínuo — toda commit dispara suite. Failure visível antes de merge (na PR). |
578
+ | **continuous deployment** | Deploy contínuo — todo commit que passa CI vai pra prod automaticamente. Distinct de continuous delivery (deploy disponível mas não auto). |
579
+ | **canary release** | Release canário — rollout gradual: 1% → 10% → 50% → 100% com SLO check em cada estágio. Limita blast radius de bug. |
580
+ | **rollback** | Rollback — reverter para release anterior. Tempo target: < 5 min em qualquer release. Pré-requisito: artefato anterior preservado, schema migrations forward-only OR reversible. |
581
+ | **forward-fix** | Forward fix — em vez de rollback, fazer hotfix forward. Preferível quando rollback custaria perda de dado (e.g., schema migration que adicionou coluna NOT NULL). |
582
+ | **lockfile** | Arquivo de trava — `package-lock.json`/`pnpm-lock.yaml`/`deno.lock`/`Cargo.lock`/`go.sum`. Pin de TODAS deps transitivas a versões específicas. **Sem lockfile = não-reprodutível.** |
583
+ | **frozen-lockfile** | Lockfile congelado — modo CI (`npm ci`, `pnpm install --frozen-lockfile`, `cargo install --locked`) que falha se lockfile não-sincronizado. Garante deterministic install. |
584
+ | **config drift** | Drift de config — config em prod divergiu de config em git. Causa: changes ad-hoc via UI/CLI sem PR. Solução: GitOps (config = git, prod = mirror). |
585
+ | **no-rollback culture** | Cultura sem rollback — equipe que sempre forward-fixes, nunca rollbacks. Sintoma: rollback "nunca foi testado", quando precisa não funciona. Anti-pattern. |
586
+ | **build cache** | Cache de build — output de etapas determinísticas reusado entre runs. Acelera 10-100×. Requirement: hermeticidade (input idêntico → output idêntico → cacheável). |
587
+
588
+ ## (h) Anti-patterns v1.11 (cap 22 + 8)
589
+
590
+ > Comportamentos comuns que ativamente causam cascade ou release fragility. Format: ANTI-PATTERN / POR QUÊ É RUIM / CERTO.
591
+
592
+ ### Retry sem jitter (retry storm trigger)
593
+
594
+ ```text
595
+ ANTI-PATTERN: client falha → retry após 1s; 1000 clients fazem isso
596
+ simultaneamente; servidor recebe 1000 retries no mesmo segundo
597
+ após cada delay window.
598
+
599
+ POR QUÊ É RUIM: thundering herd. Server cai, recupera, cai de novo no
600
+ wake-up coordenado. Outage prolonga indefinidamente.
601
+
602
+ CERTO: full jitter — `delayMs = random(0, base * 2^attempt)`. Spread aleatório
603
+ distribui carga ao longo da janela. Retry budget global limita N total
604
+ de retries por segundo (se exceder = circuit breaker abre).
605
+ ```
606
+
607
+ ### Retry sem deadline (cascade amplification)
608
+
609
+ ```text
610
+ ANTI-PATTERN: request chega no nó A com timeout 30s; A chama B com retry 3×
611
+ (timeout 30s cada). B chama C com retry 3× (timeout 30s).
612
+ Worst-case path: 30s × 3 × 3 = 270s, mas client já desistiu em 30s.
613
+
614
+ POR QUÊ É RUIM: 240s de work zumbi após client gone. Recursos consumidos
615
+ inutilmente. Cascade amplifica — 1 retry de A vira 9 calls
616
+ pra C.
617
+
618
+ CERTO: deadline propagation. A recebe TTL=30s. Antes de chamar B, calcula
619
+ remaining = 30s - elapsed. Passa remaining como deadline a B (header
620
+ grpc-timeout, AbortSignal.timeout). B faz mesmo com C. Quando deadline
621
+ chega a 0, falha rápido sem retry. Retry budget também limita amplificação.
622
+ ```
623
+
624
+ ### Deploy não-hermético (config drift entre environments)
625
+
626
+ ```text
627
+ ANTI-PATTERN: build em CI usa `npm install` (não `npm ci`). Local dev usa
628
+ versão diferente de deps porque resolveu o range diferente.
629
+ Deploy passa em CI, falha em prod com NPE em dep transitiva.
630
+
631
+ POR QUÊ É RUIM: bug não-reproduzível. Reviewer aprova "no meu ambiente
632
+ roda". Prod cai com bug que CI não detectou. Forensics
633
+ impossível porque "que versão de X estava em prod naquele
634
+ momento?" não tem resposta.
635
+
636
+ CERTO: lockfile commitado + `npm ci` (ou `pnpm install --frozen-lockfile`,
637
+ `pip install --require-hashes`). Build hermético — input idêntico
638
+ (commit SHA + lockfile) → output bit-idêntico. Toda deploy tem
639
+ artefato reproducible.
640
+ ```
641
+
642
+ ### No-rollback culture (acumulação de risk)
643
+
644
+ ```text
645
+ ANTI-PATTERN: equipe sempre forward-fixes. "Rollback é complicado".
646
+ Última vez que rolledback foi há 18 meses. Não está
647
+ testado.
648
+
649
+ POR QUÊ É RUIM: quando incident grave ocorre, rollback é a opção certa
650
+ — mas não funciona porque nunca foi exercitado. Forward-fix
651
+ em meio a outage adiciona complexidade. MTTR cresce.
652
+
653
+ CERTO: rollback testado em DR exercise mensal. Cada release verifica
654
+ que rollback funciona em < 5 min. Schema migrations sempre
655
+ reversible (ADD col nullable, never DROP). Artefato N-1 sempre
656
+ preservado e re-deployable.
657
+ ```
658
+
659
+ ### Release pipeline manual (toil + risk)
660
+
661
+ ```text
662
+ ANTI-PATTERN: deploy = "engineer X faz SSH em prod, copia artefato,
663
+ kill+restart". Documentado em runbook de 30 passos.
664
+
665
+ POR QUÊ É RUIM: toil (cap 5 — manual + repetitivo + automatizável).
666
+ Drift entre runbook e realidade. Erros humanos.
667
+ Sem audit trail (quem deployou o quê quando).
668
+
669
+ CERTO: deploy = git push tag (ou merge em main). CI/CD pipeline cuida
670
+ de build hermético + tests + canary + rollback config. Self-service
671
+ deployment com policies enforced. Audit trail automático via CI logs.
672
+ ```
673
+
674
+ ## (e) Cross-references
675
+
676
+ Skills que consultam este glossário:
677
+
678
+ - `kit/skills/sre-risk-management/SKILL.md`
679
+ - `kit/skills/four-golden-signals/SKILL.md`
680
+ - `kit/skills/eliminating-toil/SKILL.md`
681
+ - `kit/skills/blameless-postmortems/SKILL.md`
682
+ - `kit/skills/production-readiness-review/SKILL.md`
683
+ - `kit/skills/cascading-failures/SKILL.md` (v1.11)
684
+ - `kit/skills/load-shedding-graceful-degradation/SKILL.md` (v1.11)
685
+ - `kit/skills/retry-strategies/SKILL.md` (v1.11)
686
+ - `kit/skills/hermetic-builds/SKILL.md` (v1.11)
687
+ - `kit/skills/release-engineering/SKILL.md` (v1.11)
688
+
689
+ Agentes que consultam este glossário (Phase 37):
690
+
691
+ - `kit/agents/golden-signals-instrumenter.md`
692
+ - `kit/agents/toil-auditor.md`
693
+ - `kit/agents/postmortem-writer.md`
694
+ - `kit/agents/prr-conductor.md`
695
+
696
+ Comandos que consultam este glossário (Phase 38):
697
+
698
+ - `kit/commands/golden-signals.md`
699
+ - `kit/commands/auditar-toil.md`
700
+ - `kit/commands/postmortem.md`
701
+ - `kit/commands/prr.md`
702
+ - `kit/commands/risk-budget.md`
703
+ - `kit/commands/sre.md` (orquestrador)
704
+
705
+ Skills v1.9 que cross-referenciam este glossário (Phase 39 patches):
706
+
707
+ - `kit/skills/event-based-slos/SKILL.md` (ganha bloco "Risk continuum")
708
+
709
+ ---
710
+
711
+ *Glossário criado em 2026-05-07 (Phase 36 do milestone v1.10 SRE Engagement).*
712
+ *Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016, ISBN 978-1-491-92912-4). Caps prioritários: 3 (Embracing Risk), 4 (SLOs), 5 (Eliminating Toil), 6 (Monitoring Distributed Systems / Four Golden Signals), 15 (Postmortem Culture), 32 (Evolving SRE Engagement Model / PRR).*