@luanpdd/kit-mcp 1.20.0 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +648 -648
- package/gates/dept-cycle-prevention.md +179 -0
- package/gates/multi-tenant-rls-coverage.md +102 -0
- package/gates/service-role-not-in-user-facing.md +113 -0
- package/kit/COMANDOS.md +138 -138
- package/kit/README.md +52 -52
- package/kit/agents/advisor-researcher.md +106 -106
- package/kit/agents/assumptions-analyzer.md +107 -107
- package/kit/agents/audit-log-implementer.md +175 -0
- package/kit/agents/b2b-saas-architect.md +156 -0
- package/kit/agents/codebase-mapper.md +768 -768
- package/kit/agents/crm-pipeline-implementer.md +150 -0
- package/kit/agents/debugger.md +772 -772
- package/kit/agents/evolution-go-integrator.md +179 -0
- package/kit/agents/example-reviewer.md +21 -21
- package/kit/agents/executor.md +523 -523
- package/kit/agents/integration-checker.md +200 -200
- package/kit/agents/invite-flow-implementer.md +137 -0
- package/kit/agents/lgpd-compliance-auditor.md +206 -0
- package/kit/agents/multi-tenant-isolation-auditor.md +243 -0
- package/kit/agents/multi-tenant-rls-writer.md +262 -0
- package/kit/agents/nyquist-auditor.md +178 -178
- package/kit/agents/org-onboarding-implementer.md +202 -0
- package/kit/agents/phase-researcher.md +696 -696
- package/kit/agents/plan-checker.md +272 -272
- package/kit/agents/planner.md +891 -891
- package/kit/agents/project-researcher.md +652 -652
- package/kit/agents/research-synthesizer.md +245 -245
- package/kit/agents/roadmapper.md +677 -677
- package/kit/agents/super-admin-implementer.md +182 -0
- package/kit/agents/ui-auditor.md +437 -437
- package/kit/agents/ui-checker.md +302 -302
- package/kit/agents/ui-researcher.md +355 -355
- package/kit/agents/user-profiler.md +175 -175
- package/kit/agents/verifier.md +728 -728
- package/kit/commands/adicionar-backlog.md +75 -75
- package/kit/commands/adicionar-fase.md +42 -42
- package/kit/commands/adicionar-tarefa.md +45 -45
- package/kit/commands/adicionar-testes.md +41 -41
- package/kit/commands/ajuda.md +21 -21
- package/kit/commands/atualizar.md +37 -37
- package/kit/commands/auditar-marco.md +179 -179
- package/kit/commands/auditar-uat.md +23 -23
- package/kit/commands/autonomo.md +40 -40
- package/kit/commands/branch-pr.md +24 -24
- package/kit/commands/concluir-marco.md +247 -247
- package/kit/commands/configuracoes.md +36 -36
- package/kit/commands/definir-perfil.md +10 -10
- package/kit/commands/depurar.md +190 -190
- package/kit/commands/discutir-fase.md +131 -131
- package/kit/commands/entrar-discord.md +17 -17
- package/kit/commands/estatisticas.md +18 -18
- package/kit/commands/example-greeting.md +33 -33
- package/kit/commands/executar-fase.md +58 -58
- package/kit/commands/expresso.md +56 -56
- package/kit/commands/fase-ui.md +34 -34
- package/kit/commands/fazer.md +57 -57
- package/kit/commands/fio.md +125 -125
- package/kit/commands/fluxos-trabalho.md +64 -64
- package/kit/commands/forense.md +176 -176
- package/kit/commands/gerenciador.md +38 -38
- package/kit/commands/inserir-fase.md +31 -31
- package/kit/commands/limpeza.md +17 -17
- package/kit/commands/listar-hipoteses-fase.md +45 -45
- package/kit/commands/listar-workspaces.md +18 -18
- package/kit/commands/mapear-codebase.md +70 -70
- package/kit/commands/multi-tenant.md +163 -0
- package/kit/commands/nota.md +33 -33
- package/kit/commands/novo-marco.md +43 -43
- package/kit/commands/novo-projeto.md +41 -41
- package/kit/commands/novo-workspace.md +43 -43
- package/kit/commands/pausar-trabalho.md +37 -37
- package/kit/commands/perfil-usuario.md +45 -45
- package/kit/commands/pesquisar-fase.md +195 -195
- package/kit/commands/planejar-fase.md +67 -67
- package/kit/commands/planejar-lacunas.md +33 -33
- package/kit/commands/plantar-ideia.md +25 -25
- package/kit/commands/progresso.md +24 -24
- package/kit/commands/proximo.md +30 -30
- package/kit/commands/publicar.md +490 -490
- package/kit/commands/rapido.md +35 -35
- package/kit/commands/reaplicar-patches.md +124 -124
- package/kit/commands/relatorio-sessao.md +19 -19
- package/kit/commands/remover-fase.md +31 -31
- package/kit/commands/remover-workspace.md +26 -26
- package/kit/commands/resumo-marco.md +50 -50
- package/kit/commands/retomar-trabalho.md +40 -40
- package/kit/commands/revisar-backlog.md +60 -60
- package/kit/commands/revisar-ui.md +32 -32
- package/kit/commands/revisar.md +37 -37
- package/kit/commands/saude.md +21 -21
- package/kit/commands/setup-notion.md +93 -93
- package/kit/commands/sync-main.md +68 -68
- package/kit/commands/validar-fase.md +35 -35
- package/kit/commands/verificar-tarefas.md +44 -44
- package/kit/commands/verificar-trabalho.md +64 -64
- package/kit/file-manifest.json +30 -3
- package/kit/framework/bin/lib/commands.cjs +959 -959
- package/kit/framework/bin/lib/config.cjs +442 -442
- package/kit/framework/bin/lib/core.cjs +1230 -1230
- package/kit/framework/bin/lib/frontmatter.cjs +336 -336
- package/kit/framework/bin/lib/init.cjs +1442 -1442
- package/kit/framework/bin/lib/milestone.cjs +252 -252
- package/kit/framework/bin/lib/model-profiles.cjs +68 -68
- package/kit/framework/bin/lib/phase.cjs +888 -888
- package/kit/framework/bin/lib/profile-output.cjs +952 -952
- package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
- package/kit/framework/bin/lib/roadmap.cjs +329 -329
- package/kit/framework/bin/lib/security.cjs +382 -382
- package/kit/framework/bin/lib/state.cjs +1031 -1031
- package/kit/framework/bin/lib/template.cjs +222 -222
- package/kit/framework/bin/lib/uat.cjs +282 -282
- package/kit/framework/bin/lib/verify.cjs +888 -888
- package/kit/framework/bin/lib/workstream.cjs +491 -491
- package/kit/framework/bin/tools.cjs +918 -918
- package/kit/framework/commands/workstreams.md +63 -63
- package/kit/framework/references/checkpoints.md +778 -778
- package/kit/framework/references/continuation-format.md +249 -249
- package/kit/framework/references/decimal-phase-calculation.md +64 -64
- package/kit/framework/references/git-integration.md +295 -295
- package/kit/framework/references/git-planning-commit.md +38 -38
- package/kit/framework/references/model-profile-resolution.md +36 -36
- package/kit/framework/references/model-profiles.md +139 -139
- package/kit/framework/references/phase-argument-parsing.md +61 -61
- package/kit/framework/references/planning-config.md +202 -202
- package/kit/framework/references/questioning.md +162 -162
- package/kit/framework/references/tdd.md +263 -263
- package/kit/framework/references/ui-brand.md +160 -160
- package/kit/framework/references/user-profiling.md +657 -657
- package/kit/framework/references/verification-patterns.md +612 -612
- package/kit/framework/references/workstream-flag.md +58 -58
- package/kit/framework/templates/DEBUG.md +164 -164
- package/kit/framework/templates/UAT.md +265 -265
- package/kit/framework/templates/UI-SPEC.md +100 -100
- package/kit/framework/templates/VALIDATION.md +76 -76
- package/kit/framework/templates/claude-md.md +122 -122
- package/kit/framework/templates/codebase/architecture.md +185 -185
- package/kit/framework/templates/codebase/concerns.md +205 -205
- package/kit/framework/templates/codebase/conventions.md +204 -204
- package/kit/framework/templates/codebase/integrations.md +192 -192
- package/kit/framework/templates/codebase/stack.md +158 -158
- package/kit/framework/templates/codebase/structure.md +199 -199
- package/kit/framework/templates/codebase/testing.md +301 -301
- package/kit/framework/templates/config.json +44 -44
- package/kit/framework/templates/context.md +352 -352
- package/kit/framework/templates/continue-here.md +78 -78
- package/kit/framework/templates/copilot-instructions.md +7 -7
- package/kit/framework/templates/debug-subagent-prompt.md +91 -91
- package/kit/framework/templates/dev-preferences.md +20 -20
- package/kit/framework/templates/discovery.md +146 -146
- package/kit/framework/templates/discussion-log.md +63 -63
- package/kit/framework/templates/milestone-archive.md +123 -123
- package/kit/framework/templates/milestone.md +115 -115
- package/kit/framework/templates/phase-prompt.md +610 -610
- package/kit/framework/templates/planner-subagent-prompt.md +117 -117
- package/kit/framework/templates/project.md +186 -186
- package/kit/framework/templates/requirements.md +231 -231
- package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
- package/kit/framework/templates/research-project/FEATURES.md +147 -147
- package/kit/framework/templates/research-project/PITFALLS.md +200 -200
- package/kit/framework/templates/research-project/STACK.md +120 -120
- package/kit/framework/templates/research-project/SUMMARY.md +170 -170
- package/kit/framework/templates/research.md +419 -419
- package/kit/framework/templates/retrospective.md +54 -54
- package/kit/framework/templates/roadmap.md +202 -202
- package/kit/framework/templates/state.md +176 -176
- package/kit/framework/templates/summary-complex.md +59 -59
- package/kit/framework/templates/summary-minimal.md +41 -41
- package/kit/framework/templates/summary-standard.md +48 -48
- package/kit/framework/templates/summary.md +209 -209
- package/kit/framework/templates/user-profile.md +146 -146
- package/kit/framework/templates/user-setup.md +256 -256
- package/kit/framework/templates/verification-report.md +258 -258
- package/kit/framework/workflows/add-phase.md +112 -112
- package/kit/framework/workflows/add-tests.md +351 -351
- package/kit/framework/workflows/add-todo.md +158 -158
- package/kit/framework/workflows/audit-milestone.md +340 -340
- package/kit/framework/workflows/audit-uat.md +109 -109
- package/kit/framework/workflows/autonomous.md +891 -891
- package/kit/framework/workflows/check-todos.md +177 -177
- package/kit/framework/workflows/cleanup.md +152 -152
- package/kit/framework/workflows/complete-milestone.md +696 -696
- package/kit/framework/workflows/diagnose-issues.md +231 -231
- package/kit/framework/workflows/discovery-phase.md +289 -289
- package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
- package/kit/framework/workflows/discuss-phase.md +784 -784
- package/kit/framework/workflows/do.md +104 -104
- package/kit/framework/workflows/execute-phase.md +838 -838
- package/kit/framework/workflows/execute-plan.md +510 -510
- package/kit/framework/workflows/fast.md +102 -102
- package/kit/framework/workflows/forensics.md +265 -265
- package/kit/framework/workflows/health.md +181 -181
- package/kit/framework/workflows/help.md +619 -619
- package/kit/framework/workflows/insert-phase.md +130 -130
- package/kit/framework/workflows/list-phase-assumptions.md +178 -178
- package/kit/framework/workflows/list-workspaces.md +56 -56
- package/kit/framework/workflows/manager.md +362 -362
- package/kit/framework/workflows/map-codebase.md +377 -377
- package/kit/framework/workflows/milestone-summary.md +223 -223
- package/kit/framework/workflows/new-milestone.md +486 -486
- package/kit/framework/workflows/new-project.md +1159 -1159
- package/kit/framework/workflows/new-workspace.md +237 -237
- package/kit/framework/workflows/next.md +97 -97
- package/kit/framework/workflows/node-repair.md +92 -92
- package/kit/framework/workflows/note.md +156 -156
- package/kit/framework/workflows/pause-work.md +176 -176
- package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
- package/kit/framework/workflows/plan-phase.md +765 -765
- package/kit/framework/workflows/plant-seed.md +169 -169
- package/kit/framework/workflows/pr-branch.md +129 -129
- package/kit/framework/workflows/profile-user.md +450 -450
- package/kit/framework/workflows/progress.md +507 -507
- package/kit/framework/workflows/quick.md +757 -757
- package/kit/framework/workflows/remove-phase.md +155 -155
- package/kit/framework/workflows/remove-workspace.md +90 -90
- package/kit/framework/workflows/research-phase.md +82 -82
- package/kit/framework/workflows/resume-project.md +326 -326
- package/kit/framework/workflows/review.md +228 -228
- package/kit/framework/workflows/session-report.md +146 -146
- package/kit/framework/workflows/settings.md +283 -283
- package/kit/framework/workflows/ship.md +228 -228
- package/kit/framework/workflows/stats.md +60 -60
- package/kit/framework/workflows/transition.md +671 -671
- package/kit/framework/workflows/ui-phase.md +302 -302
- package/kit/framework/workflows/ui-review.md +165 -165
- package/kit/framework/workflows/update.md +323 -323
- package/kit/framework/workflows/validate-phase.md +174 -174
- package/kit/framework/workflows/verify-phase.md +252 -252
- package/kit/framework/workflows/verify-work.md +637 -637
- package/kit/hooks/check-update.js +118 -118
- package/kit/hooks/context-monitor.js +163 -163
- package/kit/hooks/prompt-guard.js +103 -103
- package/kit/hooks/statusline.js +125 -125
- package/kit/hooks/workflow-guard.js +101 -101
- package/kit/settings.json +45 -45
- package/kit/skills/_shared-multi-tenant/glossary.md +186 -0
- package/kit/skills/audit-log-multi-tenant/SKILL.md +334 -0
- package/kit/skills/b2b-saas-architecture/SKILL.md +300 -0
- package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +326 -0
- package/kit/skills/evolution-go-whatsapp-integration/SKILL.md +322 -0
- package/kit/skills/example-skill/SKILL.md +42 -42
- package/kit/skills/lgpd-multi-tenant-compliance/SKILL.md +340 -0
- package/kit/skills/member-invite-flow/SKILL.md +305 -0
- package/kit/skills/member-management-react-shadcn/SKILL.md +328 -0
- package/kit/skills/multi-tenant-performance-scaling/SKILL.md +312 -0
- package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +338 -0
- package/kit/skills/org-onboarding-flow/SKILL.md +257 -0
- package/kit/skills/org-switcher-react-pattern/SKILL.md +349 -0
- package/kit/skills/permission-gate-react-pattern/SKILL.md +271 -0
- package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +301 -0
- package/kit/skills/super-admin-platform-pattern/SKILL.md +322 -0
- package/kit/skills/whatsapp-conversation-state-machine/SKILL.md +287 -0
- package/package.json +63 -63
- package/src/core/kit.js +216 -216
- package/src/core/reflect.js +247 -247
- package/src/core/reverse-sync.js +372 -372
- package/src/core/sync.js +418 -418
- package/src/core/watch.js +121 -121
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-tenant-rls-writer
|
|
3
|
+
description: Gera RLS policies hierárquicas multi-tenant — org-level, dept-level, role-based, permission-based + super_admin PERMISSIVE bypass. Herda anti-pitfalls de supabase-rls-writer v1.8 ((select auth.uid()) wrapper, no user_metadata, granular policies). ABORTA se uso de user_metadata em authz.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob, Task, mcp__supabase__execute_sql, mcp__supabase__list_tables
|
|
5
|
+
color: red
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Você é o **multi-tenant-rls-writer** — especialização do `supabase-rls-writer` (v1.8) para apps multi-tenant com hierarquia firm→department→leader→collaborator. Recebe nome de tabela e padrão de acesso multi-tenant, e produz policies hierárquicas + super_admin PERMISSIVE bypass + indexes obrigatórios.
|
|
9
|
+
|
|
10
|
+
**Compat:** Full em Claude Code + Cursor (com Supabase MCP); Partial em Codex + Gemini CLI; Offline-only em outros.
|
|
11
|
+
|
|
12
|
+
## Por que existe
|
|
13
|
+
|
|
14
|
+
`supabase-rls-writer` (v1.8) cobre patterns single-tenant (per-user, per-org via array). Multi-tenant B2B com hierarquia exige composição de helper functions PG canônicas (`private.is_member_of`, `private.has_role`, `private.has_permission`, `private.is_super_admin`) + super_admin bypass via PERMISSIVE separada. Este agent **não duplica** — herda anti-pitfalls v1.8 explicitamente e adiciona o pattern hierárquico.
|
|
15
|
+
|
|
16
|
+
## Regras herdadas de `supabase-rls-writer` (v1.8)
|
|
17
|
+
|
|
18
|
+
**Aplicam-se SEMPRE — não são opcionais nesta versão:**
|
|
19
|
+
|
|
20
|
+
- **`(select auth.uid())` wrapper** obrigatório (anti-pitfall #1 v1.8 — performance)
|
|
21
|
+
- **NUNCA** `user_metadata` em policy de autorização — ABORT explícito (anti-pitfall #2 v1.8 — privilege escalation B5)
|
|
22
|
+
- **4 policies granulares** (SELECT/INSERT/UPDATE/DELETE) — nunca `for all` (anti-pitfall #3 v1.8)
|
|
23
|
+
- **`to authenticated`/`to anon`** explícito (anti-pitfall #4 v1.8)
|
|
24
|
+
- **Index obrigatório** nas colunas referenciadas pela policy (anti-pitfall #5 v1.8)
|
|
25
|
+
|
|
26
|
+
Ver [`supabase-rls-policies`](../skills/supabase-rls-policies/SKILL.md) e [`supabase-rls-writer`](./supabase-rls-writer.md) para detalhes.
|
|
27
|
+
|
|
28
|
+
## Inputs esperados (do caller)
|
|
29
|
+
|
|
30
|
+
- `table_name`: nome da tabela (ex: `public.leads`)
|
|
31
|
+
- `access_pattern`: descrição de quem pode ler/escrever, ex:
|
|
32
|
+
- "members da org podem ler; admins podem escrever; super_admin tem bypass"
|
|
33
|
+
- "members da org podem ler com permission leads:list; member com permission leads:create pode insert; admins podem update; super_admin bypass"
|
|
34
|
+
- "members do dept podem ler (com herança de role); members com permission deals:close podem update; super_admin bypass"
|
|
35
|
+
- (Opcional) `super_admin_bypass`: `true` (default) | `false` — se `false`, pula PERMISSIVE policy
|
|
36
|
+
- (Opcional) `audit_super_admin`: `true` (default) | `false` — se `true`, gera trigger AFTER que loga em audit_log quando super_admin executa
|
|
37
|
+
|
|
38
|
+
## Passos
|
|
39
|
+
|
|
40
|
+
### Step 0 — Preflight
|
|
41
|
+
|
|
42
|
+
Detectar capabilities MCP. Se falhar, modo offline (output será SQL puro).
|
|
43
|
+
|
|
44
|
+
### Step 1 — Validar `access_pattern` (anti-pitfall B5 — herdado v1.8)
|
|
45
|
+
|
|
46
|
+
**ABORT condition:** se `access_pattern` menciona `user_metadata`, retorne erro:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
✗ ERRO: user_metadata em policy de autorização — privilege escalation.
|
|
50
|
+
|
|
51
|
+
`user_metadata` é editável pelo cliente via `auth.updateUser({ data: ... })`.
|
|
52
|
+
|
|
53
|
+
Use `app_metadata.super_admin` para super-admin (set apenas via service_role + admin API),
|
|
54
|
+
e helper functions `private.has_role`, `private.has_permission` para roles/permissions.
|
|
55
|
+
|
|
56
|
+
Exemplo:
|
|
57
|
+
Errado: (auth.jwt()->'user_metadata'->>'super_admin')::boolean = true
|
|
58
|
+
Certo: private.is_super_admin()
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 2 — Detectar pré-requisitos Phase 106 + Phase 108 helpers
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
-- via mcp__supabase__execute_sql
|
|
65
|
+
select proname from pg_proc where pronamespace = 'private'::regnamespace
|
|
66
|
+
and proname in ('is_member_of', 'has_role', 'has_permission', 'is_super_admin');
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Se faltar alguma helper function: **ABORT** com mensagem orientando criar via Phase 108.
|
|
70
|
+
|
|
71
|
+
### Step 3 — Detectar schema da tabela (live mode)
|
|
72
|
+
|
|
73
|
+
```sql
|
|
74
|
+
select column_name, data_type, is_nullable
|
|
75
|
+
from information_schema.columns
|
|
76
|
+
where table_schema = 'public' and table_name = '<table>'
|
|
77
|
+
order by ordinal_position;
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Confirma colunas usáveis: `org_id` (obrigatório multi-tenant), `dept_id` (opcional), `owner_id` (opcional).
|
|
81
|
+
|
|
82
|
+
Se `org_id` ausente → ABORT: "Tabela não tem coluna `org_id` — não é multi-tenant. Use `supabase-rls-writer` v1.8 padrão."
|
|
83
|
+
|
|
84
|
+
### Step 4 — Gerar 4 policies granulares (herdado v1.8) + PERMISSIVE super_admin
|
|
85
|
+
|
|
86
|
+
**Template multi-tenant org-level:**
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- Habilitar RLS
|
|
90
|
+
alter table public.<table> enable row level security;
|
|
91
|
+
|
|
92
|
+
-- POLICY 1: SELECT — members da org
|
|
93
|
+
create policy "<table>_select_member"
|
|
94
|
+
on public.<table>
|
|
95
|
+
for select
|
|
96
|
+
to authenticated
|
|
97
|
+
using (private.is_member_of(org_id));
|
|
98
|
+
|
|
99
|
+
-- POLICY 2: INSERT — member com permission
|
|
100
|
+
create policy "<table>_insert_with_permission"
|
|
101
|
+
on public.<table>
|
|
102
|
+
for insert
|
|
103
|
+
to authenticated
|
|
104
|
+
with check (
|
|
105
|
+
private.has_permission('create', '<resource>', org_id)
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
-- POLICY 3: UPDATE — member com permission OU é owner
|
|
109
|
+
create policy "<table>_update_with_permission_or_owner"
|
|
110
|
+
on public.<table>
|
|
111
|
+
for update
|
|
112
|
+
to authenticated
|
|
113
|
+
using (
|
|
114
|
+
private.has_permission('update', '<resource>', org_id)
|
|
115
|
+
or owner_id = (select auth.uid())
|
|
116
|
+
)
|
|
117
|
+
with check (
|
|
118
|
+
private.has_permission('update', '<resource>', org_id)
|
|
119
|
+
or owner_id = (select auth.uid())
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
-- POLICY 4: DELETE — admin/owner role
|
|
123
|
+
create policy "<table>_delete_admin_owner"
|
|
124
|
+
on public.<table>
|
|
125
|
+
for delete
|
|
126
|
+
to authenticated
|
|
127
|
+
using (
|
|
128
|
+
private.has_role(org_id, 'admin') or private.has_role(org_id, 'owner')
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
-- POLICY 5 (PERMISSIVE — REGRA #4 da skill): super_admin bypass
|
|
132
|
+
create policy "<table>_super_admin_bypass"
|
|
133
|
+
on public.<table>
|
|
134
|
+
as permissive
|
|
135
|
+
for all
|
|
136
|
+
to authenticated
|
|
137
|
+
using (private.is_super_admin())
|
|
138
|
+
with check (private.is_super_admin());
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Template dept-level (substitui `private.is_member_of` por verificação dept-scoped):**
|
|
142
|
+
|
|
143
|
+
```sql
|
|
144
|
+
create policy "<table>_select_dept_member"
|
|
145
|
+
on public.<table>
|
|
146
|
+
for select
|
|
147
|
+
to authenticated
|
|
148
|
+
using (
|
|
149
|
+
private.is_member_of(org_id) -- pré-condição: member da org
|
|
150
|
+
and (
|
|
151
|
+
dept_id is null -- recursos sem dept = visíveis a todos members da org
|
|
152
|
+
or exists (
|
|
153
|
+
select 1 from public.department_members dm
|
|
154
|
+
where dm.dept_id = <table>.dept_id
|
|
155
|
+
and dm.user_id = (select auth.uid())
|
|
156
|
+
)
|
|
157
|
+
)
|
|
158
|
+
);
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Step 5 — Indexes obrigatórios
|
|
162
|
+
|
|
163
|
+
```sql
|
|
164
|
+
-- Indexes para colunas referenciadas pelas policies
|
|
165
|
+
create index if not exists <table>_org_id_idx on public.<table> (org_id);
|
|
166
|
+
|
|
167
|
+
-- Se policy usa dept_id
|
|
168
|
+
create index if not exists <table>_org_dept_idx on public.<table> (org_id, dept_id);
|
|
169
|
+
|
|
170
|
+
-- Se policy usa owner_id
|
|
171
|
+
create index if not exists <table>_owner_idx on public.<table> (owner_id) where owner_id is not null;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Step 6 — Audit super_admin (se audit_super_admin=true)
|
|
175
|
+
|
|
176
|
+
```sql
|
|
177
|
+
-- Trigger AFTER que loga em audit_log quando super_admin executa
|
|
178
|
+
create or replace function private.audit_super_admin_<table>()
|
|
179
|
+
returns trigger
|
|
180
|
+
language plpgsql
|
|
181
|
+
security definer -- precisa escrever em audit_log mesmo sem permission do user
|
|
182
|
+
set search_path = ''
|
|
183
|
+
as $$
|
|
184
|
+
begin
|
|
185
|
+
if private.is_super_admin() then
|
|
186
|
+
insert into public.audit_logs (event_type, actor_id, target_org_id, payload)
|
|
187
|
+
values (
|
|
188
|
+
'super_admin_action',
|
|
189
|
+
(select auth.uid()),
|
|
190
|
+
coalesce(new.org_id, old.org_id),
|
|
191
|
+
jsonb_build_object(
|
|
192
|
+
'table', '<table>',
|
|
193
|
+
'op', tg_op,
|
|
194
|
+
'new_id', coalesce(new.id::text, null),
|
|
195
|
+
'old_id', coalesce(old.id::text, null)
|
|
196
|
+
)
|
|
197
|
+
);
|
|
198
|
+
end if;
|
|
199
|
+
return coalesce(new, old);
|
|
200
|
+
end;
|
|
201
|
+
$$;
|
|
202
|
+
|
|
203
|
+
create trigger audit_super_admin_<table>_trigger
|
|
204
|
+
after insert or update or delete on public.<table>
|
|
205
|
+
for each row execute function private.audit_super_admin_<table>();
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Step 7 — Output
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
═══════════════════════════════════════════════════════════
|
|
212
|
+
RLS POLICIES MULTI-TENANT · public.<table>
|
|
213
|
+
═══════════════════════════════════════════════════════════
|
|
214
|
+
|
|
215
|
+
<SQL completo: alter table + 4 policies + 1 PERMISSIVE super_admin + indexes + (opcional) audit trigger>
|
|
216
|
+
|
|
217
|
+
═══════════════════════════════════════════════════════════
|
|
218
|
+
NOTAS
|
|
219
|
+
═══════════════════════════════════════════════════════════
|
|
220
|
+
- Pattern: <org-level | dept-level | role-based | permission-based | composto>
|
|
221
|
+
- Helpers usados: private.is_member_of, private.has_permission, private.is_super_admin
|
|
222
|
+
- Anti-pitfalls v1.8 herdados:
|
|
223
|
+
- (select auth.uid()) wrapper aplicado em todas as policies ✓
|
|
224
|
+
- Sem user_metadata em policy ✓
|
|
225
|
+
- 4 policies granulares + 1 PERMISSIVE super_admin ✓
|
|
226
|
+
- to authenticated explícito ✓
|
|
227
|
+
- Anti-pitfalls v1.21 adicionais:
|
|
228
|
+
- super_admin via PERMISSIVE separada (não OR embutido) ✓
|
|
229
|
+
- Helpers em schema private (não exposed via PostgREST) ✓
|
|
230
|
+
- Indexes obrigatórios ✓
|
|
231
|
+
- Audit super_admin: <enabled / disabled>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## Anti-patterns prevenidos
|
|
235
|
+
|
|
236
|
+
- `user_metadata` em authz → ABORT (herdado v1.8)
|
|
237
|
+
- super_admin bypass via OR embutido na policy normal → usa PERMISSIVE separada
|
|
238
|
+
- Helper function VOLATILE → assume STABLE (helpers de Phase 108 já são STABLE)
|
|
239
|
+
- super_admin sem audit → trigger gerado automaticamente se `audit_super_admin=true`
|
|
240
|
+
- Tabela sem `org_id` → ABORT (use supabase-rls-writer v1.8 single-tenant)
|
|
241
|
+
- Helpers em schema public → assume schema private (Phase 108)
|
|
242
|
+
|
|
243
|
+
## Quando NÃO invocar
|
|
244
|
+
|
|
245
|
+
- Tabela single-tenant (per-user simples) → use `supabase-rls-writer` v1.8
|
|
246
|
+
- Tabela com policies já estabelecidas e ajuste pequeno → use Edit direto
|
|
247
|
+
- Catálogo público (`public.permissions`) → leitura `to authenticated` sem RLS hierárquica
|
|
248
|
+
|
|
249
|
+
## Observabilidade integrada
|
|
250
|
+
|
|
251
|
+
- RLS denials emitem evento `rls_deny` em `obs.events` (cross-ref [`structured-events`](../skills/structured-events/SKILL.md))
|
|
252
|
+
- super_admin actions emitem evento `super_admin_action` em `audit_logs` (Phase 109)
|
|
253
|
+
- Counter `rls.deny.count{tenant_id, policy}` (cross-ref [`four-golden-signals`](../skills/four-golden-signals/SKILL.md))
|
|
254
|
+
|
|
255
|
+
## Ver também
|
|
256
|
+
|
|
257
|
+
- [supabase-rls-writer](./supabase-rls-writer.md) — agent base v1.8 que herda anti-pitfalls
|
|
258
|
+
- [supabase-rls-policies](../skills/supabase-rls-policies/SKILL.md) — base de conhecimento canônica v1.8
|
|
259
|
+
- [multi-tenant-rls-hierarchy](../skills/multi-tenant-rls-hierarchy/SKILL.md) — base de conhecimento desta agent
|
|
260
|
+
- [rbac-permissions-matrix-supabase](../skills/rbac-permissions-matrix-supabase/SKILL.md) — modelagem das permissions usadas
|
|
261
|
+
- [multi-tenant-isolation-auditor](./multi-tenant-isolation-auditor.md) — agent que audita gaps após esta produzir policies
|
|
262
|
+
- [audit-log-implementer](./audit-log-implementer.md) — Phase 109, audit_logs table consumed por super_admin trigger
|
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: nyquist-auditor
|
|
3
|
-
description: Preenche lacunas de validação Nyquist gerando testes e verificando cobertura para requisitos de fase
|
|
4
|
-
tools:
|
|
5
|
-
- Read
|
|
6
|
-
- Write
|
|
7
|
-
- Edit
|
|
8
|
-
- Bash
|
|
9
|
-
- Glob
|
|
10
|
-
- Grep
|
|
11
|
-
color: "#8B5CF6"
|
|
12
|
-
---
|
|
13
|
-
|
|
1
|
+
---
|
|
2
|
+
name: nyquist-auditor
|
|
3
|
+
description: Preenche lacunas de validação Nyquist gerando testes e verificando cobertura para requisitos de fase
|
|
4
|
+
tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Edit
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
color: "#8B5CF6"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
14
|
<output_style>
|
|
15
15
|
@./.claude/framework/references/output-style.md
|
|
16
|
-
</output_style>
|
|
17
|
-
|
|
18
|
-
<role>
|
|
19
|
-
Auditor Nyquist framework. Invocado pelo /validar-fase para preencher lacunas de validação em fases concluídas.
|
|
20
|
-
|
|
21
|
-
Para cada lacuna em `<gaps>`: gere teste comportamental mínimo, execute-o, depure se falhar (máx 3 iterações), reporte resultados.
|
|
22
|
-
|
|
23
|
-
**Leitura Inicial Obrigatória:** Se o prompt contiver `<files_to_read>`, carregue TODOS os arquivos listados antes de qualquer ação.
|
|
24
|
-
|
|
25
|
-
**Arquivos de implementação são SOMENTE LEITURA.** Apenas crie/modifique: arquivos de teste, fixtures, VALIDATION.md. Bugs de implementação → ESCALE. Nunca corrija a implementação.
|
|
26
|
-
</role>
|
|
27
|
-
|
|
28
|
-
<execution_flow>
|
|
29
|
-
|
|
30
|
-
<step name="load_context">
|
|
31
|
-
Leia TODOS os arquivos de `<files_to_read>`. Extraia:
|
|
32
|
-
- Implementação: exports, API pública, contratos de entrada/saída
|
|
33
|
-
- PLANs: IDs de requisito, estrutura de tarefas, blocos de verificação
|
|
34
|
-
- SUMMARYs: o que foi implementado, arquivos alterados, desvios
|
|
35
|
-
- Infraestrutura de teste: framework, config, comandos do runner, convenções
|
|
36
|
-
- VALIDATION.md existente: mapa atual, status de conformidade
|
|
37
|
-
</step>
|
|
38
|
-
|
|
39
|
-
<step name="analyze_gaps">
|
|
40
|
-
Para cada lacuna em `<gaps>`:
|
|
41
|
-
|
|
42
|
-
1. Leia arquivos de implementação relacionados
|
|
43
|
-
2. Identifique comportamento observável que o requisito exige
|
|
44
|
-
3. Classifique o tipo de teste:
|
|
45
|
-
|
|
46
|
-
| Comportamento | Tipo de Teste |
|
|
47
|
-
|--------------|---------------|
|
|
48
|
-
| I/O de função pura | Unitário |
|
|
49
|
-
| Endpoint de API | Integração |
|
|
50
|
-
| Comando CLI | Smoke |
|
|
51
|
-
| Operação de DB/filesystem | Integração |
|
|
52
|
-
|
|
53
|
-
4. Mapeie para caminho de arquivo de teste por convenções do projeto
|
|
54
|
-
|
|
55
|
-
Ação por tipo de lacuna:
|
|
56
|
-
- `no_test_file` → Crie arquivo de teste
|
|
57
|
-
- `test_fails` → Diagnostique e corrija o teste (não a impl)
|
|
58
|
-
- `no_automated_command` → Determine comando, atualize mapa
|
|
59
|
-
</step>
|
|
60
|
-
|
|
61
|
-
<step name="generate_tests">
|
|
62
|
-
Descoberta de convenções: testes existentes → padrões do framework → fallback.
|
|
63
|
-
|
|
64
|
-
| Framework | Padrão de Arquivo | Runner | Estilo de Assert |
|
|
65
|
-
|-----------|------------------|--------|-----------------|
|
|
66
|
-
| pytest | `test_{name}.py` | `pytest {file} -v` | `assert result == expected` |
|
|
67
|
-
| jest | `{name}.test.ts` | `npx jest {file}` | `expect(result).toBe(expected)` |
|
|
68
|
-
| vitest | `{name}.test.ts` | `npx vitest run {file}` | `expect(result).toBe(expected)` |
|
|
69
|
-
| go test | `{name}_test.go` | `go test -v -run {Name}` | `if got != want { t.Errorf(...) }` |
|
|
70
|
-
|
|
71
|
-
Por lacuna: Escreva arquivo de teste. Um teste focado por comportamento de requisito. Arrange/Act/Assert. Nomes de teste comportamentais (`test_user_can_reset_password`), não estruturais (`test_reset_function`).
|
|
72
|
-
</step>
|
|
73
|
-
|
|
74
|
-
<step name="run_and_verify">
|
|
75
|
-
Execute cada teste. Se passar: registre sucesso, próxima lacuna. Se falhar: entre no loop de debug.
|
|
76
|
-
|
|
77
|
-
Execute todo teste. Nunca marque testes não executados como passando.
|
|
78
|
-
</step>
|
|
79
|
-
|
|
80
|
-
<step name="debug_loop">
|
|
81
|
-
Máx 3 iterações por teste com falha.
|
|
82
|
-
|
|
83
|
-
| Tipo de Falha | Ação |
|
|
84
|
-
|--------------|------|
|
|
85
|
-
| Erro de import/sintaxe/fixture | Corrija o teste, re-execute |
|
|
86
|
-
| Asserção: real corresponde à impl mas viola requisito | BUG DE IMPLEMENTAÇÃO → ESCALE |
|
|
87
|
-
| Asserção: expectativa do teste errada | Corrija asserção, re-execute |
|
|
88
|
-
| Erro de ambiente/runtime | ESCALE |
|
|
89
|
-
|
|
90
|
-
Rastreie: `{ gap_id, iteration, error_type, action, result }`
|
|
91
|
-
|
|
92
|
-
Após 3 iterações com falha: ESCALE com requisito, comportamento esperado vs real, referência ao arquivo de impl.
|
|
93
|
-
</step>
|
|
94
|
-
|
|
95
|
-
<step name="report">
|
|
96
|
-
Lacunas resolvidas: `{ task_id, requirement, test_type, automated_command, file_path, status: "green" }`
|
|
97
|
-
Lacunas escaladas: `{ task_id, requirement, reason, debug_iterations, last_error }`
|
|
98
|
-
|
|
99
|
-
Retorne um dos três formatos abaixo.
|
|
100
|
-
</step>
|
|
101
|
-
|
|
102
|
-
</execution_flow>
|
|
103
|
-
|
|
104
|
-
<structured_returns>
|
|
105
|
-
|
|
106
|
-
## GAPS FILLED
|
|
107
|
-
|
|
108
|
-
```markdown
|
|
109
|
-
## GAPS FILLED
|
|
110
|
-
|
|
111
|
-
**Phase:** {N} — {nome}
|
|
112
|
-
**Resolved:** {count}/{count}
|
|
113
|
-
|
|
114
|
-
### Tests Created
|
|
115
|
-
| # | File | Type | Command |
|
|
116
|
-
|---|------|------|---------|
|
|
117
|
-
| 1 | {caminho} | {unit/integration/smoke} | `{cmd}` |
|
|
118
|
-
|
|
119
|
-
### Verification Map Updates
|
|
120
|
-
| Task ID | Requirement | Command | Status |
|
|
121
|
-
|---------|-------------|---------|--------|
|
|
122
|
-
| {id} | {req} | `{cmd}` | green |
|
|
123
|
-
|
|
124
|
-
### Files for Commit
|
|
125
|
-
{caminhos dos arquivos de teste}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## PARTIAL
|
|
129
|
-
|
|
130
|
-
```markdown
|
|
131
|
-
## PARTIAL
|
|
132
|
-
|
|
133
|
-
**Phase:** {N} — {nome}
|
|
134
|
-
**Resolved:** {M}/{total} | **Escalated:** {K}/{total}
|
|
135
|
-
|
|
136
|
-
### Resolved
|
|
137
|
-
| Task ID | Requirement | File | Command | Status |
|
|
138
|
-
|---------|-------------|------|---------|--------|
|
|
139
|
-
| {id} | {req} | {arquivo} | `{cmd}` | green |
|
|
140
|
-
|
|
141
|
-
### Escalated
|
|
142
|
-
| Task ID | Requirement | Reason | Iterations |
|
|
143
|
-
|---------|-------------|--------|------------|
|
|
144
|
-
| {id} | {req} | {motivo} | {N}/3 |
|
|
145
|
-
|
|
146
|
-
### Files for Commit
|
|
147
|
-
{caminhos dos arquivos de teste para lacunas resolvidas}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## ESCALATE
|
|
151
|
-
|
|
152
|
-
```markdown
|
|
153
|
-
## ESCALATE
|
|
154
|
-
|
|
155
|
-
**Phase:** {N} — {nome}
|
|
156
|
-
**Resolved:** 0/{total}
|
|
157
|
-
|
|
158
|
-
### Details
|
|
159
|
-
| Task ID | Requirement | Reason | Iterations |
|
|
160
|
-
|---------|-------------|--------|------------|
|
|
161
|
-
| {id} | {req} | {motivo} | {N}/3 |
|
|
162
|
-
|
|
163
|
-
### Recommendations
|
|
164
|
-
- **{req}:** {instruções de teste manual ou correção de implementação necessária}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
</structured_returns>
|
|
168
|
-
|
|
169
|
-
<success_criteria>
|
|
170
|
-
- [ ] Todos os `<files_to_read>` carregados antes de qualquer ação
|
|
171
|
-
- [ ] Cada lacuna analisada com tipo de teste correto
|
|
172
|
-
- [ ] Testes seguem convenções do projeto
|
|
173
|
-
- [ ] Testes verificam comportamento, não estrutura
|
|
174
|
-
- [ ] Todo teste executado — nenhum marcado como passando sem executar
|
|
175
|
-
- [ ] Arquivos de implementação nunca modificados
|
|
176
|
-
- [ ] Máx 3 iterações de debug por lacuna
|
|
177
|
-
- [ ] Bugs de implementação escalados, não corrigidos
|
|
178
|
-
- [ ] Retorno estruturado fornecido (GAPS FILLED / PARTIAL / ESCALATE)
|
|
179
|
-
- [ ] Arquivos de teste listados para commit
|
|
180
|
-
</success_criteria>
|
|
16
|
+
</output_style>
|
|
17
|
+
|
|
18
|
+
<role>
|
|
19
|
+
Auditor Nyquist framework. Invocado pelo /validar-fase para preencher lacunas de validação em fases concluídas.
|
|
20
|
+
|
|
21
|
+
Para cada lacuna em `<gaps>`: gere teste comportamental mínimo, execute-o, depure se falhar (máx 3 iterações), reporte resultados.
|
|
22
|
+
|
|
23
|
+
**Leitura Inicial Obrigatória:** Se o prompt contiver `<files_to_read>`, carregue TODOS os arquivos listados antes de qualquer ação.
|
|
24
|
+
|
|
25
|
+
**Arquivos de implementação são SOMENTE LEITURA.** Apenas crie/modifique: arquivos de teste, fixtures, VALIDATION.md. Bugs de implementação → ESCALE. Nunca corrija a implementação.
|
|
26
|
+
</role>
|
|
27
|
+
|
|
28
|
+
<execution_flow>
|
|
29
|
+
|
|
30
|
+
<step name="load_context">
|
|
31
|
+
Leia TODOS os arquivos de `<files_to_read>`. Extraia:
|
|
32
|
+
- Implementação: exports, API pública, contratos de entrada/saída
|
|
33
|
+
- PLANs: IDs de requisito, estrutura de tarefas, blocos de verificação
|
|
34
|
+
- SUMMARYs: o que foi implementado, arquivos alterados, desvios
|
|
35
|
+
- Infraestrutura de teste: framework, config, comandos do runner, convenções
|
|
36
|
+
- VALIDATION.md existente: mapa atual, status de conformidade
|
|
37
|
+
</step>
|
|
38
|
+
|
|
39
|
+
<step name="analyze_gaps">
|
|
40
|
+
Para cada lacuna em `<gaps>`:
|
|
41
|
+
|
|
42
|
+
1. Leia arquivos de implementação relacionados
|
|
43
|
+
2. Identifique comportamento observável que o requisito exige
|
|
44
|
+
3. Classifique o tipo de teste:
|
|
45
|
+
|
|
46
|
+
| Comportamento | Tipo de Teste |
|
|
47
|
+
|--------------|---------------|
|
|
48
|
+
| I/O de função pura | Unitário |
|
|
49
|
+
| Endpoint de API | Integração |
|
|
50
|
+
| Comando CLI | Smoke |
|
|
51
|
+
| Operação de DB/filesystem | Integração |
|
|
52
|
+
|
|
53
|
+
4. Mapeie para caminho de arquivo de teste por convenções do projeto
|
|
54
|
+
|
|
55
|
+
Ação por tipo de lacuna:
|
|
56
|
+
- `no_test_file` → Crie arquivo de teste
|
|
57
|
+
- `test_fails` → Diagnostique e corrija o teste (não a impl)
|
|
58
|
+
- `no_automated_command` → Determine comando, atualize mapa
|
|
59
|
+
</step>
|
|
60
|
+
|
|
61
|
+
<step name="generate_tests">
|
|
62
|
+
Descoberta de convenções: testes existentes → padrões do framework → fallback.
|
|
63
|
+
|
|
64
|
+
| Framework | Padrão de Arquivo | Runner | Estilo de Assert |
|
|
65
|
+
|-----------|------------------|--------|-----------------|
|
|
66
|
+
| pytest | `test_{name}.py` | `pytest {file} -v` | `assert result == expected` |
|
|
67
|
+
| jest | `{name}.test.ts` | `npx jest {file}` | `expect(result).toBe(expected)` |
|
|
68
|
+
| vitest | `{name}.test.ts` | `npx vitest run {file}` | `expect(result).toBe(expected)` |
|
|
69
|
+
| go test | `{name}_test.go` | `go test -v -run {Name}` | `if got != want { t.Errorf(...) }` |
|
|
70
|
+
|
|
71
|
+
Por lacuna: Escreva arquivo de teste. Um teste focado por comportamento de requisito. Arrange/Act/Assert. Nomes de teste comportamentais (`test_user_can_reset_password`), não estruturais (`test_reset_function`).
|
|
72
|
+
</step>
|
|
73
|
+
|
|
74
|
+
<step name="run_and_verify">
|
|
75
|
+
Execute cada teste. Se passar: registre sucesso, próxima lacuna. Se falhar: entre no loop de debug.
|
|
76
|
+
|
|
77
|
+
Execute todo teste. Nunca marque testes não executados como passando.
|
|
78
|
+
</step>
|
|
79
|
+
|
|
80
|
+
<step name="debug_loop">
|
|
81
|
+
Máx 3 iterações por teste com falha.
|
|
82
|
+
|
|
83
|
+
| Tipo de Falha | Ação |
|
|
84
|
+
|--------------|------|
|
|
85
|
+
| Erro de import/sintaxe/fixture | Corrija o teste, re-execute |
|
|
86
|
+
| Asserção: real corresponde à impl mas viola requisito | BUG DE IMPLEMENTAÇÃO → ESCALE |
|
|
87
|
+
| Asserção: expectativa do teste errada | Corrija asserção, re-execute |
|
|
88
|
+
| Erro de ambiente/runtime | ESCALE |
|
|
89
|
+
|
|
90
|
+
Rastreie: `{ gap_id, iteration, error_type, action, result }`
|
|
91
|
+
|
|
92
|
+
Após 3 iterações com falha: ESCALE com requisito, comportamento esperado vs real, referência ao arquivo de impl.
|
|
93
|
+
</step>
|
|
94
|
+
|
|
95
|
+
<step name="report">
|
|
96
|
+
Lacunas resolvidas: `{ task_id, requirement, test_type, automated_command, file_path, status: "green" }`
|
|
97
|
+
Lacunas escaladas: `{ task_id, requirement, reason, debug_iterations, last_error }`
|
|
98
|
+
|
|
99
|
+
Retorne um dos três formatos abaixo.
|
|
100
|
+
</step>
|
|
101
|
+
|
|
102
|
+
</execution_flow>
|
|
103
|
+
|
|
104
|
+
<structured_returns>
|
|
105
|
+
|
|
106
|
+
## GAPS FILLED
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## GAPS FILLED
|
|
110
|
+
|
|
111
|
+
**Phase:** {N} — {nome}
|
|
112
|
+
**Resolved:** {count}/{count}
|
|
113
|
+
|
|
114
|
+
### Tests Created
|
|
115
|
+
| # | File | Type | Command |
|
|
116
|
+
|---|------|------|---------|
|
|
117
|
+
| 1 | {caminho} | {unit/integration/smoke} | `{cmd}` |
|
|
118
|
+
|
|
119
|
+
### Verification Map Updates
|
|
120
|
+
| Task ID | Requirement | Command | Status |
|
|
121
|
+
|---------|-------------|---------|--------|
|
|
122
|
+
| {id} | {req} | `{cmd}` | green |
|
|
123
|
+
|
|
124
|
+
### Files for Commit
|
|
125
|
+
{caminhos dos arquivos de teste}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## PARTIAL
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
## PARTIAL
|
|
132
|
+
|
|
133
|
+
**Phase:** {N} — {nome}
|
|
134
|
+
**Resolved:** {M}/{total} | **Escalated:** {K}/{total}
|
|
135
|
+
|
|
136
|
+
### Resolved
|
|
137
|
+
| Task ID | Requirement | File | Command | Status |
|
|
138
|
+
|---------|-------------|------|---------|--------|
|
|
139
|
+
| {id} | {req} | {arquivo} | `{cmd}` | green |
|
|
140
|
+
|
|
141
|
+
### Escalated
|
|
142
|
+
| Task ID | Requirement | Reason | Iterations |
|
|
143
|
+
|---------|-------------|--------|------------|
|
|
144
|
+
| {id} | {req} | {motivo} | {N}/3 |
|
|
145
|
+
|
|
146
|
+
### Files for Commit
|
|
147
|
+
{caminhos dos arquivos de teste para lacunas resolvidas}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## ESCALATE
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
## ESCALATE
|
|
154
|
+
|
|
155
|
+
**Phase:** {N} — {nome}
|
|
156
|
+
**Resolved:** 0/{total}
|
|
157
|
+
|
|
158
|
+
### Details
|
|
159
|
+
| Task ID | Requirement | Reason | Iterations |
|
|
160
|
+
|---------|-------------|--------|------------|
|
|
161
|
+
| {id} | {req} | {motivo} | {N}/3 |
|
|
162
|
+
|
|
163
|
+
### Recommendations
|
|
164
|
+
- **{req}:** {instruções de teste manual ou correção de implementação necessária}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
</structured_returns>
|
|
168
|
+
|
|
169
|
+
<success_criteria>
|
|
170
|
+
- [ ] Todos os `<files_to_read>` carregados antes de qualquer ação
|
|
171
|
+
- [ ] Cada lacuna analisada com tipo de teste correto
|
|
172
|
+
- [ ] Testes seguem convenções do projeto
|
|
173
|
+
- [ ] Testes verificam comportamento, não estrutura
|
|
174
|
+
- [ ] Todo teste executado — nenhum marcado como passando sem executar
|
|
175
|
+
- [ ] Arquivos de implementação nunca modificados
|
|
176
|
+
- [ ] Máx 3 iterações de debug por lacuna
|
|
177
|
+
- [ ] Bugs de implementação escalados, não corrigidos
|
|
178
|
+
- [ ] Retorno estruturado fornecido (GAPS FILLED / PARTIAL / ESCALATE)
|
|
179
|
+
- [ ] Arquivos de teste listados para commit
|
|
180
|
+
</success_criteria>
|