@luanpdd/kit-mcp 1.22.0 → 1.26.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 (33) hide show
  1. package/README.md +267 -1
  2. package/kit/agents/audit-log-implementer.md +138 -0
  3. package/kit/agents/auditor-consistencia-isolamento.md +33 -0
  4. package/kit/agents/crm-pipeline-implementer.md +89 -0
  5. package/kit/agents/debugger.md +41 -0
  6. package/kit/agents/evolution-go-integrator.md +21 -0
  7. package/kit/agents/executor.md +41 -0
  8. package/kit/agents/invite-flow-implementer.md +52 -0
  9. package/kit/agents/lgpd-compliance-auditor.md +89 -0
  10. package/kit/agents/multi-tenant-rls-writer.md +78 -0
  11. package/kit/agents/org-onboarding-implementer.md +21 -0
  12. package/kit/agents/planner.md +31 -0
  13. package/kit/agents/supabase-architect.md +17 -0
  14. package/kit/agents/supabase-auth-bootstrapper.md +80 -0
  15. package/kit/agents/supabase-column-privileges-writer.md +399 -0
  16. package/kit/agents/supabase-migration-writer.md +129 -14
  17. package/kit/agents/supabase-rbac-implementer.md +392 -0
  18. package/kit/agents/supabase-rls-hardener.md +521 -0
  19. package/kit/agents/supabase-rls-writer.md +105 -9
  20. package/kit/agents/supabase-roles-implementer.md +355 -0
  21. package/kit/agents/super-admin-implementer.md +99 -0
  22. package/kit/commands/supabase.md +55 -8
  23. package/kit/file-manifest.json +32 -24
  24. package/kit/skills/_shared-supabase/glossary.md +27 -0
  25. package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +37 -0
  26. package/kit/skills/supabase-column-level-security/SKILL.md +426 -0
  27. package/kit/skills/supabase-custom-claims-rbac/SKILL.md +472 -0
  28. package/kit/skills/supabase-database-functions/SKILL.md +85 -0
  29. package/kit/skills/supabase-migrations/SKILL.md +123 -11
  30. package/kit/skills/supabase-postgres-roles/SKILL.md +392 -0
  31. package/kit/skills/supabase-rls-defense-in-depth/SKILL.md +418 -0
  32. package/kit/skills/supabase-rls-policies/SKILL.md +462 -12
  33. package/package.json +1 -1
package/README.md CHANGED
@@ -24,7 +24,7 @@ Inspired by [vinilana/dotcontext](https://github.com/vinilana/dotcontext) — se
24
24
  ---
25
25
 
26
26
  <!-- AUTOGEN-COUNTS-START -->
27
- **Bundled workflow:** 60 agents · 89 commands · 67 skills · 23 gates
27
+ **Bundled workflow:** 64 agents · 89 commands · 71 skills · 23 gates
28
28
  <!-- AUTOGEN-COUNTS-END -->
29
29
 
30
30
  ## What ships in the box
@@ -165,6 +165,272 @@ A production engineering layer derived from *Site Reliability Engineering: How G
165
165
 
166
166
  ---
167
167
 
168
+ ## Slash Commands Reference (89 commands)
169
+
170
+ Comandos do kit são organizados em **workflow lifecycle** (brownfield planning canônico) + **8 suítes especializadas** (Supabase, Observability, SRE, Legacy, Multi-Tenant, DDIA, etc.) + **quick actions** + **utilities**.
171
+
172
+ ### Workflow Lifecycle (brownfield planning)
173
+
174
+ O fluxo canônico de um projeto: bootstrap → milestone → phase → execute → audit → publish.
175
+
176
+ | Comando | Objetivo |
177
+ |---------|----------|
178
+ | `/novo-projeto` | Inicializa novo projeto com coleta profunda de contexto e PROJECT.md |
179
+ | `/novo-marco` | Inicia novo ciclo de milestone — atualiza PROJECT.md, encaminha para requisitos |
180
+ | `/novo-workspace` | Cria workspace isolado com cópias de repos e .planning/ independente |
181
+ | `/discutir-fase N` | Reúne contexto da fase por questionamento adaptativo antes do planejamento |
182
+ | `/listar-hipoteses-fase N` | Mostra hipóteses do Claude sobre abordagem antes do planejamento |
183
+ | `/planejar-fase N` | Cria plano detalhado da fase (PLAN.md) com loop de verificação |
184
+ | `/pesquisar-fase N` | Pesquisa como implementar uma fase (standalone — geralmente use planejar) |
185
+ | `/executar-fase N` | Executa todos os planos de uma fase com paralelização por ondas |
186
+ | `/autonomo` | Executa todas as fases restantes autônomamente — discuss→plan→execute por fase |
187
+ | `/auditar-marco` | Audita conclusão do milestone contra intenção original antes de arquivar |
188
+ | `/concluir-marco` | Arquiva milestone concluído, cria tag git, prepara para próxima versão |
189
+ | `/publicar` | Publica milestone — cria doc no Notion, abre PR no GitHub com link |
190
+ | `/publicar-rapido` | Variante leve do publicar para hotfix/quick-task — sem ROADMAP dependency |
191
+ | `/branch-pr` | Cria branch limpo para PR filtrando commits de .planning/ |
192
+
193
+ ### Phase Lifecycle (gerenciar fases)
194
+
195
+ | Comando | Objetivo |
196
+ |---------|----------|
197
+ | `/adicionar-fase` | Adiciona fase ao final do milestone atual no roadmap |
198
+ | `/inserir-fase` | Insere trabalho urgente como fase decimal (ex: 72.1) entre fases existentes |
199
+ | `/remover-fase N` | Remove fase futura do roadmap e renumera subsequentes |
200
+ | `/planejar-lacunas` | Cria fases para fechar lacunas identificadas pela auditoria de milestone |
201
+ | `/validar-fase N` | Audita retroativamente e preenche lacunas de validação para fase concluída |
202
+ | `/adicionar-testes N` | Gera testes para fase concluída com base em UAT + implementação |
203
+ | `/auditar-uat` | Auditoria multi-fase de todos itens de UAT e verificação pendentes |
204
+ | `/verificar-trabalho` | Valida funcionalidades construídas através de UAT conversacional |
205
+ | `/pausar-trabalho` | Cria handoff de contexto ao pausar trabalho no meio de uma fase |
206
+ | `/retomar-trabalho` | Retoma trabalho da sessão anterior com restauração completa de contexto |
207
+
208
+ ### Suite `/supabase` (v1.8 + v1.23-v1.26 — 4 camadas de segurança canônicas)
209
+
210
+ Orquestrador `/supabase <subcomando>` com 14 subcomandos (sinônimos PT/EN). Toda a trilha de segurança Supabase canônica está implementada.
211
+
212
+ | Subcomando | Objetivo | Cross-ref |
213
+ |------------|----------|-----------|
214
+ | `/supabase arquiteto` | Projeta schema + RLS + topologia realtime ANTES da implementação | v1.8 |
215
+ | `/supabase migration` | Escreve migration SQL com 5 blocos obrigatórios + auto-chain hardener | v1.23 |
216
+ | `/supabase rls` | Gera RLS policies granulares com GRANT + IS NOT NULL + views security_invoker | v1.23 |
217
+ | `/supabase hardener` | Canonical materializer RLS — recebe draft via Task, verdicts GO/STRENGTHEN/REWRITE | v1.23 |
218
+ | `/supabase column` | Column-Level privileges (REVOKE table-level + GRANT (col)) — PII/audit/billing | v1.24 |
219
+ | `/supabase rbac` | Custom Claims via Auth Hook (enum + user_roles + auth hook + authorize() function) | v1.25 |
220
+ | `/supabase role` | Postgres Roles (CREATE ROLE + INHERIT/NOINHERIT + GRANT/REVOKE) — system access | v1.26 |
221
+ | `/supabase edge` | Escreve Deno Edge Functions com imports npm:/jsr: + env vars + EdgeRuntime | |
222
+ | `/supabase realtime` | Configura canais Realtime — broadcast com private:true + RLS sobre realtime.messages | |
223
+ | `/supabase auth` | Bootstrap Next.js v16 + Supabase Auth com @supabase/ssr + jwt-decode listener | |
224
+ | `/supabase storage` | Configura buckets (públicos vs privados) + signed URLs + RLS sobre storage.objects | |
225
+ | `/supabase rag` | Edge Function com embeddings + pgvector (HNSW/IVFFlat + RLS with permissions) | |
226
+ | `/supabase cron` | Pattern `pg_cron + pgmq + pg_net` (cron → pgmq → Edge Function) | |
227
+ | `/supabase check` | Valida SQL antes de apply (schema-checker — FKs/colunas/tabelas referenciadas) | |
228
+
229
+ ### Suite `/observabilidade` (v1.9)
230
+
231
+ | Comando | Objetivo |
232
+ |---------|----------|
233
+ | `/observabilidade <sub>` | Orquestrador — dispatcha para instrumenter, investigator, slo-engineer, burn-rate-forecaster, omm-auditor |
234
+ | `/instrumentar-fase N` | Após `/planejar-fase`, gera INSTRUMENTATION.md por plano (spans + atributos canônicos) |
235
+ | `/investigar-producao` | Core Analysis Loop guiado em incidente real — estado persistente em `.planning/investigations/` |
236
+ | `/definir-slo` | Gera SLO.md + SQL para materializar SLI events em view/MV no Postgres |
237
+ | `/burn-rate-status` | Tabela dual-window por SLO (fast 1h + slow 6h) — page/ticket/warn alerts |
238
+ | `/auditar-observabilidade` | OMM-REPORT.md scored em 5 capacidades (resiliência/qualidade/complexidade/cadência/comportamento) |
239
+ | `/auditar-observabilidade-cobertura` | X/N Edge Functions com 4 golden signals + Y/N com SLO + Z/N com burn alert |
240
+
241
+ ### Suite `/sre` (v1.10 + v1.11)
242
+
243
+ | Comando | Objetivo |
244
+ |---------|----------|
245
+ | `/sre <sub>` | Orquestrador — dispatcha para golden-signals-instrumenter, toil-auditor, postmortem-writer, prr-conductor, etc. |
246
+ | `/golden-signals` | Instrumenta serviço/Edge Function com 4 golden signals OTel (Latency/Traffic/Errors/Saturation) |
247
+ | `/auditar-toil` | Identifica toil no projeto (6 critérios canônicos) + sugere automação via pg_cron |
248
+ | `/auditar-cascading` | Audita código para 5 triggers de cascading failure (sem timeout, retry sem jitter, etc.) |
249
+ | `/auditar-release` | Audita CI/CD para hermeticidade + reprodutibilidade + policy enforcement |
250
+ | `/load-shedding` | Aplica patches de load shedding em Edge Function/handler HTTP (drop policy, deadline-aware) |
251
+ | `/postmortem` | Postmortem blameless 9 seções (modo `--from-investigation` ou `--incident`) |
252
+ | `/prr` | Production Readiness Review scored em 6 axes (System/Instrumentation/Emergency/Capacity/Change/Performance) |
253
+ | `/risk-budget` | Error budget atual vs risk continuum (cap 3 SRE) — posiciona no continuum 99% → 99.999% |
254
+
255
+ ### Suite `/legacy` (v1.12 — Working Effectively with Legacy Code, Feathers 2004)
256
+
257
+ | Comando | Objetivo |
258
+ |---------|----------|
259
+ | `/legacy <sub>` | Orquestrador — dispatcha para legacy-characterizer, seam-finder, refactor-safety-auditor |
260
+ | `/caracterizar` | Gera characterization tests (cap 13 Feathers) — golden snapshots como oracle imutável |
261
+ | `/caracterizar-prompt` | Characterization de prompts/tools LLM em produção — temperature=0 + seed fixo |
262
+ | `/encontrar-seams` | Analisa código para identificar seams (object/link/preprocessing) — pré-requisito refactor |
263
+ | `/auditar-refactor` | Gate canônico ANTES de refactor — veredito GO/BLOCK/WARN |
264
+ | `/refactor-seguro` | Chain canônico — encontrar-seams → caracterizar → auditar-refactor → executar |
265
+ | `/capturar-payloads` | Instrumenta Edge Function para captura via mcp__supabase__get_logs por N dias |
266
+ | `/detectar-duplicacao` | Shotgun surgery — duplicação sintática (jscpd/regex) + semântica (embeddings) |
267
+ | `/storytelling` | IA gera mental model de codebase desconhecido (story 5 frases + naked CRC) |
268
+
269
+ ### Suite `/multi-tenant` (v1.21) e `/dados-distribuidos` (v1.22)
270
+
271
+ | Comando | Objetivo |
272
+ |---------|----------|
273
+ | `/multi-tenant <sub>` | Orquestrador B2B SaaS — 10 agents implementers (architect, rls, onboarding, invite, super-admin, audit-log, whatsapp, crm, lgpd, isolation-audit) |
274
+ | `/dados-distribuidos <sub>` | Orquestrador DDIA Foundations — auditor-consistencia-isolamento, detector-tenant-quente, validador-evolucao-schema |
275
+
276
+ ### UI Phase (frontend design contract)
277
+
278
+ | Comando | Objetivo |
279
+ |---------|----------|
280
+ | `/fase-ui N` | Gera contrato de design UI (UI-SPEC.md) para fases frontend |
281
+ | `/revisar-ui N` | Auditoria visual retroativa de 6 pilares do código frontend implementado |
282
+
283
+ ### Backlog & Ideas
284
+
285
+ | Comando | Objetivo |
286
+ |---------|----------|
287
+ | `/adicionar-backlog` | Adiciona ideia ao estacionamento de backlog (numeração 999.x) |
288
+ | `/revisar-backlog` | Revisa e promove itens do backlog para milestone ativo |
289
+ | `/plantar-ideia` | Captura ideia prospectiva com condições de gatilho — surge automaticamente no milestone certo |
290
+ | `/nota` | Captura de ideias sem fricção. Adicionar, listar ou promover notas para todos |
291
+ | `/adicionar-tarefa` | Captura ideia ou tarefa como todo a partir do contexto da conversa |
292
+ | `/verificar-tarefas` | Lista todos pendentes e seleciona um para trabalhar |
293
+
294
+ ### Quick Actions & Routing
295
+
296
+ | Comando | Objetivo |
297
+ |---------|----------|
298
+ | `/fazer "<task>"` | **Entrypoint canônico** — roteia texto livre para o comando correto. Use este na dúvida |
299
+ | `/proximo` | Avança automaticamente para o próximo passo lógico no workflow |
300
+ | `/progresso` | Verifica progresso do projeto, mostra contexto e roteia para próxima ação |
301
+ | `/expresso` | Tarefa rápida com garantias framework (commits atômicos + state tracking) sem agents opcionais |
302
+ | `/rapido` | Tarefa trivial inline — sem subagentes, sem overhead de planejamento |
303
+ | `/autonomo` | Executa fases restantes autônomamente — discuss→plan→execute por fase |
304
+ | `/depurar` | Depuração sistemática com estado persistente entre resets de contexto |
305
+ | `/forense` | Investigação post-mortem de workflows com falha — analisa git + artefatos + estado |
306
+
307
+ ### Workspace & Workflows (paralelos)
308
+
309
+ | Comando | Objetivo |
310
+ |---------|----------|
311
+ | `/fluxos-trabalho` | Gerencia fluxos paralelos — listar, criar, alternar, status, progresso, concluir, retomar |
312
+ | `/listar-workspaces` | Lista workspaces framework ativos e seu status |
313
+ | `/remover-workspace` | Remove workspace framework e limpa worktrees |
314
+ | `/fio` | Gerencia threads de contexto persistentes para trabalho entre sessões |
315
+ | `/gerenciador` | Central de comando interativa para gerenciar múltiplas fases em um terminal |
316
+
317
+ ### Utilities
318
+
319
+ | Comando | Objetivo |
320
+ |---------|----------|
321
+ | `/ajuda` | Mostra comandos disponíveis e guia de uso |
322
+ | `/atualizar` | Atualiza framework para versão mais recente com changelog |
323
+ | `/configuracoes` | Configura toggles de workflow e perfil de modelo |
324
+ | `/definir-perfil` | Altera perfil de modelo para agents framework (quality/balanced/budget/inherit) |
325
+ | `/perfil-usuario` | Gera perfil comportamental do desenvolvedor (artefatos descobríveis pelo Claude) |
326
+ | `/mapear-codebase` | Analisa base de código com agents paralelos para produzir docs em .planning/codebase/ |
327
+ | `/relatorio-sessao` | Relatório da sessão com estimativas de tokens, resumo de trabalho e resultados |
328
+ | `/estatisticas` | Estatísticas do projeto — fases, planos, requisitos, métricas git e timeline |
329
+ | `/saude` | Diagnostica integridade do diretório de planejamento e opcionalmente repara |
330
+ | `/sync-main` | Atualiza branch local com commits da main (pergunta qual priorizar em conflito) |
331
+ | `/limpeza` | Arquiva diretórios de fase acumulados de milestones concluídos |
332
+ | `/reaplicar-patches` | Reaplica modificações locais após atualização do framework |
333
+ | `/revisar` | Solicita revisão entre IAs de planos de fase a partir de CLIs externas |
334
+ | `/resumo-marco` | Resumo abrangente do projeto a partir dos artefatos do milestone |
335
+ | `/setup-notion` | Cria estrutura de páginas Notion para novo projeto + gera `.claude/notion-config.json` |
336
+ | `/entrar-discord` | Entrar na comunidade framework no Discord |
337
+
338
+ ---
339
+
340
+ ## Workflow exemplos
341
+
342
+ ### Exemplo 1: Ciclo completo de um milestone (brownfield)
343
+
344
+ ```bash
345
+ # 1. iniciar milestone
346
+ /novo-marco
347
+ # → coleta objetivos, opcionalmente pesquisa (4 agents paralelos), define REQUIREMENTS.md,
348
+ # invoca roadmapper para criar ROADMAP.md, commita
349
+
350
+ # 2. executar fase (manual passo-a-passo)
351
+ /discutir-fase 124 # gather context via questionamento adaptativo
352
+ /planejar-fase 124 # plan-checker → planner → PLAN.md
353
+ /executar-fase 124 # executor com atomic commits + verifier
354
+
355
+ # OU: executar todas as fases autônomamente
356
+ /autonomo # discuss → plan → execute por fase + commit atômico
357
+
358
+ # 3. auditar
359
+ /auditar-marco # verifica cobertura, integration entre phases, fluxos E2E
360
+
361
+ # 4. concluir e publicar
362
+ /concluir-marco # archive .planning/milestones/v{X.Y}-* + tag git
363
+ /publicar # Notion + PR GitHub com link Notion no body
364
+ ```
365
+
366
+ ### Exemplo 2: Trilha de segurança Supabase (v1.23-v1.26 cumulativos)
367
+
368
+ ```bash
369
+ # 1. arquitetura inicial — projeta schema + RLS + Postgres roles upfront
370
+ /supabase arquiteto "B2B SaaS com leads + audit log + invites + super-admin"
371
+
372
+ # 2. migration com 5 blocos obrigatórios (CREATE TABLE + GRANTs + RLS + 4 policies + INDEX)
373
+ /supabase migration "create_orgs_and_members"
374
+ # → auto-chain cooperativo com supabase-rls-hardener (Detector 1-10)
375
+
376
+ # 3. column-level para PII (v1.24)
377
+ /supabase column "audit_log payload protected — só security_admin"
378
+
379
+ # 4. RBAC via Custom Claims (v1.25)
380
+ /supabase rbac "roles admin/moderator/user + 8 permissions"
381
+ # → cria enum types + user_roles + auth hook + authorize() + RLS policies
382
+
383
+ # 5. Custom Postgres role para service accounts (v1.26)
384
+ /supabase role "platform_admin para super-admin operations"
385
+ ```
386
+
387
+ ### Exemplo 3: Investigação de incidente (Observability + SRE)
388
+
389
+ ```bash
390
+ # 1. diagnóstico
391
+ /investigar-producao # Core Analysis Loop com estado persistente
392
+ # → 4 fases: dados/hipótese/validação/root cause
393
+ # → arquiva em .planning/investigations/<id>.md
394
+
395
+ # 2. postmortem após fix
396
+ /postmortem --from-investigation <id>
397
+ # → blameless 9 seções (cap 15 livro Google SRE)
398
+
399
+ # 3. ajustar SLO se necessário
400
+ /definir-slo # SLI event-based + SQL materialization
401
+ /burn-rate-status # tabela dual-window — page/ticket/warn
402
+
403
+ # 4. PRR antes de scaled release
404
+ /prr --service "checkout" # scored em 6 axes
405
+ ```
406
+
407
+ ### Exemplo 4: Refactor seguro de código legado (v1.12)
408
+
409
+ ```bash
410
+ # Chain canônico — bloqueia se gates falhares
411
+ /refactor-seguro src/foo.ts
412
+ # 1. encontrar-seams — identifica object/link/preprocessing seams (cap 25 Feathers)
413
+ # 2. caracterizar — gera characterization tests (cap 13) cobrindo 5+ grupos de equivalência
414
+ # 3. auditar-refactor — veredito GO/BLOCK/WARN baseado em coverage + mutation
415
+ # 4. executor com safety net
416
+ ```
417
+
418
+ ### Exemplo 5: Quick action via roteamento canônico
419
+
420
+ ```bash
421
+ # Texto livre — kit roteia para o comando certo
422
+ /fazer "preciso adicionar uma tabela leads com phone email e org_id"
423
+ # → roteia para /supabase migration (que auto-chain para hardener + RLS)
424
+
425
+ /fazer "quero entender por que esse codebase está confuso"
426
+ # → roteia para /storytelling ou /mapear-codebase
427
+
428
+ /fazer "meu teste de produção tá flaky — não sei por que"
429
+ # → roteia para /depurar (cria sessão persistente)
430
+ ```
431
+
432
+ ---
433
+
168
434
  ## Prerequisites
169
435
 
170
436
  - **Node.js ≥ 20** (uses native ESM, no transpiler)
@@ -165,8 +165,146 @@ AUDIT-LOG-IMPLEMENTER · output integrado
165
165
  - Histogram `audit.log.payload_size_bytes` (detectar payload bloat)
166
166
  - Alarme se `audit.log.events.count{event_type=super_admin_action}` > baseline → suspeita de comprometimento
167
167
 
168
+ ## Cooperative handoff to supabase-rls-hardener (v1.23)
169
+
170
+ Após gerar CREATE TABLE audit_log + REVOKE DELETE/UPDATE + helper function `private.audit_log` + retention scheduler pg_cron, faça handoff cooperativo:
171
+
172
+ ```python
173
+ Task(subagent_type="supabase-rls-hardener", prompt=f"""
174
+ <upstream_intent>
175
+ Source agent: audit-log-implementer
176
+ Original goal: implementar audit log multi-tenant append-only para {org_context}
177
+ Constraints: REVOKE DELETE/UPDATE obrigatório (append-only); helper function private.audit_log com PII hashing; retention pg_cron 3 tiers (30d/90d/365d); legal_hold flag para LGPD
178
+ </upstream_intent>
179
+
180
+ <draft_sql>{generated_audit_log_sql}</draft_sql>
181
+
182
+ <user_facing_caller>true</user_facing_caller>
183
+ """)
184
+ ```
185
+
186
+ Hardener valida que append-only é blindado (sem policy de DELETE/UPDATE), GRANTs corretos, RLS ativa. **NUNCA descarte intent upstream silenciosamente**.
187
+
188
+ ## Cooperative handoff column-level (v1.24 — CROSS-11)
189
+
190
+ Audit log tem coluna `payload` (jsonb) que pode conter PII (IP, user agent, email em event login). Aplique Camada 8 de defense-in-depth via handoff cooperativo:
191
+
192
+ ```python
193
+ Task(subagent_type="supabase-column-privileges-writer", prompt=f"""
194
+ <upstream_intent>
195
+ Source agent: audit-log-implementer
196
+ Original goal: PII sanitization granular por coluna em audit_log para compliance LGPD/GDPR
197
+ Constraints: payload jsonb tem PII em events de login (IP, UA) + member_invited (email); legível só por security_admin + service_role
198
+ </upstream_intent>
199
+
200
+ <table>schema: public, name: audit_log</table>
201
+
202
+ <sensitive_columns>
203
+ - payload (jsonb — PII em events)
204
+ - actor_email (PII se presente)
205
+ </sensitive_columns>
206
+
207
+ <allowed_roles>
208
+ - service_role: SELECT all
209
+ - security_admin: SELECT all
210
+ - authenticated: SELECT (id, event_type, user_id, org_id, occurred_at) — excluding payload + actor_email
211
+ </allowed_roles>
212
+
213
+ <user_facing_caller>true</user_facing_caller>
214
+ """)
215
+ ```
216
+
217
+ **Princípio canônico v1.23 (herdado em v1.24):** agents não-Supabase pensam/planejam; agents Supabase materializam/hardenam.
218
+
219
+ ## Cooperative handoff Postgres Roles (v1.26 — CROSS-19)
220
+
221
+ Para acessar `audit_log.payload` (PII) com column-level GRANT (Camada 8 v1.24), crie role dedicado `security_admin` em vez de usar service_role API key. Auditabilidade superior via pg_stat_statements + role com BYPASSRLS específico. Aplique handoff cooperativo:
222
+
223
+ ```python
224
+ Task(subagent_type="supabase-roles-implementer", prompt=f"""
225
+ <upstream_intent>
226
+ Source agent: audit-log-implementer
227
+ Original goal: criar role security_admin para acesso payload PII do audit_log (system access)
228
+ Constraints: BYPASSRLS necessário (security_admin precisa ver todas orgs); column-level GRANT em payload (cross-ref v1.24); login opcional (pode ser group role usado via SET ROLE de DBA)
229
+ </upstream_intent>
230
+
231
+ <roles_to_create>
232
+ - name: security_admin
233
+ type: group # ou user se DBA precisa login direto
234
+ login: false
235
+ bypassrls: true
236
+ inherit: false
237
+ description: "Role para acesso payload PII em audit_log. Usado via SET ROLE por DBAs."
238
+ owner: "security-team@company.com"
239
+ </roles_to_create>
240
+
241
+ <grants>
242
+ security_admin:
243
+ - schema: public, usage: true
244
+ - table: public.audit_log, ops: [SELECT] # column-level já aplicado via v1.24
245
+ </grants>
246
+
247
+ <use_case>system_access</use_case>
248
+ <user_facing_caller>true</user_facing_caller>
249
+ """)
250
+ ```
251
+
252
+ ## Cooperative handoff RBAC via Custom Claims (v1.25 — CROSS-18)
253
+
254
+ Mudanças em roles (INSERT/UPDATE/DELETE em `public.user_roles`) devem gerar audit log automaticamente — pattern canônico v1.25 via trigger Postgres que dispara `audit_log` event quando role muda. Aplique handoff cooperativo:
255
+
256
+ ```python
257
+ Task(subagent_type="supabase-rbac-implementer", prompt=f"""
258
+ <upstream_intent>
259
+ Source agent: audit-log-implementer
260
+ Original goal: instalar audit trigger em user_roles table para registrar mudanças de role (event taxonomy: 'role_assigned', 'role_revoked')
261
+ Constraints: trigger AFTER INSERT/UPDATE/DELETE em public.user_roles dispara INSERT em audit_log com event_type, user_id, role, actor_id (auth.uid()), occurred_at; PII sanitization em payload (Camada 8 v1.24 column-level já aplicada)
262
+ </upstream_intent>
263
+
264
+ <roles>{detected_from_user_roles_table}</roles>
265
+ <permissions_matrix>{role_change_audit_permissions}</permissions_matrix>
266
+ <multi_tenant>{multi_tenant_flag}</multi_tenant>
267
+ <user_facing_caller>true</user_facing_caller>
268
+ """)
269
+ ```
270
+
271
+ **Trigger canônico (output esperado do rbac-implementer):**
272
+
273
+ ```sql
274
+ create or replace function public.audit_role_change()
275
+ returns trigger language plpgsql security definer set search_path = '' as $$
276
+ begin
277
+ if (tg_op = 'INSERT') then
278
+ insert into public.audit_log (event_type, user_id, payload, actor_id, occurred_at)
279
+ values ('role_assigned', new.user_id,
280
+ jsonb_build_object('role', new.role),
281
+ auth.uid(), now());
282
+ elsif (tg_op = 'DELETE') then
283
+ insert into public.audit_log (event_type, user_id, payload, actor_id, occurred_at)
284
+ values ('role_revoked', old.user_id,
285
+ jsonb_build_object('role', old.role),
286
+ auth.uid(), now());
287
+ end if;
288
+ return coalesce(new, old);
289
+ end; $$;
290
+
291
+ create trigger user_roles_audit
292
+ after insert or update or delete on public.user_roles
293
+ for each row execute function public.audit_role_change();
294
+ ```
295
+
296
+ **Eventos canônicos adicionados (event taxonomy v1.25):**
297
+ - `role_assigned` (action: INSERT em user_roles)
298
+ - `role_revoked` (action: DELETE em user_roles)
299
+ - `role_updated` (action: UPDATE — raro, usualmente DELETE+INSERT)
300
+
301
+ Cross-ref skill `audit-log-multi-tenant` event taxonomy + skill `supabase-custom-claims-rbac` v1.25.
302
+
168
303
  ## Ver também
169
304
 
305
+ - [supabase-rls-hardener](./supabase-rls-hardener.md) — canonical handoff target v1.23 (validation append-only)
306
+ - [supabase-column-privileges-writer](./supabase-column-privileges-writer.md) — canonical handoff target v1.24 (column-level PII sanitization)
307
+ - [supabase-rbac-implementer](./supabase-rbac-implementer.md) — canonical handoff target v1.25 (Custom Claims + audit trigger)
170
308
  - [audit-log-multi-tenant](../skills/audit-log-multi-tenant/SKILL.md) — base de conhecimento (DDL + regras)
171
309
  - [supabase-cron-queues](../skills/supabase-cron-queues/SKILL.md) — pattern pg_cron (cross-suite)
172
310
  - [supabase-migration-writer](./supabase-migration-writer.md) — agent invocado para SQL final
@@ -368,6 +368,37 @@ Quando este agent detecta problema, **propõe fix mas NÃO escreve**. Delega via
368
368
  - Histogram `audit.consistency.duration_ms` (latência total da auditoria)
369
369
  - Cada finding fica registrado em `obs.events` com `audit_run_id` para rastreabilidade
370
370
 
371
+ ## Validação de RLS hardener cooperativo (v1.23 — CROSS-09)
372
+
373
+ Para cada migration recente analisada pelos 6 detectores, este agent adicionalmente valida que a migration **passou pelo `supabase-rls-hardener`** antes de ser aplicada — Camada 7 de defense-in-depth + auditoria cross-suite.
374
+
375
+ **Detector adicional (D7 — hardener bypass):** consulta git log + procura por commits de migration que NÃO incluem trace de handoff cooperativo:
376
+
377
+ ```bash
378
+ # Detectar migrations sem hardener trace
379
+ git log --oneline --all -- supabase/migrations/*.sql | while read commit msg; do
380
+ if ! git show $commit -- supabase/migrations/ | grep -q "supabase-rls-hardener\|HARDENER OK\|verdict: GO"; then
381
+ echo "$commit $msg ⚠ MIGRATION SEM TRACE DE HARDENER"
382
+ fi
383
+ done
384
+ ```
385
+
386
+ **Output enriquecido com campo `hardener_passed`:**
387
+
388
+ ```markdown
389
+ ## Detector 7 — Migration sem hardener cooperativo (v1.23)
390
+
391
+ | Migration | Hardener | Verdict | Risk |
392
+ |-----------|----------|---------|------|
393
+ | 20260510120000_create_orders.sql | ✅ passed | STRENGTHEN | low |
394
+ | 20260510130000_legacy_table.sql | ❌ bypass | n/a | **P1** |
395
+ | 20260510140000_add_org_id.sql | ✅ passed | GO | low |
396
+ ```
397
+
398
+ Migrations com `hardener_passed: false` são P1 (high severity) — recomendação é re-rodar via `Task(subagent_type=supabase-rls-hardener, prompt=<old_sql>)` retroativamente e aplicar fix-up migration.
399
+
400
+ **Princípio canônico v1.23:** Este agent **não escreve fix** — apenas detecta gap e delega para `supabase-rls-hardener` (handoff cooperativo) que produz SQL ajustado preservando intent original.
401
+
371
402
  ## Ver também
372
403
 
373
404
  - [`postgres-isolamento-concorrencia`](../skills/postgres-isolamento-concorrencia/SKILL.md) (v1.22) — base para Detectores 1, 2, 5 (FOR UPDATE, SERIALIZABLE, advisory locks)
@@ -378,3 +409,5 @@ Quando este agent detecta problema, **propõe fix mas NÃO escreve**. Delega via
378
409
  - [`supabase-migration-writer`](./supabase-migration-writer.md) (v1.8) — destino do cross-suite handoff (escreve migration corrigida)
379
410
  - [`supabase-edge-fn-writer`](./supabase-edge-fn-writer.md) (v1.8) — destino do cross-suite handoff (escreve Edge Function corrigida)
380
411
  - [`multi-tenant-isolation-auditor`](./multi-tenant-isolation-auditor.md) (v1.21) — agent irmão que audita gaps de RLS (complementar — RLS é defesa em depth, este agent foca em race conditions)
412
+ - [`supabase-rls-hardener`](./supabase-rls-hardener.md) (v1.23) — canonical handoff target; Detector 7 valida que migrations passaram por este agent
413
+ - [`supabase-rls-defense-in-depth`](../skills/supabase-rls-defense-in-depth/SKILL.md) (v1.23) — 6 camadas defense-in-depth referenciadas em Detector 7
@@ -157,8 +157,97 @@ END;
157
157
  $$ LANGUAGE plpgsql;
158
158
  ```
159
159
 
160
+ ## Cooperative handoff to supabase-rls-hardener (v1.23)
161
+
162
+ Após gerar CREATE TABLE leads (6 stages canônicos) + tabela lead_stage_transitions + trigger BEFORE UPDATE validate_lead_stage_transition + trigger AFTER UPDATE audit_lead_ownership_change, faça handoff cooperativo:
163
+
164
+ ```python
165
+ Task(subagent_type="supabase-rls-hardener", prompt=f"""
166
+ <upstream_intent>
167
+ Source agent: crm-pipeline-implementer
168
+ Original goal: implementar CRM lead pipeline com 6 stages canônicos para {org_context}
169
+ Constraints: lead dedup (unique org_id,phone) + (unique org_id,email); state machine via trigger BEFORE UPDATE (não só CHECK constraint); ownership transfer com notification; integration WhatsApp lookup contact_phone
170
+ </upstream_intent>
171
+
172
+ <draft_sql>{generated_leads_sql}</draft_sql>
173
+
174
+ <user_facing_caller>true</user_facing_caller>
175
+ """)
176
+ ```
177
+
178
+ Hardener valida policies por org_id, GRANTs corretos, trigger SECURITY DEFINER em schema private (se aplicável). **NUNCA descarte intent upstream silenciosamente**.
179
+
180
+ ## Cooperative handoff Postgres Roles (v1.26 — CROSS-21)
181
+
182
+ Crie role `lead_manager` para acesso PII columns dos leads (phone, email, notes). Role dedicado complementa column-level GRANTs (v1.24 CROSS-13). Auditabilidade superior + governance.
183
+
184
+ ```python
185
+ Task(subagent_type="supabase-roles-implementer", prompt=f"""
186
+ <upstream_intent>
187
+ Source agent: crm-pipeline-implementer
188
+ Original goal: criar role lead_manager para acesso PII columns dos leads (cross-ref v1.24 column-level)
189
+ Constraints: NÃO BYPASSRLS (deve respeitar org boundary via RLS hierárquica multi-tenant v1.21); column-level GRANT em phone/email/notes; login opcional (pode ser group usado por managers via SET ROLE)
190
+ </upstream_intent>
191
+
192
+ <roles_to_create>
193
+ - name: lead_manager
194
+ type: group
195
+ login: false
196
+ bypassrls: false # respeita org boundary
197
+ inherit: false
198
+ description: "Acesso PII columns dos leads (phone, email, notes). Usado por sales managers via SET ROLE."
199
+ owner: "sales-team@company.com"
200
+ </roles_to_create>
201
+
202
+ <grants>
203
+ lead_manager:
204
+ - schema: public, usage: true
205
+ - table: public.leads, ops: [SELECT] # column-level já aplicado via v1.24 CROSS-13
206
+ </grants>
207
+
208
+ <use_case>system_access</use_case>
209
+ <user_facing_caller>true</user_facing_caller>
210
+ """)
211
+ ```
212
+
213
+ **Caveat:** este role complementa RLS row-level (org boundary) + column-level (PII). NÃO substitui auth.users + custom claims (v1.25) — lead_manager é Postgres role para DBA/sales-ops, não para end-user via app.
214
+
215
+ ## Cooperative handoff column-level (v1.24 — CROSS-13)
216
+
217
+ Lead PII columns (phone, email) podem precisar de column-level restriction para LGPD compliance — apenas owner do lead ou lead_manager role vê os dados de contato completos. Aplique handoff cooperativo:
218
+
219
+ ```python
220
+ Task(subagent_type="supabase-column-privileges-writer", prompt=f"""
221
+ <upstream_intent>
222
+ Source agent: crm-pipeline-implementer
223
+ Original goal: lead PII columns (phone, email) com REVOKE select cross-user para LGPD compliance
224
+ Constraints: lead.phone e lead.email são PII; visível apenas para owner (RLS) + lead_manager role (column-level); company_name e job_title públicos para membros da org
225
+ </upstream_intent>
226
+
227
+ <table>schema: public, name: leads</table>
228
+
229
+ <sensitive_columns>
230
+ - phone
231
+ - email
232
+ - notes (jsonb — pode ter PII em call notes)
233
+ </sensitive_columns>
234
+
235
+ <allowed_roles>
236
+ - service_role: SELECT all
237
+ - lead_manager: SELECT all (admin do CRM)
238
+ - authenticated: SELECT (id, org_id, owner_id, company_name, job_title, stage, lead_value, created_at) — sem PII
239
+ </allowed_roles>
240
+
241
+ <user_facing_caller>true</user_facing_caller>
242
+ """)
243
+ ```
244
+
245
+ **Importante:** combinar com RLS row-level (owner vê próprio lead inteiro) — RLS filtra qual lead; column-level filtra quais colunas DENTRO do lead. Owner pode precisar SELECT phone do PRÓPRIO lead — considere policy `for select to authenticated using (owner_id = (select auth.uid()))` granted em todas colunas, e usar column-level apenas para cross-user (outro member da org tentando ver lead alheio).
246
+
160
247
  ## Ver também
161
248
 
249
+ - [supabase-rls-hardener](./supabase-rls-hardener.md) — canonical handoff target v1.23
250
+ - [supabase-column-privileges-writer](./supabase-column-privileges-writer.md) — canonical handoff target v1.24 (column-level lead PII)
162
251
  - [crm-lead-pipeline-patterns](../skills/crm-lead-pipeline-patterns/SKILL.md) — base de conhecimento
163
252
  - [evolution-go-integrator](./evolution-go-integrator.md) — Phase 112 (cross-phase handoff)
164
253
  - [supabase-migration-writer](./supabase-migration-writer.md) — invoked via Task() para SQL
@@ -770,3 +770,44 @@ O orquestrador apresenta o checkpoint ao usuário, obtém resposta, invoca agent
770
770
  - [ ] Correção verificada contra sintomas originais
771
771
  - [ ] Formato de retorno apropriado baseado no modo
772
772
  </success_criteria>
773
+
774
+ <sql_auto_handoff_cooperativo>
775
+ ## SQL auto-handoff cooperativo (v1.23 — CROSS-10)
776
+
777
+ Ao investigar bug que envolve RLS/policy/SQL (hipótese: "policy negando", "auth.uid() retornando null", "RLS bypass via view", "permission denied"), antes de propor fix SQL, faça handoff cooperativo para `supabase-rls-hardener` para validation.
778
+
779
+ **Heurística de detecção (hipótese mention):**
780
+
781
+ ```regex
782
+ (RLS|policy|auth\.uid|permission\s+denied|42501|insufficient_privilege|user_metadata|security_definer|security_invoker|grant\s+.*on)
783
+ ```
784
+
785
+ Se ≥ 1 match em current focus do debug → invoca handoff antes de propor fix:
786
+
787
+ ```python
788
+ hardener_validation = Task(
789
+ subagent_type="supabase-rls-hardener",
790
+ prompt=f"""
791
+ <upstream_intent>
792
+ Source agent: debugger
793
+ Original goal: investigar {bug_description} relacionado a RLS/policy
794
+ Constraints: hipótese atual é {current_hypothesis}; testando fix proposto: {proposed_fix_sql}
795
+ </upstream_intent>
796
+
797
+ <draft_sql>{proposed_fix_sql}</draft_sql>
798
+
799
+ <user_facing_caller>true</user_facing_caller>
800
+ """
801
+ )
802
+ ```
803
+
804
+ **Uso do output do hardener:**
805
+ - **GO** → fix proposto não introduz anti-pattern; pode aplicar
806
+ - **STRENGTHEN** → fix tem anti-pattern; absorver diff sugerido na hipótese (ex: faltou IS NOT NULL, faltou GRANT)
807
+ - **REWRITE** → fix tem anti-pattern crítico; descartar e propor abordagem hardener-sugerida
808
+
809
+ **Princípio canônico v1.23:** Debugger pensa (gera hipóteses, propõe fixes); supabase-rls-hardener valida (defense-in-depth). Hipóteses ruins não são descartadas silenciosamente — viram diff explícito que enriquece o debug.
810
+
811
+ **Evidence adicionada no DEBUG.md:** verdict do hardener + diff são incorporados como evidence da hipótese atual (rastreabilidade pós-reset).
812
+
813
+ </sql_auto_handoff_cooperativo>
@@ -168,8 +168,29 @@ EVOLUTION-GO-INTEGRATOR · output integrado
168
168
  - Counter `whatsapp.send.rate_limited{org_id}` por 131056 hit
169
169
  - Alarme se `whatsapp.send.rate_limited > baseline` → review queue/throttle
170
170
 
171
+ ## Cooperative handoff to supabase-rls-hardener (v1.23)
172
+
173
+ Após gerar webhook handler + idempotency unique constraint + rate limit pgmq, faça handoff cooperativo para SQL bloco:
174
+
175
+ ```python
176
+ Task(subagent_type="supabase-rls-hardener", prompt=f"""
177
+ <upstream_intent>
178
+ Source agent: evolution-go-integrator
179
+ Original goal: integrar WhatsApp (Evolution Go ou Meta Cloud API) com Supabase B2B multi-tenant para {org_context}
180
+ Constraints: webhook URL path /functions/v1/whatsapp/{org_id}/webhook (tenant_id ANTES do parse); HMAC-SHA256 (Meta) ou API key + IP whitelist (Evolution Go); idempotência unique(org_id, message_id); rate limit Meta 80msg/s via pgmq queue
181
+ </upstream_intent>
182
+
183
+ <draft_sql>{generated_webhook_sql}</draft_sql>
184
+
185
+ <user_facing_caller>true</user_facing_caller>
186
+ """)
187
+ ```
188
+
189
+ Hardener valida tenant isolation (org_id em todas policies), HMAC validation ANTES do parse, idempotency constraint correto. **NUNCA descarte intent upstream silenciosamente**.
190
+
171
191
  ## Ver também
172
192
 
193
+ - [supabase-rls-hardener](./supabase-rls-hardener.md) — canonical handoff target v1.23
173
194
  - [evolution-go-whatsapp-integration](../skills/evolution-go-whatsapp-integration/SKILL.md) — base de conhecimento
174
195
  - [whatsapp-conversation-state-machine](../skills/whatsapp-conversation-state-machine/SKILL.md) — sibling skill
175
196
  - [supabase-edge-fn-writer](./supabase-edge-fn-writer.md) — invoked para Edge Functions (cross-suite)