@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,340 +1,340 @@
1
- ---
2
- name: blameless-postmortems
3
- description: Use após incident SEV1/SEV2 — template canônico (9 seções), cultura blameless (foco em sistema, não pessoas), no postmortem left unreviewed, Wheel of Misfortune.
4
- ---
5
-
6
- # SRE — Blameless Postmortems
7
-
8
- ## Quando usar
9
-
10
- LLM carrega esta skill ao escrever postmortem após incident, revisar postmortem de par, ou conduzir Wheel of Misfortune. Trigger phrases:
11
-
12
- - "postmortem", "post-mortem"
13
- - "incident review"
14
- - "blameless", "sem culpa"
15
- - "root cause analysis", "5 whys"
16
- - "Wheel of Misfortune"
17
- - "lessons learned"
18
- - "Google SRE cap 15"
19
- - "no postmortem left unreviewed"
20
-
21
- ## Regras absolutas
22
-
23
- - **Foco em sistema/processo, NÃO em pessoas** — root cause é "ausência de canary release" ou "RPS limit não documentado", NÃO "Maria fez deploy errado". Pessoas são parte do sistema. Se Maria errou, pergunte: "que processo permitiu o erro chegar a prod?".
24
- - **Trigger postmortem para SEV1/SEV2 + near-miss notáveis** — todo incident customer-facing com impacto ≥ 1 min de SLO burn ou ≥ 1 user reportado. Near-miss (incident detectado antes de impacto) também: oportunidade de aprender sem custo.
25
- - **"No postmortem left unreviewed"** — todo postmortem revisado por par sênior antes de arquivar. Sem revisão, postmortem mente (involuntariamente — autor está perto demais).
26
- - **Action items SMART com owner nomeado** — Specific, Measurable, Assignable, Realistic, Time-bound. "Melhorar monitoring" NÃO é SMART. "Adicionar alert SLO burn rate em /api/v1/orders por @bob até 2026-05-15" É SMART.
27
- - **Timeline em UTC** — não "horário local Brasília" ou ambíguo. Times distribuídos compõem timeline e UTC é o único timezone universal. Sempre `HH:MM UTC`.
28
- - **Quantificar impact** — usuários afetados (número/percentual), revenue impact, SLO budget consumido. Sem quantificação, severity é subjetivo.
29
- - **Lições generalizáveis, não específicas** — "Adicionar alert para essa query específica" é local. "Adicionar alert SLO em todas as queries de write em paths críticos" é generalizável.
30
- - **Wheel of Misfortune trimestral** — exercício de role-play onde uma pessoa narra um incident histórico e o time pratica response (sem dados reais expostos a stress real). Treina muscle memory para SEV1.
31
-
32
- ## Patterns canônicos
33
-
34
- ### Pattern: template canônico de postmortem (9 seções)
35
-
36
- ````markdown
37
- ```markdown
38
- # Postmortem: <incident-id> — <título-curto>
39
-
40
- **Data do incident:** YYYY-MM-DD
41
- **Autores:** <nomes>
42
- **Status:** Draft | Reviewed | Final
43
- **Severidade:** SEV1 | SEV2 | SEV3
44
- **Tempo até detecção:** XX min (entre trigger e alerta)
45
- **Tempo até resolução:** XX min (entre alerta e SLO restored)
46
-
47
- ## Summary
48
-
49
- 1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido.
50
- Escrito para audiência não-técnica (executivos, customer success, support).
51
-
52
- ## Impact
53
-
54
- - Usuários afetados: XX% (X de Y usuários ativos no período)
55
- - Duração: HH:MM (de HH:MM UTC a HH:MM UTC)
56
- - SLO budget consumido: X% do budget mensal
57
- - Revenue impact: $X (estimado por # de transações falhadas × ticket médio)
58
- - Serviços downstream impactados: <lista>
59
- - Customer support tickets gerados: X
60
- - Reputação/marca: <impacto qualitativo, se houver>
61
-
62
- ## Root Causes
63
-
64
- Condição mais profunda que, removida, previne recorrência.
65
- NÃO é "deploy do fulano" ou "código tinha bug" — é a condição sistêmica que
66
- permitiu o bug chegar a prod (ausência de canary, ausência de SLO alert,
67
- teste não cobria o caso).
68
-
69
- Use **5 Whys** para chegar lá. Pode haver múltiplas root causes (separadas
70
- em subseções `### Root Cause 1`, `### Root Cause 2`).
71
-
72
- ## Trigger
73
-
74
- Evento que iniciou a falha (deploy X às HH:MM UTC, config change Y, traffic
75
- spike Z, dependency outage W). Trigger ≠ Root Cause — trigger é o "quando";
76
- root cause é o "porquê o trigger virou incident".
77
-
78
- ## Resolution
79
-
80
- Passos tomados para recuperar serviço, em ordem cronológica com horários UTC:
81
-
82
- - HH:MM UTC — <ação>
83
- - HH:MM UTC — <ação>
84
-
85
- Inclui rollbacks, hotfixes, scaling decisions, manual interventions.
86
-
87
- ## Detection
88
-
89
- Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento
90
- interno? heartbeat?
91
-
92
- Tempo de detecção (gap entre trigger e detecção). Se > 5 min, action item
93
- para reduzir.
94
-
95
- ## Action Items
96
-
97
- | # | Action (SMART) | Owner | Priority | Due |
98
- |---|----------------|-------|----------|-----|
99
- | 1 | Adicionar SLO burn rate alert em /api/v1/orders/{id} | @bob | P0 | 2026-05-15 |
100
- | 2 | Documentar RPS limit por tier em runbook do orders-service | @alice | P1 | 2026-05-22 |
101
- | 3 | Implementar canary release em CI para todos os Edge Functions | @platform | P1 | 2026-06-01 |
102
-
103
- ## Lessons Learned
104
-
105
- Insights generalizáveis. Estrutura recomendada:
106
-
107
- ### O que fizemos bem
108
- - <coisa que funcionou — reforçar>
109
-
110
- ### Onde podemos melhorar
111
- - <gap identificado, generalizável a outros sistemas>
112
-
113
- ### Foi lucky?
114
- - <foi sorte que detectamos rápido? que não escalou? — capturar para fix proativo>
115
-
116
- ## Timeline (UTC)
117
-
118
- - 14:23 — <evento>
119
- - 14:27 — <evento>
120
- - 14:33 — <evento>
121
- - 14:42 — <evento>
122
- - 15:25 — Incident resolvido
123
-
124
- ## Supporting evidence
125
-
126
- - Link para incident channel #inc-2026-05-06-01
127
- - Link para SLO dashboard
128
- - Link para investigation .planning/investigations/<id>.md (de incident-investigator v1.9)
129
- - Screenshots/queries de chave
130
- ```
131
- ````
132
-
133
- ### Pattern: 5 whys para encontrar root cause
134
-
135
- ```text
136
- Sintoma: SLO burn rate de checkout_success disparou às 14:31 UTC.
137
-
138
- Why 1: Por que o burn rate disparou?
139
- → Porque taxa de erro em /api/v1/orders saltou de 0.05% para 8%.
140
-
141
- Why 2: Por que a taxa de erro saltou?
142
- → Porque deploy v2.3.0 introduziu N+1 query.
143
-
144
- Why 3: Por que o deploy v2.3.0 chegou a prod com N+1?
145
- → Porque o teste de carga não cobria carrinhos com > 10 itens.
146
-
147
- Why 4: Por que o teste de carga não cobria > 10 itens?
148
- → Porque o teste foi escrito antes do feature de "bulk add to cart" e não foi atualizado.
149
-
150
- Why 5: Por que o teste não foi atualizado quando bulk add foi mergeado?
151
- → Porque não há gate de CI que exige re-rodar load test ao mudar paths críticos.
152
-
153
- ROOT CAUSE: ausência de gate de CI obrigando re-rodar load test em mudanças de paths críticos.
154
- ACTION ITEM: implementar gate `load-test-required-for-critical-paths` no CI.
155
- ```
156
-
157
- ### Pattern: revisão por par sênior ("no postmortem left unreviewed")
158
-
159
- ```markdown
160
- Reviewer pergunta autor:
161
-
162
- 1. **Root cause é sistêmico, não pessoal?** — se cita pessoa, redirecionar para processo
163
- 2. **Action items são SMART?** — owner nomeado, due date, mensurável
164
- 3. **Timeline em UTC?** — sem ambiguidade timezone
165
- 4. **Impact quantificado?** — # usuários, duração, revenue
166
- 5. **Lessons generalizáveis?** — aplicáveis a outros serviços/incidents
167
- 6. **Detection time razoável?** — < 5 min ideal; se > 5, action item para reduzir
168
- 7. **Algo "lucky" capturado?** — foi sorte? Como remover dependência de sorte?
169
- 8. **5 whys aplicado?** — ou parou em "deploy ruim" sem ir mais fundo?
170
- ```
171
-
172
- ### Pattern: Wheel of Misfortune (training canônico)
173
-
174
- ```text
175
- Frequência: trimestral (1× por quarter)
176
- Duração: 60-90 min
177
- Participantes: time on-call + interessados (4-8 pessoas idealmente)
178
-
179
- Setup:
180
- 1. Facilitator escolhe um postmortem REAL de incident passado (>3 meses,
181
- para não ter risco emocional fresco) — pode ser de outro time/empresa.
182
- 2. Facilitator narra timeline progressivamente, parando em pontos-chave.
183
- 3. Em cada parada, time discute: "O que vocês fariam agora? Por quê?"
184
- 4. Comparar respostas com decisão real do incident.
185
- 5. Discutir: "Quais decisões foram boas? Quais foram piores em retrospecto?"
186
-
187
- Resultado:
188
- - Time pratica response sem stress real
189
- - Identifica gaps de conhecimento (nem todos sabem sobre runbook X)
190
- - Cria muscle memory para próximo SEV1
191
- - Materializa lições do postmortem original em ação prática
192
-
193
- Anti-objetivo:
194
- NÃO é "humilhar quem tomou decisão errada no incident original".
195
- É blameless training — focar em sistema/processo de decisão.
196
- ```
197
-
198
- ### Pattern: postmortem chain — `/forense` → `/postmortem`
199
-
200
- ```text
201
- Fluxo natural após incident:
202
-
203
- 1. Detecção: alerta SLO burn rate dispara → on-call ack → Slack channel #inc-NN
204
- 2. Mitigation: rollback ou hotfix → SLO restored → incident closed
205
- 3. /forense (framework v1.10): Core Analysis Loop sobre logs/git/state →
206
- gera .planning/investigations/<id>.md com hipóteses validadas e root cause
207
- 4. /postmortem --from-investigation <id> (Phase 38):
208
- postmortem-writer (Phase 37) consome <id>.md e gera template preenchido
209
- em .planning/postmortems/<id>.md
210
- 5. Reviewer lê draft e exige fixes (no postmortem left unreviewed)
211
- 6. Final marked + archived em milestone correspondente
212
- 7. Action items P0 viram phases inseridas no roadmap próximo (`/inserir-fase`)
213
- ```
214
-
215
- ## Anti-patterns
216
-
217
- ### ANTI: blame culture
218
-
219
- ```text
220
- ANTI: postmortem nomeia "fulano fez deploy errado", "@maria não testou direito",
221
- "o time de X causou o problema"
222
-
223
- PROBLEMA: engineers escondem incidents próximos ao limite por medo de retaliação;
224
- psychological safety colapsa; replicação garantida (próximo near-miss
225
- vira full incident porque ninguém reportou); team rotation aumenta;
226
- quem fica deixa de propor mudanças arriscadas (mesmo as boas).
227
-
228
- CERTO: foco em sistema/processo (ausência de canary, ausência de rollback
229
- automatizado, gate de CI faltante); pessoas são parte do sistema, NÃO
230
- o root cause; revisão por par sênior antes de arquivar — reviewer
231
- redireciona toda menção a pessoa para "que processo permitiu?".
232
- ```
233
-
234
- ### ANTI: action items vagos
235
-
236
- ```text
237
- ANTI: "Melhorar monitoring", "Revisitar processo de deploy", "Investigar mais",
238
- "Documentar melhor"
239
-
240
- PROBLEMA: sem owner, sem due date, sem critério de "feito"; ficam pendentes
241
- para sempre; mesma falha repete em 6 meses porque nada concreto
242
- aconteceu; aprendizado do incident é perdido na próxima sprint.
243
-
244
- CERTO: SMART (Specific, Measurable, Assignable, Realistic, Time-bound) —
245
- "Bob adiciona SLO burn alert em /api/v1/orders até 2026-05-15";
246
- "Alice documenta RPS limit em runbook orders-service até 2026-05-22".
247
- ```
248
-
249
- ### ANTI: postmortem left unreviewed
250
-
251
- ```text
252
- ANTI: autor escreve postmortem, ninguém revisa, vai direto para o arquivo
253
-
254
- PROBLEMA: autor está perto demais (mente involuntariamente sobre próprio
255
- papel — sem má-fé, é a natureza humana); root cause errado
256
- documentado; lições não-generalizáveis; mesma falha repete porque
257
- ação errada foi tomada com base em diagnóstico errado.
258
-
259
- CERTO: revisor sênior aplica checklist (8 perguntas — ver Pattern: revisão
260
- por par sênior); só depois `Final` status; "no postmortem left
261
- unreviewed" é regra absoluta — incident sem postmortem revisado
262
- conta como aberto, mesmo que serviço esteja restaurado.
263
- ```
264
-
265
- ### ANTI: postmortem só para SEV1
266
-
267
- ```text
268
- ANTI: "só investigar incident que pagou on-call"; SEV2/SEV3 ignorados;
269
- near-misses (detecção rápida evitou impacto) descartados
270
-
271
- PROBLEMA: near-misses são oportunidade de aprender SEM CUSTO — perdê-los
272
- é desperdício; SEV3s acumulam até virar SEV1 (mesma classe de
273
- falha, escala diferente); tendências invisíveis (3 SEV3s em 1 mês
274
- no mesmo serviço = sinal); team perde músculo de investigação.
275
-
276
- CERTO: SEV1/SEV2 mandatório; SEV3 opcional mas encorajado; near-miss notável
277
- (detection rápida evitou impacto) é candidato a postmortem leve
278
- (Summary + Impact + Lessons Learned, sem timeline detalhada se durou
279
- < 1 min). Investigation barata, lição grátis.
280
- ```
281
-
282
- ### ANTI: timeline ambígua
283
-
284
- ```text
285
- ANTI: "Por volta das 14h", "After lunch", "Em horário de pico",
286
- "Ontem à tarde"
287
-
288
- PROBLEMA: reviewers de outros timezones perdem contexto (15h Brasília
289
- = 18h UTC = 11h US-East); reconstrução em > 30 dias impossível
290
- (lembra "horário de pico"?); análise estatística (MTTR
291
- distribution, time-to-detect) impossível sem timestamps; cross-
292
- incident correlation falha.
293
-
294
- CERTO: sempre `HH:MM UTC` no formato 24h; cada evento na timeline com
295
- timestamp; UTC é o único timezone universal — converter quando
296
- compartilhar com stakeholders locais, NUNCA armazenar local.
297
- ```
298
-
299
- ### ANTI: copy-paste de postmortem template sem investigation
300
-
301
- ```text
302
- ANTI: abrir template, preencher campos genéricos, "Resolution: investigamos
303
- e resolvemos", "Root Cause: bug no código"; sem dados, sem 5 whys
304
-
305
- PROBLEMA: root cause errado documentado; action items irrelevantes;
306
- lessons learned superficiais; falha equivalente em 3 meses
307
- porque diagnóstico verdadeiro nunca foi feito; postmortem vira
308
- ritual burocrático em vez de instrumento de aprendizado.
309
-
310
- CERTO: postmortem nasce de investigation real (Core Analysis Loop, /forense,
311
- ou logs/state via mcp__supabase__get_logs); preencher com EVIDÊNCIAS
312
- (queries que rodaram, logs específicos, métricas observadas), não
313
- impressões; cada Root Cause precisa de prova citável.
314
- ```
315
-
316
- ## Verificação
317
-
318
- Antes de marcar postmortem como `Final`:
319
-
320
- 1. **9 seções canônicas presentes** — Summary, Impact, Root Causes, Trigger, Resolution, Detection, Action Items, Lessons Learned, Timeline UTC
321
- 2. **Root cause sistêmico** — não nomeia pessoa; passou pelo 5 whys
322
- 3. **Action items SMART** — Specific, Measurable, Assignable (owner @user), Realistic, Time-bound (due date)
323
- 4. **Timeline em UTC** — sem timezone ambíguo
324
- 5. **Impact quantificado** — # usuários, duração HH:MM, SLO budget consumido, revenue
325
- 6. **Lições generalizáveis** — aplicáveis a outros serviços/incidents
326
- 7. **Reviewed por par sênior** — checklist 8 perguntas aplicado
327
- 8. **Supporting evidence linkada** — investigation, dashboards, queries
328
- 9. **Action items P0 escalonados** — viraram phases ou tasks no roadmap próximo
329
-
330
- ## Ver também
331
-
332
- - [`_shared-sre/glossary.md`](../_shared-sre/glossary.md) — termos canônicos postmortem, blameless, root cause, Wheel of Misfortune
333
- - [`core-analysis-loop`](../core-analysis-loop/SKILL.md) (v1.9) — Core Analysis Loop alimenta investigation que vira postmortem
334
- - [`sre-risk-management`](../sre-risk-management/SKILL.md) — postmortem documenta budget consumido
335
- - [`production-readiness-review`](../production-readiness-review/SKILL.md) — PRR axis "Emergency Response" exige postmortem culture
336
- - [`eliminating-toil`](../eliminating-toil/SKILL.md) — toil-induced incidents geram postmortems
337
-
338
- ---
339
-
340
- *Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016) — Cap 15: "Postmortem Culture: Learning from Failure".*
1
+ ---
2
+ name: blameless-postmortems
3
+ description: Use após incident SEV1/SEV2 — template canônico (9 seções), cultura blameless (foco em sistema, não pessoas), no postmortem left unreviewed, Wheel of Misfortune.
4
+ ---
5
+
6
+ # SRE — Blameless Postmortems
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill ao escrever postmortem após incident, revisar postmortem de par, ou conduzir Wheel of Misfortune. Trigger phrases:
11
+
12
+ - "postmortem", "post-mortem"
13
+ - "incident review"
14
+ - "blameless", "sem culpa"
15
+ - "root cause analysis", "5 whys"
16
+ - "Wheel of Misfortune"
17
+ - "lessons learned"
18
+ - "Google SRE cap 15"
19
+ - "no postmortem left unreviewed"
20
+
21
+ ## Regras absolutas
22
+
23
+ - **Foco em sistema/processo, NÃO em pessoas** — root cause é "ausência de canary release" ou "RPS limit não documentado", NÃO "Maria fez deploy errado". Pessoas são parte do sistema. Se Maria errou, pergunte: "que processo permitiu o erro chegar a prod?".
24
+ - **Trigger postmortem para SEV1/SEV2 + near-miss notáveis** — todo incident customer-facing com impacto ≥ 1 min de SLO burn ou ≥ 1 user reportado. Near-miss (incident detectado antes de impacto) também: oportunidade de aprender sem custo.
25
+ - **"No postmortem left unreviewed"** — todo postmortem revisado por par sênior antes de arquivar. Sem revisão, postmortem mente (involuntariamente — autor está perto demais).
26
+ - **Action items SMART com owner nomeado** — Specific, Measurable, Assignable, Realistic, Time-bound. "Melhorar monitoring" NÃO é SMART. "Adicionar alert SLO burn rate em /api/v1/orders por @bob até 2026-05-15" É SMART.
27
+ - **Timeline em UTC** — não "horário local Brasília" ou ambíguo. Times distribuídos compõem timeline e UTC é o único timezone universal. Sempre `HH:MM UTC`.
28
+ - **Quantificar impact** — usuários afetados (número/percentual), revenue impact, SLO budget consumido. Sem quantificação, severity é subjetivo.
29
+ - **Lições generalizáveis, não específicas** — "Adicionar alert para essa query específica" é local. "Adicionar alert SLO em todas as queries de write em paths críticos" é generalizável.
30
+ - **Wheel of Misfortune trimestral** — exercício de role-play onde uma pessoa narra um incident histórico e o time pratica response (sem dados reais expostos a stress real). Treina muscle memory para SEV1.
31
+
32
+ ## Patterns canônicos
33
+
34
+ ### Pattern: template canônico de postmortem (9 seções)
35
+
36
+ ````markdown
37
+ ```markdown
38
+ # Postmortem: <incident-id> — <título-curto>
39
+
40
+ **Data do incident:** YYYY-MM-DD
41
+ **Autores:** <nomes>
42
+ **Status:** Draft | Reviewed | Final
43
+ **Severidade:** SEV1 | SEV2 | SEV3
44
+ **Tempo até detecção:** XX min (entre trigger e alerta)
45
+ **Tempo até resolução:** XX min (entre alerta e SLO restored)
46
+
47
+ ## Summary
48
+
49
+ 1-2 parágrafos: o que aconteceu, quem foi afetado, como foi resolvido.
50
+ Escrito para audiência não-técnica (executivos, customer success, support).
51
+
52
+ ## Impact
53
+
54
+ - Usuários afetados: XX% (X de Y usuários ativos no período)
55
+ - Duração: HH:MM (de HH:MM UTC a HH:MM UTC)
56
+ - SLO budget consumido: X% do budget mensal
57
+ - Revenue impact: $X (estimado por # de transações falhadas × ticket médio)
58
+ - Serviços downstream impactados: <lista>
59
+ - Customer support tickets gerados: X
60
+ - Reputação/marca: <impacto qualitativo, se houver>
61
+
62
+ ## Root Causes
63
+
64
+ Condição mais profunda que, removida, previne recorrência.
65
+ NÃO é "deploy do fulano" ou "código tinha bug" — é a condição sistêmica que
66
+ permitiu o bug chegar a prod (ausência de canary, ausência de SLO alert,
67
+ teste não cobria o caso).
68
+
69
+ Use **5 Whys** para chegar lá. Pode haver múltiplas root causes (separadas
70
+ em subseções `### Root Cause 1`, `### Root Cause 2`).
71
+
72
+ ## Trigger
73
+
74
+ Evento que iniciou a falha (deploy X às HH:MM UTC, config change Y, traffic
75
+ spike Z, dependency outage W). Trigger ≠ Root Cause — trigger é o "quando";
76
+ root cause é o "porquê o trigger virou incident".
77
+
78
+ ## Resolution
79
+
80
+ Passos tomados para recuperar serviço, em ordem cronológica com horários UTC:
81
+
82
+ - HH:MM UTC — <ação>
83
+ - HH:MM UTC — <ação>
84
+
85
+ Inclui rollbacks, hotfixes, scaling decisions, manual interventions.
86
+
87
+ ## Detection
88
+
89
+ Como descobrimos: alerta SLO burn rate? cliente reportou? monitoramento
90
+ interno? heartbeat?
91
+
92
+ Tempo de detecção (gap entre trigger e detecção). Se > 5 min, action item
93
+ para reduzir.
94
+
95
+ ## Action Items
96
+
97
+ | # | Action (SMART) | Owner | Priority | Due |
98
+ |---|----------------|-------|----------|-----|
99
+ | 1 | Adicionar SLO burn rate alert em /api/v1/orders/{id} | @bob | P0 | 2026-05-15 |
100
+ | 2 | Documentar RPS limit por tier em runbook do orders-service | @alice | P1 | 2026-05-22 |
101
+ | 3 | Implementar canary release em CI para todos os Edge Functions | @platform | P1 | 2026-06-01 |
102
+
103
+ ## Lessons Learned
104
+
105
+ Insights generalizáveis. Estrutura recomendada:
106
+
107
+ ### O que fizemos bem
108
+ - <coisa que funcionou — reforçar>
109
+
110
+ ### Onde podemos melhorar
111
+ - <gap identificado, generalizável a outros sistemas>
112
+
113
+ ### Foi lucky?
114
+ - <foi sorte que detectamos rápido? que não escalou? — capturar para fix proativo>
115
+
116
+ ## Timeline (UTC)
117
+
118
+ - 14:23 — <evento>
119
+ - 14:27 — <evento>
120
+ - 14:33 — <evento>
121
+ - 14:42 — <evento>
122
+ - 15:25 — Incident resolvido
123
+
124
+ ## Supporting evidence
125
+
126
+ - Link para incident channel #inc-2026-05-06-01
127
+ - Link para SLO dashboard
128
+ - Link para investigation .planning/investigations/<id>.md (de incident-investigator v1.9)
129
+ - Screenshots/queries de chave
130
+ ```
131
+ ````
132
+
133
+ ### Pattern: 5 whys para encontrar root cause
134
+
135
+ ```text
136
+ Sintoma: SLO burn rate de checkout_success disparou às 14:31 UTC.
137
+
138
+ Why 1: Por que o burn rate disparou?
139
+ → Porque taxa de erro em /api/v1/orders saltou de 0.05% para 8%.
140
+
141
+ Why 2: Por que a taxa de erro saltou?
142
+ → Porque deploy v2.3.0 introduziu N+1 query.
143
+
144
+ Why 3: Por que o deploy v2.3.0 chegou a prod com N+1?
145
+ → Porque o teste de carga não cobria carrinhos com > 10 itens.
146
+
147
+ Why 4: Por que o teste de carga não cobria > 10 itens?
148
+ → Porque o teste foi escrito antes do feature de "bulk add to cart" e não foi atualizado.
149
+
150
+ Why 5: Por que o teste não foi atualizado quando bulk add foi mergeado?
151
+ → Porque não há gate de CI que exige re-rodar load test ao mudar paths críticos.
152
+
153
+ ROOT CAUSE: ausência de gate de CI obrigando re-rodar load test em mudanças de paths críticos.
154
+ ACTION ITEM: implementar gate `load-test-required-for-critical-paths` no CI.
155
+ ```
156
+
157
+ ### Pattern: revisão por par sênior ("no postmortem left unreviewed")
158
+
159
+ ```markdown
160
+ Reviewer pergunta autor:
161
+
162
+ 1. **Root cause é sistêmico, não pessoal?** — se cita pessoa, redirecionar para processo
163
+ 2. **Action items são SMART?** — owner nomeado, due date, mensurável
164
+ 3. **Timeline em UTC?** — sem ambiguidade timezone
165
+ 4. **Impact quantificado?** — # usuários, duração, revenue
166
+ 5. **Lessons generalizáveis?** — aplicáveis a outros serviços/incidents
167
+ 6. **Detection time razoável?** — < 5 min ideal; se > 5, action item para reduzir
168
+ 7. **Algo "lucky" capturado?** — foi sorte? Como remover dependência de sorte?
169
+ 8. **5 whys aplicado?** — ou parou em "deploy ruim" sem ir mais fundo?
170
+ ```
171
+
172
+ ### Pattern: Wheel of Misfortune (training canônico)
173
+
174
+ ```text
175
+ Frequência: trimestral (1× por quarter)
176
+ Duração: 60-90 min
177
+ Participantes: time on-call + interessados (4-8 pessoas idealmente)
178
+
179
+ Setup:
180
+ 1. Facilitator escolhe um postmortem REAL de incident passado (>3 meses,
181
+ para não ter risco emocional fresco) — pode ser de outro time/empresa.
182
+ 2. Facilitator narra timeline progressivamente, parando em pontos-chave.
183
+ 3. Em cada parada, time discute: "O que vocês fariam agora? Por quê?"
184
+ 4. Comparar respostas com decisão real do incident.
185
+ 5. Discutir: "Quais decisões foram boas? Quais foram piores em retrospecto?"
186
+
187
+ Resultado:
188
+ - Time pratica response sem stress real
189
+ - Identifica gaps de conhecimento (nem todos sabem sobre runbook X)
190
+ - Cria muscle memory para próximo SEV1
191
+ - Materializa lições do postmortem original em ação prática
192
+
193
+ Anti-objetivo:
194
+ NÃO é "humilhar quem tomou decisão errada no incident original".
195
+ É blameless training — focar em sistema/processo de decisão.
196
+ ```
197
+
198
+ ### Pattern: postmortem chain — `/forense` → `/postmortem`
199
+
200
+ ```text
201
+ Fluxo natural após incident:
202
+
203
+ 1. Detecção: alerta SLO burn rate dispara → on-call ack → Slack channel #inc-NN
204
+ 2. Mitigation: rollback ou hotfix → SLO restored → incident closed
205
+ 3. /forense (framework v1.10): Core Analysis Loop sobre logs/git/state →
206
+ gera .planning/investigations/<id>.md com hipóteses validadas e root cause
207
+ 4. /postmortem --from-investigation <id> (Phase 38):
208
+ postmortem-writer (Phase 37) consome <id>.md e gera template preenchido
209
+ em .planning/postmortems/<id>.md
210
+ 5. Reviewer lê draft e exige fixes (no postmortem left unreviewed)
211
+ 6. Final marked + archived em milestone correspondente
212
+ 7. Action items P0 viram phases inseridas no roadmap próximo (`/inserir-fase`)
213
+ ```
214
+
215
+ ## Anti-patterns
216
+
217
+ ### ANTI: blame culture
218
+
219
+ ```text
220
+ ANTI: postmortem nomeia "fulano fez deploy errado", "@maria não testou direito",
221
+ "o time de X causou o problema"
222
+
223
+ PROBLEMA: engineers escondem incidents próximos ao limite por medo de retaliação;
224
+ psychological safety colapsa; replicação garantida (próximo near-miss
225
+ vira full incident porque ninguém reportou); team rotation aumenta;
226
+ quem fica deixa de propor mudanças arriscadas (mesmo as boas).
227
+
228
+ CERTO: foco em sistema/processo (ausência de canary, ausência de rollback
229
+ automatizado, gate de CI faltante); pessoas são parte do sistema, NÃO
230
+ o root cause; revisão por par sênior antes de arquivar — reviewer
231
+ redireciona toda menção a pessoa para "que processo permitiu?".
232
+ ```
233
+
234
+ ### ANTI: action items vagos
235
+
236
+ ```text
237
+ ANTI: "Melhorar monitoring", "Revisitar processo de deploy", "Investigar mais",
238
+ "Documentar melhor"
239
+
240
+ PROBLEMA: sem owner, sem due date, sem critério de "feito"; ficam pendentes
241
+ para sempre; mesma falha repete em 6 meses porque nada concreto
242
+ aconteceu; aprendizado do incident é perdido na próxima sprint.
243
+
244
+ CERTO: SMART (Specific, Measurable, Assignable, Realistic, Time-bound) —
245
+ "Bob adiciona SLO burn alert em /api/v1/orders até 2026-05-15";
246
+ "Alice documenta RPS limit em runbook orders-service até 2026-05-22".
247
+ ```
248
+
249
+ ### ANTI: postmortem left unreviewed
250
+
251
+ ```text
252
+ ANTI: autor escreve postmortem, ninguém revisa, vai direto para o arquivo
253
+
254
+ PROBLEMA: autor está perto demais (mente involuntariamente sobre próprio
255
+ papel — sem má-fé, é a natureza humana); root cause errado
256
+ documentado; lições não-generalizáveis; mesma falha repete porque
257
+ ação errada foi tomada com base em diagnóstico errado.
258
+
259
+ CERTO: revisor sênior aplica checklist (8 perguntas — ver Pattern: revisão
260
+ por par sênior); só depois `Final` status; "no postmortem left
261
+ unreviewed" é regra absoluta — incident sem postmortem revisado
262
+ conta como aberto, mesmo que serviço esteja restaurado.
263
+ ```
264
+
265
+ ### ANTI: postmortem só para SEV1
266
+
267
+ ```text
268
+ ANTI: "só investigar incident que pagou on-call"; SEV2/SEV3 ignorados;
269
+ near-misses (detecção rápida evitou impacto) descartados
270
+
271
+ PROBLEMA: near-misses são oportunidade de aprender SEM CUSTO — perdê-los
272
+ é desperdício; SEV3s acumulam até virar SEV1 (mesma classe de
273
+ falha, escala diferente); tendências invisíveis (3 SEV3s em 1 mês
274
+ no mesmo serviço = sinal); team perde músculo de investigação.
275
+
276
+ CERTO: SEV1/SEV2 mandatório; SEV3 opcional mas encorajado; near-miss notável
277
+ (detection rápida evitou impacto) é candidato a postmortem leve
278
+ (Summary + Impact + Lessons Learned, sem timeline detalhada se durou
279
+ < 1 min). Investigation barata, lição grátis.
280
+ ```
281
+
282
+ ### ANTI: timeline ambígua
283
+
284
+ ```text
285
+ ANTI: "Por volta das 14h", "After lunch", "Em horário de pico",
286
+ "Ontem à tarde"
287
+
288
+ PROBLEMA: reviewers de outros timezones perdem contexto (15h Brasília
289
+ = 18h UTC = 11h US-East); reconstrução em > 30 dias impossível
290
+ (lembra "horário de pico"?); análise estatística (MTTR
291
+ distribution, time-to-detect) impossível sem timestamps; cross-
292
+ incident correlation falha.
293
+
294
+ CERTO: sempre `HH:MM UTC` no formato 24h; cada evento na timeline com
295
+ timestamp; UTC é o único timezone universal — converter quando
296
+ compartilhar com stakeholders locais, NUNCA armazenar local.
297
+ ```
298
+
299
+ ### ANTI: copy-paste de postmortem template sem investigation
300
+
301
+ ```text
302
+ ANTI: abrir template, preencher campos genéricos, "Resolution: investigamos
303
+ e resolvemos", "Root Cause: bug no código"; sem dados, sem 5 whys
304
+
305
+ PROBLEMA: root cause errado documentado; action items irrelevantes;
306
+ lessons learned superficiais; falha equivalente em 3 meses
307
+ porque diagnóstico verdadeiro nunca foi feito; postmortem vira
308
+ ritual burocrático em vez de instrumento de aprendizado.
309
+
310
+ CERTO: postmortem nasce de investigation real (Core Analysis Loop, /forense,
311
+ ou logs/state via mcp__supabase__get_logs); preencher com EVIDÊNCIAS
312
+ (queries que rodaram, logs específicos, métricas observadas), não
313
+ impressões; cada Root Cause precisa de prova citável.
314
+ ```
315
+
316
+ ## Verificação
317
+
318
+ Antes de marcar postmortem como `Final`:
319
+
320
+ 1. **9 seções canônicas presentes** — Summary, Impact, Root Causes, Trigger, Resolution, Detection, Action Items, Lessons Learned, Timeline UTC
321
+ 2. **Root cause sistêmico** — não nomeia pessoa; passou pelo 5 whys
322
+ 3. **Action items SMART** — Specific, Measurable, Assignable (owner @user), Realistic, Time-bound (due date)
323
+ 4. **Timeline em UTC** — sem timezone ambíguo
324
+ 5. **Impact quantificado** — # usuários, duração HH:MM, SLO budget consumido, revenue
325
+ 6. **Lições generalizáveis** — aplicáveis a outros serviços/incidents
326
+ 7. **Reviewed por par sênior** — checklist 8 perguntas aplicado
327
+ 8. **Supporting evidence linkada** — investigation, dashboards, queries
328
+ 9. **Action items P0 escalonados** — viraram phases ou tasks no roadmap próximo
329
+
330
+ ## Ver também
331
+
332
+ - [`_shared-sre/glossary.md`](../_shared-sre/glossary.md) — termos canônicos postmortem, blameless, root cause, Wheel of Misfortune
333
+ - [`core-analysis-loop`](../core-analysis-loop/SKILL.md) (v1.9) — Core Analysis Loop alimenta investigation que vira postmortem
334
+ - [`sre-risk-management`](../sre-risk-management/SKILL.md) — postmortem documenta budget consumido
335
+ - [`production-readiness-review`](../production-readiness-review/SKILL.md) — PRR axis "Emergency Response" exige postmortem culture
336
+ - [`eliminating-toil`](../eliminating-toil/SKILL.md) — toil-induced incidents geram postmortems
337
+
338
+ ---
339
+
340
+ *Material-fonte: Site Reliability Engineering — Beyer, Jones, Petoff, Murphy (Google/O'Reilly, 2016) — Cap 15: "Postmortem Culture: Learning from Failure".*