@seedgrid/ai-toolkit 0.0.0-stage → 0.3.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 (226) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -2
  3. package/dist/adapters/claude.js +114 -0
  4. package/dist/adapters/codex.js +108 -0
  5. package/dist/adapters/index.js +17 -0
  6. package/dist/adapters/shared.js +142 -0
  7. package/dist/adapters/types.js +1 -0
  8. package/dist/cli.js +209 -0
  9. package/dist/commands/common.js +98 -0
  10. package/dist/commands/doctor.js +290 -0
  11. package/dist/commands/init.js +9 -0
  12. package/dist/commands/install.js +107 -0
  13. package/dist/commands/remove.js +54 -0
  14. package/dist/commands/review.js +127 -0
  15. package/dist/commands/selfinstall.js +63 -0
  16. package/dist/commands/status.js +73 -0
  17. package/dist/commands/update.js +8 -0
  18. package/dist/commands/validate.js +27 -0
  19. package/dist/core/apply.js +181 -0
  20. package/dist/core/blocks.js +64 -0
  21. package/dist/core/content.js +528 -0
  22. package/dist/core/env.js +40 -0
  23. package/dist/core/frontmatter.js +29 -0
  24. package/dist/core/hash.js +14 -0
  25. package/dist/core/inspect.js +51 -0
  26. package/dist/core/lock.js +124 -0
  27. package/dist/core/paths.js +65 -0
  28. package/dist/core/plan.js +242 -0
  29. package/dist/core/tools.js +62 -0
  30. package/dist/core/types.js +11 -0
  31. package/dist/core/updates.js +121 -0
  32. package/docs/arquitetura.md +80 -0
  33. package/docs/compatibilidade.md +50 -0
  34. package/docs/formato.md +155 -0
  35. package/docs/instalacao.md +105 -0
  36. package/docs/manutencao.md +115 -0
  37. package/package.json +43 -4
  38. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-enums.md +161 -0
  39. package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -0
  40. package/seedgridKB/SeedGrid/Extensions/Indice.md +63 -0
  41. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Configuracao.md +124 -0
  42. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Enums.md +40 -0
  43. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Exemplos.md +97 -0
  44. package/seedgridKB/SeedGrid/Extensions/ai-pricing/Visao-geral.md +114 -0
  45. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao-Rust.md +69 -0
  46. package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao.md +88 -0
  47. package/seedgridKB/SeedGrid/Extensions/apikeys/Enums.md +33 -0
  48. package/seedgridKB/SeedGrid/Extensions/apikeys/Exemplos.md +121 -0
  49. package/seedgridKB/SeedGrid/Extensions/apikeys/Rust.md +126 -0
  50. package/seedgridKB/SeedGrid/Extensions/apikeys/Visao-geral.md +111 -0
  51. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -0
  52. package/seedgridKB/SeedGrid/Extensions/audit/Configuracao.md +127 -0
  53. package/seedgridKB/SeedGrid/Extensions/audit/Enums.md +66 -0
  54. package/seedgridKB/SeedGrid/Extensions/audit/Exemplos.md +151 -0
  55. package/seedgridKB/SeedGrid/Extensions/audit/Rust.md +120 -0
  56. package/seedgridKB/SeedGrid/Extensions/audit/Visao-geral.md +114 -0
  57. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao-Rust.md +136 -0
  58. package/seedgridKB/SeedGrid/Extensions/backup/Configuracao.md +319 -0
  59. package/seedgridKB/SeedGrid/Extensions/backup/Enums.md +131 -0
  60. package/seedgridKB/SeedGrid/Extensions/backup/Exemplos.md +210 -0
  61. package/seedgridKB/SeedGrid/Extensions/backup/Rust.md +135 -0
  62. package/seedgridKB/SeedGrid/Extensions/backup/Visao-geral.md +150 -0
  63. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao-Rust.md +86 -0
  64. package/seedgridKB/SeedGrid/Extensions/billing/Configuracao.md +243 -0
  65. package/seedgridKB/SeedGrid/Extensions/billing/Enums.md +165 -0
  66. package/seedgridKB/SeedGrid/Extensions/billing/Exemplos.md +205 -0
  67. package/seedgridKB/SeedGrid/Extensions/billing/Rust.md +109 -0
  68. package/seedgridKB/SeedGrid/Extensions/billing/Visao-geral.md +181 -0
  69. package/seedgridKB/SeedGrid/Extensions/broker/Configuracao-Rust.md +40 -0
  70. package/seedgridKB/SeedGrid/Extensions/broker/Visao-geral.md +114 -0
  71. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao-Rust.md +73 -0
  72. package/seedgridKB/SeedGrid/Extensions/cache/Configuracao.md +112 -0
  73. package/seedgridKB/SeedGrid/Extensions/cache/Enums.md +36 -0
  74. package/seedgridKB/SeedGrid/Extensions/cache/Exemplos.md +149 -0
  75. package/seedgridKB/SeedGrid/Extensions/cache/Rust.md +81 -0
  76. package/seedgridKB/SeedGrid/Extensions/cache/Visao-geral.md +90 -0
  77. package/seedgridKB/SeedGrid/Extensions/commons/Configuracao.md +107 -0
  78. package/seedgridKB/SeedGrid/Extensions/commons/Enums.md +105 -0
  79. package/seedgridKB/SeedGrid/Extensions/commons/Exemplos.md +141 -0
  80. package/seedgridKB/SeedGrid/Extensions/commons/Visao-geral.md +99 -0
  81. package/seedgridKB/SeedGrid/Extensions/exchange/Configuracao.md +122 -0
  82. package/seedgridKB/SeedGrid/Extensions/exchange/Enums.md +29 -0
  83. package/seedgridKB/SeedGrid/Extensions/exchange/Exemplos.md +82 -0
  84. package/seedgridKB/SeedGrid/Extensions/exchange/Visao-geral.md +118 -0
  85. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao-Rust.md +110 -0
  86. package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao.md +157 -0
  87. package/seedgridKB/SeedGrid/Extensions/filemanagement/Exemplos.md +157 -0
  88. package/seedgridKB/SeedGrid/Extensions/filemanagement/Rust.md +70 -0
  89. package/seedgridKB/SeedGrid/Extensions/filemanagement/Visao-geral.md +88 -0
  90. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao-Rust.md +124 -0
  91. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao.md +195 -0
  92. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Enums.md +71 -0
  93. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Exemplos.md +149 -0
  94. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Rust.md +139 -0
  95. package/seedgridKB/SeedGrid/Extensions/login-tenancy/Visao-geral.md +130 -0
  96. package/seedgridKB/SeedGrid/Extensions/notification/Configuracao.md +141 -0
  97. package/seedgridKB/SeedGrid/Extensions/notification/Enums.md +52 -0
  98. package/seedgridKB/SeedGrid/Extensions/notification/Exemplos.md +141 -0
  99. package/seedgridKB/SeedGrid/Extensions/notification/Visao-geral.md +113 -0
  100. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao-Rust.md +67 -0
  101. package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao.md +94 -0
  102. package/seedgridKB/SeedGrid/Extensions/privacy/Enums.md +79 -0
  103. package/seedgridKB/SeedGrid/Extensions/privacy/Exemplos.md +172 -0
  104. package/seedgridKB/SeedGrid/Extensions/privacy/Rust.md +107 -0
  105. package/seedgridKB/SeedGrid/Extensions/privacy/Visao-geral.md +90 -0
  106. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao-Rust.md +72 -0
  107. package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao.md +104 -0
  108. package/seedgridKB/SeedGrid/Extensions/realtime/Exemplos.md +104 -0
  109. package/seedgridKB/SeedGrid/Extensions/realtime/Rust.md +69 -0
  110. package/seedgridKB/SeedGrid/Extensions/realtime/Visao-geral.md +105 -0
  111. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao-Rust.md +68 -0
  112. package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -0
  113. package/seedgridKB/SeedGrid/Extensions/resilience/Enums.md +96 -0
  114. package/seedgridKB/SeedGrid/Extensions/resilience/Exemplos.md +229 -0
  115. package/seedgridKB/SeedGrid/Extensions/resilience/Rust.md +80 -0
  116. package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -0
  117. package/seedgridKB/SeedGrid/Extensions/runtime/Configuracao-Rust.md +90 -0
  118. package/seedgridKB/SeedGrid/Extensions/runtime/Visao-geral.md +114 -0
  119. package/seedgridKB/SeedGrid/Extensions/security/Configuracao-Rust.md +327 -0
  120. package/seedgridKB/SeedGrid/Extensions/security/Configuracao.md +510 -0
  121. package/seedgridKB/SeedGrid/Extensions/security/Enums.md +95 -0
  122. package/seedgridKB/SeedGrid/Extensions/security/Exemplos.md +218 -0
  123. package/seedgridKB/SeedGrid/Extensions/security/Rust.md +203 -0
  124. package/seedgridKB/SeedGrid/Extensions/security/Visao-geral.md +131 -0
  125. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao-Rust.md +188 -0
  126. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao.md +345 -0
  127. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Enums.md +117 -0
  128. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Exemplos.md +205 -0
  129. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Rust.md +161 -0
  130. package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Visao-geral.md +142 -0
  131. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao-Rust.md +75 -0
  132. package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao.md +152 -0
  133. package/seedgridKB/SeedGrid/Extensions/whatsapp/Enums.md +198 -0
  134. package/seedgridKB/SeedGrid/Extensions/whatsapp/Exemplos.md +173 -0
  135. package/seedgridKB/SeedGrid/Extensions/whatsapp/Rust.md +83 -0
  136. package/seedgridKB/SeedGrid/Extensions/whatsapp/Visao-geral.md +99 -0
  137. package/seedgridKB/SeedGrid/Mapa-dos-repositorios.md +112 -0
  138. package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -0
  139. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/API.md +257 -0
  140. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Exemplos.md +307 -0
  141. package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Visao-geral.md +51 -0
  142. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/API.md +174 -0
  143. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Exemplos.md +236 -0
  144. package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Visao-geral.md +76 -0
  145. package/seedgridKB/SeedGrid/SeedGrid-components/digits/API.md +339 -0
  146. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Exemplos.md +311 -0
  147. package/seedgridKB/SeedGrid/SeedGrid-components/digits/Visao-geral.md +57 -0
  148. package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +125 -0
  149. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Exemplos.md +116 -0
  150. package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -0
  151. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/API.md +490 -0
  152. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Exemplos.md +544 -0
  153. package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Visao-geral.md +69 -0
  154. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/API.md +113 -0
  155. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Exemplos.md +159 -0
  156. package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Visao-geral.md +92 -0
  157. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/API.md +516 -0
  158. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -0
  159. package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Visao-geral.md +80 -0
  160. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/API.md +615 -0
  161. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Exemplos.md +384 -0
  162. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral.md +111 -0
  163. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/API.md +661 -0
  164. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Exemplos.md +312 -0
  165. package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -0
  166. package/seedgridKB/SeedGrid/SeedGrid-components/layout/API.md +1090 -0
  167. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Exemplos.md +1172 -0
  168. package/seedgridKB/SeedGrid/SeedGrid-components/layout/Visao-geral.md +98 -0
  169. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/Visao-geral.md +98 -0
  170. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-apikeys.md +118 -0
  171. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-audit.md +88 -0
  172. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-backup.md +131 -0
  173. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-platform.md +132 -0
  174. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-user.md +120 -0
  175. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-login-tenancy.md +119 -0
  176. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-security.md +427 -0
  177. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-self-enter.md +104 -0
  178. package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-subdomain-tenancy.md +110 -0
  179. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/API.md +490 -0
  180. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +561 -0
  181. package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Visao-geral.md +82 -0
  182. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/Visao-geral.md +68 -0
  183. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-commons.md +61 -0
  184. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-core.md +140 -0
  185. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-playground.md +112 -0
  186. package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-theme.md +97 -0
  187. package/seedgridKB/SeedGrid/SeedGrid-components/providers/API.md +177 -0
  188. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Exemplos.md +332 -0
  189. package/seedgridKB/SeedGrid/SeedGrid-components/providers/Visao-geral.md +106 -0
  190. package/seedgridKB/SeedGrid/SeedGrid-components/showcase.md +70 -0
  191. package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +53 -0
  192. package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +45 -0
  193. package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +43 -0
  194. package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +41 -0
  195. package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +44 -0
  196. package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +40 -0
  197. package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +78 -0
  198. package/seedgridKB/SeedGrid/Toolkit/references/glossario.md +15 -0
  199. package/seedgridKB/SeedGrid/Toolkit/references/modos-shared-native.md +27 -0
  200. package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +54 -0
  201. package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +39 -0
  202. package/seedgridKB/SeedGrid/Toolkit/rules/formato-entrega.md +29 -0
  203. package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +47 -0
  204. package/seedgridKB/SeedGrid/Toolkit/rules/personalizacao-local.md +22 -0
  205. package/seedgridKB/SeedGrid/Toolkit/skills/planejar-mudanca/SKILL.md +38 -0
  206. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/SKILL.md +33 -0
  207. package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/references/checklist.md +25 -0
  208. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-backend-crud/SKILL.md +29 -0
  209. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-bump/SKILL.md +26 -0
  210. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/SKILL.md +221 -0
  211. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/agents/openai.yaml +4 -0
  212. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/checklist.md +31 -0
  213. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/patterns.md +185 -0
  214. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/routing.md +66 -0
  215. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/SKILL.md +56 -0
  216. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +4 -0
  217. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/checklist.md +32 -0
  218. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/steps.md +114 -0
  219. package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-review/SKILL.md +61 -0
  220. package/seedgridKB/SeedGrid/Toolkit/skills/validar-mudanca/SKILL.md +29 -0
  221. package/seedgridKB/SeedGrid/Toolkit/templates/decisao-arquitetura.md +29 -0
  222. package/seedgridKB/SeedGrid/Toolkit/templates/especificacao-tarefa.md +32 -0
  223. package/seedgridKB/SeedGrid/Toolkit/templates/relatorio-validacao.md +30 -0
  224. package/seedgridKB/SeedGrid/Versoes.md +64 -0
  225. package/seedgridKB/SeedGrid/Visao-geral.md +35 -0
  226. package/seedgridKB/manifest.json +142 -0
@@ -0,0 +1,185 @@
1
+ # CRUD Page Pattern
2
+
3
+ Use this structure for every entity CRUD.
4
+
5
+ ## 1. List Page
6
+
7
+ File pattern:
8
+
9
+ - `app/<module>/<entity>/<entity>_list/page.tsx`
10
+
11
+ Responsibilities:
12
+
13
+ - Load paginated server-side data through `/api/<module>/<entity>`
14
+ - Render `SgDatatable`
15
+ - Render `SgInputTextSearch`
16
+ - Show `ListLoadError` (with retry) instead of the table when the load fails
17
+ - Support sort, page, and empty states
18
+ - Navigate to `<entity>_edit`
19
+ - Gate actions by permission
20
+
21
+ Expected behavior:
22
+
23
+ - `Novo` button opens `<entity>_edit`
24
+ - edit action opens `<entity>_edit?publicId=...`
25
+ - delete action opens an `SgConfirmationDialog` (never `window.confirm`); only on
26
+ confirm does it call `/api/<module>/<entity>/{publicId}`
27
+ - success returns to the list with a query flag such as `?saved=created`
28
+
29
+ Toolbar layout:
30
+
31
+ - Use `SgStack direction="row" align="end" gap={12} wrap`, not a 50/50 `SgGrid`
32
+ - `SgInputTextSearch` grows inside `<div style={{ flex: 1, minWidth: 240 }}>`
33
+ - `Novo` button stays compact (`label="Novo"`, `size="md"`) and is height-matched
34
+ to the input with `style={{ height: 44 }}` (input is `h-11`, button `md` is
35
+ `h-10`)
36
+
37
+ Recommended state shape:
38
+
39
+ ```ts
40
+ type QueryState = {
41
+ page: number;
42
+ rows: number;
43
+ search: string;
44
+ sortField: string;
45
+ sortOrder: "asc" | "desc";
46
+ };
47
+ ```
48
+
49
+ ## 2. Edit Page
50
+
51
+ File pattern:
52
+
53
+ - `app/<module>/<entity>/<entity>_edit/page.tsx`
54
+
55
+ Responsibilities:
56
+
57
+ - Read `publicId` from `searchParams`
58
+ - If `publicId` exists, load the entity through `/api/<module>/<entity>/{publicId}`
59
+ - If absent, open in create mode
60
+ - Save through `POST` or `PUT`
61
+ - Redirect back to `<entity>_list`
62
+
63
+ Expected behavior:
64
+
65
+ - Dedicated page only, never inline edit inside the list
66
+ - Use SeedGrid form controls
67
+ - Show skeleton while loading existing data
68
+ - Show user-facing save errors (`extractApiErrorMessage` with a generic fallback)
69
+ - On success, go back to the list with `?saved=created` / `?saved=updated`; the list shows the toast (`useSavedToast`)
70
+
71
+ ### Input type by data type
72
+
73
+ Match the input to the field's data type. Do **not** use `SgInputText` for
74
+ numbers or money: it accepts letters and only fails at submit.
75
+
76
+ | Field kind | Component | Key props | Parse on submit |
77
+ | --- | --- | --- | --- |
78
+ | Money (price, fee, overage, balance) | `SgInputCurrency` | `currency="BRL"`, `decimals={2}`, `minValue={0}` | `parseDecimalInput` |
79
+ | Integer count (requests, users, qty, billing day) | `SgInputNumber` | `decimals={0}`, `minValue={...}` | `Number.parseInt(v, 10)` |
80
+ | Decimal non-money (rate, factor) | `SgInputNumber` | `decimals={2}` | `parseDecimalInput` |
81
+ | Date | `SgInputDate` | — | ISO on submit |
82
+ | Free text | `SgInputText` | — | trim |
83
+
84
+ Both numeric inputs are controlled via `inputProps={{ value }}` and emit a string
85
+ through `onChange`. Keep form state as the raw string; convert only on submit.
86
+
87
+ ```tsx
88
+ // money
89
+ <SgInputCurrency
90
+ id="<entity>-price"
91
+ label="Preco mensal"
92
+ currency="BRL"
93
+ decimals={2}
94
+ minValue={0}
95
+ inputProps={{ value: form.price }}
96
+ onChange={(price) => setForm((f) => ({ ...f, price }))}
97
+ />
98
+
99
+ // integer count
100
+ <SgInputNumber
101
+ id="<entity>-requests"
102
+ label="Requests/mes"
103
+ decimals={0}
104
+ minValue={1}
105
+ inputProps={{ value: form.requests }}
106
+ onChange={(requests) => setForm((f) => ({ ...f, requests }))}
107
+ />
108
+ ```
109
+
110
+ ## 3. Shell Copy
111
+
112
+ Use business language, not implementation language.
113
+
114
+ Good:
115
+
116
+ - `Consulte os planos disponiveis`
117
+ - `Atualize as informacoes do usuario`
118
+
119
+ Bad:
120
+
121
+ - `listagem administrativa paginada no servidor`
122
+ - `debounce, distinct e cancelamento`
123
+ - `pagina dedicada`
124
+
125
+ ## 4. Skeleton Pattern
126
+
127
+ The table loading state must read as a table, not a single grey rectangle. Use a
128
+ table-shaped skeleton: one header row plus several body rows of `shape="text"`
129
+ skeletons, so the placeholder suggests multiple columns and fields.
130
+
131
+ Prefer the shared `DatatableSkeleton` helper (in `app/components`) and match the
132
+ real column count and page size:
133
+
134
+ ```tsx
135
+ {loading ? (
136
+ <DatatableSkeleton columns={columns.length} rows={Math.min(queryState.rows, 8)} />
137
+ ) : (
138
+ <SgDatatable ... />
139
+ )}
140
+ ```
141
+
142
+ Underlying structure the helper renders (replicate if a shared helper is not
143
+ available):
144
+
145
+ ```tsx
146
+ <div className="overflow-hidden rounded-lg border border-border">
147
+ <div className="grid gap-3 border-b border-border p-3" style={{ gridTemplateColumns }}>
148
+ {/* one text skeleton per column = header */}
149
+ </div>
150
+ {/* N rows, each with one text skeleton per column, last:border-b-0 */}
151
+ </div>
152
+ ```
153
+
154
+ Do not use a single `<SgSkeleton shape="rectangle" />` for table loading. Cap the
155
+ row count (e.g. `Math.min(pageSize, 8)`) so large page sizes do not render dozens
156
+ of skeleton rows.
157
+
158
+ Form/edit pages may still use a single rectangular `SgSkeleton` while loading the
159
+ entity.
160
+
161
+ ## 5. Status Badge Colors (boolean columns)
162
+
163
+ Boolean state columns (active, 2FA, integration, etc.) must read at a glance with
164
+ strong semantic colors — never a washed-out `secondary` grey for the "off" state.
165
+ Use `StatusBadge` with an explicit `severity`:
166
+
167
+ - The neutral/desirable state is `success` (green).
168
+ - The opposite state is `danger` (red).
169
+ - Do not use `secondary` or `info` for these two-state columns.
170
+
171
+ ```tsx
172
+ // active / enabled
173
+ <StatusBadge severity={row.active ? "success" : "danger"} value={row.active ? "ATIVO" : "INATIVO"} />
174
+
175
+ // 2FA
176
+ <StatusBadge severity={row.twoFactorEnabled ? "success" : "danger"} value={row.twoFactorEnabled ? "ATIVO" : "DESATIVADO"} />
177
+ ```
178
+
179
+ Pick which boolean value is green by meaning, not by `true`/`false`. For example a
180
+ role's "for integration" flag is the exception: a non-integration role is the safe
181
+ default (`success`/green) and an integration role is flagged (`danger`/red):
182
+
183
+ ```tsx
184
+ <StatusBadge severity={row.forIntegration ? "danger" : "success"} value={row.forIntegration ? "SIM" : "NAO"} />
185
+ ```
@@ -0,0 +1,66 @@
1
+ # Routing And Proxy Standard
2
+
3
+ ## Public URLs
4
+
5
+ Always prefer `publicId` in URLs:
6
+
7
+ - list action to edit:
8
+ - `/<module>/<entity>/<entity>_edit?publicId=<uuid>`
9
+ - proxy detail route:
10
+ - `/api/<module>/<entity>/{publicId}`
11
+
12
+ Do not expose the numeric database `id` in the route when a `publicId` exists.
13
+
14
+ ## Pages
15
+
16
+ - `app/<module>/<entity>/page.tsx`: only `redirect("/<module>/<entity>/<entity>_list")`
17
+ - `app/<module>/<entity>/<entity>_list/page.tsx`
18
+ - `app/<module>/<entity>/<entity>_edit/page.tsx`
19
+
20
+ ## Next Route Convention
21
+
22
+ Use Next API routes as server-side proxies:
23
+
24
+ - `app/api/<module>/<entity>/route.ts` (`GET` list, `POST` create)
25
+ - `app/api/<module>/<entity>/[id]/route.ts` (`GET`, `PUT`, `DELETE`; the `[id]` segment carries the
26
+ `publicId`)
27
+
28
+ What they do:
29
+
30
+ - forward the session to the backend through the project's session-aware fetch helper
31
+ - keep the backend paths in one place (a `*Paths` helper in `lib/`), not scattered as strings
32
+ - return the backend response untouched on writes (passthrough helper)
33
+ - on reads, turn failures into `problem+json` with the **real status** (`problemResponse`); a session
34
+ that expired or a backend that is down must never become an empty `200` page
35
+
36
+ ```ts
37
+ export async function GET(request: Request) {
38
+ const params = new URLSearchParams(new URL(request.url).searchParams);
39
+ const suffix = params.toString() ? `?${params.toString()}` : "";
40
+ try {
41
+ return NextResponse.json(await apiFetch<PaginatedResult<Entity>>(`${Paths.entity.base}${suffix}`));
42
+ } catch (error) {
43
+ return problemResponse(error);
44
+ }
45
+ }
46
+ ```
47
+
48
+ The client calls these routes with the project's HTTP client (`adminProxyClient` in the boilerplate)
49
+ and reads errors with `extractApiErrorMessage`.
50
+
51
+ ## Backend Convention
52
+
53
+ Resources behind a CRUD should:
54
+
55
+ - return both `id` and `publicId` in payloads when useful
56
+ - resolve detail/update/delete by `publicId`
57
+ - keep numeric `id` only for internal persistence and joins
58
+ - paginate server-side (`page` 0-based, `size`, `sortField`, `sortOrder`) and answer
59
+ `{ items, totalRecords, page, size, sortField, sortOrder, query }`
60
+
61
+ ## Breadcrumb And Menu
62
+
63
+ - Menu item should point to the real list route
64
+ - Breadcrumb items must use valid `href` values
65
+ - Parent sections like `/security` must resolve to a real child route if there is no standalone page
66
+ - Registering the menu item, icon and permission is covered by the `seedgrid-new-screen` skill
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: seedgrid-new-screen
3
+ description: Registrar uma tela, menu ou permissao nova no boilerplate SeedGrid (app do cliente `frontend/` ou admin da plataforma `admin/`) sem esquecer nenhum dos lugares que precisam ficar sincronizados - migration da permissao, item de menu, icone, item ativo, catalogo do editor de perfis e, se for vendavel por plano, o treeview de features do admin e o `@RequiresPlanFeature`. Use ao criar tela nova, acao nova numa tela existente, permissao nova, ou ao mover/renomear item de menu.
4
+ ---
5
+
6
+ # Tela nova no SeedGrid (menu + permissoes)
7
+
8
+ Hoje menu e catalogo de permissoes sao mantidos **a mao, em varios lugares**. Esta skill existe para nenhum ser
9
+ esquecido. (Plano futuro para centralizar: `seedgrid-quarkus-ext-security/docs/refactor-permission-catalog.md`.
10
+ Nao executar sem o usuario pedir.)
11
+
12
+ ## Antes de comecar, responda
13
+
14
+ 1. **Qual app?** `frontend/` (cliente final, audience `client`) ou `admin/` (plataforma, audience `platform`).
15
+ 2. **Quais permissoes?** A de abrir a tela (`XXX_READ`) e uma por acao relevante (`XXX_CREATE`, `XXX_DELETE`...).
16
+ Uma tela pode ter varias.
17
+ 3. **Onde no menu?** Grupo (pai) e posicao. Ou "nao aparece no menu" (permissao sem tela).
18
+ 4. **So' no app do cliente: e' vendavel por plano?** Se o plano pode ligar/desligar a funcionalidade.
19
+
20
+ ## Passo a passo
21
+
22
+ Detalhes e exemplos de codigo de cada passo em `references/steps.md`.
23
+
24
+ 1. **Permissao (backend)** - migration nova em `backend/src/main/resources/db/migration/app/`
25
+ (`V3xxx__<assunto>.sql`, nunca editar uma ja aplicada): `insert into permissions` com o `audience` certo,
26
+ vinculo ao perfil `ADMIN`, e - se vendavel - vinculo aos terms dos planos que a liberam.
27
+ 2. **Endpoint (backend)** - `@PermissionsAllowed("XXX_READ")` (e por acao). Se vendavel:
28
+ `@RequiresPlanFeature("XXX_READ")`.
29
+ 3. **Menu** - item em `<app>/app/data.ts` (`navItems`) com `href`, `label` e `permission`.
30
+ 4. **Icone** - entrada no `iconByHref` de `<app>/app/components/Shell.tsx` (sem ela o item fica sem icone).
31
+ 5. **Item ativo** - se a tela tem sub-rotas (ex.: `_edit`), regra em `normalizeMenuPath` do mesmo `Shell.tsx`.
32
+ 6. **Editor de perfis** - a tela e as acoes no catalogo do app:
33
+ - cliente: `frontend/lib/client-permission-tree.ts`;
34
+ - admin: `admin/lib/permission-tree.ts`.
35
+ Permissao fora do catalogo **nao aparece** no editor de perfis do cliente (some em silencio).
36
+ 7. **Se vendavel (so' cliente)** - copiar a mesma entrada para `admin/lib/client-permission-tree.ts` (os dois
37
+ `client-permission-tree.ts` sao **identicos**). Se o grupo novo NAO for vendavel, incluir o id dele em
38
+ `NOT_SELLABLE_GROUPS` (`admin/app/plans/plan_terms/page.tsx`).
39
+ 8. **Na pagina** - botoes de acao checam a propria permissao (`hasPermission("XXX_DELETE")`). O catalogo so'
40
+ declara a acao para o editor de perfis; nao esconde botao.
41
+ 9. **Os dois boilerplates** - `login-tenancy` e `subdomain-tenancy` tem os mesmos arquivos. Se a tela e' do
42
+ boilerplate (nao de um produto derivado), repetir nos dois.
43
+
44
+ ## Verificacao
45
+
46
+ Rodar o checklist de `references/checklist.md` antes de encerrar. No minimo:
47
+
48
+ ```bash
49
+ # os dois catalogos do cliente iguais (ignorando fim de linha)
50
+ diff <(tr -d '\r' < frontend/lib/client-permission-tree.ts) <(tr -d '\r' < admin/lib/client-permission-tree.ts)
51
+ # typecheck dos dois apps
52
+ (cd frontend && npx tsc --noEmit -p .) && (cd admin && npx tsc --noEmit -p .)
53
+ ```
54
+
55
+ E na tela: o item aparece no menu para quem tem a permissao e some para quem nao tem; o editor de perfis mostra
56
+ a tela com as acoes; se vendavel, o treeview "features liberadas neste plano" mostra a tela.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "SeedGrid tela nova"
3
+ short_description: "Tela, menu e permissoes sincronizados"
4
+ default_prompt: "Use $seedgrid-new-screen to add a new screen with its permissions, menu item, icon, profile-editor catalog and, if sellable, the plan feature tree."
@@ -0,0 +1,32 @@
1
+ # Checklist - tela nova
2
+
3
+ ## Backend
4
+
5
+ - [ ] Migration NOVA (nao editar uma aplicada) com as permissoes, `audience` certo (`client` | `platform`), nome
6
+ com ate 30 caracteres.
7
+ - [ ] Permissoes vinculadas ao perfil `ADMIN`.
8
+ - [ ] Endpoints com `@PermissionsAllowed` por acao.
9
+ - [ ] Vendavel: `@RequiresPlanFeature` no endpoint + vinculo aos terms (trial e planos) na migration.
10
+
11
+ ## Front (`frontend/` ou `admin/`)
12
+
13
+ - [ ] Item em `app/data.ts` com `permission`.
14
+ - [ ] Icone em `iconByHref` (`app/components/Shell.tsx`).
15
+ - [ ] Sub-rotas em `normalizeMenuPath` (mesmo arquivo), se houver.
16
+ - [ ] Tela e acoes no catalogo: `frontend/lib/client-permission-tree.ts` ou `admin/lib/permission-tree.ts`.
17
+ - [ ] Botoes da pagina checam a propria permissao.
18
+ - [ ] Vendavel: `admin/lib/client-permission-tree.ts` identico ao do frontend; grupo nao vendavel em
19
+ `NOT_SELLABLE_GROUPS`.
20
+
21
+ ## Boilerplates
22
+
23
+ - [ ] Repetido em `login-tenancy` e `subdomain-tenancy` (se a tela for do boilerplate).
24
+
25
+ ## Verificacao
26
+
27
+ - [ ] `diff` dos dois `client-permission-tree.ts` vazio (ignorando `\r`).
28
+ - [ ] `npx tsc --noEmit -p .` no `frontend/` e no `admin/`.
29
+ - [ ] Banco recriado (ou migration aplicada) e backend reiniciado.
30
+ - [ ] Usuario COM a permissao ve o item; usuario SEM nao ve.
31
+ - [ ] Editor de perfis mostra a tela e as acoes; o "olhinho" da lista de perfis lista as permissoes da tela.
32
+ - [ ] Vendavel: o treeview do plano mostra a tela; plano sem a feature -> 402 `FEATURE_NOT_IN_PLAN`.
@@ -0,0 +1,114 @@
1
+ # Passos detalhados
2
+
3
+ Exemplo usado em todos os passos: tela **Relatorios** no app do cliente, com abrir, gerar e excluir, vendavel
4
+ por plano.
5
+
6
+ ## 1. Permissao (migration)
7
+
8
+ `backend/src/main/resources/db/migration/app/V3010__reports_permissions.sql`:
9
+
10
+ ```sql
11
+ -- Audience: 'client' = app do cliente (frontend/); 'platform' = admin da plataforma (admin/).
12
+ insert into permissions (name, description, public_id, audience) values
13
+ ('REPORT_READ', 'Relatorios', gen_random_uuid()::text, 'client'),
14
+ ('REPORT_GENERATE', 'Gerar relatorio', gen_random_uuid()::text, 'client'),
15
+ ('REPORT_DELETE', 'Excluir relatorio', gen_random_uuid()::text, 'client')
16
+ on conflict (name) do update
17
+ set description = excluded.description,
18
+ audience = excluded.audience;
19
+
20
+ -- O ADMIN tem todas as permissoes (o responsavel pela conta entra com ADMIN no cadastro).
21
+ insert into role_permissions (role_id, permission_id)
22
+ select r.id, p.id from roles r cross join permissions p
23
+ where r.name = 'ADMIN' and p.name in ('REPORT_READ', 'REPORT_GENERATE', 'REPORT_DELETE')
24
+ on conflict do nothing;
25
+
26
+ -- SO' SE VENDAVEL: os planos que liberam a feature (o trial tem public_id fixo ...0000a2).
27
+ -- Sem billing (modulo desligado) as tabelas de plano nao existem: o bloco so' pula.
28
+ do $$
29
+ begin
30
+ if to_regclass('plan_term_permissions') is null then
31
+ return;
32
+ end if;
33
+ insert into plan_term_permissions (plan_term_id, permission_id)
34
+ select t.id, p.id
35
+ from plan_terms t join plans pl on pl.id = t.plan_id cross join permissions p
36
+ where p.name = 'REPORT_READ'
37
+ and (t.public_id = '00000000-0000-0000-0000-0000000000a2' or pl.code in ('PRO'))
38
+ on conflict do nothing;
39
+ end $$;
40
+ ```
41
+
42
+ - `name` tem no maximo 30 caracteres.
43
+ - No subdomain-tenancy as migrations de `db/migration/app` rodam no banco **master**.
44
+ - Referencia viva: `V3002__usage_demo_permission.sql`.
45
+
46
+ ## 2. Endpoint
47
+
48
+ ```java
49
+ @POST
50
+ @Path("/reports")
51
+ @PermissionsAllowed("REPORT_GENERATE")
52
+ @RequiresPlanFeature("REPORT_READ") // so' se vendavel: 402 FEATURE_NOT_IN_PLAN quando o plano nao libera
53
+ public Report generate(...) { ... }
54
+ ```
55
+
56
+ ## 3. Menu (`<app>/app/data.ts`)
57
+
58
+ ```ts
59
+ { href: "/reports/report_list", label: "Relatorios", permission: "REPORT_READ" },
60
+ ```
61
+
62
+ - Grupo = item com `children`; aparece se tiver ao menos um filho visivel.
63
+ - Regra implicita do `Shell`: folha **sem** `permission` aparece **so' para ADMIN**. Prefira sempre declarar a
64
+ permissao.
65
+
66
+ ## 4. Icone (`<app>/app/components/Shell.tsx`)
67
+
68
+ ```ts
69
+ const iconByHref = {
70
+ ...
71
+ "/reports/report_list": <FileText size={16} />, // import { FileText } from "lucide-react"
72
+ } as const;
73
+ ```
74
+
75
+ ## 5. Item ativo nas sub-rotas (`normalizeMenuPath`, mesmo arquivo)
76
+
77
+ ```ts
78
+ if (pathname.startsWith("/reports/")) {
79
+ return "/reports/report_list";
80
+ }
81
+ ```
82
+
83
+ ## 6. Editor de perfis
84
+
85
+ Cliente - `frontend/lib/client-permission-tree.ts` (admin: `admin/lib/permission-tree.ts`, mesmo formato):
86
+
87
+ ```ts
88
+ {
89
+ id: "relatorios", // id do grupo (usado em NOT_SELLABLE_GROUPS)
90
+ label: "Relatorios",
91
+ screens: [
92
+ {
93
+ id: "relatorios/relatorios",
94
+ label: "Relatorios",
95
+ actions: [
96
+ { permission: "REPORT_READ", label: "Abrir a tela" }, // a PRIMEIRA e' sempre a de abrir
97
+ { permission: "REPORT_GENERATE", label: "Gerar relatorio" },
98
+ { permission: "REPORT_DELETE", label: "Excluir relatorio" },
99
+ ],
100
+ },
101
+ ],
102
+ },
103
+ ```
104
+
105
+ - A ordem dos grupos segue o menu.
106
+ - Cada permissao aparece **uma vez** no catalogo (a arvore usa o publicId como id da folha).
107
+
108
+ ## 7. Vendavel (so' cliente)
109
+
110
+ - Copiar o arquivo inteiro: `frontend/lib/client-permission-tree.ts` -> `admin/lib/client-permission-tree.ts`.
111
+ - O treeview "features liberadas neste plano" mostra todos os grupos do catalogo **menos** os de
112
+ `NOT_SELLABLE_GROUPS` (`admin/app/plans/plan_terms/page.tsx`): hoje `seguranca`, `menu-usuario`.
113
+ Grupo novo nao vendavel -> acrescentar o id ali.
114
+ - Sem o `@RequiresPlanFeature` no endpoint, liberar ou nao no plano nao muda nada.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: seedgrid-review
3
+ description: Verifica se o código-fonte de um projeto segue os padrões SeedGrid (front React com @seedgrid/fe-components e back Java), citando cada violação por id de regra, arquivo e linha. Use quando pedirem para revisar, auditar ou conferir o padrão SeedGrid, depois de implementar uma tela ou serviço, ou antes de abrir um PR. Aceita o escopo "front", "back" ou nenhum (os dois).
4
+ metadata:
5
+ toolkit: seedgrid-ai
6
+ ---
7
+
8
+ # Revisar o padrão SeedGrid
9
+
10
+ Confere o código contra as regras do toolkit e devolve uma lista objetiva de violações. **Somente leitura**: não edite arquivos, a menos que o usuário peça as correções depois.
11
+
12
+ ## Escopo
13
+
14
+ - `front`: revisa só o front-end (regras `FE-nn`, arquivo `.ai/rules/frontend-seedgrid.md`).
15
+ - `back`: revisa só o back-end Java (regras `BE-nn`, arquivo `.ai/rules/backend-java-seedgrid.md`).
16
+ - Sem argumento: revisa os dois. Se o projeto só tiver um lado (sem `pom.xml`/`*.java` ou sem `package.json`/`*.tsx`), diga isso e revise apenas o que existe.
17
+
18
+ Alvo: por padrão, os arquivos alterados (`git diff --name-only <base>...HEAD` mais os não commitados). Se o usuário pedir "o projeto inteiro" ou não houver diff, varra `src/` (back) e `app/`, `components/` (front).
19
+
20
+ ## Passos
21
+
22
+ 1. Leia **apenas** a rule do escopo (`.ai/rules/frontend-seedgrid.md` e/ou `.ai/rules/backend-java-seedgrid.md`). Para dúvida sobre um componente ou extension, abra pelo índice da KB (`.ai/brain/SeedGrid/SeedGrid-components/Indice.md`, `.ai/brain/SeedGrid/Extensions/Indice.md`) e só a nota do grupo; nunca varra `.ai/brain/` inteira.
23
+ 2. Faça primeiro as buscas mecânicas, sem abrir arquivo por arquivo. Exemplos:
24
+ - Front: `<input`, `<button`, `<select`, `<textarea`, `<table` em `*.tsx`; `window.confirm`, `alert(`; `SgInputText` em campo cujo nome/label indique telefone, whatsapp, cpf, cnpj, e-mail, cep, senha, valor, data (FE-10 a FE-19).
25
+ - Back: `@Inject` em atributo; `throw new RuntimeException`; `Resource` no nome de classe; `UPDATE ` em JPQL/SQL de código; Panache em módulo de lib; endpoint que devolve `id` em vez de `publicId`; `"%" +` em `LIKE`; pacote no singular.
26
+ 3. Abra só os arquivos com suspeita e confirme no contexto. Descarte falsos positivos (por exemplo, `<input>` dentro do próprio pacote de componentes, ou comentário que justifica a exceção da FE-01).
27
+ 4. Para regras que exigem julgamento (FE-02, BE-05, BE-11, BE-40), reporte só o que você consegue sustentar com o trecho de código. Diga o que **não** conseguiu verificar.
28
+
29
+ ## Saída
30
+
31
+ ```markdown
32
+ ## Padrão SeedGrid: <front|back|front e back>
33
+ Escopo revisado: <arquivos ou pastas>
34
+
35
+ ### Violações
36
+ | Regra | Local | Problema | Correção |
37
+ | --- | --- | --- | --- |
38
+ | FE-10 | app/clientes/cliente_edit/page.tsx:84 | telefone com SgInputText | trocar por SgInputPhone |
39
+
40
+ ### Não verificado
41
+ - itens que dependem de execução ou de contexto que você não tinha
42
+
43
+ ### Resumo
44
+ N violações (X bloqueantes). Conformes: <regras checadas sem achados>.
45
+ ```
46
+
47
+ Classifique como **bloqueante** o que afeta segurança ou contrato (BE-10, BE-25, BE-30, FE-32) e como **ajuste** o resto. Sem violações, diga isso e liste o que foi checado, sem inventar achados.
48
+
49
+ ## Bloco final para automação
50
+
51
+ O `seedgrid-ai review` lê o resultado desta skill. Por isso, **termine sempre a resposta** com exatamente um bloco assim (JSON válido, sem comentários), depois do relatório:
52
+
53
+ ````markdown
54
+ ```seedgrid-review-json
55
+ {"scope": "front", "violations": 1, "blocking": 0, "notVerified": 0}
56
+ ```
57
+ ````
58
+
59
+ - `scope`: `front`, `back` ou `both`.
60
+ - `violations`: total de violações do relatório; `blocking`: quantas são bloqueantes.
61
+ - `notVerified`: quantos itens ficaram em "Não verificado".
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: validar-mudanca
3
+ description: Valida uma mudança de código executando build, testes e verificações ligadas aos critérios de aceite, e registra evidências em um relatório. Use antes de declarar uma tarefa concluída ou após correções de revisão.
4
+ metadata:
5
+ toolkit: seedgrid-ai
6
+ ---
7
+
8
+ # Validar mudança
9
+
10
+ Comprove com evidências executadas que a mudança funciona; não declare sucesso sem verificar.
11
+
12
+ ## Passos
13
+
14
+ 1. **Critérios.** Liste os critérios de aceite. Se não existirem, derive-os do objetivo e informe isso.
15
+ 2. **Comandos do projeto.** Descubra como compilar, testar e executar: consulte `.ai/local/` (se existir), README, scripts de build (`package.json`, `pom.xml`, `build.gradle`, `Makefile` etc.). Não invente comandos.
16
+ 3. **Mapeamento.** Associe cada critério a uma verificação concreta (teste automatizado, comando, inspeção do comportamento).
17
+ 4. **Execução.** Rode, nesta ordem quando aplicável: verificação de tipos/compilação, lint, testes afetados, suíte relevante, build. Exercite o comportamento alterado quando possível.
18
+ 5. **Registro.** Preencha o modelo [assets/relatorio-validacao.md](assets/relatorio-validacao.md) com comandos, resultados e evidências resumidas.
19
+
20
+ ## Regras
21
+
22
+ - Diferencie "passou", "falhou" e "não executado (motivo)". Nunca converta um "não executado" em "passou".
23
+ - Não execute ações que publiquem ou alterem serviços externos (deploy, envio de e-mail, pagamentos, push) sem autorização explícita.
24
+ - Se uma verificação falhar, devolva a evidência ao implementador em vez de corrigir por conta própria, salvo instrução contrária.
25
+ - Testes instáveis: repita uma vez e relate a instabilidade, sem ocultá-la.
26
+
27
+ ## Saída
28
+
29
+ O relatório de validação preenchido, com conclusão "Aprovado", "Reprovado" ou "Aprovado com ressalvas".
@@ -0,0 +1,29 @@
1
+ ---
2
+ description: "Modelo de registro de decisão de arquitetura (ADR): contexto, alternativas, decisão e consequências."
3
+ ---
4
+ # Decisão de arquitetura: <título>
5
+
6
+ > Modelo do SeedGrid AI Toolkit. Copie para o local de documentação do projeto antes de preencher; não edite o modelo.
7
+
8
+ - **Status:** proposta | aceita | substituída por <link>
9
+ - **Data:** AAAA-MM-DD
10
+ - **Responsáveis:** <pessoas ou papéis>
11
+
12
+ ## Contexto
13
+ Problema, forças em jogo e restrições.
14
+
15
+ ## Decisão
16
+ O que foi decidido, em termos objetivos.
17
+
18
+ ## Alternativas consideradas
19
+ | Alternativa | Prós | Contras | Motivo da rejeição |
20
+ | --- | --- | --- | --- |
21
+ | | | | |
22
+
23
+ ## Consequências
24
+ - Positivas:
25
+ - Negativas e riscos:
26
+ - Trabalho decorrente:
27
+
28
+ ## Validação
29
+ Como saberemos que a decisão funcionou (métricas, testes, critérios).
@@ -0,0 +1,32 @@
1
+ ---
2
+ description: "Modelo de especificação de tarefa: objetivo, escopo, critérios de aceite e riscos, para planejar antes de implementar."
3
+ ---
4
+ # Especificação de tarefa: <título curto>
5
+
6
+ > Modelo do SeedGrid AI Toolkit. Copie para o local de documentação do projeto antes de preencher; não edite o modelo.
7
+
8
+ ## Objetivo
9
+ O que deve estar verdadeiro quando a tarefa terminar.
10
+
11
+ ## Contexto
12
+ Por que a mudança é necessária; decisões e entregas anteriores relevantes.
13
+
14
+ ## Papel responsável
15
+ `<id do papel>` (ver catálogo de papéis).
16
+
17
+ ## Arquivos e áreas envolvidos
18
+ - caminho/ou/módulo — motivo
19
+
20
+ ## Limites
21
+ - O que não deve ser alterado.
22
+ - Arquivos que outro papel está alterando em paralelo.
23
+
24
+ ## Critérios de aceite
25
+ - [ ] Critério verificável 1
26
+ - [ ] Critério verificável 2
27
+
28
+ ## Verificações esperadas
29
+ Comandos ou inspeções que comprovam os critérios.
30
+
31
+ ## Resultado esperado
32
+ Entrega no formato padrão (resultado, arquivos alterados, verificações, pendências, contexto para a próxima etapa).
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: "Modelo de relatório de validação: o que foi verificado, como, resultado e pendências."
3
+ ---
4
+ # Relatório de validação: <tarefa>
5
+
6
+ > Modelo do SeedGrid AI Toolkit. Copie para o local de documentação do projeto antes de preencher; não edite o modelo.
7
+
8
+ - **Data:** AAAA-MM-DD
9
+ - **Versão/commit avaliado:** <identificador>
10
+ - **Ambiente:** <SO, runtime, banco etc.>
11
+
12
+ ## Critérios de aceite
13
+ | Critério | Verificação | Resultado | Evidência |
14
+ | --- | --- | --- | --- |
15
+ | | comando ou inspeção | passou / falhou / não executado | saída resumida ou caminho do log |
16
+
17
+ ## Comandos executados
18
+ ```text
19
+ <comando>
20
+ <resultado resumido>
21
+ ```
22
+
23
+ ## Regressões verificadas
24
+ - Área — como foi verificada — resultado
25
+
26
+ ## Não verificado
27
+ - Item — motivo
28
+
29
+ ## Conclusão
30
+ Aprovado | Reprovado | Aprovado com ressalvas — justificativa em uma frase.