@luanpdd/kit-mcp 1.7.0 → 1.9.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.
- package/CHANGELOG.md +101 -0
- package/README.md +39 -1
- package/gates/agent-no-recursive-dispatch.md +48 -0
- package/gates/budget-description.md +68 -0
- package/gates/no-personal-uuid.md +72 -0
- package/gates/obs-agents-mcp-supabase.md +86 -0
- package/gates/obs-skills-frontmatter.md +76 -0
- package/gates/omm-no-regression.md +83 -0
- package/gates/skill-must-include.md +71 -0
- package/gates/sync-idempotent.md +62 -0
- package/kit/agents/burn-rate-forecaster.md +160 -0
- package/kit/agents/codebase-mapper.md +1 -1
- package/kit/agents/executor.md +17 -0
- package/kit/agents/incident-investigator.md +245 -0
- package/kit/agents/observability-instrumenter.md +200 -0
- package/kit/agents/omm-auditor.md +199 -0
- package/kit/agents/planner.md +35 -0
- package/kit/agents/project-researcher.md +1 -1
- package/kit/agents/schema-checker.md +4 -4
- package/kit/agents/slo-engineer.md +224 -0
- package/kit/agents/supabase-architect.md +166 -0
- package/kit/agents/supabase-auth-bootstrapper.md +315 -0
- package/kit/agents/supabase-edge-fn-writer.md +207 -0
- package/kit/agents/supabase-migration-writer.md +174 -0
- package/kit/agents/supabase-realtime-implementer.md +275 -0
- package/kit/agents/supabase-rls-writer.md +235 -0
- package/kit/agents/supabase-storage-implementer.md +258 -0
- package/kit/agents/user-profiler.md +1 -1
- package/kit/agents/verifier.md +1 -1
- package/kit/commands/auditar-marco.md +22 -1
- package/kit/commands/auditar-observabilidade.md +103 -0
- package/kit/commands/burn-rate-status.md +140 -0
- package/kit/commands/concluir-marco.md +19 -1
- package/kit/commands/definir-slo.md +108 -0
- package/kit/commands/depurar.md +17 -0
- package/kit/commands/discutir-fase.md +26 -0
- package/kit/commands/fazer.md +15 -0
- package/kit/commands/forense.md +20 -1
- package/kit/commands/instrumentar-fase.md +200 -0
- package/kit/commands/investigar-producao.md +162 -0
- package/kit/commands/observabilidade.md +116 -0
- package/kit/commands/planejar-fase.md +20 -0
- package/kit/commands/supabase.md +148 -0
- package/kit/commands/verificar-trabalho.md +26 -0
- package/kit/framework/workflows/discuss-phase.md +19 -0
- package/kit/framework/workflows/plan-phase.md +25 -0
- package/kit/skills/_shared-observability/glossary.md +396 -0
- package/kit/skills/_shared-supabase/glossary.md +180 -0
- package/kit/skills/burn-rate-alerting/SKILL.md +258 -0
- package/kit/skills/core-analysis-loop/SKILL.md +352 -0
- package/kit/skills/distributed-tracing/SKILL.md +362 -0
- package/kit/skills/event-based-slos/SKILL.md +274 -0
- package/kit/skills/observability-driven-development/SKILL.md +315 -0
- package/kit/skills/observability-maturity-model/SKILL.md +222 -0
- package/kit/skills/opentelemetry-standard/SKILL.md +351 -0
- package/kit/skills/structured-events/SKILL.md +265 -0
- package/kit/skills/supabase-auth-ssr/SKILL.md +260 -0
- package/kit/skills/supabase-cron-queues/SKILL.md +266 -0
- package/kit/skills/supabase-database-functions/SKILL.md +247 -0
- package/kit/skills/supabase-declarative-schema/SKILL.md +183 -0
- package/kit/skills/supabase-edge-functions/SKILL.md +242 -0
- package/kit/skills/supabase-migrations/SKILL.md +175 -0
- package/kit/skills/supabase-pgvector-rag/SKILL.md +253 -0
- package/kit/skills/supabase-postgres-style/SKILL.md +138 -0
- package/kit/skills/supabase-realtime/SKILL.md +236 -0
- package/kit/skills/supabase-rls-policies/SKILL.md +185 -0
- package/kit/skills/supabase-storage/SKILL.md +234 -0
- package/kit/skills/telemetry-pipelines/SKILL.md +259 -0
- package/kit/skills/telemetry-sampling/SKILL.md +256 -0
- package/package.json +1 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: supabase
|
|
3
|
+
description: Orquestrador da Suíte Supabase — dispatch para agents especializados (arquiteto, migration, rls, edge, realtime, auth, storage, rag, cron, check) com sinônimos PT/EN.
|
|
4
|
+
argument-hint: "<subcomando> [args...]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- Task
|
|
12
|
+
- AskUserQuestion
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<objective>
|
|
16
|
+
Orquestrador único da Suíte Supabase. Recebe um subcomando e args, faz dispatch via `Task(subagent_type=supabase-...)` para o agent especializado correto. É o **único ponto de chain de agents Supabase** — agents permanecem função pura (anti-pitfall A10 de v1.8).
|
|
17
|
+
|
|
18
|
+
**Cria/Atualiza:** o que cada agent invocado cria/atualiza (migrations, schemas, functions, etc.).
|
|
19
|
+
|
|
20
|
+
**Após:** o usuário tem o output do agent (plano, código, SQL, ou veredito).
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
Skills consultadas pelos agents: `kit/skills/supabase-*/SKILL.md` + `kit/skills/_shared-supabase/glossary.md` (Phase 25).
|
|
25
|
+
Agents disponíveis: `kit/agents/supabase-*.md` (Phase 26) + `kit/agents/schema-checker.md` (existente).
|
|
26
|
+
</execution_context>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
**Argumentos:** `$ARGUMENTS` — primeiro token é o subcomando; restante é passado para o agent como prompt.
|
|
30
|
+
|
|
31
|
+
**Subcomandos suportados (sinônimos PT-BR/EN):**
|
|
32
|
+
|
|
33
|
+
| Subcomando | Sinônimos | Agent dispatched |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `arquiteto` | `architect`, `arch` | `supabase-architect` |
|
|
36
|
+
| `migration` | `migrar`, `migrate` | `supabase-migration-writer` |
|
|
37
|
+
| `rls` | — | `supabase-rls-writer` |
|
|
38
|
+
| `edge` | `edge-function`, `function`, `funcao` | `supabase-edge-fn-writer` |
|
|
39
|
+
| `realtime` | `tempo-real` | `supabase-realtime-implementer` |
|
|
40
|
+
| `auth` | `autenticacao`, `auth-ssr` | `supabase-auth-bootstrapper` |
|
|
41
|
+
| `storage` | `armazenamento` | `supabase-storage-implementer` |
|
|
42
|
+
| `rag` | `pgvector`, `embeddings` | `supabase-edge-fn-writer` com prompt sobre embeddings |
|
|
43
|
+
| `cron` | `queues`, `pgmq`, `background` | `supabase-edge-fn-writer` com prompt sobre `cron → pgmq → Edge` |
|
|
44
|
+
| `check` | `validar`, `validate` | `schema-checker` (validação pré-migration) |
|
|
45
|
+
| `help` | `ajuda`, `?` | exibe esta tabela inline |
|
|
46
|
+
|
|
47
|
+
**Detect `supabase/config.toml`:** se presente, extrai `project_id` (linha `project_id = "<ref>"`) e passa como contexto para o agent.
|
|
48
|
+
</context>
|
|
49
|
+
|
|
50
|
+
<process>
|
|
51
|
+
|
|
52
|
+
## 1. Parsear Subcomando
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# PT-BR: extrair primeiro token de $ARGUMENTS como subcomando
|
|
56
|
+
SUBCMD=$(echo "$ARGUMENTS" | awk '{print $1}')
|
|
57
|
+
ARGS=$(echo "$ARGUMENTS" | cut -d' ' -f2-)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Se `$ARGUMENTS` for vazio ou `SUBCMD` for `help`/`ajuda`/`?`:** exibir tabela de subcomandos inline + exemplo de uso. Sair.
|
|
61
|
+
|
|
62
|
+
## 2. Resolver Sinônimos
|
|
63
|
+
|
|
64
|
+
Mapear `SUBCMD` para agent name canônico:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
arquiteto, architect, arch → supabase-architect
|
|
68
|
+
migration, migrar, migrate → supabase-migration-writer
|
|
69
|
+
rls → supabase-rls-writer
|
|
70
|
+
edge, edge-function, function, funcao → supabase-edge-fn-writer
|
|
71
|
+
realtime, tempo-real → supabase-realtime-implementer
|
|
72
|
+
auth, autenticacao, auth-ssr → supabase-auth-bootstrapper
|
|
73
|
+
storage, armazenamento → supabase-storage-implementer
|
|
74
|
+
rag, pgvector, embeddings → supabase-edge-fn-writer (com flag rag=true no prompt)
|
|
75
|
+
cron, queues, pgmq, background → supabase-edge-fn-writer (com flag pattern=cron-pgmq no prompt)
|
|
76
|
+
check, validar, validate → schema-checker
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Se subcomando não resolve:** exibir erro inline com lista de subcomandos válidos. Sair.
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
✗ Subcomando desconhecido: '<SUBCMD>'
|
|
83
|
+
|
|
84
|
+
Subcomandos válidos:
|
|
85
|
+
arquiteto / architect → projetar schema + RLS + topology antes de implementar
|
|
86
|
+
migration / migrar → escrever migration SQL
|
|
87
|
+
rls → gerar policies RLS para tabela
|
|
88
|
+
edge → escrever Edge Function Deno
|
|
89
|
+
realtime → configurar canais Realtime (RLS + trigger + client)
|
|
90
|
+
auth → bootstrap Next.js v16 + Supabase Auth (SSR)
|
|
91
|
+
storage → configurar Storage (bucket + RLS + client)
|
|
92
|
+
rag → Edge Function com embeddings + pgvector
|
|
93
|
+
cron → pattern cron → pgmq → Edge Function
|
|
94
|
+
check → validar SQL antes de apply (schema-checker)
|
|
95
|
+
|
|
96
|
+
Uso: /supabase <subcomando> <args...>
|
|
97
|
+
Exemplo: /supabase arquiteto "app de chat com presence multi-room"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 3. Detectar `supabase/config.toml`
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
if [ -f supabase/config.toml ]; then
|
|
104
|
+
PROJECT_ID=$(grep -E '^project_id\s*=' supabase/config.toml | sed 's/.*= *"\(.*\)".*/\1/' | head -1)
|
|
105
|
+
fi
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Se presente, anexar `project_id=<value>` ao prompt do agent. Se ausente, agent funciona sem (offline ou pergunta ao user).
|
|
109
|
+
|
|
110
|
+
## 4. Dispatch
|
|
111
|
+
|
|
112
|
+
Invocar `Task(subagent_type=<agent_name>, prompt=<built_prompt>)`.
|
|
113
|
+
|
|
114
|
+
**Prompt construído:**
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
{ARGS}
|
|
118
|
+
|
|
119
|
+
{Se project_id detectado:}
|
|
120
|
+
project_id: {PROJECT_ID}
|
|
121
|
+
|
|
122
|
+
{Se subcomando rag/cron — flag de modo:}
|
|
123
|
+
mode: rag-embeddings (ou cron-pgmq-edge)
|
|
124
|
+
|
|
125
|
+
{Para architect: tier upfront via AskUserQuestion}
|
|
126
|
+
{caller: pergunte ao user via AskUserQuestion sobre tier (Free/Pro/Team) e branches antes de produzir o plano — ver supabase-architect Step 1}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Subcomando `arquiteto`:** antes de dispatch, faça `AskUserQuestion` perguntando tier (Free/Pro/Team/Enterprise) e se vai usar branches. Inclua resposta no prompt.
|
|
130
|
+
|
|
131
|
+
**Subcomando `check`:** dispatch para `schema-checker` (existente). O caller deve passar `migration_path` e `project_id` no `$ARGUMENTS` — exemplo: `/supabase check supabase/migrations/20260506_x.sql`.
|
|
132
|
+
|
|
133
|
+
## 5. Output
|
|
134
|
+
|
|
135
|
+
Output do agent é o output do command. Sem post-processing — agent já formata estruturado.
|
|
136
|
+
|
|
137
|
+
</process>
|
|
138
|
+
|
|
139
|
+
<success_criteria>
|
|
140
|
+
- [ ] Subcomando resolvido para agent canônico (10 subcomandos × seus sinônimos)
|
|
141
|
+
- [ ] `project_id` extraído de `supabase/config.toml` se presente
|
|
142
|
+
- [ ] Subcomando `arquiteto` faz `AskUserQuestion` upfront sobre tier + branches
|
|
143
|
+
- [ ] Dispatch via `Task(subagent_type=...)` — único ponto de chain de agents Supabase
|
|
144
|
+
- [ ] Subcomando inválido → mensagem clara com lista
|
|
145
|
+
- [ ] Subcomando `help`/`ajuda`/`?` → exibe tabela inline
|
|
146
|
+
- [ ] Subcomando `check` → invoca `schema-checker` (existente)
|
|
147
|
+
- [ ] Args após subcomando passam transparentemente para o agent
|
|
148
|
+
</success_criteria>
|
|
@@ -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>
|
|
@@ -43,6 +43,25 @@ Pergunte sobre visão e escolhas; capture decisões pra agentes downstream.
|
|
|
43
43
|
**Quando usuário sugere expansão:** "[X] seria nova capacidade — fase própria. Anoto pro backlog. De volta a [tópico]." Capture em "Ideias Adiadas". Não perca, não aja.
|
|
44
44
|
</scope_guardrail>
|
|
45
45
|
|
|
46
|
+
<supabase_detection>
|
|
47
|
+
**Detecção de fase Supabase:** antes de identificar áreas cinzentas genéricas, verifique se a fase mexe em Supabase (DB/Auth/Realtime/Edge Functions/Storage/RLS/migrations).
|
|
48
|
+
|
|
49
|
+
Sinais de fase Supabase no objetivo do ROADMAP.md ou nos REQs mapeados:
|
|
50
|
+
- Menções a "Supabase", "Postgres", "RLS", "policy", "migration", "supabase/migrations/", "supabase/schemas/", "supabase/functions/"
|
|
51
|
+
- Menções a "Auth Next.js", "@supabase/ssr", "magic link", "OAuth", "MFA"
|
|
52
|
+
- Menções a "broadcast", "realtime", "presence", "postgres_changes"
|
|
53
|
+
- Menções a "Edge Function", "Deno", "pgvector", "RAG", "pg_cron", "pgmq"
|
|
54
|
+
- Menções a "bucket", "signed URL", "storage.objects"
|
|
55
|
+
|
|
56
|
+
**Se for fase Supabase:** considere delegar a discussão para o agent `supabase-architect` em vez de gerar áreas cinzentas genéricas. O architect já tem template de perguntas Supabase-específicas (tier Free/Pro, branches, RLS strategy multi-tenant, schema design, topology realtime, custos de egress/branches).
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Task(subagent_type=supabase-architect, prompt="Projete schema + RLS + topologia para esta fase Supabase: {phase_goal}. Retorne plano em formato Markdown estruturado para servir de base ao CONTEXT.md.")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Use o output do architect como base do `<decisions>` do CONTEXT.md em vez de fazer questionamento manual. **Para fases mistas** (parte Supabase, parte genérica) — use architect só para a parte Supabase, depois faça discussão padrão para o resto.
|
|
63
|
+
</supabase_detection>
|
|
64
|
+
|
|
46
65
|
<gray_area_identification>
|
|
47
66
|
Áreas cinzentas são **decisões de implementação que o usuário se importa** — coisas que podem ir de múltiplas formas e mudariam o resultado.
|
|
48
67
|
|
|
@@ -13,8 +13,33 @@ Tipos de subagentes framework válidos (use nomes exatos — não use 'general-p
|
|
|
13
13
|
- phase-researcher — Pesquisa abordagens técnicas para uma fase
|
|
14
14
|
- planner — Cria planos detalhados a partir do escopo da fase
|
|
15
15
|
- plan-checker — Revisa qualidade do plano antes da execução
|
|
16
|
+
|
|
17
|
+
**Agents especializados por domínio** (use ao invés de phase-researcher quando aplicável):
|
|
18
|
+
- supabase-architect — para fases Supabase (DB/Auth/Realtime/Edge/Storage), substitui phase-researcher genérico. Já tem questionamento Supabase-específico (tier, branches, RLS strategy, multi-tenant).
|
|
19
|
+
- supabase-{migration-writer,rls-writer,edge-fn-writer,realtime-implementer,auth-bootstrapper,storage-implementer} — destinos de delegação que o `planner` pode incluir como `subagent_type` em tasks específicas do PLAN.md.
|
|
20
|
+
- schema-checker — pré-validação de SQL para tasks que tocam migrations existentes.
|
|
16
21
|
</available_agent_types>
|
|
17
22
|
|
|
23
|
+
<supabase_phase_detection>
|
|
24
|
+
**Detecção de fase Supabase no Step 1:** após carregar contexto via `init plan-phase`, verifique se a fase mexe em domínios Supabase (DB/Auth/Realtime/Edge/Storage/RLS/migrations). Sinais no objetivo do ROADMAP.md ou nos REQs mapeados: "Supabase", "Postgres", "RLS", "migration", "Edge Function", "broadcast", "pgvector", "bucket", `supabase/migrations/`, `supabase/schemas/`, `supabase/functions/`.
|
|
25
|
+
|
|
26
|
+
**Se for fase Supabase:**
|
|
27
|
+
1. **Pesquisa:** invoque `supabase-architect` em vez de `phase-researcher` genérico no Step 5 (Tratar Pesquisa). Architect produz plano de schema/RLS/topology que o planner usa como base.
|
|
28
|
+
2. **Plano:** o `planner` deve incluir tasks com `subagent_type` apontando para o agent especializado correto (ver tabela abaixo). O `executor` lê e dispatcha automaticamente.
|
|
29
|
+
|
|
30
|
+
| Task no plano envolve | `subagent_type:` para o `executor` dispatch |
|
|
31
|
+
|---|---|
|
|
32
|
+
| Migration ou schema declarative | `supabase-migration-writer` |
|
|
33
|
+
| RLS policies | `supabase-rls-writer` |
|
|
34
|
+
| Edge Function | `supabase-edge-fn-writer` |
|
|
35
|
+
| Realtime (3 layers) | `supabase-realtime-implementer` |
|
|
36
|
+
| Bootstrap auth Next.js | `supabase-auth-bootstrapper` |
|
|
37
|
+
| Storage bucket + RLS | `supabase-storage-implementer` |
|
|
38
|
+
| Validar SQL pre-apply | `schema-checker` |
|
|
39
|
+
|
|
40
|
+
**Anti-pitfall:** agents `supabase-*` não devem se invocar uns aos outros — toda chain passa pelo `executor` lendo o plan. (Gate `agent-no-recursive-dispatch` valida.)
|
|
41
|
+
</supabase_phase_detection>
|
|
42
|
+
|
|
18
43
|
<process>
|
|
19
44
|
|
|
20
45
|
## 1. Inicializar
|
|
@@ -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).*
|