@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
@@ -36,3 +36,29 @@ Arquivos de contexto são resolvidos dentro do workflow (`init verify-work`) e d
36
36
  Execute o workflow verify-work de @./.claude/framework/workflows/verify-work.md do início ao fim.
37
37
  Preserve todos os gates do workflow (gerenciamento de sessão, apresentação de testes, diagnóstico, planejamento de correções, roteamento).
38
38
  </process>
39
+
40
+ <observability_integration>
41
+ **Integração com Core Analysis Loop em logs reais (v1.9):**
42
+
43
+ Quando `workflow.observability_uat_validation = true` (default) e o projeto tem MCP Supabase disponível, o workflow inclui passo de validação observacional após UAT conversacional:
44
+
45
+ 1. Para cada test passing no UAT, invocar o agente [`incident-investigator`](../agents/incident-investigator.md) em modo "validation":
46
+ ```
47
+ Task(subagent_type="incident-investigator", prompt="
48
+ mode: validation
49
+ symptom: validar que feature de Phase {N} efetivamente emitiu spans/eventos esperados
50
+ time_window: última 1h
51
+ expected_attributes: {result.success: true, build_id: {current_build}}
52
+ ")
53
+ ```
54
+ 2. O agente queryará via `mcp__supabase__get_logs` ou `mcp__supabase__execute_sql` para confirmar:
55
+ - Spans com nome esperado existem
56
+ - Atributos canônicos foram emitidos (não só código existe — comportamento real)
57
+ - `result.success` baseline está dentro do esperado
58
+ 3. Se confirmado: UAT.md inclui evidência observacional (não só "funciona em UI"). Status `passed` ✓.
59
+ 4. Se ausente: UAT.md flag `human_needed` com sugestão "verificar instrumentação não está pegando".
60
+
61
+ **Skill consultada:** [`core-analysis-loop`](../skills/core-analysis-loop/SKILL.md) — para o caso de UAT falhar e precisar investigar.
62
+
63
+ **REQ:** INT-FW-03.
64
+ </observability_integration>
@@ -0,0 +1,396 @@
1
+ # Glossário Observabilidade — Termos, Comandos e Patterns Canônicos
2
+
3
+ > Arquivo de referência compartilhado pelas skills `observability-*` e `*-events`, `*-tracing`, `*-slo*`, `*-sampling`, `*-pipelines`, `*-maturity-model`. **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:** *Observability Engineering* — Charity Majors, Liz Fong-Jones, George Miranda (O'Reilly, 2022). ISBN 978-1-492-07644-5.
6
+
7
+ ---
8
+
9
+ ## (a) Termos PT-BR ↔ EN
10
+
11
+ ### Conceitos centrais
12
+
13
+ | EN | PT-BR / Significado |
14
+ |---|---|
15
+ | **observability** | Observabilidade — capacidade de explicar **qualquer** estado novo do sistema sem precisar fazer novo deploy de instrumentação. Contraste com **monitoring**, que requer prever falhas em advance. |
16
+ | **monitoring** | Monitoramento — coleta de métricas pré-definidas para detectar **estados conhecidos** (CPU > 80%, memória < 10%). Insuficiente para distributed systems modernos. |
17
+ | **cardinality** | Cardinalidade — número de valores únicos possíveis em um campo. `user.id` em app com 1M usuários = cardinalidade 1M. **Alta cardinalidade é essencial** para observabilidade. |
18
+ | **dimensionality** | Dimensionalidade — número de campos/atributos em um evento. Wide events têm alta dimensionalidade (100+ campos). |
19
+ | **first principles** | Primeiros princípios — raciocínio do zero sobre o sistema, sem assumir nada. Base do `core-analysis-loop`. |
20
+ | **wide event** | Evento amplo — 1 evento por request com muitos campos (alta dimensionalidade) e alta cardinalidade. **Building block** da observabilidade (cap 5). |
21
+
22
+ ### Telemetria
23
+
24
+ | EN | PT-BR / Significado |
25
+ |---|---|
26
+ | **structured event** | Evento estruturado — registro tipado com campos nomeados (JSON ou similar). Contrário de log unstructured (texto livre). |
27
+ | **trace** | Rastro distribuído — coleção de spans relacionados por `trace_id` que descreve o caminho completo de um request através de múltiplos serviços. |
28
+ | **span** | Span — unidade de trabalho dentro de um trace. Identificada por `span_id` único; aponta para `parent_span_id`. |
29
+ | **trace_id** | Identificador único do trace (32 hex chars / 16 bytes). Compartilhado entre todos os spans do mesmo trace. |
30
+ | **span_id** | Identificador único do span (16 hex chars / 8 bytes). |
31
+ | **parent_span_id** | `span_id` do span pai. Null no root span. Define a árvore de spans. |
32
+ | **W3C TraceContext** | Padrão W3C para propagar contexto cross-service via header HTTP `traceparent: 00-{trace_id}-{span_id}-{flags}`. |
33
+ | **B3 / B3M** | Padrão Zipkin de propagação. Headers `X-B3-TraceId`, `X-B3-SpanId`, `X-B3-Sampled`. Suporte secundário em OTel. |
34
+ | **stitching** | Costura — ligar spans relacionados em um trace via `trace_id` + `parent_span_id`. Funciona além de RPCs (batch jobs, lambdas, S3 uploads). |
35
+ | **context propagation** | Propagação de contexto — mecanismo de OTel SDK que serializa/deserializa contexto entre services (header HTTP, gRPC metadata, queue message attrs). |
36
+ | **head-based sampling** | Sampling no início — decisão de sample tomada quando trace é iniciado (no service de entrada). Propagada via flag em `traceparent`. |
37
+ | **tail-based sampling** | Sampling no fim — decisão tomada após trace completar (requer buffer/collector). Permite manter erros + outliers preservando custo. |
38
+
39
+ ### OpenTelemetry
40
+
41
+ | EN | PT-BR / Significado |
42
+ |---|---|
43
+ | **OTel** | OpenTelemetry — projeto CNCF, união de OpenTracing + OpenCensus (2019). Padrão vendor-neutral para telemetria. |
44
+ | **OTel API** | Especificação que devs usam para instrumentar (sem implementação). |
45
+ | **OTel SDK** | Implementação concreta da API: state, batching, exportação. |
46
+ | **Tracer** | Componente do SDK que cria/gerencia spans. |
47
+ | **Meter** | Componente do SDK que cria/gerencia métricas. |
48
+ | **Exporter** | Plug-in do SDK que traduz dados in-memory em formato de destino (OTLP, Jaeger, Prometheus, vendor-specific). |
49
+ | **OTLP** | OpenTelemetry Protocol — wire format default. HTTP em porta 4318; gRPC em 4317. Protobuf schema. |
50
+ | **Collector** | Binário standalone (proxy/sidecar) que recebe telemetria, processa e roteia para múltiplos destinos. |
51
+ | **auto-instrumentation** | Instrumentação automática via wrappers/middleware (HTTP, gRPC, DB drivers). Time-to-first-value baixo. |
52
+ | **custom instrumentation** | Instrumentação manual com atributos de business logic (`customer.tier`, `feature_flag`, `experiment_arm`). |
53
+
54
+ ### SLOs e Burn Rate
55
+
56
+ | EN | PT-BR / Significado |
57
+ |---|---|
58
+ | **SLI** | Service-Level Indicator — métrica que classifica eventos como "good" ou "bad". Deve ser **event-based**, não time-based. |
59
+ | **SLO** | Service-Level Objective — meta interna de SLI (ex: 99.9% das requests com `result.success = true` em 30 dias). |
60
+ | **SLA** | Service-Level Agreement — acordo externo com cliente/usuário. Geralmente menos rígido que SLO interno. |
61
+ | **error budget** | Orçamento de erro — fração de eventos "bad" tolerável dentro de um SLO (ex: SLO 99.9% → 0.1% de budget). |
62
+ | **burn rate** | Taxa de queima — velocidade com que o error budget está sendo consumido. Burn rate 1 = budget durará a janela exata; burn rate 10 = budget acaba 10× mais rápido. |
63
+ | **sliding window** | Janela deslizante — recorte de tempo que avança continuamente (ex: últimos 30d). Recomendado vs **fixed window** (calendário). |
64
+ | **fixed window** | Janela fixa — recorte alinhado ao calendário (ex: dia 1 a 30 do mês). Anti-pattern: cliente não esquece bug do dia 30 só porque virou mês. |
65
+ | **lookahead window** | Janela de previsão — quanto tempo no futuro o burn alert prevê (ex: alert se vai esgotar em 4h). |
66
+ | **baseline window** | Janela de base — quanto tempo passado é usado para calcular burn atual (ex: últimos 1h). Regra: lookahead ≤ 4× baseline sem ajuste de seasonality. |
67
+ | **predictive burn alert** | Alerta preditivo — dispara quando taxa atual prevê esgotamento dentro do lookahead. Mais cedo que zero-level. |
68
+ | **context-aware burn alert** | Alerta com contexto — leva em conta budget remanescente (10% restante = mais urgente que 90%). Mais caro computacionalmente. |
69
+ | **short-term burn alert** | Alerta de curto prazo — só extrapola baseline recente, ignora budget total. Mais barato. |
70
+
71
+ ### Observability-Driven Development (ODD)
72
+
73
+ | EN | PT-BR / Significado |
74
+ |---|---|
75
+ | **ODD** | Observability-Driven Development — análogo a TDD mas para production. Bundle telemetria com feature; valide em prod, não só em testes. |
76
+ | **shift-left observability** | Empurrar observabilidade para a esquerda do SDLC — instrumentar **antes** do PR, não depois do incident. |
77
+ | **production as glass castle** | Anti-pattern — equipes têm medo de mexer em prod porque não conseguem entender o que acontece lá. ODD transforma em "interactive playground". |
78
+ | **auto-page the merger** | Padrão — paginar automaticamente quem mergeou o PR por 30-60min após deploy. Tighten feedback loop. |
79
+ | **decoupling deployments from releases** | Separar deploy de release — feature flags, progressive delivery. Permite observar comportamento antes de expor a 100%. |
80
+
81
+ ### Sampling e Pipelines
82
+
83
+ | EN | PT-BR / Significado |
84
+ |---|---|
85
+ | **constant probability sampling** | Sampling com probabilidade fixa (ex: 1 em 1000). Falha em low volume — eventos raros desaparecem. |
86
+ | **dynamic sampling** | Sampling adaptativo — taxa muda com volume de tráfego ou conteúdo do evento. |
87
+ | **by-key sampling** | Sampling por chave — taxa diferente por valor de campo (ex: 100% de erros, 1% de sucessos, 50% de paying customers). |
88
+ | **telemetry pipeline** | Pipeline de telemetria — sequência de stages (receive → process → route → export). OTel Collector é exemplo. |
89
+ | **routing** | Roteamento — mandar telemetria para destinos diferentes baseado em conteúdo (severity, tenant). |
90
+ | **buffering** | Buffer — armazenar temporariamente para tolerar falhas/lentidão downstream. |
91
+
92
+ ### Observability Maturity Model (OMM)
93
+
94
+ | EN | PT-BR / Significado |
95
+ |---|---|
96
+ | **OMM** | Observability Maturity Model — framework de 5 capacidades para avaliar maturidade de observabilidade de um time/projeto. |
97
+ | **resilience capability** | Capacidade de resiliência — responder a falhas com recovery mensurável (MTTR, on-call burden). |
98
+ | **code quality capability** | Capacidade de qualidade de código — observability ajuda a fechar feedback loop entre dev e prod. |
99
+ | **complexity capability** | Capacidade de manejar complexidade — encontrar gargalos sem chutes; debugging em sistemas grandes. |
100
+ | **release cadence capability** | Capacidade de cadência de release — métrica chave: tempo do commit ao prod. |
101
+ | **user behavior capability** | Capacidade de entender comportamento de usuário — observability data ≈ behavioral data + technical data. |
102
+
103
+ ---
104
+
105
+ ## (b) Comandos canônicos
106
+
107
+ ### OpenTelemetry CLI
108
+
109
+ ```bash
110
+ # Receiver/exporter dev — local OTel Collector via Docker
111
+ docker run -p 4317:4317 -p 4318:4318 \
112
+ -v "$(pwd)/otelcol-config.yaml":/etc/otelcol/config.yaml \
113
+ otel/opentelemetry-collector:latest
114
+
115
+ # Validar config OTLP
116
+ otelcol validate --config=otelcol-config.yaml
117
+
118
+ # Tracegen — gera traces sintéticos para testar pipelines
119
+ telemetrygen traces --otlp-insecure --traces 100 --rate 10
120
+ ```
121
+
122
+ ### Supabase / Postgres — queries para SLI events
123
+
124
+ ```sql
125
+ -- PT-BR: SLI event-based — boa request = HTTP 2xx + duration < 300ms
126
+ -- Materializa contagem em view para alimentar burn rate
127
+ create or replace view obs.sli_endpoint_home as
128
+ select
129
+ date_trunc('minute', created_at) as bucket,
130
+ count(*) filter (where status_code < 400 and duration_ms < 300) as good,
131
+ count(*) filter (where status_code >= 400 or duration_ms >= 300) as bad,
132
+ count(*) as total
133
+ from obs.events
134
+ where event_name = 'http_request' and path = '/home'
135
+ group by bucket;
136
+
137
+ -- PT-BR: burn rate atual com janela deslizante 1h
138
+ select
139
+ sum(bad)::float / nullif(sum(total), 0) as error_rate,
140
+ (sum(bad)::float / nullif(sum(total), 0)) / (1 - 0.999) as burn_rate
141
+ from obs.sli_endpoint_home
142
+ where bucket >= now() - interval '1 hour';
143
+ ```
144
+
145
+ ### Logflare (Supabase logs platform) — equivalentes
146
+
147
+ ```bash
148
+ # CLI logflare — buscar eventos
149
+ supabase logs api --filter "request.path=/home" --limit 100
150
+
151
+ # Via SQL no schema 'logs'
152
+ select metadata->>'request.path', count(*)
153
+ from logs.edge_function_logs
154
+ where timestamp > now() - interval '1h'
155
+ group by 1;
156
+ ```
157
+
158
+ ### MCP tools Supabase (canônico kit-mcp)
159
+
160
+ ```text
161
+ mcp__supabase__get_logs — logs por service (api, postgres, edge-function, auth)
162
+ mcp__supabase__execute_sql — query SQL para validar hipóteses
163
+ mcp__supabase__get_advisors — security/performance lints
164
+ mcp__supabase__list_tables — schema atual
165
+ mcp__supabase__apply_migration — aplicar migration que materializa SLI events
166
+ ```
167
+
168
+ ---
169
+
170
+ ## (c) Patterns canônicos
171
+
172
+ ### Pattern: campos canônicos em wide events
173
+
174
+ Convenção de nomes para atributos OTel/JSON estruturado (dot notation). **Use sempre estes nomes** ao instrumentar:
175
+
176
+ | Campo | Tipo | Exemplo | Por quê |
177
+ |---|---|---|---|
178
+ | `user.id` | uuid | `"550e8400-e29b-41d4-..."` | Cardinalidade alta — debug por usuário |
179
+ | `tenant_id` | uuid/text | `"acme"` | Multi-tenancy — debug por tenant |
180
+ | `request.id` | uuid v4 | `"req_abc123"` | Correlação — propagado via header `x-request-id` |
181
+ | `result.success` | bool | `true` / `false` | SLI event-based — bom/mau |
182
+ | `error.type` | enum | `"timeout"`, `"validation"`, `"auth"`, `"rate_limit"`, `"db"` | Categoria de erro — filtragem rápida |
183
+ | `error.message` | text | `"connection refused"` | Debug — não usado em SLI |
184
+ | `duration_ms` | int | `127` | Latência — sempre milissegundos |
185
+ | `build_id` | text | `"abc123f"` ou `"v1.9.0"` | Debug — comparar versões |
186
+ | `feature_flag.<name>` | bool | `feature_flag.new_checkout: true` | Experimentação — slice/dice |
187
+ | `customer.tier` | enum | `"free"`, `"pro"`, `"enterprise"` | Priorização — sample diferente |
188
+ | `endpoint` | text | `"/api/v1/orders"` | Agrupamento — by-route |
189
+ | `http.status_code` | int | `200`, `404`, `503` | SLI — código HTTP |
190
+
191
+ ### Pattern: estrutura de span OTel
192
+
193
+ ```ts
194
+ // PT-BR: instrumentação canônica de handler com atributos custom
195
+ import { trace } from '@opentelemetry/api'
196
+
197
+ const tracer = trace.getTracer('checkout-service')
198
+
199
+ export async function placeOrder(req: Request) {
200
+ return tracer.startActiveSpan('place_order', async (span) => {
201
+ // PT-BR: atributos canônicos sempre
202
+ span.setAttribute('user.id', req.user.id)
203
+ span.setAttribute('tenant_id', req.tenant)
204
+ span.setAttribute('customer.tier', req.user.tier)
205
+ span.setAttribute('request.id', req.id)
206
+
207
+ try {
208
+ const order = await db.insertOrder(req.body)
209
+ span.setAttribute('result.success', true)
210
+ span.setAttribute('order.id', order.id)
211
+ return order
212
+ } catch (e) {
213
+ span.setAttribute('result.success', false)
214
+ span.setAttribute('error.type', classify(e)) // 'validation' | 'db' | 'rate_limit'
215
+ span.setAttribute('error.message', e.message)
216
+ throw e
217
+ } finally {
218
+ span.end() // PT-BR: SEMPRE em finally — duration_ms calculado aqui
219
+ }
220
+ })
221
+ }
222
+ ```
223
+
224
+ ### Pattern: SLI event-based vs time-based
225
+
226
+ ```ts
227
+ // PT-BR: BAD — time-based SLI (anti-pattern)
228
+ // "p99 latency < 300ms over each 5-minute window"
229
+ // Problema: 5 min de violação no fim de uma janela some quando janela vira
230
+
231
+ // PT-BR: GOOD — event-based SLI
232
+ // "proportion of events with duration < 300ms in last 30d"
233
+ function isGoodEvent(event: HttpEvent): boolean {
234
+ return event.status_code < 400 && event.duration_ms < 300
235
+ }
236
+
237
+ // PT-BR: contagem para SLO
238
+ const total = events.length
239
+ const good = events.filter(isGoodEvent).length
240
+ const slo_compliance = good / total // ≥ 0.999 para SLO 99.9%
241
+ ```
242
+
243
+ ### Pattern: Core Analysis Loop em prosa
244
+
245
+ ```text
246
+ 1. SINTOMA: alerta dispara — "checkout SLO burn rate = 8 (4× acima de 2)"
247
+
248
+ 2. HIPÓTESE inicial (de dados, NÃO intuição):
249
+ - Query 1: GROUP BY error.type — qual erro domina?
250
+ - Resultado: error.type = 'rate_limit' representa 78% dos eventos bad
251
+
252
+ 3. VALIDAÇÃO/REFINAMENTO:
253
+ - Query 2: GROUP BY tenant_id WHERE error.type = 'rate_limit'
254
+ - Resultado: tenant_id = 'acme' representa 95% dos rate_limits
255
+
256
+ 4. PRÓXIMA ITERAÇÃO:
257
+ - Query 3: GROUP BY endpoint WHERE tenant_id = 'acme' AND error.type = 'rate_limit'
258
+ - Resultado: endpoint = '/api/v1/bulk_orders' = 100%
259
+ - ROOT CAUSE: tenant acme está fazendo bulk orders acima do quota.
260
+ - AÇÃO: aumentar quota OU contactar acme OU adicionar backpressure.
261
+ ```
262
+
263
+ ---
264
+
265
+ ## (d) Anti-patterns explícitos
266
+
267
+ ### Dashboard-flipping
268
+
269
+ ```text
270
+ ANTI-PATTERN: ver spike num dashboard, abrir 12 outros dashboards, procurar visualmente
271
+ por "shape similar" para identificar correlação.
272
+
273
+ POR QUÊ É RUIM: pattern matching humano não escala; depende de dashboards pré-criados;
274
+ não funciona para emergent failures (Cap 8).
275
+
276
+ CERTO: usar Core Analysis Loop — partir de uma query, refinar com GROUP BY iterativo,
277
+ chegar à root cause via dados.
278
+ ```
279
+
280
+ ### Cause-based alerts
281
+
282
+ ```text
283
+ ANTI-PATTERN: alertar em CPU > 80%, memória < 10%, threads > N, etc.
284
+ Misturar "what" (sintoma) com "why" (causa raiz).
285
+
286
+ POR QUÊ É RUIM: gera false positives (cron job legítimo dispara CPU alta);
287
+ gera false negatives (sistema lento sem CPU alta);
288
+ normalização do desvio (Cap 12 — "Challenger disaster").
289
+
290
+ CERTO: alertar APENAS em SLO burn rate (event-based, customer-impacting).
291
+ Decouple "what" de "why" — alert diz que tem dor, debug descobre porquê.
292
+ ```
293
+
294
+ ### Fixed-window error budget
295
+
296
+ ```text
297
+ ANTI-PATTERN: error budget reseta dia 1 do mês.
298
+ "Tivemos outage dia 31, mas reseta amanhã."
299
+
300
+ POR QUÊ É RUIM: clientes não esquecem outage por causa de calendar reset;
301
+ gera comportamento perverso (postpone fix para depois do reset);
302
+ dificulta planejamento de capacidade.
303
+
304
+ CERTO: sliding window 30d.
305
+ Outage dia 31 ainda conta no budget até dia 30 do mês seguinte (sai gradualmente).
306
+ ```
307
+
308
+ ### Constant probability sampling em low volume
309
+
310
+ ```text
311
+ ANTI-PATTERN: sample rate fixo 1/1000 mesmo para erros.
312
+
313
+ POR QUÊ É RUIM: se você tem 1000 req/min e 1% de erro = 10 erros/min,
314
+ samplados 1/1000 = 0.01 erros/min = perde sinal de erro.
315
+
316
+ CERTO: by-key sampling — 100% de erros, 1% de sucessos.
317
+ Em low volume, prefira capturar tudo ou usar dynamic sampling.
318
+ ```
319
+
320
+ ### AIOps como solução
321
+
322
+ ```text
323
+ ANTI-PATTERN: comprar "AIOps platform" para agrupar/suprimir/processar alertas.
324
+
325
+ POR QUÊ É RUIM: você está pagando para mascarar normalização do desvio (Cap 12).
326
+ ML não cria sinal onde não há — apenas filtra ruído de alertas
327
+ que não deveriam existir em primeiro lugar.
328
+
329
+ CERTO: deletar alertas inúteis. Migrar para SLO-based alerting (Cap 12).
330
+ Investir em observability tooling, não em alert noise reduction.
331
+ ```
332
+
333
+ ### Time-based SLI
334
+
335
+ ```text
336
+ ANTI-PATTERN: "99% das janelas de 5 minutos têm p99 < 300ms"
337
+
338
+ POR QUÊ É RUIM: pre-aggregation perde fidelidade; janela com 1 outlier puxa p99 acima
339
+ mesmo com 99.9% das requests boas; difícil de compor com error budget.
340
+
341
+ CERTO: event-based SLI — "99.9% dos eventos individuais têm duration < 300ms".
342
+ ```
343
+
344
+ ### Observability como debugger
345
+
346
+ ```text
347
+ ANTI-PATTERN: usar observability tool para debugar lógica de função (line-by-line).
348
+
349
+ POR QUÊ É RUIM: scale errado — emitir 1 evento por linha de código gera GB/min e
350
+ custa 10× o sistema observado (Cap 11).
351
+
352
+ CERTO: observability é para ENCONTRAR ONDE debugar (qual service, qual hop, qual versão).
353
+ Para line-level use debugger (gdb, pdb) ou profiler.
354
+ ```
355
+
356
+ ### Glass castle production
357
+
358
+ ```text
359
+ ANTI-PATTERN: equipe tem medo de mexer em produção porque "qualquer mexida quebra tudo".
360
+
361
+ POR QUÊ É RUIM: feature freeze efetivo; rollback automático sem entender;
362
+ deploys raros que batchean N changes (cada deploy é alto risco).
363
+
364
+ CERTO: ODD — bundle telemetria com feature; deploy frequente + observable;
365
+ pequenas mudanças isoladas; auto-page do merger por 30-60min.
366
+ ```
367
+
368
+ ---
369
+
370
+ ## (e) Cross-references
371
+
372
+ Skills que consultam este glossário:
373
+
374
+ - `kit/skills/structured-events/SKILL.md`
375
+ - `kit/skills/distributed-tracing/SKILL.md`
376
+ - `kit/skills/opentelemetry-standard/SKILL.md`
377
+ - `kit/skills/core-analysis-loop/SKILL.md`
378
+ - `kit/skills/observability-driven-development/SKILL.md` *(Phase 30)*
379
+ - `kit/skills/event-based-slos/SKILL.md` *(Phase 32)*
380
+ - `kit/skills/burn-rate-alerting/SKILL.md` *(Phase 32)*
381
+ - `kit/skills/telemetry-sampling/SKILL.md` *(Phase 34)*
382
+ - `kit/skills/telemetry-pipelines/SKILL.md` *(Phase 34)*
383
+ - `kit/skills/observability-maturity-model/SKILL.md` *(Phase 34)*
384
+
385
+ Agentes que consultam este glossário:
386
+
387
+ - `kit/agents/observability-instrumenter.md` *(Phase 30)*
388
+ - `kit/agents/incident-investigator.md` *(Phase 30)*
389
+ - `kit/agents/slo-engineer.md` *(Phase 32)*
390
+ - `kit/agents/burn-rate-forecaster.md` *(Phase 32)*
391
+ - `kit/agents/omm-auditor.md` *(Phase 34)*
392
+
393
+ ---
394
+
395
+ *Glossário criado em 2026-05-06 (Phase 29 do milestone v1.9 Observabilidade).*
396
+ *Material-fonte: Observability Engineering — O'Reilly, 2022 (978-1-492-07644-5).*