@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.
Files changed (259) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +648 -648
  3. package/gates/dept-cycle-prevention.md +179 -0
  4. package/gates/multi-tenant-rls-coverage.md +102 -0
  5. package/gates/service-role-not-in-user-facing.md +113 -0
  6. package/kit/COMANDOS.md +138 -138
  7. package/kit/README.md +52 -52
  8. package/kit/agents/advisor-researcher.md +106 -106
  9. package/kit/agents/assumptions-analyzer.md +107 -107
  10. package/kit/agents/audit-log-implementer.md +175 -0
  11. package/kit/agents/b2b-saas-architect.md +156 -0
  12. package/kit/agents/codebase-mapper.md +768 -768
  13. package/kit/agents/crm-pipeline-implementer.md +150 -0
  14. package/kit/agents/debugger.md +772 -772
  15. package/kit/agents/evolution-go-integrator.md +179 -0
  16. package/kit/agents/example-reviewer.md +21 -21
  17. package/kit/agents/executor.md +523 -523
  18. package/kit/agents/integration-checker.md +200 -200
  19. package/kit/agents/invite-flow-implementer.md +137 -0
  20. package/kit/agents/lgpd-compliance-auditor.md +206 -0
  21. package/kit/agents/multi-tenant-isolation-auditor.md +243 -0
  22. package/kit/agents/multi-tenant-rls-writer.md +262 -0
  23. package/kit/agents/nyquist-auditor.md +178 -178
  24. package/kit/agents/org-onboarding-implementer.md +202 -0
  25. package/kit/agents/phase-researcher.md +696 -696
  26. package/kit/agents/plan-checker.md +272 -272
  27. package/kit/agents/planner.md +891 -891
  28. package/kit/agents/project-researcher.md +652 -652
  29. package/kit/agents/research-synthesizer.md +245 -245
  30. package/kit/agents/roadmapper.md +677 -677
  31. package/kit/agents/super-admin-implementer.md +182 -0
  32. package/kit/agents/ui-auditor.md +437 -437
  33. package/kit/agents/ui-checker.md +302 -302
  34. package/kit/agents/ui-researcher.md +355 -355
  35. package/kit/agents/user-profiler.md +175 -175
  36. package/kit/agents/verifier.md +728 -728
  37. package/kit/commands/adicionar-backlog.md +75 -75
  38. package/kit/commands/adicionar-fase.md +42 -42
  39. package/kit/commands/adicionar-tarefa.md +45 -45
  40. package/kit/commands/adicionar-testes.md +41 -41
  41. package/kit/commands/ajuda.md +21 -21
  42. package/kit/commands/atualizar.md +37 -37
  43. package/kit/commands/auditar-marco.md +179 -179
  44. package/kit/commands/auditar-uat.md +23 -23
  45. package/kit/commands/autonomo.md +40 -40
  46. package/kit/commands/branch-pr.md +24 -24
  47. package/kit/commands/concluir-marco.md +247 -247
  48. package/kit/commands/configuracoes.md +36 -36
  49. package/kit/commands/definir-perfil.md +10 -10
  50. package/kit/commands/depurar.md +190 -190
  51. package/kit/commands/discutir-fase.md +131 -131
  52. package/kit/commands/entrar-discord.md +17 -17
  53. package/kit/commands/estatisticas.md +18 -18
  54. package/kit/commands/example-greeting.md +33 -33
  55. package/kit/commands/executar-fase.md +58 -58
  56. package/kit/commands/expresso.md +56 -56
  57. package/kit/commands/fase-ui.md +34 -34
  58. package/kit/commands/fazer.md +57 -57
  59. package/kit/commands/fio.md +125 -125
  60. package/kit/commands/fluxos-trabalho.md +64 -64
  61. package/kit/commands/forense.md +176 -176
  62. package/kit/commands/gerenciador.md +38 -38
  63. package/kit/commands/inserir-fase.md +31 -31
  64. package/kit/commands/limpeza.md +17 -17
  65. package/kit/commands/listar-hipoteses-fase.md +45 -45
  66. package/kit/commands/listar-workspaces.md +18 -18
  67. package/kit/commands/mapear-codebase.md +70 -70
  68. package/kit/commands/multi-tenant.md +163 -0
  69. package/kit/commands/nota.md +33 -33
  70. package/kit/commands/novo-marco.md +43 -43
  71. package/kit/commands/novo-projeto.md +41 -41
  72. package/kit/commands/novo-workspace.md +43 -43
  73. package/kit/commands/pausar-trabalho.md +37 -37
  74. package/kit/commands/perfil-usuario.md +45 -45
  75. package/kit/commands/pesquisar-fase.md +195 -195
  76. package/kit/commands/planejar-fase.md +67 -67
  77. package/kit/commands/planejar-lacunas.md +33 -33
  78. package/kit/commands/plantar-ideia.md +25 -25
  79. package/kit/commands/progresso.md +24 -24
  80. package/kit/commands/proximo.md +30 -30
  81. package/kit/commands/publicar.md +490 -490
  82. package/kit/commands/rapido.md +35 -35
  83. package/kit/commands/reaplicar-patches.md +124 -124
  84. package/kit/commands/relatorio-sessao.md +19 -19
  85. package/kit/commands/remover-fase.md +31 -31
  86. package/kit/commands/remover-workspace.md +26 -26
  87. package/kit/commands/resumo-marco.md +50 -50
  88. package/kit/commands/retomar-trabalho.md +40 -40
  89. package/kit/commands/revisar-backlog.md +60 -60
  90. package/kit/commands/revisar-ui.md +32 -32
  91. package/kit/commands/revisar.md +37 -37
  92. package/kit/commands/saude.md +21 -21
  93. package/kit/commands/setup-notion.md +93 -93
  94. package/kit/commands/sync-main.md +68 -68
  95. package/kit/commands/validar-fase.md +35 -35
  96. package/kit/commands/verificar-tarefas.md +44 -44
  97. package/kit/commands/verificar-trabalho.md +64 -64
  98. package/kit/file-manifest.json +30 -3
  99. package/kit/framework/bin/lib/commands.cjs +959 -959
  100. package/kit/framework/bin/lib/config.cjs +442 -442
  101. package/kit/framework/bin/lib/core.cjs +1230 -1230
  102. package/kit/framework/bin/lib/frontmatter.cjs +336 -336
  103. package/kit/framework/bin/lib/init.cjs +1442 -1442
  104. package/kit/framework/bin/lib/milestone.cjs +252 -252
  105. package/kit/framework/bin/lib/model-profiles.cjs +68 -68
  106. package/kit/framework/bin/lib/phase.cjs +888 -888
  107. package/kit/framework/bin/lib/profile-output.cjs +952 -952
  108. package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
  109. package/kit/framework/bin/lib/roadmap.cjs +329 -329
  110. package/kit/framework/bin/lib/security.cjs +382 -382
  111. package/kit/framework/bin/lib/state.cjs +1031 -1031
  112. package/kit/framework/bin/lib/template.cjs +222 -222
  113. package/kit/framework/bin/lib/uat.cjs +282 -282
  114. package/kit/framework/bin/lib/verify.cjs +888 -888
  115. package/kit/framework/bin/lib/workstream.cjs +491 -491
  116. package/kit/framework/bin/tools.cjs +918 -918
  117. package/kit/framework/commands/workstreams.md +63 -63
  118. package/kit/framework/references/checkpoints.md +778 -778
  119. package/kit/framework/references/continuation-format.md +249 -249
  120. package/kit/framework/references/decimal-phase-calculation.md +64 -64
  121. package/kit/framework/references/git-integration.md +295 -295
  122. package/kit/framework/references/git-planning-commit.md +38 -38
  123. package/kit/framework/references/model-profile-resolution.md +36 -36
  124. package/kit/framework/references/model-profiles.md +139 -139
  125. package/kit/framework/references/phase-argument-parsing.md +61 -61
  126. package/kit/framework/references/planning-config.md +202 -202
  127. package/kit/framework/references/questioning.md +162 -162
  128. package/kit/framework/references/tdd.md +263 -263
  129. package/kit/framework/references/ui-brand.md +160 -160
  130. package/kit/framework/references/user-profiling.md +657 -657
  131. package/kit/framework/references/verification-patterns.md +612 -612
  132. package/kit/framework/references/workstream-flag.md +58 -58
  133. package/kit/framework/templates/DEBUG.md +164 -164
  134. package/kit/framework/templates/UAT.md +265 -265
  135. package/kit/framework/templates/UI-SPEC.md +100 -100
  136. package/kit/framework/templates/VALIDATION.md +76 -76
  137. package/kit/framework/templates/claude-md.md +122 -122
  138. package/kit/framework/templates/codebase/architecture.md +185 -185
  139. package/kit/framework/templates/codebase/concerns.md +205 -205
  140. package/kit/framework/templates/codebase/conventions.md +204 -204
  141. package/kit/framework/templates/codebase/integrations.md +192 -192
  142. package/kit/framework/templates/codebase/stack.md +158 -158
  143. package/kit/framework/templates/codebase/structure.md +199 -199
  144. package/kit/framework/templates/codebase/testing.md +301 -301
  145. package/kit/framework/templates/config.json +44 -44
  146. package/kit/framework/templates/context.md +352 -352
  147. package/kit/framework/templates/continue-here.md +78 -78
  148. package/kit/framework/templates/copilot-instructions.md +7 -7
  149. package/kit/framework/templates/debug-subagent-prompt.md +91 -91
  150. package/kit/framework/templates/dev-preferences.md +20 -20
  151. package/kit/framework/templates/discovery.md +146 -146
  152. package/kit/framework/templates/discussion-log.md +63 -63
  153. package/kit/framework/templates/milestone-archive.md +123 -123
  154. package/kit/framework/templates/milestone.md +115 -115
  155. package/kit/framework/templates/phase-prompt.md +610 -610
  156. package/kit/framework/templates/planner-subagent-prompt.md +117 -117
  157. package/kit/framework/templates/project.md +186 -186
  158. package/kit/framework/templates/requirements.md +231 -231
  159. package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
  160. package/kit/framework/templates/research-project/FEATURES.md +147 -147
  161. package/kit/framework/templates/research-project/PITFALLS.md +200 -200
  162. package/kit/framework/templates/research-project/STACK.md +120 -120
  163. package/kit/framework/templates/research-project/SUMMARY.md +170 -170
  164. package/kit/framework/templates/research.md +419 -419
  165. package/kit/framework/templates/retrospective.md +54 -54
  166. package/kit/framework/templates/roadmap.md +202 -202
  167. package/kit/framework/templates/state.md +176 -176
  168. package/kit/framework/templates/summary-complex.md +59 -59
  169. package/kit/framework/templates/summary-minimal.md +41 -41
  170. package/kit/framework/templates/summary-standard.md +48 -48
  171. package/kit/framework/templates/summary.md +209 -209
  172. package/kit/framework/templates/user-profile.md +146 -146
  173. package/kit/framework/templates/user-setup.md +256 -256
  174. package/kit/framework/templates/verification-report.md +258 -258
  175. package/kit/framework/workflows/add-phase.md +112 -112
  176. package/kit/framework/workflows/add-tests.md +351 -351
  177. package/kit/framework/workflows/add-todo.md +158 -158
  178. package/kit/framework/workflows/audit-milestone.md +340 -340
  179. package/kit/framework/workflows/audit-uat.md +109 -109
  180. package/kit/framework/workflows/autonomous.md +891 -891
  181. package/kit/framework/workflows/check-todos.md +177 -177
  182. package/kit/framework/workflows/cleanup.md +152 -152
  183. package/kit/framework/workflows/complete-milestone.md +696 -696
  184. package/kit/framework/workflows/diagnose-issues.md +231 -231
  185. package/kit/framework/workflows/discovery-phase.md +289 -289
  186. package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
  187. package/kit/framework/workflows/discuss-phase.md +784 -784
  188. package/kit/framework/workflows/do.md +104 -104
  189. package/kit/framework/workflows/execute-phase.md +838 -838
  190. package/kit/framework/workflows/execute-plan.md +510 -510
  191. package/kit/framework/workflows/fast.md +102 -102
  192. package/kit/framework/workflows/forensics.md +265 -265
  193. package/kit/framework/workflows/health.md +181 -181
  194. package/kit/framework/workflows/help.md +619 -619
  195. package/kit/framework/workflows/insert-phase.md +130 -130
  196. package/kit/framework/workflows/list-phase-assumptions.md +178 -178
  197. package/kit/framework/workflows/list-workspaces.md +56 -56
  198. package/kit/framework/workflows/manager.md +362 -362
  199. package/kit/framework/workflows/map-codebase.md +377 -377
  200. package/kit/framework/workflows/milestone-summary.md +223 -223
  201. package/kit/framework/workflows/new-milestone.md +486 -486
  202. package/kit/framework/workflows/new-project.md +1159 -1159
  203. package/kit/framework/workflows/new-workspace.md +237 -237
  204. package/kit/framework/workflows/next.md +97 -97
  205. package/kit/framework/workflows/node-repair.md +92 -92
  206. package/kit/framework/workflows/note.md +156 -156
  207. package/kit/framework/workflows/pause-work.md +176 -176
  208. package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
  209. package/kit/framework/workflows/plan-phase.md +765 -765
  210. package/kit/framework/workflows/plant-seed.md +169 -169
  211. package/kit/framework/workflows/pr-branch.md +129 -129
  212. package/kit/framework/workflows/profile-user.md +450 -450
  213. package/kit/framework/workflows/progress.md +507 -507
  214. package/kit/framework/workflows/quick.md +757 -757
  215. package/kit/framework/workflows/remove-phase.md +155 -155
  216. package/kit/framework/workflows/remove-workspace.md +90 -90
  217. package/kit/framework/workflows/research-phase.md +82 -82
  218. package/kit/framework/workflows/resume-project.md +326 -326
  219. package/kit/framework/workflows/review.md +228 -228
  220. package/kit/framework/workflows/session-report.md +146 -146
  221. package/kit/framework/workflows/settings.md +283 -283
  222. package/kit/framework/workflows/ship.md +228 -228
  223. package/kit/framework/workflows/stats.md +60 -60
  224. package/kit/framework/workflows/transition.md +671 -671
  225. package/kit/framework/workflows/ui-phase.md +302 -302
  226. package/kit/framework/workflows/ui-review.md +165 -165
  227. package/kit/framework/workflows/update.md +323 -323
  228. package/kit/framework/workflows/validate-phase.md +174 -174
  229. package/kit/framework/workflows/verify-phase.md +252 -252
  230. package/kit/framework/workflows/verify-work.md +637 -637
  231. package/kit/hooks/check-update.js +118 -118
  232. package/kit/hooks/context-monitor.js +163 -163
  233. package/kit/hooks/prompt-guard.js +103 -103
  234. package/kit/hooks/statusline.js +125 -125
  235. package/kit/hooks/workflow-guard.js +101 -101
  236. package/kit/settings.json +45 -45
  237. package/kit/skills/_shared-multi-tenant/glossary.md +186 -0
  238. package/kit/skills/audit-log-multi-tenant/SKILL.md +334 -0
  239. package/kit/skills/b2b-saas-architecture/SKILL.md +300 -0
  240. package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +326 -0
  241. package/kit/skills/evolution-go-whatsapp-integration/SKILL.md +322 -0
  242. package/kit/skills/example-skill/SKILL.md +42 -42
  243. package/kit/skills/lgpd-multi-tenant-compliance/SKILL.md +340 -0
  244. package/kit/skills/member-invite-flow/SKILL.md +305 -0
  245. package/kit/skills/member-management-react-shadcn/SKILL.md +328 -0
  246. package/kit/skills/multi-tenant-performance-scaling/SKILL.md +312 -0
  247. package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +338 -0
  248. package/kit/skills/org-onboarding-flow/SKILL.md +257 -0
  249. package/kit/skills/org-switcher-react-pattern/SKILL.md +349 -0
  250. package/kit/skills/permission-gate-react-pattern/SKILL.md +271 -0
  251. package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +301 -0
  252. package/kit/skills/super-admin-platform-pattern/SKILL.md +322 -0
  253. package/kit/skills/whatsapp-conversation-state-machine/SKILL.md +287 -0
  254. package/package.json +63 -63
  255. package/src/core/kit.js +216 -216
  256. package/src/core/reflect.js +247 -247
  257. package/src/core/reverse-sync.js +372 -372
  258. package/src/core/sync.js +418 -418
  259. package/src/core/watch.js +121 -121
@@ -1,101 +1,101 @@
1
- #!/usr/bin/env node
2
- // hook-version: 1.30.1
3
- // SEC-13-05: flush-before-exit category = A (stdout.write + immediate exit)
4
- // Fix applied: process.stdout.write(payload, () => process.exit(0)) on warning path.
5
- // framework Workflow Guard — PreToolUse hook
6
- // Detects when Claude attempts file edits outside a framework workflow context
7
- // (no active / command or Task subagent) and injects an advisory warning.
8
- //
9
- // This is a SOFT guard — it advises, not blocks. The edit still proceeds.
10
- // The warning nudges Claude to use /quick or /fast instead of
11
- // making direct edits that bypass state tracking.
12
- //
13
- // Enable via config: hooks.workflow_guard: true (default: false)
14
- // Only triggers on Write/Edit tool calls to non-.planning/ files.
15
-
16
- const fs = require('fs');
17
- const path = require('path');
18
-
19
- let input = '';
20
- const stdinTimeout = setTimeout(() => process.exit(0), 3000);
21
- process.stdin.setEncoding('utf8');
22
- process.stdin.on('data', chunk => input += chunk);
23
- process.stdin.on('end', () => {
24
- clearTimeout(stdinTimeout);
25
- try {
26
- const data = JSON.parse(input);
27
- const toolName = data.tool_name;
28
-
29
- // Only guard Write and Edit tool calls
30
- if (toolName !== 'Write' && toolName !== 'Edit') {
31
- process.exit(0);
32
- }
33
-
34
- // Check if we're inside a framework workflow (Task subagent or / command)
35
- // Subagents have a session_id that differs from the parent
36
- // and typically have a description field set by the orchestrator
37
- if (data.tool_input?.is_subagent || data.session_type === 'task') {
38
- process.exit(0);
39
- }
40
-
41
- // Check the file being edited
42
- const filePath = data.tool_input?.file_path || data.tool_input?.path || '';
43
-
44
- // Allow edits to .planning/ files (framework state management)
45
- if (filePath.includes('.planning/') || filePath.includes('.planning\\')) {
46
- process.exit(0);
47
- }
48
-
49
- // Allow edits to common config/docs files that don't need framework tracking
50
- const allowedPatterns = [
51
- /\.gitignore$/,
52
- /\.env/,
53
- /CLAUDE\.md$/,
54
- /AGENTS\.md$/,
55
- /GEMINI\.md$/,
56
- /settings\.json$/,
57
- ];
58
- if (allowedPatterns.some(p => p.test(filePath))) {
59
- process.exit(0);
60
- }
61
-
62
- // Check if workflow guard is enabled
63
- const cwd = data.cwd || process.cwd();
64
- const configPath = path.join(cwd, '.planning', 'config.json');
65
- if (fs.existsSync(configPath)) {
66
- try {
67
- const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
68
- if (!config.hooks?.workflow_guard) {
69
- process.exit(0); // Guard disabled (default)
70
- }
71
- } catch (e) {
72
- process.exit(0);
73
- }
74
- } else {
75
- process.exit(0); // No framework project — don't guard
76
- }
77
-
78
- // If we get here: framework project, guard enabled, file edit outside .planning/,
79
- // not in a subagent context. Inject advisory warning.
80
- const output = {
81
- hookSpecificOutput: {
82
- hookEventName: "PreToolUse",
83
- additionalContext: `⚠️ AVISO DE FLUXO DE TRABALHO: Você está editando ${path.basename(filePath)} diretamente sem um comando do framework. ` +
84
- 'Esta edição não será rastreada no STATE.md nem produzirá um SUMMARY.md. ' +
85
- 'Considere usar /fast para correções triviais ou /quick para mudanças maiores ' +
86
- 'para manter o rastreamento de estado do projeto. ' +
87
- 'Se isso for intencional (ex.: usuário solicitou explicitamente uma edição direta), prossiga normalmente.'
88
- }
89
- };
90
-
91
- // SEC-13-05: aguardar flush do stdout antes do exit. Sem callback, em
92
- // pipes lentos (CI/Windows/Git Bash) o JSON pode ser dropado quando o
93
- // process termina antes do kernel drenar o buffer.
94
- process.stdout.write(JSON.stringify(output), () => {
95
- process.exit(0);
96
- });
97
- } catch (e) {
98
- // Silent fail — never block tool execution
99
- process.exit(0);
100
- }
101
- });
1
+ #!/usr/bin/env node
2
+ // hook-version: 1.30.1
3
+ // SEC-13-05: flush-before-exit category = A (stdout.write + immediate exit)
4
+ // Fix applied: process.stdout.write(payload, () => process.exit(0)) on warning path.
5
+ // framework Workflow Guard — PreToolUse hook
6
+ // Detects when Claude attempts file edits outside a framework workflow context
7
+ // (no active / command or Task subagent) and injects an advisory warning.
8
+ //
9
+ // This is a SOFT guard — it advises, not blocks. The edit still proceeds.
10
+ // The warning nudges Claude to use /quick or /fast instead of
11
+ // making direct edits that bypass state tracking.
12
+ //
13
+ // Enable via config: hooks.workflow_guard: true (default: false)
14
+ // Only triggers on Write/Edit tool calls to non-.planning/ files.
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+
19
+ let input = '';
20
+ const stdinTimeout = setTimeout(() => process.exit(0), 3000);
21
+ process.stdin.setEncoding('utf8');
22
+ process.stdin.on('data', chunk => input += chunk);
23
+ process.stdin.on('end', () => {
24
+ clearTimeout(stdinTimeout);
25
+ try {
26
+ const data = JSON.parse(input);
27
+ const toolName = data.tool_name;
28
+
29
+ // Only guard Write and Edit tool calls
30
+ if (toolName !== 'Write' && toolName !== 'Edit') {
31
+ process.exit(0);
32
+ }
33
+
34
+ // Check if we're inside a framework workflow (Task subagent or / command)
35
+ // Subagents have a session_id that differs from the parent
36
+ // and typically have a description field set by the orchestrator
37
+ if (data.tool_input?.is_subagent || data.session_type === 'task') {
38
+ process.exit(0);
39
+ }
40
+
41
+ // Check the file being edited
42
+ const filePath = data.tool_input?.file_path || data.tool_input?.path || '';
43
+
44
+ // Allow edits to .planning/ files (framework state management)
45
+ if (filePath.includes('.planning/') || filePath.includes('.planning\\')) {
46
+ process.exit(0);
47
+ }
48
+
49
+ // Allow edits to common config/docs files that don't need framework tracking
50
+ const allowedPatterns = [
51
+ /\.gitignore$/,
52
+ /\.env/,
53
+ /CLAUDE\.md$/,
54
+ /AGENTS\.md$/,
55
+ /GEMINI\.md$/,
56
+ /settings\.json$/,
57
+ ];
58
+ if (allowedPatterns.some(p => p.test(filePath))) {
59
+ process.exit(0);
60
+ }
61
+
62
+ // Check if workflow guard is enabled
63
+ const cwd = data.cwd || process.cwd();
64
+ const configPath = path.join(cwd, '.planning', 'config.json');
65
+ if (fs.existsSync(configPath)) {
66
+ try {
67
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
68
+ if (!config.hooks?.workflow_guard) {
69
+ process.exit(0); // Guard disabled (default)
70
+ }
71
+ } catch (e) {
72
+ process.exit(0);
73
+ }
74
+ } else {
75
+ process.exit(0); // No framework project — don't guard
76
+ }
77
+
78
+ // If we get here: framework project, guard enabled, file edit outside .planning/,
79
+ // not in a subagent context. Inject advisory warning.
80
+ const output = {
81
+ hookSpecificOutput: {
82
+ hookEventName: "PreToolUse",
83
+ additionalContext: `⚠️ AVISO DE FLUXO DE TRABALHO: Você está editando ${path.basename(filePath)} diretamente sem um comando do framework. ` +
84
+ 'Esta edição não será rastreada no STATE.md nem produzirá um SUMMARY.md. ' +
85
+ 'Considere usar /fast para correções triviais ou /quick para mudanças maiores ' +
86
+ 'para manter o rastreamento de estado do projeto. ' +
87
+ 'Se isso for intencional (ex.: usuário solicitou explicitamente uma edição direta), prossiga normalmente.'
88
+ }
89
+ };
90
+
91
+ // SEC-13-05: aguardar flush do stdout antes do exit. Sem callback, em
92
+ // pipes lentos (CI/Windows/Git Bash) o JSON pode ser dropado quando o
93
+ // process termina antes do kernel drenar o buffer.
94
+ process.stdout.write(JSON.stringify(output), () => {
95
+ process.exit(0);
96
+ });
97
+ } catch (e) {
98
+ // Silent fail — never block tool execution
99
+ process.exit(0);
100
+ }
101
+ });
package/kit/settings.json CHANGED
@@ -1,45 +1,45 @@
1
- {
2
- "permissions": {
3
- "allow": []
4
- },
5
- "hooks": {
6
- "SessionStart": [
7
- {
8
- "hooks": [
9
- {
10
- "type": "command",
11
- "command": "node .claude/hooks/check-update.js"
12
- }
13
- ]
14
- }
15
- ],
16
- "PostToolUse": [
17
- {
18
- "matcher": "Bash|Edit|Write|MultiEdit|Agent|Task",
19
- "hooks": [
20
- {
21
- "type": "command",
22
- "command": "node .claude/hooks/context-monitor.js",
23
- "timeout": 10
24
- }
25
- ]
26
- }
27
- ],
28
- "PreToolUse": [
29
- {
30
- "matcher": "Write|Edit",
31
- "hooks": [
32
- {
33
- "type": "command",
34
- "command": "node .claude/hooks/prompt-guard.js",
35
- "timeout": 5
36
- }
37
- ]
38
- }
39
- ]
40
- },
41
- "statusLine": {
42
- "type": "command",
43
- "command": "node .claude/hooks/statusline.js"
44
- }
45
- }
1
+ {
2
+ "permissions": {
3
+ "allow": []
4
+ },
5
+ "hooks": {
6
+ "SessionStart": [
7
+ {
8
+ "hooks": [
9
+ {
10
+ "type": "command",
11
+ "command": "node .claude/hooks/check-update.js"
12
+ }
13
+ ]
14
+ }
15
+ ],
16
+ "PostToolUse": [
17
+ {
18
+ "matcher": "Bash|Edit|Write|MultiEdit|Agent|Task",
19
+ "hooks": [
20
+ {
21
+ "type": "command",
22
+ "command": "node .claude/hooks/context-monitor.js",
23
+ "timeout": 10
24
+ }
25
+ ]
26
+ }
27
+ ],
28
+ "PreToolUse": [
29
+ {
30
+ "matcher": "Write|Edit",
31
+ "hooks": [
32
+ {
33
+ "type": "command",
34
+ "command": "node .claude/hooks/prompt-guard.js",
35
+ "timeout": 5
36
+ }
37
+ ]
38
+ }
39
+ ]
40
+ },
41
+ "statusLine": {
42
+ "type": "command",
43
+ "command": "node .claude/hooks/statusline.js"
44
+ }
45
+ }
@@ -0,0 +1,186 @@
1
+ # Glossário Multi-Tenant SaaS B2B — Termos, Patterns e Convenções
2
+
3
+ > Arquivo de referência compartilhado pelas skills da Suíte Multi-Tenant v1.21. **NÃO é skill** — não tem `description:` triggerável; não aparece em `listKit`. Cross-referenciado pelas 15 skills via Markdown link relativo.
4
+ >
5
+ > **Cross-suite reference ATIVO:** termos Supabase já definidos em [`_shared-supabase/glossary.md`](../_shared-supabase/glossary.md) — esta skill **não duplica**, apenas linka. Termos como `RLS`, `auth.uid()`, `app_metadata`, `service_role`, `pg_cron`, `pgmq`, `STABLE`, `SECURITY INVOKER`, `search_path = ''` são definidos lá.
6
+
7
+ ---
8
+
9
+ ## (a) Termos PT-BR ↔ EN — Multi-Tenancy Core
10
+
11
+ ### Tenancy
12
+
13
+ | EN | PT-BR / Significado |
14
+ |---|---|
15
+ | **tenant** | Inquilino — entidade de top-level que isola dados entre clientes (organização/escritório). Em B2B SaaS = `organizations` row. |
16
+ | **`org_id`** | Coluna canônica em **toda tabela multi-tenant** que identifica a qual `organizations.id` aquela linha pertence. RLS sempre filtra por `org_id`. |
17
+ | **multi-tenant** | App que serve N tenants do mesmo deployment, com isolamento de dados entre eles (tipicamente via RLS). |
18
+ | **single-tenant** | App que serve 1 tenant por deployment (típico enterprise on-prem). |
19
+ | **isolation strategy** | Como tenants são separados — **single schema + `org_id`** (default 90% B2B), schema-per-tenant, ou DB-per-tenant. Ver skill [`b2b-saas-architecture`](../b2b-saas-architecture/SKILL.md). |
20
+ | **cross-tenant query** | Query que toca dados de mais de um tenant — apenas super_admin pode executar. Sempre auditada. |
21
+ | **tenant routing** | Mapeamento URL → tenant. Padrão canônico: `/orgs/[slug]/...`. |
22
+
23
+ ### Hierarquia
24
+
25
+ | EN | PT-BR / Significado |
26
+ |---|---|
27
+ | **organization** | Tenant root. Tabela `public.organizations`. Tem `owner_id`, `plan`, `slug` (imutável). |
28
+ | **department** | Sub-divisão opcional de uma org. Tabela `public.departments` com `org_id` FK + `parent_id` para hierarquia (até 5 níveis máx por convenção). |
29
+ | **member** | User pertencente a uma org. Tabela `public.organization_members(org_id, user_id, role_id)`. |
30
+ | **department member** | User pertencente a um dept. Tabela `public.department_members(dept_id, user_id, role_id)`. `role_id` NULL = herda do `organization_members`. |
31
+ | **leader** | Membro de departamento com flag `is_leader = true`. Não é uma role — é capability adicional dentro do dept. |
32
+
33
+ ### RBAC
34
+
35
+ | EN | PT-BR / Significado |
36
+ |---|---|
37
+ | **RBAC** | Role-Based Access Control — autorização por role (não por user direto). Cada user tem 1 role por org. |
38
+ | **role** | Função/cargo dentro de uma org. Tabela `public.roles(org_id, name)`. 3 built-in (owner/admin/member) + custom permitidos. |
39
+ | **permission** | Capacidade granular — string `<resource>:<action>` (ex: `leads:create`, `members:invite`). Tabela `public.permissions(action, resource)`. |
40
+ | **permission matrix** | Mapeamento N:M de roles ↔ permissions. Tabela `public.role_permissions(role_id, permission_id)`. |
41
+ | **role inheritance** | Department member sem role própria herda role do organization_members. NULL → herda; preenchido → sobrescreve. |
42
+ | **role escalation rule** | Regra canônica: usuário só pode atribuir roles ≤ ao próprio role (admin não cria owner; member não cria admin). |
43
+
44
+ ### Super-admin
45
+
46
+ | EN | PT-BR / Significado |
47
+ |---|---|
48
+ | **super_admin** | Usuário com `app_metadata.super_admin = true` (set apenas via service_role). Bypassa todas as RLS via helper function `private.is_super_admin()`. |
49
+ | **impersonation** | Super-admin assume identidade de outro user temporariamente para suporte. **Sempre** com banner visual + reason obrigatório + TTL 30min. |
50
+ | **platform admin** | Sinônimo de super_admin no contexto B2B SaaS. |
51
+ | **cross-tenant view** | Lista todos tenants para super_admin (Settings → All Organizations). Apenas super_admin enxerga. |
52
+
53
+ ### Invite Flow
54
+
55
+ | EN | PT-BR / Significado |
56
+ |---|---|
57
+ | **invitation token** | Hash SHA-256 de uma string aleatória de 32 bytes. Armazenado no banco; raw token enviado por email. Single-use, TTL 7 dias. |
58
+ | **invite state machine** | `pending → accepted | rejected | cancelled | expired`. Transições enforced via trigger ou check constraint. |
59
+ | **email-locked invite** | Invite válido apenas se quem clica está logado com email destino. Anti-pattern: link compartilhável (qualquer um aceita). |
60
+ | **first admin** | Usuário criador da org — ganha role `owner` na criação, sem invite. |
61
+ | **bulk invite** | UI permite invite N emails de uma vez. Cada um gera linha em `org_invites` independente. |
62
+
63
+ ### Audit Log
64
+
65
+ | EN | PT-BR / Significado |
66
+ |---|---|
67
+ | **audit log** | Tabela `public.audit_logs` append-only registrando eventos críticos com `tenant_id` indexado. |
68
+ | **append-only table** | Tabela onde `DELETE` e `UPDATE` são revogados via `REVOKE DELETE, UPDATE FROM authenticated`. Apenas service_role pode mutar (via partition swap, raramente). |
69
+ | **event taxonomy** | 7 eventos canônicos mínimos: `login`, `member_invited`, `role_changed`, `data_exported`, `member_removed`, `settings_changed`, `super_admin_action`. |
70
+ | **legal hold** | Flag boolean `legal_hold` em row de audit_log que **bloqueia** delete enquanto DSR LGPD está pendente. |
71
+ | **PII sanitization** | Antes de armazenar em audit_log, hash de `actor_email` e `target_phone` (SHA-256). Nunca raw PII em log. |
72
+
73
+ ### LGPD
74
+
75
+ | EN | PT-BR / Significado |
76
+ |---|---|
77
+ | **LGPD** | Lei Geral de Proteção de Dados (Brasil) — Lei 13.709/2018. Equivalente brasileiro do GDPR. |
78
+ | **DSR** | Data Subject Request — pedido formal do titular dos dados exercendo direito previsto em Art. 18 LGPD. SLA legal 15 dias (Art. 19). |
79
+ | **9 direitos LGPD Art. 18** | Confirmação · Acesso · Correção · Anonimização/Bloqueio/Eliminação · Portabilidade · Eliminação · Informação sobre compartilhamento · Revogação de consentimento · Revisão de decisão automatizada |
80
+ | **anonymization** | Padrão de erasure: preservar UUID, apagar PII (`name → NULL`, `email → SHA-256 hash`, `phone → NULL`). Permite manter audit trail sem violar LGPD. |
81
+ | **consent grain** | Granularidade do consentimento — separado por finalidade (analytics ≠ marketing ≠ third-party-share). Default opt-out (Art. 8 §5 LGPD). |
82
+ | **adequacy decision** | Decisão da ANPD/comissão equivalente reconhecendo país como destino seguro de transferência internacional. Brasil-UE estabelecida em jan/2026. |
83
+
84
+ ### Webhooks (Evolution Go / Meta Cloud)
85
+
86
+ | EN | PT-BR / Significado |
87
+ |---|---|
88
+ | **Evolution Go** | Implementação alternativa do WhatsApp via biblioteca `whatsmeow` (Go) — usa protocolo WhatsApp Web não-oficial. Não é Meta Cloud API. |
89
+ | **Meta Cloud API** | API oficial WhatsApp Business da Meta. Requer Business Account, número aprovado, custo por conversa. |
90
+ | **HMAC-SHA256 signature** | Validação de webhook Meta — header `X-Hub-Signature-256: sha256=<hmac>`. Computar HMAC sobre **raw body antes de JSON.parse**. |
91
+ | **timing-safe comparison** | Comparação de strings em tempo constante (`crypto.timingSafeEqual`) para evitar timing attacks na validação HMAC. |
92
+ | **idempotency key** | `(org_id, message_id)` unique constraint — `ON CONFLICT DO NOTHING` evita duplicatas em retry Meta (entrega at-least-once). |
93
+ | **webhook event types** | 19 tipos documentados Evolution Go: `messages.upsert`, `messages.update`, `groups.upsert`, etc. |
94
+ | **rate limit Meta** | 80 msg/s default. Exceder = erro 131056, escala para 24h ban. |
95
+ | **throttle Evolution Go** | 1 msg/s (manual, biblioteca não enforce). Acima disso = ban Meta de qualquer forma (mesma infra subjacente). |
96
+ | **conversation state machine** | Modelagem de fluxo conversa WhatsApp (lead → qualified → opt-in → conversation → action). Estados persistidos em PG (não em memória). Implementado com `xstate v5`. |
97
+
98
+ ### CRM Lead Pipeline
99
+
100
+ | EN | PT-BR / Significado |
101
+ |---|---|
102
+ | **lead** | Contato em estágio inicial do funil de vendas. Tabela `public.leads(org_id, contact_email, contact_phone, stage, owner_id)`. |
103
+ | **stages canônicos** | `lead → qualified → proposal → negotiation → won | lost`. Transições enforced via trigger BEFORE UPDATE (não só CHECK constraint que client pode burlar). |
104
+ | **ownership transfer** | Mudar `owner_id` de um lead. Sempre dispara: notificação ao novo owner + entry em audit_log com `previous_owner_id, new_owner_id, reason`. |
105
+ | **lead dedup** | Unique constraint `(org_id, contact_phone)` + `(org_id, contact_email)`. Lookup obrigatório antes de criar lead via integração WhatsApp. |
106
+ | **scoring** | Pontuação de lead (manual ou auto). Diferenciador (não table stakes). Out-of-scope v1.21. |
107
+
108
+ ### React Patterns
109
+
110
+ | EN | PT-BR / Significado |
111
+ |---|---|
112
+ | **org switcher** | Componente UI que troca tenant ativo. Padrão canônico: URL `/orgs/[slug]/...` (Next.js middleware) ou `useParams()` (Vite SPA). |
113
+ | **permission gate** | Componente declarativo `<PermissionGate permission="leads:create">` que esconde UI quando user não tem permission. **Apenas UX** — server-side enforcement obrigatório via RLS. |
114
+ | **CASL** | Biblioteca canônica RBAC para React 2026. `@casl/ability` 6.8 + `@casl/react` 4.x. Isomorfica (frontend + backend). |
115
+ | **JWT stale** | Após mudança de role, JWT do client ainda tem role antiga até refresh (~1h). Mitigação: `supabase.auth.refreshSession()` imediatamente após operação de role change + RLS como enforcement final. |
116
+ | **shadcn/ui** | Component library copy-paste (não NPM package). Componentes para member management: `data-table`, `dialog`, `select`, `badge`, `dropdown-menu`, `avatar`, `command`, `form`, `toast`. |
117
+
118
+ ---
119
+
120
+ ## (b) Decisões Arquiteturais Vinculantes (cristalizadas em Phase 106)
121
+
122
+ 1. **Single Schema + `org_id` + RLS** é estratégia default (90% B2B). Schema-per-tenant é exceção justificada por compliance.
123
+ 2. **JWT minimal** — apenas `super_admin: bool` em `app_metadata`. Lista de orgs no JWT é anti-pattern.
124
+ 3. **Helper functions PG STABLE** — todas as funções `private.is_member_of`, `private.has_role`, `private.has_permission`, `private.is_super_admin` marcadas `STABLE`. VOLATILE = re-execução por linha.
125
+ 4. **7 tabelas core** — `organizations`, `departments`, `roles`, `permissions`, `role_permissions`, `organization_members`, `department_members` (+ auxiliar `organization_slug_history`).
126
+ 5. **Slug imutável** com redirect trail via `organization_slug_history`. Mutação direta = bookmarks/webhooks/OAuth quebram.
127
+ 6. **Audit log append-only** — REVOKE DELETE, UPDATE para `authenticated`. Apenas service_role pode mutar.
128
+ 7. **DSR erasure via anonymization** — preserva UUID, apaga PII. Hard delete destrói audit trail.
129
+ 8. **HMAC validation antes de JSON.parse** — sobre raw body. Validar após parse = inválido.
130
+
131
+ ---
132
+
133
+ ## (c) Convenções de Naming (todas as tabelas multi-tenant)
134
+
135
+ | Padrão | Exemplo |
136
+ |---|---|
137
+ | Tabelas em snake_case plural | `organizations`, `organization_members`, `department_members`, `role_permissions` |
138
+ | Colunas em snake_case singular | `org_id`, `user_id`, `role_id`, `created_at`, `is_leader` |
139
+ | FK naming `<entidade>_id` | `org_id`, `user_id`, `dept_id`, `role_id`, `permission_id` |
140
+ | Boolean prefix `is_` ou `has_` | `is_leader`, `is_super_admin`, `is_built_in`, `has_permission` |
141
+ | Timestamps ISO 8601 | `created_at`, `updated_at`, `joined_at`, `expires_at`, `accepted_at` |
142
+ | Helper functions em schema `private` | `private.is_member_of`, `private.has_role`, `private.has_permission`, `private.is_super_admin` |
143
+ | Audit triggers em schema `private` | `private.track_org_slug_change`, `private.create_audit_partition`, `private.on_org_created` |
144
+
145
+ ---
146
+
147
+ ## (d) Cross-Refs Externos
148
+
149
+ - [Supabase RLS Best Practices](https://makerkit.dev/blog/tutorials/supabase-rls-best-practices)
150
+ - [Supabase Custom Access Token Hook](https://supabase.com/docs/guides/auth/auth-hooks/custom-access-token-hook)
151
+ - [Supabase Supavisor 1M Connections](https://supabase.com/blog/supavisor-1-million)
152
+ - [Meta Developers — WhatsApp Webhooks](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/set-up-webhooks/)
153
+ - [Meta Developers — Messaging Limits](https://developers.facebook.com/docs/whatsapp/messaging-limits/)
154
+ - [Evolution API Documentation](https://doc.evolution-api.com/v2/en/configuration/webhooks)
155
+ - [LGPD Brazil — Lei 13.709/2018](https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2018/lei/l13709.htm)
156
+ - [ANPD — International Data Transfers Deadline 2025](https://www.mydata-trust.com/2025/08/19/brazil-data-transfers-deadline/)
157
+ - [CASL Documentation](https://casl.js.org/)
158
+ - [shadcn/ui](https://ui.shadcn.com/)
159
+
160
+ ---
161
+
162
+ ## (e) Cross-Suite Invocation Pattern (introduzido v1.21)
163
+
164
+ Agents da Suíte Multi-Tenant **não duplicam** lógica Supabase. Padrão canônico de delegação:
165
+
166
+ ```
167
+ b2b-saas-architect (v1.21)
168
+ └─→ Task(supabase-architect) # plano de migration + tier/branches
169
+ └─→ Task(supabase-migration-writer) # SQL final
170
+
171
+ multi-tenant-rls-writer (v1.21)
172
+ ├─ herda anti-pitfalls supabase-rls-writer (v1.8) via cross-ref Markdown
173
+ └─ adiciona helper functions hierárquicas + super_admin bypass
174
+
175
+ evolution-go-integrator (v1.21)
176
+ └─→ Task(supabase-edge-fn-writer) # Deno code da Edge Function
177
+
178
+ audit-log-implementer (v1.21)
179
+ └─ usa skill supabase-cron-queues (v1.8) para retention scheduling
180
+
181
+ org-onboarding-implementer (v1.21)
182
+ ├─→ Task(supabase-migration-writer) # migration de criação de org
183
+ └─→ Task(supabase-edge-fn-writer) # Edge Function setup wizard
184
+ ```
185
+
186
+ **Anti-pattern:** agent v1.21 reescrever lógica de RLS do zero (deve herdar e estender). Agent v1.21 escrever Edge Function direto (deve delegar para `supabase-edge-fn-writer`).