@luanpdd/kit-mcp 1.34.0 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +1 -1
  2. package/bin/cli.js +2 -2
  3. package/bin/mcp.js +6 -6
  4. package/bin/ui.js +74 -74
  5. package/gates/ai-prompt-stability.md +120 -120
  6. package/gates/budget-description.md +68 -68
  7. package/gates/confidence.md +29 -29
  8. package/gates/dependency-check.md +33 -33
  9. package/gates/dept-cycle-prevention.md +179 -179
  10. package/gates/golden-signals-coverage.md +133 -133
  11. package/gates/legacy-refactor-safety.md +178 -178
  12. package/gates/multi-tenant-rls-coverage.md +102 -102
  13. package/gates/no-personal-uuid.md +72 -72
  14. package/gates/obs-agents-mcp-supabase.md +86 -86
  15. package/gates/obs-skills-frontmatter.md +76 -76
  16. package/gates/observability-coverage.md +151 -151
  17. package/gates/omm-no-regression.md +83 -83
  18. package/gates/postmortem-template-required.md +127 -127
  19. package/gates/prr-checklist-coverage.md +128 -128
  20. package/gates/regression.md +32 -32
  21. package/gates/release-pipeline-policy.md +132 -132
  22. package/gates/secrets-scan.md +33 -33
  23. package/gates/service-role-not-in-user-facing.md +113 -113
  24. package/gates/skill-must-include.md +71 -71
  25. package/gates/sync-idempotent.md +62 -62
  26. package/gates/verify-phase-goal.md +34 -34
  27. package/kit/agents/designer-ui.md +216 -216
  28. package/kit/agents/workflow-generator.md +537 -0
  29. package/kit/commands/adicionar-backlog.md +1 -1
  30. package/kit/commands/adicionar-fase.md +1 -1
  31. package/kit/commands/adicionar-tarefa.md +1 -1
  32. package/kit/commands/auditar-observabilidade.md +103 -103
  33. package/kit/commands/auditar-toil.md +129 -129
  34. package/kit/commands/caracterizar-prompt.md +195 -195
  35. package/kit/commands/criar-workflow.md +158 -0
  36. package/kit/commands/definir-perfil.md +1 -1
  37. package/kit/commands/definir-slo.md +108 -108
  38. package/kit/commands/fio.md +1 -1
  39. package/kit/commands/golden-signals.md +142 -142
  40. package/kit/commands/instrumentar-fase.md +200 -200
  41. package/kit/commands/investigar-producao.md +162 -162
  42. package/kit/commands/observabilidade.md +118 -118
  43. package/kit/commands/postmortem.md +179 -179
  44. package/kit/commands/prr.md +205 -205
  45. package/kit/commands/publicar-rapido.md +207 -207
  46. package/kit/commands/risk-budget.md +220 -220
  47. package/kit/commands/sre.md +230 -230
  48. package/kit/file-manifest.json +5 -2
  49. package/kit/framework/references/output-style.md +22 -22
  50. package/kit/hooks/post-apply-migration.js +199 -199
  51. package/kit/hooks/sidecar-tool-publisher.js +210 -210
  52. package/kit/skills/_shared-dados-distribuidos/glossary.md +224 -224
  53. package/kit/skills/_shared-legacy/glossary.md +389 -389
  54. package/kit/skills/_shared-multi-tenant/glossary.md +186 -186
  55. package/kit/skills/_shared-observability/glossary.md +396 -396
  56. package/kit/skills/_shared-sre/glossary.md +712 -712
  57. package/kit/skills/_shared-supabase/glossary.md +234 -234
  58. package/kit/skills/blameless-postmortems/SKILL.md +340 -340
  59. package/kit/skills/burn-rate-alerting/SKILL.md +258 -258
  60. package/kit/skills/cascading-failures/SKILL.md +311 -311
  61. package/kit/skills/core-analysis-loop/SKILL.md +352 -352
  62. package/kit/skills/distributed-tracing/SKILL.md +362 -362
  63. package/kit/skills/dynamic-workflow-authoring/SKILL.md +327 -0
  64. package/kit/skills/eliminating-toil/SKILL.md +243 -243
  65. package/kit/skills/event-based-slos/SKILL.md +296 -296
  66. package/kit/skills/four-golden-signals/SKILL.md +314 -314
  67. package/kit/skills/hermetic-builds/SKILL.md +323 -323
  68. package/kit/skills/legacy-monster-methods/SKILL.md +444 -444
  69. package/kit/skills/llm-as-dependency/SKILL.md +436 -436
  70. package/kit/skills/load-shedding-graceful-degradation/SKILL.md +396 -396
  71. package/kit/skills/observability-driven-development/SKILL.md +315 -315
  72. package/kit/skills/observability-maturity-model/SKILL.md +222 -222
  73. package/kit/skills/opentelemetry-standard/SKILL.md +351 -351
  74. package/kit/skills/production-readiness-review/SKILL.md +305 -305
  75. package/kit/skills/release-engineering/SKILL.md +367 -367
  76. package/kit/skills/retry-strategies/SKILL.md +372 -372
  77. package/kit/skills/sre-risk-management/SKILL.md +221 -221
  78. package/kit/skills/structured-events/SKILL.md +265 -265
  79. package/kit/skills/supabase-cron-queues/SKILL.md +275 -275
  80. package/kit/skills/supabase-database-functions/SKILL.md +332 -332
  81. package/kit/skills/supabase-declarative-schema/SKILL.md +183 -183
  82. package/kit/skills/supabase-pgvector-rag/SKILL.md +253 -253
  83. package/kit/skills/supabase-postgres-style/SKILL.md +138 -138
  84. package/kit/skills/supabase-storage/SKILL.md +234 -234
  85. package/kit/skills/telemetry-pipelines/SKILL.md +259 -259
  86. package/kit/skills/telemetry-sampling/SKILL.md +256 -256
  87. package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -261
  88. package/kit/skills/ui-contexto-produto/SKILL.md +248 -248
  89. package/kit/skills/ui-cor-estrategia/SKILL.md +213 -213
  90. package/kit/skills/ui-critica-auditoria/SKILL.md +260 -260
  91. package/kit/skills/ui-motion-funcional/SKILL.md +264 -264
  92. package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -259
  93. package/kit/skills/ui-tipografia/SKILL.md +211 -211
  94. package/package.json +1 -1
  95. package/src/cli/index.js +1114 -1114
  96. package/src/cli/render.js +194 -194
  97. package/src/cli/upgrade-check.js +135 -135
  98. package/src/core/error-redaction.js +76 -76
  99. package/src/core/failures.js +153 -153
  100. package/src/core/gate-runner.js +205 -205
  101. package/src/core/gates.js +82 -82
  102. package/src/core/logger.js +170 -170
  103. package/src/core/manifest-verify.js +174 -174
  104. package/src/core/metrics.js +268 -268
  105. package/src/core/notify.js +60 -60
  106. package/src/core/path-safety.js +141 -141
  107. package/src/core/replays.js +120 -120
  108. package/src/core/ui.js +185 -185
  109. package/src/mcp-server/install.js +149 -149
  110. package/src/mcp-server/roots.js +124 -124
  111. package/src/ui/auto-spawn.js +113 -113
  112. package/src/ui/browser.js +78 -78
  113. package/src/ui/client.js +130 -130
  114. package/src/ui/events.js +65 -65
  115. package/src/ui/lockfile.js +191 -191
  116. package/src/ui/port.js +67 -67
  117. package/src/ui/server.js +547 -547
  118. package/src/ui/wrapper.js +129 -129
@@ -1,224 +1,224 @@
1
- # Glossário Dados Distribuídos — Termos, Patterns e Convenções
2
-
3
- > Arquivo de referência compartilhado pelas skills da Suíte DDIA Foundations v1.22 (capítulos 4, 5, 6, 7, 8, 9 e 11 de *Designing Data-Intensive Applications*, Martin Kleppmann, O'Reilly 2017, ISBN 978-1-449-37332-0). **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas 7 skills da suíte via Markdown link relativo.
4
- >
5
- > **Cross-suite reference ATIVO:** termos Supabase já definidos em [`_shared-supabase/glossary.md`](../_shared-supabase/glossary.md) (v1.8) e termos multi-tenant em [`_shared-multi-tenant/glossary.md`](../_shared-multi-tenant/glossary.md) (v1.21) — esta skill **não duplica**, apenas linka. Termos como `RLS`, `STABLE`, `pgmq`, `pg_cron`, `wal2json`, `tenant`, `org_id`, `audit log`, `RBAC` são definidos lá.
6
-
7
- ---
8
-
9
- ## (a) Termos PT-BR ↔ EN — Modelos de Consistência (Ch 5, 9)
10
-
11
- | EN | PT-BR / Significado |
12
- |---|---|
13
- | **linearizability** | **Linearizabilidade** — modelo de consistência forte: dados replicados aparecem como uma única cópia, todas as operações executam atomicamente em uma ordem total única. Behavior = "variável em programa single-threaded". Custo: lento em redes com latência alta. Postgres single-leader oferece linearizabilidade no líder; réplicas físicas não. |
14
- | **causal consistency** | **Consistência causal** — modelo mais fraco que linearizabilidade: preserva ordem de eventos relacionados causalmente (causa antes do efeito), permite eventos concorrentes em qualquer ordem. Sem overhead de coordenação global. Adequado para chat/colaboração onde "resposta vem após pergunta" mas mensagens paralelas podem ter ordem livre. |
15
- | **eventual consistency** | **Consistência eventual** — modelo fraco: réplicas convergem ao mesmo estado *eventualmente* se as escritas pararem. Sem garantia de quando. Usado em feeds sociais, contadores, analytics. Anti-pattern: usar para invariantes (uniqueness, saldo financeiro). |
16
- | **read-after-write consistency** | **Consistência leitura-após-escrita** — usuário sempre vê os próprios writes mais recentes (mesmo lendo de réplica). Solução típica: roteamento sticky por `user_id` ou ler do líder por janela de tempo após write. |
17
- | **monotonic reads** | **Leituras monotônicas** — garantia de que leituras sucessivas do mesmo usuário não "voltam no tempo". Solução: sticky session por user para a mesma réplica. |
18
- | **consistent prefix reads** | **Prefixo causal consistente** — observador vê escritas em uma ordem que respeita causalidade (efeito não aparece antes da causa). Solução: log de replicação com partição por chave causal. |
19
-
20
- ---
21
-
22
- ## (b) Termos PT-BR ↔ EN — Replicação (Ch 5)
23
-
24
- | EN | PT-BR / Significado |
25
- |---|---|
26
- | **leader-follower replication** | **Replicação líder-seguidor** — single-leader: clientes mandam writes ao líder, líder propaga eventos de mudança aos seguidores (réplicas). Reads podem ser feitos em qualquer réplica (sujeito a lag). Pattern Postgres + read replicas Supabase Pro+. |
27
- | **multi-leader replication** | **Replicação multi-líder** — clientes mandam writes a qualquer um dos líderes, líderes sincronizam entre si. Robusto contra falhas/latência mas complexo (resolução de conflitos). Raramente usado em Supabase. |
28
- | **leaderless replication** | **Replicação sem líder** — clientes mandam write a N nodes, leem de M nodes em paralelo, detectam stale reads. Usado em Cassandra/DynamoDB; fora do escopo Supabase. |
29
- | **replication lag** | **Atraso de replicação** — diferença temporal entre commit no líder e visibilidade na réplica. Tipicamente <100ms em Supabase mas pode crescer sob carga. Mensurável via `pg_last_wal_replay_lsn()`. |
30
- | **synchronous replication** | **Replicação síncrona** — líder confirma write apenas após replicar para ≥1 seguidor. Garante zero data loss em failover; custo de latência. |
31
- | **asynchronous replication** | **Replicação assíncrona** — líder confirma write antes de replicar. Default Postgres. Risco: failover em momento de lag perde writes. |
32
-
33
- ---
34
-
35
- ## (c) Termos PT-BR ↔ EN — Transações e Isolamento (Ch 7)
36
-
37
- > Termos canônicos do livro DDIA + manual oficial Postgres preservados em EN (não traduzir nas descrições internas).
38
-
39
- | EN | PT-BR / Significado |
40
- |---|---|
41
- | **dirty read** | **Leitura suja** — transação A lê dados não-commitados de transação B. Prevenido por READ COMMITTED e níveis acima (default Postgres). |
42
- | **dirty write** | **Escrita suja** — transação A sobrescreve write não-commitado de transação B. Prevenido por todas as implementações de transação. |
43
- | **read skew** | **Distorção de leitura (não-repeatable read)** — cliente vê partes do DB em diferentes pontos no tempo durante a mesma transação. Prevenido por snapshot isolation (REPEATABLE READ Postgres). |
44
- | **lost update** | **Atualização perdida** — duas transações fazem read-modify-write concorrente; uma sobrescreve o write da outra sem incorporar suas mudanças. Prevenido por: `SELECT FOR UPDATE` (lock pessimista), CAS atomic com `WHERE version = $v` (lock otimista), ou `pg_advisory_xact_lock`. |
45
- | **write skew** | **Distorção de escrita** — transação lê algo, decide com base no valor, escreve a decisão. Mas a premissa da decisão é invalidada pelo write concorrente de outra transação. Apenas **serializable isolation** previne completamente. Mitigação no nível do app: materializar o conflito via `SELECT ... FOR UPDATE` em todas as rows do predicate. |
46
- | **phantom read** | **Leitura fantasma** — transação lê objetos que casam com search condition; outra transação muda resultados via insert/delete. Snapshot isolation previne phantoms simples; phantoms no contexto de write skew exigem index-range locks ou SSI. |
47
- | **MVCC** | **Multi-version concurrency control** — Postgres mantém múltiplas versões da mesma row; readers veem a versão consistente do snapshot da transação, sem bloquear writers. Base do REPEATABLE READ no Postgres. Visualizado via `xmin`/`xmax`. |
48
- | **snapshot isolation** | **Isolamento de snapshot** — transação lê de um snapshot consistente do DB tirado no início. Postgres REPEATABLE READ implementa via MVCC. Não previne write skew nem lost update genérico. |
49
- | **serializable snapshot isolation (SSI)** | **Isolamento de snapshot serializável (SSI)** — algoritmo otimista: transações executam sem bloquear; ao commit, sistema verifica se a execução foi serializável e aborta se não. Postgres SERIALIZABLE = SSI desde 9.1. Predicate-aware (detecta conflitos de write skew automaticamente). Trade-off: aborts esporádicos, app precisa retry. |
50
- | **two-phase locking (2PL)** | **Bloqueio em duas fases** — abordagem clássica de serializability: cada transação adquire locks em todas as rows lidas/escritas (fase 1) e libera no commit (fase 2). Custo de performance alto; raramente usado em Postgres moderno. |
51
- | **predicate lock** | **Lock por predicado** — lock que cobre não apenas rows existentes mas também rows futuras que casariam com o predicate. Necessário para prevenir phantoms em SSI. |
52
-
53
- ---
54
-
55
- ## (d) Termos PT-BR ↔ EN — Particionamento e Tenant Quente (Ch 6)
56
-
57
- | EN | PT-BR / Significado |
58
- |---|---|
59
- | **partition / shard** | **Partição / shard** — divisão horizontal de uma tabela: cada subset reside em uma partição separada. Postgres native via `PARTITION BY` (range/hash/list); Supabase suporta. |
60
- | **range partitioning** | **Particionamento por range** — partições por intervalos contínuos da chave (ex: `created_at` por mês). Bom para range scans; risco de hot partition na partição mais recente. |
61
- | **hash partitioning** | **Particionamento por hash** — partições pela função hash da chave (ex: `HASH (org_id) PARTITIONS 16`). Distribuição uniforme; perde locality para range scans. |
62
- | **hot partition / hot tenant** | **Partição quente / tenant quente** — partição/tenant que recebe desproporcionalmente mais traffic que a média (3×–100×). Caso canônico no livro: "tenant Justin Bieber" (celebridade que gera 1000× tráfego de um usuário comum). Detecção: queries/min ratio, storage GB ratio, slots de conexão ratio agrupados por `tenant_id`. |
63
- | **document-partitioned secondary index** | **Índice secundário particionado por documento** — índice secundário local em cada partição. Query cross-partition precisa scatter-gather (mais lento); writes baratos. Default recomendado no livro. |
64
- | **term-partitioned secondary index** | **Índice secundário particionado por termo** — índice global organizado pelo valor indexado. Query rápida; writes caros (precisa atualizar índice em outra partição). |
65
- | **rebalancing** | **Rebalanceamento** — redistribuir dados entre partições conforme volume cresce ou tenants ficam quentes. Estratégias: hash mod N (ruim, requer remap total ao adicionar node), consistent hashing, partitioning fixo (hash partitions = N nodes adiciona node = move 1/N partitions). |
66
-
67
- ---
68
-
69
- ## (e) Termos PT-BR ↔ EN — Sistemas Distribuídos: Armadilhas (Ch 8)
70
-
71
- | EN | PT-BR / Significado |
72
- |---|---|
73
- | **partial failure** | **Falha parcial** — sistema distribuído onde alguns nodes funcionam e outros não. Detecção via timeouts é falaciosa (lento ≠ morto). Mitigação: consenso de N-1 nodes, não decisão unilateral. |
74
- | **clock skew** | **Desvio de relógio** — relógios de diferentes nodes podem divergir significativamente (mesmo com NTP). NUNCA usar `clock_timestamp()` para lógica de expiração. Em Postgres: `now()` = início da transação (monotônico dentro), `clock_timestamp()` = wall clock real (pode pular para trás), `transaction_timestamp()` = alias para `now()`. |
75
- | **fencing token** | **Token de fencing (cerca)** — número monotônico crescente associado a uma lock/lease. Storage rejeita writes com token < último visto. Previne split-brain quando processo sofre GC pause, perde a lease, e volta sem saber. Implementação Postgres: `pg_advisory_xact_lock(hashtext('lock_name'))` + sequence monotônica para o ID. |
76
- | **GC pause / process pause** | **Pausa de GC / processo** — processo congela por segundos (garbage collector stop-the-world, swap para disco, virtualização). Outros nodes assumem que morreu, fazem failover; processo volta achando que ainda tem a lease. Mitigação: fencing token. |
77
- | **byzantine fault** | **Falha bizantina** — node mente / envia mensagens corrompidas / age maliciosamente. Fora do escopo de aplicações típicas (apenas blockchain / safety-critical). Default em Supabase: assumir crash-recovery model (node pode reiniciar com estado parcial), não byzantine. |
78
- | **phi accrual failure detector** | **Detector de falha phi accrual** — algoritmo probabilístico que estima a chance de um node estar morto baseado no histórico de heartbeats. Substitui timeout fixo binário. |
79
-
80
- ---
81
-
82
- ## (f) Termos PT-BR ↔ EN — Consensus (Ch 9)
83
-
84
- | EN | PT-BR / Significado |
85
- |---|---|
86
- | **consensus** | **Consenso** — N nodes concordam em uma decisão única e irrevogável (qual node é líder, qual valor a write tomou). Necessário para uniqueness constraints distribuídos, eleição de líder, total order broadcast. |
87
- | **total order broadcast** | **Broadcast de ordem total** — entrega de mensagens a todos os nodes na mesma ordem. Reducível a consenso. Em Postgres: WAL é total order broadcast natural para replicação. |
88
- | **two-phase commit (2PC)** | **Commit em duas fases (2PC)** — protocolo de commit atômico distribuído: coordinator pergunta "prepared?" a todos participants (fase 1), depois envia "commit/abort" (fase 2). Limitações: blocking se coordinator morre, performance impact, falta de heuristic recovery. Alternativas modernas: sagas, transactional outbox. |
89
- | **saga pattern** | **Saga** — alternativa a 2PC para transações distribuídas: sequência de transações locais, cada uma com compensating action que desfaz se step posterior falhar. |
90
- | **transactional outbox** | **Outbox transacional** — pattern de publishing eventos atomic com write no DB: `INSERT INTO outbox (event) VALUES (...)` na mesma transação do `UPDATE` principal; processador async lê outbox e publica no broker. Garante exactly-once entre DB e broker. |
91
- | **CAP theorem** | **Teorema CAP** — durante partição de rede, sistema escolhe Consistency (C) OU Availability (A); Partition tolerance (P) é dada (rede falha sempre). Postgres single-leader = CP (rejeita writes). |
92
- | **PACELC** | **PACELC** — extensão prática do CAP: durante Partição = escolher A vs C; Else (operação normal) = escolher Latency vs Consistency. Quadrante real onde sistemas vivem. |
93
-
94
- ---
95
-
96
- ## (g) Termos PT-BR ↔ EN — Encoding e Evolução (Ch 4)
97
-
98
- | EN | PT-BR / Significado |
99
- |---|---|
100
- | **encoding / serialization** | **Encoding / serialização** — converter representação in-memory (objetos, structs) em sequência de bytes para storage/network. Reversa = decoding/deserialization. |
101
- | **backward compatibility** | **Compat backward** — código novo lê dados escritos por código antigo. Geralmente fácil (autor do código novo conhece formato antigo). |
102
- | **forward compatibility** | **Compat forward** — código antigo lê dados escritos por código novo. Mais difícil — código antigo precisa ignorar campos novos sem quebrar. |
103
- | **rolling upgrade / staged rollout** | **Rolling upgrade / rollout escalonado** — deploy gradual: nova versão sobe em poucos nodes primeiro, validação, depois espalha. Permite zero downtime + rollback rápido se v2 quebrar. Pré-requisito: backward + forward compat dos dados em trânsito. |
104
- | **schema evolution** | **Evolução de schema** — mudança no schema de dados ao longo do tempo (add field, drop field, rename, type change) preservando compat. Avro/Protobuf têm regras formais; Postgres precisa de pattern 3-passos. |
105
- | **Avro** | Sistema de encoding binário schema-driven (Apache). Reader's schema diferente do writer's schema é resolvido via schema resolution rules. |
106
- | **Protocol Buffers / Protobuf** | Sistema de encoding binário schema-driven (Google). Field tags numéricos preservam compat; `optional` campos nunca quebram leitura. |
107
- | **Thrift** | Sistema de encoding binário schema-driven (Facebook). Similar a Protobuf em garantias de compat. |
108
- | **schema registry** | **Registro de schemas** — serviço central que armazena schemas versionados (typically para Avro/Kafka). Cada mensagem carrega ID do schema; consumer puxa schema do registry para deserializar. |
109
-
110
- ---
111
-
112
- ## (h) Termos PT-BR ↔ EN — Streams de Eventos (Ch 11)
113
-
114
- | EN | PT-BR / Significado |
115
- |---|---|
116
- | **AMQP/JMS-style broker** | **Broker AMQP/JMS-style** — broker assigna mensagens individuais a consumers; consumer faz ack; mensagem deletada após ack. Ex: RabbitMQ, postgres LISTEN/NOTIFY. Adequado para task queue onde ordem não importa. |
117
- | **log-based broker** | **Broker baseado em log** — broker grava mensagens em log append-only particionado; consumer rastreia offset; mensagens permanecem no disk (replayable). Ex: Kafka, pgmq. Adequado para stream processing. |
118
- | **CDC** | **Change Data Capture** — captura mudanças no DB como stream de eventos. Em Postgres: `wal2json`, Supabase Realtime broadcast, `pglogical`. Use cases: sync índice de busca, desnormalização, sync multi-region. |
119
- | **event sourcing** | **Event sourcing** — eventos imutáveis são source of truth; estado atual é projeção. Em Postgres: tabela append-only de eventos + projeções via Materialized Views ou trigger. Audit log v1.21 = event sourcing parcial. |
120
- | **exactly-once semantics** | **Semântica exactly-once** — cada evento processado uma e somente uma vez. Implementação Postgres: idempotency key + unique constraint, transactional outbox. |
121
- | **at-least-once semantics** | **Semântica at-least-once** — evento pode ser entregue mais de uma vez (retry após crash). Default Meta Cloud API webhooks. App precisa idempotency. |
122
- | **stream-stream join** | **Join stream-stream** — match entre dois streams dentro de janela temporal (ex: pedido + pagamento dentro de 5min). |
123
- | **stream-table join** | **Join stream-table** — stream de eventos enriquecido com lookup em changelog table (CDC + atividade). |
124
- | **table-table join** | **Join table-table** — merge de dois changelogs CDC, produzindo stream de mudanças da view materializada. |
125
- | **log compaction** | **Compactação de log** — para cada chave, manter apenas o último valor (não toda história). Pgmq usa retention TTL via `vacuum_archive`; event sourcing precisa snapshot periódico. |
126
-
127
- ---
128
-
129
- ## (i) Convenção de naming PT-BR (a partir de v1.22)
130
-
131
- A partir do milestone v1.22 (Suíte DDIA Foundations), o kit-mcp adota **PT-BR como linguagem default** para naming de skills, agents, commands e diretórios `_shared-*`. Esta seção é a **referência canônica** consumida pelas 7 skills da suíte e pelas suítes futuras.
132
-
133
- ### Regras
134
-
135
- | Regra | Aplicação | Exemplo |
136
- |---|---|---|
137
- | **Novos artefatos: PT-BR** | Skills/agents/commands criados a partir de v1.22 usam nomes PT-BR | `evolucao-schema-compativel`, `tenant-quente-mitigacao`, `auditor-consistencia-isolamento` |
138
- | **Termos técnicos canônicos preservados** | Termos do manual oficial Postgres, livros DDIA/SRE/Feathers, RFCs e specs ficam em EN dentro de descrições/conteúdo | `write skew`, `lost update`, `MVCC`, `RLS`, `CDC`, `snapshot isolation`, `fencing token`, `linearizability` |
139
- | **Artefatos pré-v1.22 NÃO renomeados** | Skills/agents/commands de v1.0 → v1.21 mantêm nomes EN para preservar discoverability via `mcp__kit__list_kit` e quebra zero de cross-refs externos | `multi-tenant-rls-hierarchy` (v1.21), `supabase-edge-functions` (v1.8), `core-analysis-loop` (v1.10) |
140
- | **Diretórios `_shared-*` PT-BR** | Novos diretórios compartilhados usam PT-BR | `_shared-dados-distribuidos` (v1.22) vs `_shared-multi-tenant` (v1.21, mantido) |
141
- | **Code blocks SQL/TS em EN** | Identificadores SQL e TypeScript permanecem em EN; comentários acima do código em PT-BR | `-- Adiciona coluna nullable\nalter table public.leads add column phone_country text;` |
142
- | **Headings de skill em PT-BR** | Títulos de seção em PT-BR; termos técnicos canônicos preservados na descrição | `## Quando usar`, `## Regras absolutas`, `## Patterns canônicos`, `## Anti-patterns`, `## Ver também` |
143
- | **Frontmatter `description:` em PT-BR** | Início da descrição em PT-BR; termos técnicos preservados | `description: Use ao escrever migration Postgres ... padrão 3-passos (adicionar nullable → backfill em batches → impor NOT NULL), análogos Avro/Protobuf...` |
144
-
145
- ### Exemplos lado a lado
146
-
147
- ```
148
- # v1.22 (PT-BR novo)
149
- kit/skills/evolucao-schema-compativel/SKILL.md
150
- kit/skills/tenant-quente-mitigacao/SKILL.md
151
- kit/skills/postgres-isolamento-concorrencia/SKILL.md
152
- kit/agents/auditor-consistencia-isolamento.md
153
- kit/commands/dados-distribuidos.md
154
- kit/skills/_shared-dados-distribuidos/glossary.md
155
-
156
- # v1.21 (EN preservado, NÃO renomeado)
157
- kit/skills/multi-tenant-rls-hierarchy/SKILL.md
158
- kit/skills/audit-log-multi-tenant/SKILL.md
159
- kit/agents/multi-tenant-isolation-auditor.md
160
- kit/commands/multi-tenant.md
161
- kit/skills/_shared-multi-tenant/glossary.md
162
- ```
163
-
164
- ### Rationale
165
-
166
- 1. **Alinhamento com o usuário primário** do kit-mcp (português brasileiro) — nomes de comandos digitados frequentemente devem ser legíveis na língua nativa.
167
- 2. **Preservação de termos canônicos** porque o vocabulário técnico (write skew, MVCC, RLS, CDC) é o mesmo em qualquer língua e está consagrado na literatura — traduzir cria ambiguidade ("distorção de escrita" sozinho ≠ "write skew" para quem busca via Google).
168
- 3. **Não-renomeação retroativa** evita quebra silenciosa de cross-refs entre skills (`see also: multi-tenant-rls-hierarchy`), bookmarks de usuários, e referências externas em PRs/Notion.
169
-
170
- ### Checklist para skill v1.22+
171
-
172
- - [ ] Nome do diretório/arquivo em PT-BR (kebab-case)
173
- - [ ] Frontmatter `description:` começa em PT-BR
174
- - [ ] Termos técnicos canônicos preservados em EN dentro da descrição
175
- - [ ] Headings em PT-BR
176
- - [ ] Texto narrativo em PT-BR
177
- - [ ] Code blocks SQL/TS em EN; comentários em PT-BR
178
- - [ ] Cross-refs ATIVOS (link Markdown relativo) para glossário e skills relacionadas — sem duplicar definições
179
-
180
- ---
181
-
182
- ## (j) Cross-Refs Externos
183
-
184
- - [Designing Data-Intensive Applications, Martin Kleppmann (O'Reilly 2017)](https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/) — fonte canônica desta suíte
185
- - [PostgreSQL Documentation — Concurrency Control](https://www.postgresql.org/docs/current/mvcc.html)
186
- - [PostgreSQL Documentation — Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html)
187
- - [Apache Avro — Schema Evolution](https://avro.apache.org/docs/current/spec.html#Schema+Resolution)
188
- - [Protocol Buffers — Updating Message Types](https://protobuf.dev/programming-guides/proto3/#updating)
189
- - [Martin Kleppmann blog — Schema evolution in Avro, Protocol Buffers and Thrift](https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html)
190
- - [Supabase Supavisor 1M Connections](https://supabase.com/blog/supavisor-1-million)
191
- - [PostgreSQL Wiki — Loose indexscan / Hot update / pg_stat_statements](https://wiki.postgresql.org/)
192
-
193
- ---
194
-
195
- ## (k) Cross-Suite Invocation Pattern (herdado de v1.21)
196
-
197
- Skills da Suíte DDIA Foundations **não duplicam** lógica das suítes anteriores. Padrão canônico de delegação:
198
-
199
- ```
200
- evolucao-schema-compativel (v1.22)
201
- ├─ cross-ref ativo para supabase-migrations (v1.8) — naming convention + RLS obrigatório
202
- └─ cross-ref ativo para supabase-declarative-schema (v1.8) — workflow stop → db diff → revisar
203
-
204
- tenant-quente-mitigacao (v1.22)
205
- ├─ cross-ref ativo para multi-tenant-performance-scaling (v1.21) — Supavisor + partial indexes
206
- └─ cross-ref ativo para b2b-saas-architecture (v1.21) — Single Schema + org_id default
207
-
208
- streams-eventos-cdc (v1.22)
209
- ├─ cross-ref ativo para supabase-cron-queues (v1.8) — pg_cron + pgmq pattern
210
- ├─ cross-ref ativo para audit-log-multi-tenant (v1.21) — append-only event sourcing semântica
211
- └─ cross-ref ativo para supabase-realtime (v1.8) — broadcast como CDC stream
212
-
213
- postgres-isolamento-concorrencia (v1.22)
214
- └─ cross-ref ativo para supabase-database-functions (v1.8) — STABLE/IMMUTABLE/VOLATILE markers
215
-
216
- auditor-consistencia-isolamento (v1.22)
217
- └─→ Task(supabase-migration-writer) # SQL final corrigido
218
- └─→ Task(supabase-edge-fn-writer) # Edge Function instrumentada
219
-
220
- validador-evolucao-schema (v1.22)
221
- └─ invocado por supabase-migration-writer (v1.8) ANTES de escrever migration arriscada
222
- ```
223
-
224
- **Anti-pattern:** skill v1.22 reescrever lógica RLS multi-tenant do zero (deve cross-ref). Agent v1.22 escrever migration direta (deve delegar para `supabase-migration-writer`).
1
+ # Glossário Dados Distribuídos — Termos, Patterns e Convenções
2
+
3
+ > Arquivo de referência compartilhado pelas skills da Suíte DDIA Foundations v1.22 (capítulos 4, 5, 6, 7, 8, 9 e 11 de *Designing Data-Intensive Applications*, Martin Kleppmann, O'Reilly 2017, ISBN 978-1-449-37332-0). **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas 7 skills da suíte via Markdown link relativo.
4
+ >
5
+ > **Cross-suite reference ATIVO:** termos Supabase já definidos em [`_shared-supabase/glossary.md`](../_shared-supabase/glossary.md) (v1.8) e termos multi-tenant em [`_shared-multi-tenant/glossary.md`](../_shared-multi-tenant/glossary.md) (v1.21) — esta skill **não duplica**, apenas linka. Termos como `RLS`, `STABLE`, `pgmq`, `pg_cron`, `wal2json`, `tenant`, `org_id`, `audit log`, `RBAC` são definidos lá.
6
+
7
+ ---
8
+
9
+ ## (a) Termos PT-BR ↔ EN — Modelos de Consistência (Ch 5, 9)
10
+
11
+ | EN | PT-BR / Significado |
12
+ |---|---|
13
+ | **linearizability** | **Linearizabilidade** — modelo de consistência forte: dados replicados aparecem como uma única cópia, todas as operações executam atomicamente em uma ordem total única. Behavior = "variável em programa single-threaded". Custo: lento em redes com latência alta. Postgres single-leader oferece linearizabilidade no líder; réplicas físicas não. |
14
+ | **causal consistency** | **Consistência causal** — modelo mais fraco que linearizabilidade: preserva ordem de eventos relacionados causalmente (causa antes do efeito), permite eventos concorrentes em qualquer ordem. Sem overhead de coordenação global. Adequado para chat/colaboração onde "resposta vem após pergunta" mas mensagens paralelas podem ter ordem livre. |
15
+ | **eventual consistency** | **Consistência eventual** — modelo fraco: réplicas convergem ao mesmo estado *eventualmente* se as escritas pararem. Sem garantia de quando. Usado em feeds sociais, contadores, analytics. Anti-pattern: usar para invariantes (uniqueness, saldo financeiro). |
16
+ | **read-after-write consistency** | **Consistência leitura-após-escrita** — usuário sempre vê os próprios writes mais recentes (mesmo lendo de réplica). Solução típica: roteamento sticky por `user_id` ou ler do líder por janela de tempo após write. |
17
+ | **monotonic reads** | **Leituras monotônicas** — garantia de que leituras sucessivas do mesmo usuário não "voltam no tempo". Solução: sticky session por user para a mesma réplica. |
18
+ | **consistent prefix reads** | **Prefixo causal consistente** — observador vê escritas em uma ordem que respeita causalidade (efeito não aparece antes da causa). Solução: log de replicação com partição por chave causal. |
19
+
20
+ ---
21
+
22
+ ## (b) Termos PT-BR ↔ EN — Replicação (Ch 5)
23
+
24
+ | EN | PT-BR / Significado |
25
+ |---|---|
26
+ | **leader-follower replication** | **Replicação líder-seguidor** — single-leader: clientes mandam writes ao líder, líder propaga eventos de mudança aos seguidores (réplicas). Reads podem ser feitos em qualquer réplica (sujeito a lag). Pattern Postgres + read replicas Supabase Pro+. |
27
+ | **multi-leader replication** | **Replicação multi-líder** — clientes mandam writes a qualquer um dos líderes, líderes sincronizam entre si. Robusto contra falhas/latência mas complexo (resolução de conflitos). Raramente usado em Supabase. |
28
+ | **leaderless replication** | **Replicação sem líder** — clientes mandam write a N nodes, leem de M nodes em paralelo, detectam stale reads. Usado em Cassandra/DynamoDB; fora do escopo Supabase. |
29
+ | **replication lag** | **Atraso de replicação** — diferença temporal entre commit no líder e visibilidade na réplica. Tipicamente <100ms em Supabase mas pode crescer sob carga. Mensurável via `pg_last_wal_replay_lsn()`. |
30
+ | **synchronous replication** | **Replicação síncrona** — líder confirma write apenas após replicar para ≥1 seguidor. Garante zero data loss em failover; custo de latência. |
31
+ | **asynchronous replication** | **Replicação assíncrona** — líder confirma write antes de replicar. Default Postgres. Risco: failover em momento de lag perde writes. |
32
+
33
+ ---
34
+
35
+ ## (c) Termos PT-BR ↔ EN — Transações e Isolamento (Ch 7)
36
+
37
+ > Termos canônicos do livro DDIA + manual oficial Postgres preservados em EN (não traduzir nas descrições internas).
38
+
39
+ | EN | PT-BR / Significado |
40
+ |---|---|
41
+ | **dirty read** | **Leitura suja** — transação A lê dados não-commitados de transação B. Prevenido por READ COMMITTED e níveis acima (default Postgres). |
42
+ | **dirty write** | **Escrita suja** — transação A sobrescreve write não-commitado de transação B. Prevenido por todas as implementações de transação. |
43
+ | **read skew** | **Distorção de leitura (não-repeatable read)** — cliente vê partes do DB em diferentes pontos no tempo durante a mesma transação. Prevenido por snapshot isolation (REPEATABLE READ Postgres). |
44
+ | **lost update** | **Atualização perdida** — duas transações fazem read-modify-write concorrente; uma sobrescreve o write da outra sem incorporar suas mudanças. Prevenido por: `SELECT FOR UPDATE` (lock pessimista), CAS atomic com `WHERE version = $v` (lock otimista), ou `pg_advisory_xact_lock`. |
45
+ | **write skew** | **Distorção de escrita** — transação lê algo, decide com base no valor, escreve a decisão. Mas a premissa da decisão é invalidada pelo write concorrente de outra transação. Apenas **serializable isolation** previne completamente. Mitigação no nível do app: materializar o conflito via `SELECT ... FOR UPDATE` em todas as rows do predicate. |
46
+ | **phantom read** | **Leitura fantasma** — transação lê objetos que casam com search condition; outra transação muda resultados via insert/delete. Snapshot isolation previne phantoms simples; phantoms no contexto de write skew exigem index-range locks ou SSI. |
47
+ | **MVCC** | **Multi-version concurrency control** — Postgres mantém múltiplas versões da mesma row; readers veem a versão consistente do snapshot da transação, sem bloquear writers. Base do REPEATABLE READ no Postgres. Visualizado via `xmin`/`xmax`. |
48
+ | **snapshot isolation** | **Isolamento de snapshot** — transação lê de um snapshot consistente do DB tirado no início. Postgres REPEATABLE READ implementa via MVCC. Não previne write skew nem lost update genérico. |
49
+ | **serializable snapshot isolation (SSI)** | **Isolamento de snapshot serializável (SSI)** — algoritmo otimista: transações executam sem bloquear; ao commit, sistema verifica se a execução foi serializável e aborta se não. Postgres SERIALIZABLE = SSI desde 9.1. Predicate-aware (detecta conflitos de write skew automaticamente). Trade-off: aborts esporádicos, app precisa retry. |
50
+ | **two-phase locking (2PL)** | **Bloqueio em duas fases** — abordagem clássica de serializability: cada transação adquire locks em todas as rows lidas/escritas (fase 1) e libera no commit (fase 2). Custo de performance alto; raramente usado em Postgres moderno. |
51
+ | **predicate lock** | **Lock por predicado** — lock que cobre não apenas rows existentes mas também rows futuras que casariam com o predicate. Necessário para prevenir phantoms em SSI. |
52
+
53
+ ---
54
+
55
+ ## (d) Termos PT-BR ↔ EN — Particionamento e Tenant Quente (Ch 6)
56
+
57
+ | EN | PT-BR / Significado |
58
+ |---|---|
59
+ | **partition / shard** | **Partição / shard** — divisão horizontal de uma tabela: cada subset reside em uma partição separada. Postgres native via `PARTITION BY` (range/hash/list); Supabase suporta. |
60
+ | **range partitioning** | **Particionamento por range** — partições por intervalos contínuos da chave (ex: `created_at` por mês). Bom para range scans; risco de hot partition na partição mais recente. |
61
+ | **hash partitioning** | **Particionamento por hash** — partições pela função hash da chave (ex: `HASH (org_id) PARTITIONS 16`). Distribuição uniforme; perde locality para range scans. |
62
+ | **hot partition / hot tenant** | **Partição quente / tenant quente** — partição/tenant que recebe desproporcionalmente mais traffic que a média (3×–100×). Caso canônico no livro: "tenant Justin Bieber" (celebridade que gera 1000× tráfego de um usuário comum). Detecção: queries/min ratio, storage GB ratio, slots de conexão ratio agrupados por `tenant_id`. |
63
+ | **document-partitioned secondary index** | **Índice secundário particionado por documento** — índice secundário local em cada partição. Query cross-partition precisa scatter-gather (mais lento); writes baratos. Default recomendado no livro. |
64
+ | **term-partitioned secondary index** | **Índice secundário particionado por termo** — índice global organizado pelo valor indexado. Query rápida; writes caros (precisa atualizar índice em outra partição). |
65
+ | **rebalancing** | **Rebalanceamento** — redistribuir dados entre partições conforme volume cresce ou tenants ficam quentes. Estratégias: hash mod N (ruim, requer remap total ao adicionar node), consistent hashing, partitioning fixo (hash partitions = N nodes adiciona node = move 1/N partitions). |
66
+
67
+ ---
68
+
69
+ ## (e) Termos PT-BR ↔ EN — Sistemas Distribuídos: Armadilhas (Ch 8)
70
+
71
+ | EN | PT-BR / Significado |
72
+ |---|---|
73
+ | **partial failure** | **Falha parcial** — sistema distribuído onde alguns nodes funcionam e outros não. Detecção via timeouts é falaciosa (lento ≠ morto). Mitigação: consenso de N-1 nodes, não decisão unilateral. |
74
+ | **clock skew** | **Desvio de relógio** — relógios de diferentes nodes podem divergir significativamente (mesmo com NTP). NUNCA usar `clock_timestamp()` para lógica de expiração. Em Postgres: `now()` = início da transação (monotônico dentro), `clock_timestamp()` = wall clock real (pode pular para trás), `transaction_timestamp()` = alias para `now()`. |
75
+ | **fencing token** | **Token de fencing (cerca)** — número monotônico crescente associado a uma lock/lease. Storage rejeita writes com token < último visto. Previne split-brain quando processo sofre GC pause, perde a lease, e volta sem saber. Implementação Postgres: `pg_advisory_xact_lock(hashtext('lock_name'))` + sequence monotônica para o ID. |
76
+ | **GC pause / process pause** | **Pausa de GC / processo** — processo congela por segundos (garbage collector stop-the-world, swap para disco, virtualização). Outros nodes assumem que morreu, fazem failover; processo volta achando que ainda tem a lease. Mitigação: fencing token. |
77
+ | **byzantine fault** | **Falha bizantina** — node mente / envia mensagens corrompidas / age maliciosamente. Fora do escopo de aplicações típicas (apenas blockchain / safety-critical). Default em Supabase: assumir crash-recovery model (node pode reiniciar com estado parcial), não byzantine. |
78
+ | **phi accrual failure detector** | **Detector de falha phi accrual** — algoritmo probabilístico que estima a chance de um node estar morto baseado no histórico de heartbeats. Substitui timeout fixo binário. |
79
+
80
+ ---
81
+
82
+ ## (f) Termos PT-BR ↔ EN — Consensus (Ch 9)
83
+
84
+ | EN | PT-BR / Significado |
85
+ |---|---|
86
+ | **consensus** | **Consenso** — N nodes concordam em uma decisão única e irrevogável (qual node é líder, qual valor a write tomou). Necessário para uniqueness constraints distribuídos, eleição de líder, total order broadcast. |
87
+ | **total order broadcast** | **Broadcast de ordem total** — entrega de mensagens a todos os nodes na mesma ordem. Reducível a consenso. Em Postgres: WAL é total order broadcast natural para replicação. |
88
+ | **two-phase commit (2PC)** | **Commit em duas fases (2PC)** — protocolo de commit atômico distribuído: coordinator pergunta "prepared?" a todos participants (fase 1), depois envia "commit/abort" (fase 2). Limitações: blocking se coordinator morre, performance impact, falta de heuristic recovery. Alternativas modernas: sagas, transactional outbox. |
89
+ | **saga pattern** | **Saga** — alternativa a 2PC para transações distribuídas: sequência de transações locais, cada uma com compensating action que desfaz se step posterior falhar. |
90
+ | **transactional outbox** | **Outbox transacional** — pattern de publishing eventos atomic com write no DB: `INSERT INTO outbox (event) VALUES (...)` na mesma transação do `UPDATE` principal; processador async lê outbox e publica no broker. Garante exactly-once entre DB e broker. |
91
+ | **CAP theorem** | **Teorema CAP** — durante partição de rede, sistema escolhe Consistency (C) OU Availability (A); Partition tolerance (P) é dada (rede falha sempre). Postgres single-leader = CP (rejeita writes). |
92
+ | **PACELC** | **PACELC** — extensão prática do CAP: durante Partição = escolher A vs C; Else (operação normal) = escolher Latency vs Consistency. Quadrante real onde sistemas vivem. |
93
+
94
+ ---
95
+
96
+ ## (g) Termos PT-BR ↔ EN — Encoding e Evolução (Ch 4)
97
+
98
+ | EN | PT-BR / Significado |
99
+ |---|---|
100
+ | **encoding / serialization** | **Encoding / serialização** — converter representação in-memory (objetos, structs) em sequência de bytes para storage/network. Reversa = decoding/deserialization. |
101
+ | **backward compatibility** | **Compat backward** — código novo lê dados escritos por código antigo. Geralmente fácil (autor do código novo conhece formato antigo). |
102
+ | **forward compatibility** | **Compat forward** — código antigo lê dados escritos por código novo. Mais difícil — código antigo precisa ignorar campos novos sem quebrar. |
103
+ | **rolling upgrade / staged rollout** | **Rolling upgrade / rollout escalonado** — deploy gradual: nova versão sobe em poucos nodes primeiro, validação, depois espalha. Permite zero downtime + rollback rápido se v2 quebrar. Pré-requisito: backward + forward compat dos dados em trânsito. |
104
+ | **schema evolution** | **Evolução de schema** — mudança no schema de dados ao longo do tempo (add field, drop field, rename, type change) preservando compat. Avro/Protobuf têm regras formais; Postgres precisa de pattern 3-passos. |
105
+ | **Avro** | Sistema de encoding binário schema-driven (Apache). Reader's schema diferente do writer's schema é resolvido via schema resolution rules. |
106
+ | **Protocol Buffers / Protobuf** | Sistema de encoding binário schema-driven (Google). Field tags numéricos preservam compat; `optional` campos nunca quebram leitura. |
107
+ | **Thrift** | Sistema de encoding binário schema-driven (Facebook). Similar a Protobuf em garantias de compat. |
108
+ | **schema registry** | **Registro de schemas** — serviço central que armazena schemas versionados (typically para Avro/Kafka). Cada mensagem carrega ID do schema; consumer puxa schema do registry para deserializar. |
109
+
110
+ ---
111
+
112
+ ## (h) Termos PT-BR ↔ EN — Streams de Eventos (Ch 11)
113
+
114
+ | EN | PT-BR / Significado |
115
+ |---|---|
116
+ | **AMQP/JMS-style broker** | **Broker AMQP/JMS-style** — broker assigna mensagens individuais a consumers; consumer faz ack; mensagem deletada após ack. Ex: RabbitMQ, postgres LISTEN/NOTIFY. Adequado para task queue onde ordem não importa. |
117
+ | **log-based broker** | **Broker baseado em log** — broker grava mensagens em log append-only particionado; consumer rastreia offset; mensagens permanecem no disk (replayable). Ex: Kafka, pgmq. Adequado para stream processing. |
118
+ | **CDC** | **Change Data Capture** — captura mudanças no DB como stream de eventos. Em Postgres: `wal2json`, Supabase Realtime broadcast, `pglogical`. Use cases: sync índice de busca, desnormalização, sync multi-region. |
119
+ | **event sourcing** | **Event sourcing** — eventos imutáveis são source of truth; estado atual é projeção. Em Postgres: tabela append-only de eventos + projeções via Materialized Views ou trigger. Audit log v1.21 = event sourcing parcial. |
120
+ | **exactly-once semantics** | **Semântica exactly-once** — cada evento processado uma e somente uma vez. Implementação Postgres: idempotency key + unique constraint, transactional outbox. |
121
+ | **at-least-once semantics** | **Semântica at-least-once** — evento pode ser entregue mais de uma vez (retry após crash). Default Meta Cloud API webhooks. App precisa idempotency. |
122
+ | **stream-stream join** | **Join stream-stream** — match entre dois streams dentro de janela temporal (ex: pedido + pagamento dentro de 5min). |
123
+ | **stream-table join** | **Join stream-table** — stream de eventos enriquecido com lookup em changelog table (CDC + atividade). |
124
+ | **table-table join** | **Join table-table** — merge de dois changelogs CDC, produzindo stream de mudanças da view materializada. |
125
+ | **log compaction** | **Compactação de log** — para cada chave, manter apenas o último valor (não toda história). Pgmq usa retention TTL via `vacuum_archive`; event sourcing precisa snapshot periódico. |
126
+
127
+ ---
128
+
129
+ ## (i) Convenção de naming PT-BR (a partir de v1.22)
130
+
131
+ A partir do milestone v1.22 (Suíte DDIA Foundations), o kit-mcp adota **PT-BR como linguagem default** para naming de skills, agents, commands e diretórios `_shared-*`. Esta seção é a **referência canônica** consumida pelas 7 skills da suíte e pelas suítes futuras.
132
+
133
+ ### Regras
134
+
135
+ | Regra | Aplicação | Exemplo |
136
+ |---|---|---|
137
+ | **Novos artefatos: PT-BR** | Skills/agents/commands criados a partir de v1.22 usam nomes PT-BR | `evolucao-schema-compativel`, `tenant-quente-mitigacao`, `auditor-consistencia-isolamento` |
138
+ | **Termos técnicos canônicos preservados** | Termos do manual oficial Postgres, livros DDIA/SRE/Feathers, RFCs e specs ficam em EN dentro de descrições/conteúdo | `write skew`, `lost update`, `MVCC`, `RLS`, `CDC`, `snapshot isolation`, `fencing token`, `linearizability` |
139
+ | **Artefatos pré-v1.22 NÃO renomeados** | Skills/agents/commands de v1.0 → v1.21 mantêm nomes EN para preservar discoverability via `mcp__kit__list_kit` e quebra zero de cross-refs externos | `multi-tenant-rls-hierarchy` (v1.21), `supabase-edge-functions` (v1.8), `core-analysis-loop` (v1.10) |
140
+ | **Diretórios `_shared-*` PT-BR** | Novos diretórios compartilhados usam PT-BR | `_shared-dados-distribuidos` (v1.22) vs `_shared-multi-tenant` (v1.21, mantido) |
141
+ | **Code blocks SQL/TS em EN** | Identificadores SQL e TypeScript permanecem em EN; comentários acima do código em PT-BR | `-- Adiciona coluna nullable\nalter table public.leads add column phone_country text;` |
142
+ | **Headings de skill em PT-BR** | Títulos de seção em PT-BR; termos técnicos canônicos preservados na descrição | `## Quando usar`, `## Regras absolutas`, `## Patterns canônicos`, `## Anti-patterns`, `## Ver também` |
143
+ | **Frontmatter `description:` em PT-BR** | Início da descrição em PT-BR; termos técnicos preservados | `description: Use ao escrever migration Postgres ... padrão 3-passos (adicionar nullable → backfill em batches → impor NOT NULL), análogos Avro/Protobuf...` |
144
+
145
+ ### Exemplos lado a lado
146
+
147
+ ```
148
+ # v1.22 (PT-BR novo)
149
+ kit/skills/evolucao-schema-compativel/SKILL.md
150
+ kit/skills/tenant-quente-mitigacao/SKILL.md
151
+ kit/skills/postgres-isolamento-concorrencia/SKILL.md
152
+ kit/agents/auditor-consistencia-isolamento.md
153
+ kit/commands/dados-distribuidos.md
154
+ kit/skills/_shared-dados-distribuidos/glossary.md
155
+
156
+ # v1.21 (EN preservado, NÃO renomeado)
157
+ kit/skills/multi-tenant-rls-hierarchy/SKILL.md
158
+ kit/skills/audit-log-multi-tenant/SKILL.md
159
+ kit/agents/multi-tenant-isolation-auditor.md
160
+ kit/commands/multi-tenant.md
161
+ kit/skills/_shared-multi-tenant/glossary.md
162
+ ```
163
+
164
+ ### Rationale
165
+
166
+ 1. **Alinhamento com o usuário primário** do kit-mcp (português brasileiro) — nomes de comandos digitados frequentemente devem ser legíveis na língua nativa.
167
+ 2. **Preservação de termos canônicos** porque o vocabulário técnico (write skew, MVCC, RLS, CDC) é o mesmo em qualquer língua e está consagrado na literatura — traduzir cria ambiguidade ("distorção de escrita" sozinho ≠ "write skew" para quem busca via Google).
168
+ 3. **Não-renomeação retroativa** evita quebra silenciosa de cross-refs entre skills (`see also: multi-tenant-rls-hierarchy`), bookmarks de usuários, e referências externas em PRs/Notion.
169
+
170
+ ### Checklist para skill v1.22+
171
+
172
+ - [ ] Nome do diretório/arquivo em PT-BR (kebab-case)
173
+ - [ ] Frontmatter `description:` começa em PT-BR
174
+ - [ ] Termos técnicos canônicos preservados em EN dentro da descrição
175
+ - [ ] Headings em PT-BR
176
+ - [ ] Texto narrativo em PT-BR
177
+ - [ ] Code blocks SQL/TS em EN; comentários em PT-BR
178
+ - [ ] Cross-refs ATIVOS (link Markdown relativo) para glossário e skills relacionadas — sem duplicar definições
179
+
180
+ ---
181
+
182
+ ## (j) Cross-Refs Externos
183
+
184
+ - [Designing Data-Intensive Applications, Martin Kleppmann (O'Reilly 2017)](https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/) — fonte canônica desta suíte
185
+ - [PostgreSQL Documentation — Concurrency Control](https://www.postgresql.org/docs/current/mvcc.html)
186
+ - [PostgreSQL Documentation — Transaction Isolation](https://www.postgresql.org/docs/current/transaction-iso.html)
187
+ - [Apache Avro — Schema Evolution](https://avro.apache.org/docs/current/spec.html#Schema+Resolution)
188
+ - [Protocol Buffers — Updating Message Types](https://protobuf.dev/programming-guides/proto3/#updating)
189
+ - [Martin Kleppmann blog — Schema evolution in Avro, Protocol Buffers and Thrift](https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html)
190
+ - [Supabase Supavisor 1M Connections](https://supabase.com/blog/supavisor-1-million)
191
+ - [PostgreSQL Wiki — Loose indexscan / Hot update / pg_stat_statements](https://wiki.postgresql.org/)
192
+
193
+ ---
194
+
195
+ ## (k) Cross-Suite Invocation Pattern (herdado de v1.21)
196
+
197
+ Skills da Suíte DDIA Foundations **não duplicam** lógica das suítes anteriores. Padrão canônico de delegação:
198
+
199
+ ```
200
+ evolucao-schema-compativel (v1.22)
201
+ ├─ cross-ref ativo para supabase-migrations (v1.8) — naming convention + RLS obrigatório
202
+ └─ cross-ref ativo para supabase-declarative-schema (v1.8) — workflow stop → db diff → revisar
203
+
204
+ tenant-quente-mitigacao (v1.22)
205
+ ├─ cross-ref ativo para multi-tenant-performance-scaling (v1.21) — Supavisor + partial indexes
206
+ └─ cross-ref ativo para b2b-saas-architecture (v1.21) — Single Schema + org_id default
207
+
208
+ streams-eventos-cdc (v1.22)
209
+ ├─ cross-ref ativo para supabase-cron-queues (v1.8) — pg_cron + pgmq pattern
210
+ ├─ cross-ref ativo para audit-log-multi-tenant (v1.21) — append-only event sourcing semântica
211
+ └─ cross-ref ativo para supabase-realtime (v1.8) — broadcast como CDC stream
212
+
213
+ postgres-isolamento-concorrencia (v1.22)
214
+ └─ cross-ref ativo para supabase-database-functions (v1.8) — STABLE/IMMUTABLE/VOLATILE markers
215
+
216
+ auditor-consistencia-isolamento (v1.22)
217
+ └─→ Task(supabase-migration-writer) # SQL final corrigido
218
+ └─→ Task(supabase-edge-fn-writer) # Edge Function instrumentada
219
+
220
+ validador-evolucao-schema (v1.22)
221
+ └─ invocado por supabase-migration-writer (v1.8) ANTES de escrever migration arriscada
222
+ ```
223
+
224
+ **Anti-pattern:** skill v1.22 reescrever lógica RLS multi-tenant do zero (deve cross-ref). Agent v1.22 escrever migration direta (deve delegar para `supabase-migration-writer`).