@luanpdd/kit-mcp 1.8.1 → 1.10.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 (61) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +97 -1
  3. package/gates/golden-signals-coverage.md +133 -0
  4. package/gates/obs-agents-mcp-supabase.md +86 -0
  5. package/gates/obs-skills-frontmatter.md +76 -0
  6. package/gates/omm-no-regression.md +83 -0
  7. package/gates/postmortem-template-required.md +127 -0
  8. package/gates/prr-checklist-coverage.md +128 -0
  9. package/gates/skill-must-include.md +21 -19
  10. package/kit/agents/burn-rate-forecaster.md +160 -0
  11. package/kit/agents/golden-signals-instrumenter.md +241 -0
  12. package/kit/agents/incident-investigator.md +245 -0
  13. package/kit/agents/observability-instrumenter.md +200 -0
  14. package/kit/agents/omm-auditor.md +251 -0
  15. package/kit/agents/postmortem-writer.md +282 -0
  16. package/kit/agents/prr-conductor.md +288 -0
  17. package/kit/agents/slo-engineer.md +224 -0
  18. package/kit/agents/supabase-architect.md +62 -0
  19. package/kit/agents/supabase-auth-bootstrapper.md +17 -0
  20. package/kit/agents/supabase-edge-fn-writer.md +124 -0
  21. package/kit/agents/supabase-migration-writer.md +98 -0
  22. package/kit/agents/supabase-realtime-implementer.md +23 -0
  23. package/kit/agents/supabase-rls-writer.md +17 -0
  24. package/kit/agents/supabase-storage-implementer.md +174 -0
  25. package/kit/agents/toil-auditor.md +277 -0
  26. package/kit/commands/auditar-marco.md +102 -1
  27. package/kit/commands/auditar-observabilidade.md +103 -0
  28. package/kit/commands/auditar-toil.md +129 -0
  29. package/kit/commands/burn-rate-status.md +140 -0
  30. package/kit/commands/concluir-marco.md +73 -1
  31. package/kit/commands/definir-slo.md +108 -0
  32. package/kit/commands/discutir-fase.md +26 -0
  33. package/kit/commands/forense.md +83 -1
  34. package/kit/commands/golden-signals.md +142 -0
  35. package/kit/commands/instrumentar-fase.md +200 -0
  36. package/kit/commands/investigar-producao.md +162 -0
  37. package/kit/commands/observabilidade.md +116 -0
  38. package/kit/commands/planejar-fase.md +20 -0
  39. package/kit/commands/postmortem.md +179 -0
  40. package/kit/commands/prr.md +205 -0
  41. package/kit/commands/risk-budget.md +220 -0
  42. package/kit/commands/sre.md +227 -0
  43. package/kit/commands/verificar-trabalho.md +26 -0
  44. package/kit/skills/_shared-observability/glossary.md +396 -0
  45. package/kit/skills/_shared-sre/glossary.md +573 -0
  46. package/kit/skills/blameless-postmortems/SKILL.md +340 -0
  47. package/kit/skills/burn-rate-alerting/SKILL.md +258 -0
  48. package/kit/skills/core-analysis-loop/SKILL.md +352 -0
  49. package/kit/skills/distributed-tracing/SKILL.md +362 -0
  50. package/kit/skills/eliminating-toil/SKILL.md +243 -0
  51. package/kit/skills/event-based-slos/SKILL.md +296 -0
  52. package/kit/skills/four-golden-signals/SKILL.md +297 -0
  53. package/kit/skills/observability-driven-development/SKILL.md +315 -0
  54. package/kit/skills/observability-maturity-model/SKILL.md +222 -0
  55. package/kit/skills/opentelemetry-standard/SKILL.md +351 -0
  56. package/kit/skills/production-readiness-review/SKILL.md +305 -0
  57. package/kit/skills/sre-risk-management/SKILL.md +221 -0
  58. package/kit/skills/structured-events/SKILL.md +265 -0
  59. package/kit/skills/telemetry-pipelines/SKILL.md +259 -0
  60. package/kit/skills/telemetry-sampling/SKILL.md +256 -0
  61. package/package.json +1 -1
@@ -0,0 +1,315 @@
1
+ ---
2
+ name: observability-driven-development
3
+ description: Use ao bundlear telemetria com nova feature — 4 perguntas pré-PR, instrumentação shift-left, auto-page do autor por 30-60min após merge. Análogo TDD para produção.
4
+ ---
5
+
6
+ # Observabilidade — Observability-Driven Development (ODD)
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill ao escrever nova feature, planejar fase, ou code review. Trigger phrases:
11
+
12
+ - "ODD", "observability-driven development"
13
+ - "como sei que essa feature funciona em prod?"
14
+ - "instrumentar antes do PR"
15
+ - "shift-left observability"
16
+ - "auto-page do autor"
17
+ - "bundle telemetry com feature"
18
+
19
+ ## As 4 perguntas pré-PR (canônicas)
20
+
21
+ Antes de submeter PR, todo autor responde EM CÓDIGO:
22
+
23
+ | # | Pergunta | Como instrumentar |
24
+ |---|----------|-------------------|
25
+ | **1** | **Faz o que esperei?** | `result.success` boolean por evento + atributos do happy path (`order.id`, `user.id`) |
26
+ | **2** | **Compara à versão anterior?** | `build_id` em todo evento — permite `WHERE build_id = X vs build_id = Y` |
27
+ | **3** | **Usuários estão usando?** | Atributo de identidade (`user.id`, `tenant_id`, `customer.tier`) e do path do request (`endpoint`, `feature_flag.<name>`) |
28
+ | **4** | **Anomalias emergem?** | `error.type` enumerado + `duration_ms` + capturar todos os branches de código (try/catch + early returns) |
29
+
30
+ **Sem isso, o PR não é mergeável.** Não é regra burocrática — é a diferença entre "funciona em testes" e "funciona em produção".
31
+
32
+ ## Regras absolutas
33
+
34
+ - **Bundle telemetria com a feature** — instrumentação não é fase separada. Mesmo PR adiciona feature + spans + atributos.
35
+ - **Auto-page o autor por 30-60min após merge** — feedback loop curto. "Fui eu, eu sei o que era e eu posso reverter." NUNCA pular essa janela.
36
+ - **Decouple deploy de release** — feature flag por default. Deploy = código em prod desligado; release = liga aos poucos.
37
+ - **Test em prod com subset** — 1% de tráfego com flag ativada > 100% rollout em horário de baixa.
38
+ - **Rollback < rollforward em duvida** — observabilidade rica mostra o que está errado em segundos, mas só se você não rolou-back o evidência primeiro. Pause primeiro, investigue, então decida.
39
+ - **Toda code branch = atributo** — `if (x) { ... } else { ... }` precisa emitir atributo de qual branch foi tomada (`branch_taken: 'fast_path'` vs `'slow_path'`).
40
+ - **Tighten do feedback loop é o objetivo** — minutos do commit ao prod, não dias. Cada hora de delay multiplica custo de debug.
41
+
42
+ ## Patterns canônicos
43
+
44
+ ### Pattern: feature instrumentada nasce ODD-compliant
45
+
46
+ ```ts
47
+ // PT-BR: feature nova "novo método de pagamento" — instrumentação BUNDLED
48
+ import { trace, SpanStatusCode } from '@opentelemetry/api'
49
+
50
+ const tracer = trace.getTracer('payments')
51
+
52
+ export async function processPaymentV2(req: PaymentRequest) {
53
+ return tracer.startActiveSpan('process_payment_v2', async (span) => {
54
+ // PT-BR: Pergunta 3 — quem está usando?
55
+ span.setAttribute('user.id', req.user.id)
56
+ span.setAttribute('customer.tier', req.user.tier)
57
+ span.setAttribute('tenant_id', req.user.tenant)
58
+ span.setAttribute('endpoint', '/api/v2/payments')
59
+
60
+ // PT-BR: Pergunta 2 — qual versão?
61
+ span.setAttribute('build_id', process.env.BUILD_ID ?? 'dev')
62
+ span.setAttribute('feature_flag.payments_v2', true) // PT-BR: assumed via flag
63
+ span.setAttribute('payment.method', req.method) // novo: 'pix' | 'crypto' | 'card'
64
+
65
+ // PT-BR: Pergunta 4 — atributo por branch
66
+ if (req.amount > 1_000_00) {
67
+ span.setAttribute('branch_taken', 'high_value')
68
+ span.setAttribute('requires_3ds', true)
69
+ } else {
70
+ span.setAttribute('branch_taken', 'standard')
71
+ span.setAttribute('requires_3ds', false)
72
+ }
73
+
74
+ try {
75
+ const result = await chargeProvider(req)
76
+
77
+ // PT-BR: Pergunta 1 — fez o que esperei?
78
+ span.setAttribute('result.success', true)
79
+ span.setAttribute('payment.id', result.id)
80
+ span.setAttribute('payment.processor_response', result.processorCode)
81
+ span.setStatus({ code: SpanStatusCode.OK })
82
+ return result
83
+ } catch (e) {
84
+ // PT-BR: Pergunta 4 — anomalia identificada com type enum
85
+ span.setAttribute('result.success', false)
86
+ span.setAttribute('error.type', classify(e)) // 'provider_down' | 'declined' | 'fraud_block'
87
+ span.setAttribute('error.processor_code', e.code)
88
+ span.setStatus({ code: SpanStatusCode.ERROR })
89
+ throw e
90
+ } finally {
91
+ span.end()
92
+ }
93
+ })
94
+ }
95
+ ```
96
+
97
+ ### Pattern: auto-page autor (config CI/CD)
98
+
99
+ ```yaml
100
+ # PT-BR: GitHub Actions ou equivalente — paginar autor após merge
101
+ # .github/workflows/post-merge-watch.yml
102
+ name: post-merge-watch
103
+ on:
104
+ push:
105
+ branches: [main]
106
+ jobs:
107
+ page-author:
108
+ runs-on: ubuntu-latest
109
+ steps:
110
+ - name: Page commit author for 30-60min
111
+ run: |
112
+ AUTHOR_EMAIL="${{ github.event.head_commit.author.email }}"
113
+ PAGER_TOKEN="${{ secrets.PAGERDUTY_TOKEN }}"
114
+ # PT-BR: criar policy temporária — alertas SLO route para AUTHOR_EMAIL
115
+ # por 45 minutos. Após, retorna ao on-call normal.
116
+ curl -X POST https://api.pagerduty.com/oncall_overrides \
117
+ -H "Authorization: Token token=$PAGER_TOKEN" \
118
+ -d "{
119
+ \"override\": {
120
+ \"start\": \"$(date -u +%FT%TZ)\",
121
+ \"end\": \"$(date -u -d '+45 minutes' +%FT%TZ)\",
122
+ \"user\": {\"email\": \"$AUTHOR_EMAIL\"}
123
+ }
124
+ }"
125
+ ```
126
+
127
+ ### Pattern: deploy ≠ release (feature flag)
128
+
129
+ ```ts
130
+ // PT-BR: deploy do código com flag DESLIGADA
131
+ const isV2Enabled = (req: Request): boolean => {
132
+ // PT-BR: 0% inicialmente — deploy = código em prod, mas dormente
133
+ if (!flags.isEnabled('payments_v2', { user_id: req.user.id })) {
134
+ return false
135
+ }
136
+ return true
137
+ }
138
+
139
+ export async function processPayment(req: PaymentRequest) {
140
+ if (isV2Enabled(req)) {
141
+ return processPaymentV2(req)
142
+ }
143
+ return processPaymentV1(req)
144
+ }
145
+
146
+ // PT-BR: depois do deploy, release gradual:
147
+ // 1. flag.set('payments_v2', { user_id: 'me' }) — só dev
148
+ // 2. flag.set('payments_v2', { customer.tier: 'free' }, 1%) — 1% free users
149
+ // 3. observe SLO + error rate; se OK, sobe para 10%, 50%, 100%
150
+ ```
151
+
152
+ ### Pattern: comparar versão antes/depois (Pergunta 2)
153
+
154
+ ```sql
155
+ -- PT-BR: SLI antes vs depois do deploy do build_id `abc123`
156
+ -- Mostra error_rate per build, agrupado por versão
157
+ select
158
+ build_id,
159
+ count(*) as total,
160
+ sum(case when result_success = false then 1 else 0 end) as errors,
161
+ 100.0 * sum(case when result_success = false then 1 else 0 end) / count(*) as error_pct,
162
+ percentile_cont(0.99) within group (order by duration_ms) as p99_ms
163
+ from observability.spans
164
+ where
165
+ service_name = 'payments'
166
+ and timestamp > '2026-05-06 10:00'
167
+ and build_id in ('v1.5.2', 'v1.5.3') -- versão anterior + atual
168
+ group by build_id;
169
+
170
+ -- PT-BR: se v1.5.3 tem error_pct ou p99_ms > v1.5.2 → regressão. Rollback ou fix.
171
+ ```
172
+
173
+ ### Pattern: instrumentação shift-left no PLAN.md de fase
174
+
175
+ ```markdown
176
+ # PLAN: Fase 42 — Novo método de pagamento
177
+
178
+ ## Tarefas
179
+
180
+ | # | Task | Output |
181
+ |---|------|--------|
182
+ | 1 | Implementar `processPaymentV2` em `src/payments/v2.ts` | função |
183
+ | 2 | **Instrumentação OTel — bundled** | spans + atributos |
184
+ | 3 | Adicionar feature flag `payments_v2` | flag config |
185
+ | 4 | Tests unitários | tests/v2.spec.ts |
186
+ | 5 | **ODD — 4 perguntas validadas** | comments no PR |
187
+
188
+ ## ODD — Validação das 4 perguntas
189
+
190
+ 1. **Faz o que esperei?**
191
+ - Span `process_payment_v2` com atributo `result.success`
192
+ - Query: `SELECT count(*) WHERE result_success=true / count(*)` deve ser ≥ 99% após release
193
+
194
+ 2. **Compara à versão anterior?**
195
+ - `build_id` em todo span permite cross-version
196
+ - Query: ver "Pattern: comparar versão" acima
197
+
198
+ 3. **Usuários estão usando?**
199
+ - `customer.tier`, `payment.method` permitem slice & dice
200
+ - Query: `SELECT customer.tier, payment.method, count(*) FROM ... WHERE feature_flag.payments_v2=true GROUP BY 1,2`
201
+
202
+ 4. **Anomalias emergem?**
203
+ - `error.type` enum: `'provider_down'`, `'declined'`, `'fraud_block'`
204
+ - `branch_taken` para code paths
205
+ - Alert: SLO burn rate > 2 sobre `WHERE feature_flag.payments_v2=true`
206
+ ```
207
+
208
+ ## Anti-patterns
209
+
210
+ ### ANTI: instrumentação como fase separada
211
+
212
+ ```text
213
+ ANTI: "Vamos shipá-la primeiro, instrumentar na próxima sprint."
214
+
215
+ PROBLEMA: você está em prod cego. Quando algo quebrar, você não tem dados para
216
+ investigar. Adicionar instrumentação depois requer redeploy, que é
217
+ arriscado durante incident.
218
+
219
+ CERTO: instrumentação NO MESMO PR da feature. Não-negociável.
220
+ ```
221
+
222
+ ### ANTI: glass castle (medo de mexer em prod)
223
+
224
+ ```text
225
+ ANTI: "Não deploy hoje, é véspera de feriado."
226
+ "Não deploy depois das 17h."
227
+ "Vamos esperar a próxima janela de manutenção."
228
+ (Equipe deploya 1× por semana, em batches grandes)
229
+
230
+ PROBLEMA: deploys raros = deploys grandes = mais código mudando = mais risco.
231
+ Cada deploy fica mais perigoso por sua raridade. Cycle vicioso.
232
+
233
+ CERTO: deploy frequente (várias vezes ao dia) com features pequenas atrás de flags.
234
+ Cada deploy quase nada. Reverter quase nada se quebra. Confiança aumenta.
235
+ ```
236
+
237
+ ### ANTI: rollback antes de investigar
238
+
239
+ ```text
240
+ ANTI: alerta dispara → rollback automático → "voltou ao normal" → ninguém
241
+ investiga porque "tá funcionando agora"
242
+
243
+ PROBLEMA: você perdeu a evidência. Próximo incident similar começa do zero.
244
+ Padrão de regressão acumula tech debt invisível.
245
+
246
+ CERTO: pause feature flag (não rollback do deploy) → investigue com observability →
247
+ fix root cause → re-release. Rollback só se investigation tomar > 30min.
248
+ ```
249
+
250
+ ### ANTI: testar com 100% rollout em horário de baixa
251
+
252
+ ```text
253
+ ANTI: "Faz deploy 4h da manhã quando ninguém usa."
254
+
255
+ PROBLEMA: você está rodando com 100% de risk em condições não-realistas.
256
+ 0 tráfego = 0 sinal. Quando bug aparecer no horário de pico, você
257
+ não terá dados.
258
+
259
+ CERTO: deploy a qualquer hora atrás de feature flag em 1% → observe → 10% → 100%.
260
+ Bugs aparecem no progressive rollout, não no horário de pico.
261
+ ```
262
+
263
+ ### ANTI: paginar on-call em vez do autor
264
+
265
+ ```text
266
+ ANTI: alerta dispara 2h após merge → on-call (que não escreveu o código) é paginado
267
+
268
+ PROBLEMA: on-call não tem contexto. Vai procurar "que mudou ultimamente" — toma 30min.
269
+ Autor está dormindo / fora do contexto. Feedback loop quebrado.
270
+
271
+ CERTO: por 30-60min após merge, alertas vão para o AUTOR. Ele tem o contexto fresco,
272
+ sabe o que mudou, pode reverter ou fix em 5min. Após janela, volta para on-call.
273
+ ```
274
+
275
+ ### ANTI: instrumentação só em happy path
276
+
277
+ ```text
278
+ ANTI: span com atributos só no `try` block; catch sem instrumentação
279
+
280
+ PROBLEMA: você não sabe nada sobre falhas. Pergunta 4 (anomalias) impossível de responder.
281
+
282
+ CERTO: cada `catch` adiciona `error.type` enum + `error.message` + `result.success=false`.
283
+ Cada early return adiciona `branch_taken: 'short_circuit_validation'` etc.
284
+ ```
285
+
286
+ ## Verificação
287
+
288
+ Antes de mergear PR, verificar as 4 perguntas:
289
+
290
+ | # | Pergunta | Validação |
291
+ |---|----------|-----------|
292
+ | 1 | **Faz o que esperei?** | Existe atributo `result.success` em algum span do código tocado? |
293
+ | 2 | **Compara à versão anterior?** | `build_id` é setado no span? (geralmente em SDK setup, validar uma vez) |
294
+ | 3 | **Usuários estão usando?** | Existe `user.id` ou `tenant_id` ou `customer.tier` no span? |
295
+ | 4 | **Anomalias emergem?** | `catch` blocks emitem `error.type` enum? branches if/else emitem `branch_taken`? |
296
+
297
+ Se qualquer pergunta = NÃO → PR não mergeable. Adicione instrumentação.
298
+
299
+ Após merge:
300
+ - ✅ Feature flag desligada por default? (deploy ≠ release)
301
+ - ✅ Auto-page do autor configurado por 30-60min?
302
+ - ✅ SLI/SLO baseline sabido para comparação pré/pós release?
303
+
304
+ ---
305
+
306
+ ## Ver também
307
+
308
+ - `kit/skills/_shared-observability/glossary.md` — termos canônicos, ODD, glass castle
309
+ - `kit/skills/structured-events/SKILL.md` — campos canônicos
310
+ - `kit/skills/distributed-tracing/SKILL.md` — instrumentação cross-service
311
+ - `kit/skills/event-based-slos/SKILL.md` *(Phase 32)* — SLI para baseline pré/pós release
312
+ - `kit/agents/observability-instrumenter.md` — agente que gera instrumentação
313
+ - `kit/commands/instrumentar-fase.md` — comando que aplica ODD em fases
314
+
315
+ *Material-fonte: Observability Engineering (O'Reilly, 2022) — Cap 11: "Observability-Driven Development".*
@@ -0,0 +1,222 @@
1
+ ---
2
+ name: observability-maturity-model
3
+ description: Use ao avaliar maturidade observabilidade — 5 capacidades (resiliência, qualidade, complexidade, cadência, comportamento) com sintomas doing well/poorly por capacidade.
4
+ ---
5
+
6
+ # Observabilidade — Maturity Model (OMM)
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill ao auditar maturidade observability de projeto/time. Trigger phrases:
11
+
12
+ - "OMM", "observability maturity"
13
+ - "estamos prontos para SRE?"
14
+ - "quanto vale investir em observability?"
15
+ - "auditar observabilidade"
16
+ - "como saber se time está bem?"
17
+
18
+ ## As 5 capacidades (Cap 21)
19
+
20
+ OMM mede 5 capacidades sociotécnicas, cada uma com sintomas qualitativos. Não é checkbox — é trajetória.
21
+
22
+ | # | Capacidade | Pergunta central |
23
+ |---|------------|------------------|
24
+ | **1** | **Resiliência** (Respond to System Failure) | Quanto tempo MTTR? On-call sustentável? |
25
+ | **2** | **Qualidade de Código** (Deliver High-Quality Code) | Bugs encontrados em prod ou pre-merge? |
26
+ | **3** | **Complexidade / Tech Debt** (Manage Complexity) | Engineers conseguem encontrar gargalos sem chutes? |
27
+ | **4** | **Cadência de Release** (Predictable Release Cadence) | Tempo do commit ao prod? Deploy diariamente ou mensalmente? |
28
+ | **5** | **Comportamento de Usuário** (Understand User Behavior) | Time consegue responder "quem usa feature X?" |
29
+
30
+ ## Capacidade 1 — Resiliência
31
+
32
+ ### Doing well
33
+ - Uptime atinge metas de negócio e está melhorando
34
+ - On-call response a alertas é eficiente; alertas não são ignorados
35
+ - Plantão não é estressante; engineers aceitam shifts adicionais
36
+ - Engineers manejam workload de incidents sem horas extras
37
+
38
+ ### Doing poorly
39
+ - Time gastando muito tempo + dinheiro em on-call
40
+ - Incidents frequentes e prolongados
41
+ - On-call sofre alert fatigue ou perde failures reais
42
+ - Investigators não conseguem diagnosticar incidents
43
+ - Mesmas pessoas sempre puxadas para emergências (knowledge silo)
44
+
45
+ ### Como observability ajuda
46
+ Alertas relevantes/focados/acionáveis (reduzem alert fatigue). Relação clara entre error budget e customer needs. Wide events permitem investigators efetivos. Alta cardinalidade pinpoint sources rapidamente. Investigation paths democratizados (qualquer engineer respondedor).
47
+
48
+ ## Capacidade 2 — Qualidade de Código
49
+
50
+ ### Doing well
51
+ - Código é estável; menos bugs em prod; menos outages
52
+ - Após deploy, time foca em customer solutions, não suporte
53
+ - Engineers acham intuitivo debugar em qualquer estágio
54
+ - Issues isoladas são fix-áveis sem cascading failures
55
+
56
+ ### Doing poorly
57
+ - Custo alto de customer support
58
+ - Alto % do tempo de eng gasto em bugs vs features novas
59
+ - Engineers reluctant em deployar (perceived risk)
60
+ - Reproduzir falhas demora muito
61
+ - Devs com baixa confidence no código pós-ship
62
+
63
+ ### Como observability ajuda
64
+ Mesmo tooling para debugar 1 máquina ou 10k. Telemetry rica mostra código em ação. Validar fix é fácil. Watch deployments e fix antes de visível para usuários.
65
+
66
+ ## Capacidade 3 — Complexidade / Tech Debt
67
+
68
+ ### Doing well
69
+ - Engineers gastam maioria do tempo em forward progress
70
+ - Bug fixing minoritário
71
+ - Engineers raramente desorientados ("onde no codebase?")
72
+
73
+ ### Doing poorly
74
+ - Eng time desperdiçado rebuilding após scaling limits
75
+ - Times distraídos fixando coisa errada
76
+ - Localized changes têm ripple effects descontrolados
77
+ - "Haunted graveyard" — código que ninguém quer mexer
78
+
79
+ ### Como observability ajuda
80
+ Performance end-to-end claramente mensurada. Investigators encontram trilhas em parte desconhecida do sistema. Tracing aponta gargalo correto. Engineers identificam o que otimizar (não chutes).
81
+
82
+ ## Capacidade 4 — Cadência de Release
83
+
84
+ ### Doing well
85
+ - Cadência alinha com customer needs
86
+ - Código entra em prod logo após escrito; engineer dispara deploy próprio
87
+ - Code paths habilitáveis/desabilitáveis sem deploy (feature flags)
88
+ - Deploys e rollbacks são rápidos
89
+
90
+ ### Doing poorly
91
+ - Releases infrequentes; muita intervenção humana
92
+ - Muitas mudanças shipped de uma vez (batches)
93
+ - Releases em ordem específica obrigatória
94
+ - Sales gating em release train específico
95
+ - Times evitando deploys em certos dias/horários
96
+
97
+ ### Como observability ajuda
98
+ Entende build pipeline + production. Mostra degradação em tests ou erros de build. Confidence no release: comparar build_id antes/depois é trivial. Drilldown em eventos específicos.
99
+
100
+ ## Capacidade 5 — Comportamento de Usuário
101
+
102
+ ### Doing well
103
+ - Product team consegue responder "qual feature mais usada?", "qual customer tier mais ativo?"
104
+ - Adoption tracking de features novas
105
+ - Sucesso ou abandono mensurável por dimensão (geo, tier, feature flag)
106
+
107
+ ### Doing poorly
108
+ - Time intui "users gostaram disso" sem dados
109
+ - BI reports lentos demais (dias) para steering decisions
110
+ - "Quantos users hit este bug?" leva sprint inteiro para responder
111
+ - Sales/Customer Success usam dashboards diferentes do eng (silos)
112
+
113
+ ### Como observability ajuda
114
+ Data democratizada — Product, CS, Sales, Exec consultam mesma observability data. Granular por user/tenant. Time real (não BI overnight). Slice & dice ad hoc por feature flag, customer tier, region.
115
+
116
+ ## Patterns canônicos
117
+
118
+ ### Pattern: scoring de OMM (1-5 por capacidade)
119
+
120
+ ```text
121
+ 1 = Initial: ad-hoc, individual heroics, sem padrão
122
+ 2 = Repeatable: básico funciona; alguns engineers conseguem
123
+ 3 = Defined: documentado e cross-team; new hires aprendem
124
+ 4 = Managed: métricas + targets; tracking de regressão
125
+ 5 = Optimizing: melhoria contínua; experimentação ativa
126
+ ```
127
+
128
+ ### Pattern: snapshot OMM (Markdown gerado por agent)
129
+
130
+ ```markdown
131
+ # OMM Snapshot — kit-mcp 2026-05-06
132
+
133
+ | Capacidade | Score (1-5) | Trend | Sintomas-chave |
134
+ |---|---|---|---|
135
+ | 1. Resiliência | 3 | ↑ | MTTR 2h (era 6h em v1.7) |
136
+ | 2. Qualidade | 4 | → | Bugs em prod ↓ 70% após v1.6 |
137
+ | 3. Complexidade | 2 | ↑ | Tracing recém adotado v1.9 |
138
+ | 4. Cadência | 4 | → | Daily deploy ativo |
139
+ | 5. Comportamento usuário | 1 | ↑ | Sem product analytics ainda |
140
+
141
+ ## Action items (priorizados)
142
+ 1. [Cap 5] Adicionar dashboards Product (mais alto ROI dado score 1)
143
+ 2. [Cap 3] Skills de tracing (Phase 29-30 v1.9 endereçaram)
144
+ 3. [Cap 1] Reduzir MTTR de 2h para < 1h (usar incident-investigator)
145
+ ```
146
+
147
+ ### Pattern: regression check entre marcos
148
+
149
+ ```text
150
+ ANTES de /concluir-marco, gerar OMM snapshot.
151
+ Se ALGUMA capacidade regrediu vs marco anterior:
152
+ - Bloquear conclusion (workflow.omm_no_regression = true)
153
+ - Ou abrir ticket explícito + warning, mas permitir conclusion
154
+ ```
155
+
156
+ ## Anti-patterns
157
+
158
+ ### ANTI: scoring por checkbox (Maturity Model literal)
159
+
160
+ ```text
161
+ ANTI: "checklist com 50 items; score = N items checked / 50"
162
+
163
+ PROBLEMA: prática observability não cabe em checklist. Score = comportamento sociotécnico.
164
+
165
+ CERTO: avaliar SINTOMAS qualitativos. "On-call está sustentável?" "Engineers conseguem debugar sem help?" Score reflete trajetória.
166
+ ```
167
+
168
+ ### ANTI: comparar org com peers (FAANG envy)
169
+
170
+ ```text
171
+ ANTI: "FAANG faz X, então temos que fazer X também"
172
+
173
+ PROBLEMA: contexto importa. Org de 10 engineers ≠ Google.
174
+
175
+ CERTO: compare com VOCÊ MESMO (vs marco anterior). Cada org tem trajetória própria.
176
+ ```
177
+
178
+ ### ANTI: maturity model como ferramenta de marketing
179
+
180
+ ```text
181
+ ANTI: "estamos no nível 5 de OMM!" como bragging rights
182
+
183
+ PROBLEMA: nível 5 é teórico (continuous improvement, never done).
184
+ Self-promotion mascara gaps reais.
185
+
186
+ CERTO: OMM é diagnostic interno. Output → action items, não slides para sales.
187
+ ```
188
+
189
+ ### ANTI: prática técnica sem cultura
190
+
191
+ ```text
192
+ ANTI: comprar tools de observability achando que resolve
193
+
194
+ PROBLEMA: tools sem skills/processo geram dashboards inúteis.
195
+ OMM é SOCIO-técnico.
196
+
197
+ CERTO: tooling + skills + processo + cultura + buy-in. OMM mede tudo.
198
+ ```
199
+
200
+ ## Verificação
201
+
202
+ OMM snapshot canônico:
203
+
204
+ 1. **5 capacidades scored** — cada uma 1-5
205
+ 2. **Sintomas qualitativos citados** — não números abstratos
206
+ 3. **Trend vs último marco** — ↑ ↓ →
207
+ 4. **Action items priorizados** — capacidade com score baixo = high priority
208
+ 5. **Owner por action item** — sem owner = sem ação
209
+ 6. **Regression check** — alertar se alguma capacidade regrediu
210
+
211
+ ---
212
+
213
+ ## Ver também
214
+
215
+ - `kit/skills/_shared-observability/glossary.md` — termos OMM
216
+ - `kit/skills/event-based-slos/SKILL.md` — Cap 1 (resiliência via SLO/burn rate)
217
+ - `kit/skills/observability-driven-development/SKILL.md` — Cap 2 (qualidade), Cap 4 (cadência)
218
+ - `kit/skills/core-analysis-loop/SKILL.md` — Cap 3 (complexidade — encontrar gargalo)
219
+ - `kit/agents/omm-auditor.md` — agente que pontua e gera OMM snapshot
220
+ - `kit/commands/auditar-observabilidade.md` — comando que invoca o agente
221
+
222
+ *Material-fonte: Observability Engineering (O'Reilly, 2022) — Cap 21: "An Observability Maturity Model".*