@luanpdd/kit-mcp 1.6.1 → 1.8.1

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 (58) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/gates/agent-no-recursive-dispatch.md +48 -0
  3. package/gates/budget-description.md +68 -0
  4. package/gates/no-personal-uuid.md +72 -0
  5. package/gates/skill-must-include.md +69 -0
  6. package/gates/sync-idempotent.md +62 -0
  7. package/kit/agents/advisor-researcher.md +1 -14
  8. package/kit/agents/assumptions-analyzer.md +1 -14
  9. package/kit/agents/codebase-mapper.md +2 -15
  10. package/kit/agents/debugger.md +1 -19
  11. package/kit/agents/executor.md +18 -18
  12. package/kit/agents/integration-checker.md +1 -16
  13. package/kit/agents/nyquist-auditor.md +1 -16
  14. package/kit/agents/phase-researcher.md +1 -14
  15. package/kit/agents/plan-checker.md +1 -16
  16. package/kit/agents/planner.md +36 -16
  17. package/kit/agents/project-researcher.md +2 -15
  18. package/kit/agents/research-synthesizer.md +1 -9
  19. package/kit/agents/roadmapper.md +1 -14
  20. package/kit/agents/schema-checker.md +4 -4
  21. package/kit/agents/supabase-architect.md +153 -0
  22. package/kit/agents/supabase-auth-bootstrapper.md +298 -0
  23. package/kit/agents/supabase-edge-fn-writer.md +185 -0
  24. package/kit/agents/supabase-migration-writer.md +156 -0
  25. package/kit/agents/supabase-realtime-implementer.md +252 -0
  26. package/kit/agents/supabase-rls-writer.md +218 -0
  27. package/kit/agents/supabase-storage-implementer.md +240 -0
  28. package/kit/agents/ui-auditor.md +1 -16
  29. package/kit/agents/ui-checker.md +1 -16
  30. package/kit/agents/ui-researcher.md +1 -14
  31. package/kit/agents/user-profiler.md +2 -10
  32. package/kit/agents/verifier.md +2 -17
  33. package/kit/commands/depurar.md +17 -0
  34. package/kit/commands/expresso.md +9 -0
  35. package/kit/commands/fazer.md +32 -4
  36. package/kit/commands/proximo.md +7 -0
  37. package/kit/commands/rapido.md +6 -0
  38. package/kit/commands/supabase.md +148 -0
  39. package/kit/framework/references/output-style.md +22 -0
  40. package/kit/framework/workflows/discuss-phase.md +62 -327
  41. package/kit/framework/workflows/help.md +14 -1
  42. package/kit/framework/workflows/new-project.md +16 -107
  43. package/kit/framework/workflows/plan-phase.md +53 -147
  44. package/kit/skills/_shared-supabase/glossary.md +180 -0
  45. package/kit/skills/supabase-auth-ssr/SKILL.md +260 -0
  46. package/kit/skills/supabase-cron-queues/SKILL.md +266 -0
  47. package/kit/skills/supabase-database-functions/SKILL.md +247 -0
  48. package/kit/skills/supabase-declarative-schema/SKILL.md +183 -0
  49. package/kit/skills/supabase-edge-functions/SKILL.md +242 -0
  50. package/kit/skills/supabase-migrations/SKILL.md +175 -0
  51. package/kit/skills/supabase-pgvector-rag/SKILL.md +253 -0
  52. package/kit/skills/supabase-postgres-style/SKILL.md +138 -0
  53. package/kit/skills/supabase-realtime/SKILL.md +236 -0
  54. package/kit/skills/supabase-rls-policies/SKILL.md +185 -0
  55. package/kit/skills/supabase-storage/SKILL.md +234 -0
  56. package/package.json +1 -1
  57. package/src/core/kit.js +55 -22
  58. package/src/core/sync.js +3 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,132 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning:
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.8.1] - 2026-05-06
10
+
11
+ Patch de integração da Suíte Supabase v1.8.0 — fecha 7 lacunas onde o conteúdo novo não estava "wired" nos pontos de entrada existentes do framework.
12
+
13
+ ### Mudado — integração entre Suíte Supabase e fluxo padrão
14
+
15
+ - **`/fazer`** (`kit/commands/fazer.md`) — adicionada linha "Tarefa Supabase → `/supabase`" na decision tree + parágrafo "Detecção de intenção Supabase" listando 7 categorias de termos (DB / Auth / Realtime / Edge / Storage / RAG / Background) que devem rotear para `/supabase` em vez de `/discutir-fase` ou `/expresso`.
16
+ - **`planner` agent** (`kit/agents/planner.md`) — nova seção `<specialized_agents>` instrui o planner a delegar para `supabase-*` agents (architect, migration-writer, rls-writer, edge-fn-writer, realtime-implementer, auth-bootstrapper, storage-implementer) em fases Supabase em vez de gerar tasks genéricas para o `executor` resolver inline.
17
+ - **`executor` agent** (`kit/agents/executor.md`) — nova tabela "Delegação para agents especializados" lista 8 patterns de task (migrations, schemas declarative, RLS, Edge Functions, Realtime, Auth bootstrap, Storage, schema-checker) com `Task(subagent_type=...)` correto. Princípio: agent especializado é mais barato + mais correto que o executor genérico em domínios cobertos.
18
+ - **`/depurar`** (`kit/commands/depurar.md`) — `<available_agent_types>` agora inclui `schema-checker`. Nova seção `<supabase_pre_check>` faz triagem de bugs SQL/Supabase e pré-valida via `schema-checker` antes do `debugger` genérico (5 sintomas mapeados: migration falhou, RLS quebrou query, Edge Function quebrou, user_metadata em policy, service_role exposto).
19
+ - **`discuss-phase` workflow** (`kit/framework/workflows/discuss-phase.md`) — nova seção `<supabase_detection>` antes da identificação de áreas cinzentas. Se a fase é Supabase, delega o questionamento para `supabase-architect` (que já tem template de perguntas Supabase-específicas) em vez de gerar gray areas genéricas.
20
+ - **`plan-phase` workflow** (`kit/framework/workflows/plan-phase.md`) — `<available_agent_types>` agora inclui agents Supabase. Nova seção `<supabase_phase_detection>` no Step 1 — se fase é Supabase, usa `supabase-architect` em vez de `phase-researcher` genérico, e instrui o `planner` a marcar tasks com `subagent_type` apontando para o agent especializado correto (tabela com 7 patterns).
21
+ - **CI** (`.github/workflows/ci.yml`) — novo step "Audit — v1.8 Supabase suite gates" que executa os 4 gates blocking (`budget-description`, `no-personal-uuid`, `agent-no-recursive-dispatch`, `skill-must-include`) extraindo o bash check de cada `gates/<name>.md` e rodando. Falha o CI se algum violar. Gate non-blocking `sync-idempotent` defer (exige CLI completo).
22
+
23
+ ### Adicionado — agentes existentes ganham awareness Supabase
24
+
25
+ Sem novos arquivos. As 6 edições em arquivos de agent/workflow/command existentes integram o conteúdo da v1.8.0 nos pontos de entrada que LLMs usam, fechando o gap "conteúdo entregue mas não chamado".
26
+
27
+ ### Sem mudanças de API runtime
28
+
29
+ Patch v1.8.1 continua content-only. Zero alterações em `src/core/`, `registry.js`, `sync.js`. Stable API v1.0+ preservada.
30
+
31
+ ### Tests
32
+
33
+ Todos os 4 gates blocking continuam passing após o patch. CI agora os roda explicitamente — Phase 28 deixou os specs prontos mas sem step de execução.
34
+
35
+ ## [1.8.0] - 2026-05-06
36
+
37
+ Milestone v1.8 — Suíte Supabase: primeira coleção especializada de skills+agents+command focada em um stack concreto. 31 REQs em 4 fases (Phases 25-28).
38
+
39
+ ### Adicionado — 11 skills Supabase canônicas (Phase 25)
40
+
41
+ Cada skill é auto-contida (sem `references/` folder), com frontmatter `description ≤ 200 chars`, template fixo de 5 seções (Quando usar / Regras absolutas / Patterns canônicos / Anti-patterns / Ver também), code blocks EN com comentários PT-BR pedagógicos, e cross-refs via Markdown link relativo.
42
+
43
+ - `supabase-realtime` — broadcast vs postgres_changes, `private: true` obrigatório, naming `scope:entity:id`, `realtime.broadcast_changes` triggers, `removeChannel` cleanup
44
+ - `supabase-auth-ssr` — Next.js v16 + `@supabase/ssr` (NUNCA `auth-helpers-nextjs`), padrão `getAll`/`setAll` exclusivo, middleware com `getUser()` + redirects, single serverClient factory
45
+ - `supabase-edge-functions` — Deno runtime, imports `npm:`/`jsr:` versionados, env vars pre-populadas, `Deno.serve`, `EdgeRuntime.waitUntil`, file writes apenas em `/tmp`, basePath `/<function-name>`
46
+ - `supabase-declarative-schema` — workflow `supabase/schemas/` → `supabase stop` → `db diff -f` → revisar → apply, com caveats sobre views, RLS, partitions
47
+ - `supabase-rls-policies` — REGRA #1 absoluta `(select auth.uid())` wrapper, WARNING `user_metadata` em autorização (privilege escalation), policies granulares por operação, `to authenticated`/`to anon` explícito, indexes obrigatórios, MFA via `aal2`
48
+ - `supabase-database-functions` — `SECURITY INVOKER` por default, `set search_path = ''` SEMPRE (lint advisor 0011), schema-qualified names, `IMMUTABLE`/`STABLE` quando aplicável
49
+ - `supabase-migrations` — naming `YYYYMMDDHHmmss_<name>.sql` UTC, header de metadados, RLS obrigatório em toda nova tabela, granular policies, comentários extensivos em comandos destrutivos
50
+ - `supabase-postgres-style` — lowercase reserved, `snake_case`, plurais para tabelas/singular para colunas, `ISO 8601`, CTEs lineares para queries complexas
51
+ - `supabase-storage` — buckets públicos vs privados, `signed URL` com expiration, RLS sobre `storage.objects` com multi-tenant path isolation, image transforms (Pro+), TUS para uploads > 6 MB, awareness de egress billing
52
+ - `supabase-pgvector-rag` — `create extension vector`, dim consistente por modelo, `HNSW` (default 2026) vs `IVFFlat`, operadores `<=>`/`<#>`/`<->`, RAG with permissions via RLS, chunking 200-500 tokens
53
+ - `supabase-cron-queues` — `pg_cron` + `pgmq` (Postgres 15.6.1.143+) + `pg_net` v0.10.0+, pattern canônico `cron → pgmq → Edge Function`, idempotência obrigatória em consumers
54
+
55
+ Plus glossário compartilhado em `kit/skills/_shared-supabase/glossary.md` — termos PT-BR↔EN, comandos CLI canônicos, patterns canônicos consolidados (não-skill, arquivo de referência).
56
+
57
+ ### Adicionado — 7 agents Supabase + convenção universal (Phase 26)
58
+
59
+ Cada agent inclui tabela `## Compatibilidade` por IDE (Full / Partial / Offline-only), preflight detection MCP no Step 0 (declara MODO OFFLINE explícito se MCP indisponível — NUNCA finge sucesso), output em layout canônico do CLI Supabase (`supabase/migrations/`, `supabase/schemas/`, `supabase/functions/<name>/`), e frontmatter `tools:` com nomes canônicos `mcp__supabase__*` (zero UUIDs).
60
+
61
+ - `supabase-architect` (blue) — projeta schema + RLS + topologia realtime ANTES da implementação. Pergunta tier (Free/Pro/Team/Enterprise) upfront via `AskUserQuestion`. Alerta sobre Free pause + branch billing. NÃO escreve código.
62
+ - `supabase-migration-writer` (yellow) — escreve migrations seguindo declarative schema + RLS obrigatório + style guide. Detecta layout `schemas/` vs `migrations/` no boot. Aplica via `mcp__supabase__apply_migration` se MCP disponível; modo offline gera SQL.
63
+ - `supabase-rls-writer` (red) — gera 4 policies granulares por operação com `(select auth.uid())` wrapper + indexes recomendados. **ABORTA explicitamente** se input menciona `user_metadata` em policy de autorização.
64
+ - `supabase-edge-fn-writer` (cyan) — escreve Edge Functions Deno com `npm:`/`jsr:` versionados, `Deno.serve`, env vars pre-populadas, file writes em `/tmp`, basePath em multi-rota. Alerta cold start em bundles grandes.
65
+ - `supabase-realtime-implementer` (magenta) — configura 3 layers (RLS sobre `realtime.messages` + trigger DB via `realtime.broadcast_changes` + client subscribe com cleanup obrigatório). Migra `postgres_changes` para `broadcast`.
66
+ - `supabase-auth-bootstrapper` (green) — bootstrap Next.js v16 com `@supabase/ssr` (browser client + server client + middleware completo). **Audita `.env*` files** e ABORTA se detectar `NEXT_PUBLIC_*SERVICE*` (service_role leak).
67
+ - `supabase-storage-implementer` (orange) — configura bucket + RLS sobre `storage.objects` com multi-tenant path (`<auth.uid()>/<file>`) + client code (upload + signedURL). Suporta TUS para uploads grandes.
68
+
69
+ ### Adicionado — Command `/supabase` orquestrador único (Phase 27)
70
+
71
+ `kit/commands/supabase.md` aceita 10 subcomandos com sinônimos PT-BR/EN: `arquiteto|architect`, `migration|migrar`, `rls`, `edge|edge-function|funcao`, `realtime|tempo-real`, `auth|autenticacao`, `storage|armazenamento`, `rag|pgvector|embeddings`, `cron|queues|pgmq|background`, `check|validar` (invoca `schema-checker` existente), `help|ajuda|?`.
72
+
73
+ Detecta `supabase/config.toml` para extrair `project_id`. Dispatch via `Task(subagent_type=supabase-...)`. **É o único ponto de chain de agents Supabase** — agents permanecem função pura (anti-pitfall A10).
74
+
75
+ ### Adicionado — 5 audit gates novos (Phase 28)
76
+
77
+ Markdown specs em `gates/` com `## Check` em bash:
78
+
79
+ - `gates/budget-description.md` — valida `description ≤ 200 chars` em todo agent/command/skill (anti-pitfall A2 — CLAUDE.md inflation)
80
+ - `gates/no-personal-uuid.md` — detecta UUIDs `[0-9a-f]{8}-...` em frontmatter ou body de `kit/{agents,commands,skills}/` (anti-pitfall A12)
81
+ - `gates/agent-no-recursive-dispatch.md` — valida zero `Task(...subagent_type=...supabase-...)` em `kit/agents/supabase-*.md` (anti-pitfall A10)
82
+ - `gates/skill-must-include.md` — valida strings obrigatórias por skill verbatim — `(select auth.uid())`, `set search_path = ''`, `getAll`/`setAll`, `private: true`, `Deno.serve`, etc. (anti-pitfall A7)
83
+ - `gates/sync-idempotent.md` — valida que `kit sync claude-code` rodado 2× produz `.claude/` byte-idêntico (anti-pitfall A1, non-blocking warn)
84
+
85
+ ### Mudado — schema-checker.md UUID migration
86
+
87
+ `kit/agents/schema-checker.md` migrado de `mcp__0a712001-6cbb-44ef-a5f4-a24ea40894fa__execute_sql` (UUID do projeto pessoal do mantenedor) para `mcp__supabase__execute_sql`/`__list_tables`/`__apply_migration` (canônico). **Breaking interno:** instaladores de versões anteriores tinham um UUID que não funcionava para eles; com v1.8 funciona com qualquer Supabase MCP server configurado. Mesma funcionalidade — apenas referência canônica.
88
+
89
+ ### Sem mudanças de API runtime
90
+
91
+ v1.8 é **content-only por design** — zero alterações em `src/core/`, `registry.js`, `sync.js`. Stable API v1.0+ totalmente preservada. CI passa sem mudança em `.github/workflows/`. Deps budget mantido em 6/6 (zero deps novas — todo o conteúdo é markdown).
92
+
93
+ ### Tests
94
+
95
+ Tests existentes (115 unit + 67 integration de v1.7) continuam verde. Novos gates não têm tests dedicados (são bash em markdown, executados via `runGate` no framework de gates já testado em `test/unit/gates.test.js`).
96
+
97
+ ### Decisões arquiteturais
98
+
99
+ Validadas em `.planning/research/`:
100
+ - **Naming flat** `kit/skills/supabase-*/SKILL.md` (não subárvore — quebraria `readSkillsDir`)
101
+ - **MCP-first com fallback offline gracioso** — 5 dos 8 IDE targets não têm Supabase MCP; agents funcionam offline gerando SQL/código
102
+ - **Cross-references via Markdown link relativo** (não `@-include` — quebraria lazy-load das skills)
103
+ - **Outputs em layouts canônicos do CLI Supabase** — `supabase/migrations/`, `supabase/schemas/`, `supabase/functions/<name>/`
104
+ - **Glossário compartilhado** em `_shared-supabase/` — não é skill (sem trigger), apenas referência cross-skill
105
+
106
+ ### Detalhes
107
+
108
+ `.planning/milestones/v1.8.0/` (após `/concluir-marco`).
109
+
110
+ ## [1.7.0] - 2026-05-06
111
+
112
+ Milestone v1.7 — perf+lean part 2 + UX naming canonical: 10 REQs em 3 fases.
113
+
114
+ ### Performance
115
+
116
+ - **Workflow files compactados** (Phase 22) — `discuss-phase.md` 49→39 KB (-22%), `plan-phase.md` 36→31 KB (-15%), `new-project.md` 40→37 KB (-7%). Cuts em prosa redundante; specs core (questionamento, fluxo de fases, retornos estruturados) preservados.
117
+ - **`listKit({ stubsOnly: true })`** (Phase 23, PERF-S1) — sync em mode=reference (default) lê só os primeiros 4KB de cada arquivo (frontmatter), pulando body/content que stub renderers nunca usam. Cache key separado (`${kitRoot}:full` vs `${kitRoot}:stubs`). Benchmark local: 1.79× speedup em cold listKit.
118
+
119
+ ### Tokens (boilerplate dedup)
120
+
121
+ - **Output style centralizado** (Phase 24, TOK-D1) — `kit/framework/references/output-style.md` é a única fonte; 18 agentes referenciam via `@./.claude/framework/references/output-style.md`. Economia: 19,110 bytes na árvore agents/ (-6%).
122
+
123
+ ### UX (naming canonical)
124
+
125
+ - **`/fazer` é o entrypoint canônico** (Phase 24, UX-F1/F2/F3) — abre com tabela de decisão "intenção → comando". `/rapido`, `/expresso`, `/proximo` continuam funcionando direto, mas cada um tem nova seção "Quando usar" com trade-offs (✅/❌/🤔) e link de volta a `/fazer`. `/ajuda` (e `kit/framework/workflows/help.md`) destaca `/fazer` no topo.
126
+
127
+ ### Sem mudanças de API runtime
128
+
129
+ Stable API v1.0+ preservada. `mode=copy` continua lendo content full. `mcp__kit__kit action=get` retorna content/absPath. Aliases de comando todos preservados.
130
+
131
+ ### Tests
132
+
133
+ 115 unit (+3 stubs-only) + 67 integration. Todos verdes.
134
+
9
135
  ## [1.6.1] - 2026-05-05
10
136
 
11
137
  DX patch: comando `kit doctor` + upgrade-check no boot do sidecar + cache de gates.
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: agent-no-recursive-dispatch
3
+ stage: pre-verify
4
+ blocking: true
5
+ description: Valida que agents Supabase NÃO contêm Task(subagent_type=supabase-...). Orquestração só via /supabase command (anti-pitfall A10 — recursive dispatch).
6
+ ---
7
+
8
+ # Agent no recursive dispatch gate
9
+
10
+ **When to run:** pre-verify.
11
+
12
+ ## Check
13
+
14
+ ```bash
15
+ #!/usr/bin/env bash
16
+ # PT-BR: agents Supabase não devem invocar outros agents Supabase via Task()
17
+ # Orquestração centralizada no command /supabase (anti-pitfall A10)
18
+ set -e
19
+
20
+ VIOLATIONS=0
21
+
22
+ for f in kit/agents/supabase-*.md; do
23
+ [ -f "$f" ] || continue
24
+ # PT-BR: busca por Task(...subagent_type=...supabase-... ou Task(... 'supabase-...
25
+ if grep -nE 'Task\([^)]*subagent_type[^)]*supabase-' "$f"; then
26
+ echo "FAIL: $f — agent Supabase invocando outro agent Supabase via Task()"
27
+ VIOLATIONS=$((VIOLATIONS + 1))
28
+ fi
29
+ done
30
+
31
+ if [ "$VIOLATIONS" -gt 0 ]; then
32
+ echo "Total violations: $VIOLATIONS"
33
+ echo "Agents Supabase devem ser função pura. Orquestração apenas via /supabase command."
34
+ exit 1
35
+ fi
36
+
37
+ echo "✓ Zero recursive dispatch entre agents Supabase"
38
+ exit 0
39
+ ```
40
+
41
+ ## Verdict
42
+
43
+ - **passed** — zero `Task(subagent_type=supabase-...)` em `kit/agents/supabase-*.md`
44
+ - **block** — recursive dispatch detectado
45
+
46
+ ## Notes
47
+
48
+ Anti-pitfall A10 da v1.8: tentação de `supabase-architect` invocar `supabase-migration-writer` que re-invoca architect → stack overflow lógico + custo LLM multiplicado. Solução: agents permanecem função pura; chain via `/supabase` command (Phase 27 — único orquestrador autorizado).
@@ -0,0 +1,68 @@
1
+ ---
2
+ id: budget-description
3
+ stage: pre-verify
4
+ blocking: true
5
+ description: Valida que cada agent/command/skill tem `description:` ≤ 200 chars no frontmatter (anti-pitfall A2 — CLAUDE.md inflation).
6
+ ---
7
+
8
+ # Budget description gate
9
+
10
+ **When to run:** pre-verify, antes de commit final do milestone.
11
+
12
+ ## Check
13
+
14
+ ```bash
15
+ #!/usr/bin/env bash
16
+ # PT-BR: itera por todos os agent/command/skill, valida frontmatter description ≤ 200 chars
17
+ set -e
18
+
19
+ VIOLATIONS=0
20
+
21
+ # function que extrai description do YAML frontmatter
22
+ check_description() {
23
+ local file="$1"
24
+ local desc
25
+ desc=$(awk '/^description:/{sub(/^description: ?/, ""); print; exit}' "$file" 2>/dev/null || true)
26
+ if [ -z "$desc" ]; then
27
+ echo "WARN: $file — sem description: no frontmatter"
28
+ return 0
29
+ fi
30
+ local len=${#desc}
31
+ if [ "$len" -gt 200 ]; then
32
+ echo "FAIL: $file — description tem $len chars (max 200)"
33
+ VIOLATIONS=$((VIOLATIONS + 1))
34
+ fi
35
+ }
36
+
37
+ # itera agents
38
+ for f in kit/agents/*.md; do
39
+ [ -f "$f" ] && check_description "$f"
40
+ done
41
+
42
+ # itera commands
43
+ for f in kit/commands/*.md; do
44
+ [ -f "$f" ] && check_description "$f"
45
+ done
46
+
47
+ # itera skills (SKILL.md em subdirs)
48
+ for f in kit/skills/*/SKILL.md; do
49
+ [ -f "$f" ] && check_description "$f"
50
+ done
51
+
52
+ if [ "$VIOLATIONS" -gt 0 ]; then
53
+ echo "Total violations: $VIOLATIONS (max description length 200 chars)"
54
+ exit 1
55
+ fi
56
+
57
+ echo "✓ Todos os agents/commands/skills têm description ≤ 200 chars"
58
+ exit 0
59
+ ```
60
+
61
+ ## Verdict
62
+
63
+ - **passed** — todas as descriptions ≤ 200 chars
64
+ - **block** — pelo menos uma description > 200 chars (CLAUDE.md inflation)
65
+
66
+ ## Notes
67
+
68
+ Anti-pitfall A2 da v1.8: cluster `supabase-*` adiciona 19+ entradas em CLAUDE.md. Sem este budget, descriptions verbosas inflam CLAUDE.md em ~3-4 KB+ — desfaz otimização de v1.6/v1.7.
@@ -0,0 +1,72 @@
1
+ ---
2
+ id: no-personal-uuid
3
+ stage: pre-verify
4
+ blocking: true
5
+ description: Detecta UUIDs no formato [0-9a-f]{8}-[0-9a-f]{4}-... em frontmatter `tools:` ou body de skills/agents/commands. UUID pessoal quebra para outros instaladores (anti-pitfall A12).
6
+ ---
7
+
8
+ # No personal UUID gate
9
+
10
+ **When to run:** pre-verify.
11
+
12
+ ## Check
13
+
14
+ ```bash
15
+ #!/usr/bin/env bash
16
+ # PT-BR: detecta UUID em formato [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
17
+ # em frontmatter tools: ou body de kit/{agents,commands,skills}/
18
+ set -e
19
+
20
+ # allowlist: glossário menciona patterns mas não usa UUID em tools
21
+ ALLOWLIST_FILES=(
22
+ "kit/skills/_shared-supabase/glossary.md"
23
+ )
24
+
25
+ VIOLATIONS=0
26
+
27
+ is_allowlisted() {
28
+ local file="$1"
29
+ for af in "${ALLOWLIST_FILES[@]}"; do
30
+ [ "$file" = "$af" ] && return 0
31
+ done
32
+ return 1
33
+ }
34
+
35
+ check_uuid() {
36
+ local file="$1"
37
+ is_allowlisted "$file" && return 0
38
+
39
+ # PT-BR: extrair frontmatter (entre --- ... ---)
40
+ local frontmatter
41
+ frontmatter=$(awk '/^---$/{i++; next} i==1' "$file" 2>/dev/null || true)
42
+
43
+ # PT-BR: buscar UUID em frontmatter (linhas com tools: ou abaixo)
44
+ if echo "$frontmatter" | grep -qE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'; then
45
+ echo "FAIL (frontmatter): $file"
46
+ grep -nE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' "$file" | head -3
47
+ VIOLATIONS=$((VIOLATIONS + 1))
48
+ fi
49
+ }
50
+
51
+ for f in kit/agents/*.md; do [ -f "$f" ] && check_uuid "$f"; done
52
+ for f in kit/commands/*.md; do [ -f "$f" ] && check_uuid "$f"; done
53
+ for f in kit/skills/*/SKILL.md; do [ -f "$f" ] && check_uuid "$f"; done
54
+
55
+ if [ "$VIOLATIONS" -gt 0 ]; then
56
+ echo "Total violations: $VIOLATIONS"
57
+ echo "UUIDs pessoais quebram para outros instaladores. Use mcp__supabase__* canônico."
58
+ exit 1
59
+ fi
60
+
61
+ echo "✓ Zero UUIDs pessoais em kit/{agents,commands,skills}/"
62
+ exit 0
63
+ ```
64
+
65
+ ## Verdict
66
+
67
+ - **passed** — zero UUIDs em frontmatter ou body
68
+ - **block** — pelo menos um UUID pessoal detectado (quebra para outros users)
69
+
70
+ ## Notes
71
+
72
+ Anti-pitfall A12 da v1.8: `schema-checker.md` originalmente usava `mcp__0a712001-6cbb-44ef-a5f4-a24ea40894fa__execute_sql` (UUID do projeto pessoal do user). Distribuído via `@luanpdd/kit-mcp`, isso quebra para qualquer outro instalador. Phase 28 migra para `mcp__supabase__*` canônico. Este gate previne regressão.
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: skill-must-include
3
+ stage: pre-verify
4
+ blocking: true
5
+ description: Valida que skills supabase-* contêm strings obrigatórias verbatim — anti-pattern prevention (RLS (select), search_path, getAll/setAll, etc.).
6
+ ---
7
+
8
+ # Skill must-include gate
9
+
10
+ **When to run:** pre-verify.
11
+
12
+ ## Check
13
+
14
+ ```bash
15
+ #!/usr/bin/env bash
16
+ # PT-BR: cada skill deve incluir strings obrigatórias verbatim para prevenir anti-patterns
17
+ set -e
18
+
19
+ VIOLATIONS=0
20
+
21
+ # PT-BR: mapeamento skill → must-include strings (delimitadas por |)
22
+ declare -A MUST_INCLUDE
23
+ MUST_INCLUDE["supabase-rls-policies"]="(select auth.uid())|user_metadata|TO authenticated"
24
+ MUST_INCLUDE["supabase-database-functions"]="set search_path = ''|SECURITY INVOKER"
25
+ MUST_INCLUDE["supabase-auth-ssr"]="getAll|setAll|auth-helpers-nextjs|@supabase/ssr"
26
+ MUST_INCLUDE["supabase-realtime"]="broadcast|private: true|realtime.broadcast_changes|removeChannel"
27
+ MUST_INCLUDE["supabase-edge-functions"]="npm:|jsr:|Deno.serve|EdgeRuntime.waitUntil|/tmp"
28
+ MUST_INCLUDE["supabase-declarative-schema"]="supabase/schemas/|supabase stop|supabase db diff -f"
29
+ MUST_INCLUDE["supabase-migrations"]="YYYYMMDDHHmmss|RLS|granular"
30
+ MUST_INCLUDE["supabase-postgres-style"]="snake_case|ISO 8601|lowercase"
31
+ MUST_INCLUDE["supabase-storage"]="signed URL|storage.objects|multi-tenant"
32
+ MUST_INCLUDE["supabase-pgvector-rag"]="HNSW|IVFFlat|<=>|RAG with permissions"
33
+ MUST_INCLUDE["supabase-cron-queues"]="pg_cron|pgmq|pg_net"
34
+
35
+ for skill in "${!MUST_INCLUDE[@]}"; do
36
+ file="kit/skills/$skill/SKILL.md"
37
+ if [ ! -f "$file" ]; then
38
+ echo "FAIL: $file — skill ausente"
39
+ VIOLATIONS=$((VIOLATIONS + 1))
40
+ continue
41
+ fi
42
+
43
+ # PT-BR: testa cada string (separada por |)
44
+ IFS='|' read -ra REQUIRED <<< "${MUST_INCLUDE[$skill]}"
45
+ for str in "${REQUIRED[@]}"; do
46
+ if ! grep -qF "$str" "$file"; then
47
+ echo "FAIL: $file — must-include ausente: '$str'"
48
+ VIOLATIONS=$((VIOLATIONS + 1))
49
+ fi
50
+ done
51
+ done
52
+
53
+ if [ "$VIOLATIONS" -gt 0 ]; then
54
+ echo "Total violations: $VIOLATIONS"
55
+ exit 1
56
+ fi
57
+
58
+ echo "✓ Todas as skills supabase-* contêm must-include strings"
59
+ exit 0
60
+ ```
61
+
62
+ ## Verdict
63
+
64
+ - **passed** — todas as 11 skills têm strings obrigatórias
65
+ - **block** — pelo menos uma skill faltando string crítica (anti-pattern prevention quebrada)
66
+
67
+ ## Notes
68
+
69
+ Anti-pitfall A7 da v1.8: skills devem prevenir ativamente os anti-patterns Supabase mais críticos. Sem este gate, refator de skill pode acidentalmente remover a regra principal (ex: `(select auth.uid())` wrapper que previne 1000× degradação). Strings como `WARNING user_metadata`, `set search_path = ''`, `NEVER use auth-helpers-nextjs` são as primeiras coisas que LLM lê — devem estar lá.
@@ -0,0 +1,62 @@
1
+ ---
2
+ id: sync-idempotent
3
+ stage: pre-verify
4
+ blocking: false
5
+ description: Valida que `kit sync claude-code` rodado 2× consecutivos produz `.claude/` byte-idêntico (anti-pitfall A1 — drift kit/ ↔ .claude/).
6
+ ---
7
+
8
+ # Sync idempotent gate
9
+
10
+ **When to run:** pre-verify (non-blocking — warn em vez de bloquear).
11
+
12
+ ## Check
13
+
14
+ ```bash
15
+ #!/usr/bin/env bash
16
+ # PT-BR: roda sync 2× e compara — output deve ser byte-idêntico
17
+ set -e
18
+
19
+ TMPDIR=$(mktemp -d -t kit-mcp-sync-test-XXXXXX)
20
+ trap "rm -rf $TMPDIR" EXIT
21
+
22
+ # PT-BR: copia projeto root para tmpdir (sem node_modules)
23
+ mkdir -p "$TMPDIR/project"
24
+ cp -r kit "$TMPDIR/project/"
25
+ cp package.json "$TMPDIR/project/" 2>/dev/null || true
26
+
27
+ # PT-BR: 1ª execução
28
+ node bin/cli.js sync install claude-code --project-root "$TMPDIR/project" >/dev/null 2>&1 || {
29
+ echo "WARN: primeira sync falhou — gate inconclusivo"
30
+ exit 0
31
+ }
32
+
33
+ # PT-BR: snapshot do output
34
+ SNAPSHOT1=$(find "$TMPDIR/project/.claude" -type f -exec sha256sum {} \; 2>/dev/null | sort | sha256sum)
35
+
36
+ # PT-BR: 2ª execução
37
+ node bin/cli.js sync install claude-code --project-root "$TMPDIR/project" >/dev/null 2>&1
38
+
39
+ # PT-BR: snapshot 2
40
+ SNAPSHOT2=$(find "$TMPDIR/project/.claude" -type f -exec sha256sum {} \; 2>/dev/null | sort | sha256sum)
41
+
42
+ if [ "$SNAPSHOT1" != "$SNAPSHOT2" ]; then
43
+ echo "FAIL: sync não-idempotente — output diverge entre execuções"
44
+ echo "Snapshot 1: $SNAPSHOT1"
45
+ echo "Snapshot 2: $SNAPSHOT2"
46
+ exit 1
47
+ fi
48
+
49
+ echo "✓ Sync idempotente — duas execuções produzem .claude/ byte-idêntico"
50
+ exit 0
51
+ ```
52
+
53
+ ## Verdict
54
+
55
+ - **passed** — `.claude/` byte-idêntico entre 2 execuções
56
+ - **warn** — drift detectado (não-blocking; investigar)
57
+
58
+ ## Notes
59
+
60
+ Anti-pitfall A1 da v1.8: drift entre `kit/` canonical e `.claude/` stubs após adicionar 19+ items multiplicados por 8 IDE targets. Sync deve ser idempotente — qualquer fonte de não-determinismo (timestamps, ordering aleatório, hash de tempo de geração) precisa ser eliminada. Este gate detecta divergência cedo, antes de chegar em produção.
61
+
62
+ **Por que non-blocking:** o gate roda CLI completo + I/O — pode falhar por razões ambientais (permissions, espaço em disco) que não são bugs de sync. Falha vira warn para revisão manual.
@@ -6,20 +6,7 @@ color: cyan
6
6
  ---
7
7
 
8
8
  <output_style>
9
- **Estilo: caveman LITE — compressão moderada na narração, artefato (tabela) completo.**
10
-
11
- Em mensagens conversacionais, logs e retorno estruturado ao agente principal:
12
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário
13
- - Manter artigos e estrutura de frase quando aumentam clareza
14
- - Termos técnicos exatos. Caminhos de arquivo e citações literais.
15
-
16
- **Boundary CRÍTICO — tabela de comparação é seu produto:**
17
- A tabela de comparação com 5 colunas (incluindo trade-offs e justificativa) é o output que o agente principal vai sintetizar. Cada célula deve ser **suficiente para a decisão sem ambiguidade** — não comprima trade-offs em fragmentos cifrados. Caveman aplica-se SÓ ao raciocínio falado e progresso de pesquisa.
18
-
19
- **Auto-clarity — sair completamente do caveman quando:**
20
- - Discussão de trade-offs entre opções (preserva nuance — esse é literalmente seu trabalho)
21
- - Avisos de segurança ou ações irreversíveis
22
- - Usuário pediu clarificação ou está confuso
9
+ @./.claude/framework/references/output-style.md
23
10
  </output_style>
24
11
 
25
12
  <role>
@@ -6,20 +6,7 @@ color: cyan
6
6
  ---
7
7
 
8
8
  <output_style>
9
- **Estilo: caveman — compressão alta na fala, prosa normal em artefatos.**
10
-
11
- Em mensagens conversacionais, logs e retorno estruturado ao workflow:
12
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário, artigos quando não compromete clareza
13
- - Fragments OK. Sinônimos curtos. Padrão: `[coisa] [ação] [razão]. [próximo passo].`
14
- - Termos técnicos exatos. Código inalterado. Erros citados literais.
15
-
16
- **Auto-clarity — sair do caveman quando:**
17
- - Avisos de segurança ou ações destrutivas/irreversíveis
18
- - Sequências multi-passo onde fragmentar arrisca má interpretação
19
- - Usuário pediu clarificação ou está confuso
20
-
21
- **Boundary crítico — caminhos de arquivo e citações de evidência:**
22
- Caminhos completos, números de linha e identificadores de código permanecem **exatos e completos** (não abrevie `src/components/Foo.tsx` para `Foo`). Caveman aplica-se à *narração* das hipóteses, não às evidências em si.
9
+ @./.claude/framework/references/output-style.md
23
10
  </output_style>
24
11
 
25
12
  <role>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: codebase-mapper
3
- description: Explora a codebase e escreve documentos de análise estruturados. Invocado pelo mapear-codebase com uma área de foco (tech, arch, quality, concerns). Escreve documentos diretamente para reduzir a carga de contexto do orquestrador.
3
+ description: Explora a codebase e escreve docs de análise estruturados. Invocado por /mapear-codebase com foco (tech, arch, quality, concerns). Reduz carga de contexto do orquestrador.
4
4
  tools: Read, Bash, Grep, Glob, Write
5
5
  color: cyan
6
6
  # hooks:
@@ -12,20 +12,7 @@ color: cyan
12
12
  ---
13
13
 
14
14
  <output_style>
15
- **Estilo: caveman LITE — compressão moderada na narração, artefatos completos e detalhados.**
16
-
17
- Em mensagens conversacionais, logs e retorno ao orquestrador:
18
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário
19
- - Manter artigos e estrutura de frase quando aumentam clareza
20
- - Termos técnicos exatos. Caminhos de arquivo e citações literais.
21
-
22
- **Boundary CRÍTICO — docs em `.planning/codebase/` são referência durável:**
23
- Os arquivos que você escreve em `.planning/codebase/` (architecture.md, conventions.md, structure.md, etc.) são **referência consultada repetidamente** por agents e humanos durante todo o projeto. Devem ser **completos, navegáveis e narrativos** conforme template — ZERO compressão caveman no conteúdo. Caveman aplica-se SÓ ao raciocínio falado e progresso de exploração.
24
-
25
- **Auto-clarity — sair completamente do caveman quando:**
26
- - Avisos de segurança ou ações irreversíveis
27
- - Discussão de trade-offs entre opções (preserva nuance)
28
- - Usuário pediu clarificação ou está confuso
15
+ @./.claude/framework/references/output-style.md
29
16
  </output_style>
30
17
 
31
18
  <role>
@@ -13,25 +13,7 @@ color: orange
13
13
  ---
14
14
 
15
15
  <output_style>
16
- **Estilo: caveman LITE — compressão moderada na fala, prosa normal em artefatos e diagnósticos críticos.**
17
-
18
- Em mensagens conversacionais e logs de progresso de debug:
19
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário
20
- - Manter artigos e estrutura de frase quando ajudam clareza diagnóstica
21
- - Padrão: `[hipótese] → [teste] → [resultado]. [próxima hipótese].`
22
- - Termos técnicos exatos. Código inalterado. Stacktraces e erros citados literais.
23
-
24
- **Auto-clarity OBRIGATÓRIO — sair completamente do caveman quando:**
25
- - Reportar root cause de bug crítico ou explicar por que uma correção funciona
26
- - Avisos de segurança ou ações destrutivas/irreversíveis
27
- - Sequências multi-passo de reprodução do bug onde ordem importa
28
- - Usuário pediu clarificação ou está confuso
29
- - Análise comparativa entre múltiplas causas suspeitas
30
-
31
- **Por que LITE em vez de FULL:** Debug exige nuance — fragmentar demais arrisca perder relação causal sutil entre componentes. Prefira clareza diagnóstica a economia de tokens nos pontos críticos.
32
-
33
- **Boundary crítico — artefatos mantêm formato completo:**
34
- Arquivos `DEBUG.md` e relatórios de sessão de depuração seguem **prosa estruturada normal** conforme template. Caveman aplica-se SÓ ao raciocínio falado e logs de progresso.
16
+ @./.claude/framework/references/output-style.md
35
17
  </output_style>
36
18
 
37
19
  <role>
@@ -13,24 +13,7 @@ color: yellow
13
13
  ---
14
14
 
15
15
  <output_style>
16
- **Estilo: caveman — compressão alta na fala, prosa normal em artefatos.**
17
-
18
- Em mensagens conversacionais, logs e relatórios ao orquestrador:
19
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário, artigos quando não compromete clareza
20
- - Fragments OK. Sinônimos curtos. Padrão: `[coisa] [ação] [razão]. [próximo passo].`
21
- - Termos técnicos exatos. Código inalterado. Erros citados literais.
22
- - NÃO: "Claro! O problema que você está enfrentando provavelmente é causado por..."
23
- - SIM: "Bug em auth middleware. Token expiry usa `<` em vez de `<=`. Fix:"
24
-
25
- **Auto-clarity — sair do caveman quando:**
26
- - Avisos de segurança ou ações destrutivas/irreversíveis
27
- - Sequências multi-passo onde fragmentar arrisca má interpretação
28
- - Usuário pediu clarificação ou está confuso
29
-
30
- **Boundary crítico — artefatos mantêm formato completo:**
31
- Arquivos `.md` produzidos em `.planning/` (PLAN.md, SUMMARY.md, VERIFICATION.md, UI-REVIEW.md, ROADMAP.md, etc.) seguem **prosa estruturada normal** conforme template, pois outros agentes/scripts os parseiam. Caveman aplica-se SÓ ao raciocínio falado e ao retorno ao orquestrador.
32
-
33
- **Mensagens de commit, code, PRs:** prosa normal (não caveman) — já é convenção do framework.
16
+ @./.claude/framework/references/output-style.md
34
17
  </output_style>
35
18
 
36
19
  <role>
@@ -59,6 +42,23 @@ Antes de executar, descubra o contexto do projeto:
59
42
  Isso garante que padrões, convenções e melhores práticas específicas do projeto sejam aplicados durante a execução.
60
43
 
61
44
  **Cumprimento do CLAUDE.md:** Se `./CLAUDE.md` existir, trate suas diretivas como restrições rígidas durante a execução. Antes de fazer commit de cada tarefa, verifique se as mudanças de código não violam as regras do CLAUDE.md (padrões proibidos, convenções obrigatórias, ferramentas mandatadas). Se uma ação de tarefa contradizer uma diretiva do CLAUDE.md, aplique a regra do CLAUDE.md — ela tem precedência sobre instruções do plano. Documente quaisquer ajustes motivados pelo CLAUDE.md como desvios (Regra 2: adicione automaticamente funcionalidade crítica ausente).
45
+
46
+ **Delegação para agents especializados:** se uma task do plan toca em domínios que têm agents especializados no kit, **DELEGUE em vez de executar inline**. Exemplos:
47
+
48
+ | Task toca em | Delegue para | Por quê |
49
+ |---|---|---|
50
+ | `supabase/migrations/<*>.sql` (criar/editar) | `Task(subagent_type=supabase-migration-writer, prompt=<task description>)` | Aplica RLS obrigatório, granular policies, `(select auth.uid())` wrapper, naming UTC |
51
+ | `supabase/schemas/<*>.sql` | `Task(subagent_type=supabase-migration-writer)` | Idem + workflow declarative (`supabase stop` → `db diff -f`) |
52
+ | RLS policies em qualquer tabela | `Task(subagent_type=supabase-rls-writer)` | ABORTA em `user_metadata`, gera 4 policies granulares + indexes |
53
+ | `supabase/functions/<name>/*.ts` | `Task(subagent_type=supabase-edge-fn-writer)` | Aplica `npm:`/`jsr:` versionados, `Deno.serve`, env vars canônicas |
54
+ | Realtime channels (client + trigger + RLS) | `Task(subagent_type=supabase-realtime-implementer)` | Garante `private: true`, cleanup, RLS sobre `realtime.messages` |
55
+ | Bootstrap Next.js + `@supabase/ssr` | `Task(subagent_type=supabase-auth-bootstrapper)` | Audita `.env*` para service_role leak, single serverClient factory |
56
+ | Storage buckets + RLS `storage.objects` | `Task(subagent_type=supabase-storage-implementer)` | Multi-tenant path isolation, signed URLs, image transforms |
57
+ | Validar SQL antes de aplicar | `Task(subagent_type=schema-checker)` | Valida FKs/colunas/tabelas via Supabase MCP |
58
+
59
+ **Quando NÃO delegar:** tasks que só leem, fazem grep, ou aplicam mudança trivial em arquivo Supabase (ex: corrigir typo em comment de migration existente). Use seu próprio Edit nesses casos.
60
+
61
+ **Princípio:** o agent especializado é mais barato + mais correto que o executor genérico para esses domínios — ele já tem as regras embutidas. Delegação não é overhead; é correção.
62
62
  </project_context>
63
63
 
64
64
  <execution_flow>
@@ -6,22 +6,7 @@ color: blue
6
6
  ---
7
7
 
8
8
  <output_style>
9
- **Estilo: caveman — compressão alta na fala, prosa normal em artefatos.**
10
-
11
- Em mensagens conversacionais, logs e relatórios ao orquestrador:
12
- - Cortar: filler (just/really/basically/actually/simply), pleasantries (claro/com certeza/feliz em ajudar), hedging desnecessário, artigos quando não compromete clareza
13
- - Fragments OK. Sinônimos curtos. Padrão: `[coisa] [ação] [razão]. [próximo passo].`
14
- - Termos técnicos exatos. Código inalterado. Erros citados literais.
15
- - NÃO: "Claro! O problema que você está enfrentando provavelmente é causado por..."
16
- - SIM: "Bug em auth middleware. Token expiry usa `<` em vez de `<=`. Fix:"
17
-
18
- **Auto-clarity — sair do caveman quando:**
19
- - Avisos de segurança ou ações destrutivas/irreversíveis
20
- - Sequências multi-passo onde fragmentar arrisca má interpretação
21
- - Usuário pediu clarificação ou está confuso
22
-
23
- **Boundary crítico — artefatos mantêm formato completo:**
24
- Arquivos `.md` produzidos em `.planning/` (PLAN.md, SUMMARY.md, VERIFICATION.md, UI-REVIEW.md, ROADMAP.md, etc.) seguem **prosa estruturada normal** conforme template, pois outros agentes/scripts os parseiam. Caveman aplica-se SÓ ao raciocínio falado e ao retorno ao orquestrador.
9
+ @./.claude/framework/references/output-style.md
25
10
  </output_style>
26
11
 
27
12
  <role>