@shanyucoder/flowgrid 0.1.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 (779) hide show
  1. package/README.md +194 -0
  2. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationContext.cs +56 -0
  3. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationGen.csproj +16 -0
  4. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/NameUtil.cs +18 -0
  5. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Program.cs +265 -0
  6. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/application_service.cs.scriban +27 -0
  7. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/handoff.md.scriban +15 -0
  8. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/infrastructure_mock.cs.scriban +20 -0
  9. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/presenter.cs.scriban +41 -0
  10. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/service_test.cs.scriban +17 -0
  11. package/adapters/dotnet-integration/codegen/runners/IntegrationGen/YamlMap.cs +49 -0
  12. package/adapters/dotnet-integration/registries/dotnet-integration.codegen.registry.json +8 -0
  13. package/adapters/dotnet-line/codegen/runners/LineGen/LineContext.cs +43 -0
  14. package/adapters/dotnet-line/codegen/runners/LineGen/LineGen.csproj +16 -0
  15. package/adapters/dotnet-line/codegen/runners/LineGen/NameUtil.cs +12 -0
  16. package/adapters/dotnet-line/codegen/runners/LineGen/Program.cs +201 -0
  17. package/adapters/dotnet-line/codegen/runners/LineGen/TemplateRenderer.cs +22 -0
  18. package/adapters/dotnet-line/codegen/runners/LineGen/Templates/handoff.md.scriban +15 -0
  19. package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service.cs.scriban +21 -0
  20. package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service_interface.cs.scriban +20 -0
  21. package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model.cs.scriban +28 -0
  22. package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model_test.cs.scriban +22 -0
  23. package/adapters/dotnet-line/codegen/runners/LineGen/YamlMap.cs +49 -0
  24. package/adapters/dotnet-line/registries/dotnet-line.codegen.registry.json +8 -0
  25. package/adapters/fastapi/codegen/runners/fast_gen/__init__.py +1 -0
  26. package/adapters/fastapi/codegen/runners/fast_gen/__main__.py +3 -0
  27. package/adapters/fastapi/codegen/runners/fast_gen/cli.py +175 -0
  28. package/adapters/fastapi/codegen/runners/fast_gen/plan.py +285 -0
  29. package/adapters/fastapi/codegen/runners/fast_gen/read_spec.py +34 -0
  30. package/adapters/fastapi/codegen/runners/fast_gen/registry.py +9 -0
  31. package/adapters/fastapi/codegen/runners/fast_gen/wire.py +28 -0
  32. package/adapters/fastapi/codegen/runners/fast_gen/write_files.py +232 -0
  33. package/adapters/fastapi/codegen/runners/generate +5 -0
  34. package/adapters/fastapi/codegen/runners/validate-registry.mjs +54 -0
  35. package/adapters/fastapi/codegen/templates/presenter.py.j2 +11 -0
  36. package/adapters/fastapi/codegen/templates/router.py.j2 +69 -0
  37. package/adapters/fastapi/codegen/templates/schemas_request.py.j2 +26 -0
  38. package/adapters/fastapi/codegen/templates/schemas_response.py.j2 +7 -0
  39. package/adapters/fastapi/codegen/templates/service_create.py.j2 +10 -0
  40. package/adapters/fastapi/codegen/templates/service_delete.py.j2 +10 -0
  41. package/adapters/fastapi/codegen/templates/service_search.py.j2 +9 -0
  42. package/adapters/fastapi/codegen/templates/service_update.py.j2 +11 -0
  43. package/adapters/fastapi/codegen/templates/store.py.j2 +1 -0
  44. package/adapters/fastapi/codegen/templates/test_router.py.j2 +13 -0
  45. package/adapters/fastapi/registries/codegen.registry.json +47 -0
  46. package/adapters/fastapi/registries/common.registry.json +23 -0
  47. package/adapters/fastapi/registries/unit-test.registry.json +12 -0
  48. package/adapters/fastapi/unitgen/runners/fast_unit_gen/__init__.py +1 -0
  49. package/adapters/fastapi/unitgen/runners/fast_unit_gen/cli.py +188 -0
  50. package/adapters/fastapi/unitgen/runners/generate +5 -0
  51. package/adapters/fastapi/unitgen/runners/validate-registry.mjs +48 -0
  52. package/adapters/fastapi/unitgen/templates/test_service.py.j2 +12 -0
  53. package/adapters/laravel/codegen/runners/README.md +45 -0
  54. package/adapters/laravel/codegen/runners/generate.mjs +296 -0
  55. package/adapters/laravel/codegen/runners/lib/codegen-registry.mjs +60 -0
  56. package/adapters/laravel/codegen/runners/lib/detect-existing.mjs +84 -0
  57. package/adapters/laravel/codegen/runners/lib/exec-artisan.mjs +86 -0
  58. package/adapters/laravel/codegen/runners/lib/parse-tags.mjs +49 -0
  59. package/adapters/laravel/codegen/runners/lib/plan.mjs +122 -0
  60. package/adapters/laravel/codegen/runners/lib/read-spec.mjs +30 -0
  61. package/adapters/laravel/codegen/runners/lib/resolve-commands.mjs +234 -0
  62. package/adapters/laravel/codegen/runners/lib/stub-services.mjs +91 -0
  63. package/adapters/laravel/codegen/runners/lib/tag-plan.mjs +155 -0
  64. package/adapters/laravel/codegen/runners/lib/validate.mjs +77 -0
  65. package/adapters/laravel/codegen/runners/lib/workspace-analysis.mjs +202 -0
  66. package/adapters/laravel/codegen/runners/lib/write-handoff.mjs +149 -0
  67. package/adapters/laravel/codegen/runners/lib/write-manifest.mjs +81 -0
  68. package/adapters/laravel/codegen/runners/validate-registry.mjs +52 -0
  69. package/adapters/laravel/php/README.md +26 -0
  70. package/adapters/laravel/php/bin/unit-gen.php +307 -0
  71. package/adapters/laravel/php/bin/validate-registry.php +61 -0
  72. package/adapters/laravel/php/composer.json +16 -0
  73. package/adapters/laravel/php/src/ArtisanRunner.php +56 -0
  74. package/adapters/laravel/php/src/Autoload.php +15 -0
  75. package/adapters/laravel/php/src/CodegenManifest.php +28 -0
  76. package/adapters/laravel/php/src/ParseTags.php +62 -0
  77. package/adapters/laravel/php/src/ProjectResolver.php +100 -0
  78. package/adapters/laravel/php/src/SpecExtract.php +193 -0
  79. package/adapters/laravel/php/src/SpecReader.php +57 -0
  80. package/adapters/laravel/php/src/TemplateRenderer.php +134 -0
  81. package/adapters/laravel/php/src/UnitPlanner.php +396 -0
  82. package/adapters/laravel/php/src/UnitRegistry.php +100 -0
  83. package/adapters/laravel/php/src/WhenEval.php +111 -0
  84. package/adapters/laravel/php/src/WorkspaceInspector.php +240 -0
  85. package/adapters/laravel/php/src/WriteFiles.php +194 -0
  86. package/adapters/laravel/php/templates/actions/relationship-sync.behavior.test.php.stub +50 -0
  87. package/adapters/laravel/php/templates/controllers/controller-invoke.test.php.stub +34 -0
  88. package/adapters/laravel/php/templates/queries/chain-scope.behavior.test.php.stub +34 -0
  89. package/adapters/laravel/php/templates/requests/default-per-page.behavior.test.php.stub +19 -0
  90. package/adapters/laravel/php/templates/requests/request-enriched.test.php.stub +66 -0
  91. package/adapters/laravel/php/templates/requests/rules-keys.behavior.test.php.stub +19 -0
  92. package/adapters/laravel/php/templates/resources/nested-relations.behavior.test.php.stub +25 -0
  93. package/adapters/laravel/php/templates/resources/openapi-shape.behavior.test.php.stub +28 -0
  94. package/adapters/laravel/php/templates/support/ModuleTestSupport.php.stub +32 -0
  95. package/adapters/laravel/registries/codegen.registry.json +190 -0
  96. package/adapters/laravel/registries/unit-test.registry.json +179 -0
  97. package/adapters/laravel/shared/project.mjs +62 -0
  98. package/adapters/nestjs/README.md +16 -0
  99. package/adapters/nestjs/nest-unitgen/runners/README.md +17 -0
  100. package/adapters/nestjs/nest-unitgen/runners/generate.mjs +113 -0
  101. package/adapters/nestjs/nest-unitgen/runners/lib/render.mjs +14 -0
  102. package/adapters/nestjs/nest-unitgen/runners/lib/write-files.mjs +40 -0
  103. package/adapters/nestjs/nest-unitgen/runners/validate-registry.mjs +35 -0
  104. package/adapters/nestjs/nest-unitgen/templates/commands/create.handler.spec.ts.hbs +32 -0
  105. package/adapters/nestjs/nest-unitgen/templates/commands/delete.handler.spec.ts.hbs +32 -0
  106. package/adapters/nestjs/nest-unitgen/templates/commands/update.handler.spec.ts.hbs +32 -0
  107. package/adapters/nestjs/nest-unitgen/templates/handlers/search.handler.spec.ts.hbs +33 -0
  108. package/adapters/nestjs/nest-unitgen/templates/resource/entity.resource.spec.ts.hbs +22 -0
  109. package/adapters/nestjs/nestgen/runners/README.md +30 -0
  110. package/adapters/nestjs/nestgen/runners/generate.mjs +87 -0
  111. package/adapters/nestjs/nestgen/runners/lib/orm-fields.mjs +253 -0
  112. package/adapters/nestjs/nestgen/runners/lib/plan.mjs +124 -0
  113. package/adapters/nestjs/nestgen/runners/lib/read-spec.mjs +52 -0
  114. package/adapters/nestjs/nestgen/runners/lib/render.mjs +52 -0
  115. package/adapters/nestjs/nestgen/runners/lib/workspace-analysis.mjs +80 -0
  116. package/adapters/nestjs/nestgen/runners/lib/write-files.mjs +49 -0
  117. package/adapters/nestjs/nestgen/runners/validate-registry.mjs +36 -0
  118. package/adapters/nestjs/nestgen/templates/commands/create.command.ts.hbs +3 -0
  119. package/adapters/nestjs/nestgen/templates/commands/create.handler.ts.hbs +34 -0
  120. package/adapters/nestjs/nestgen/templates/commands/delete.command.ts.hbs +3 -0
  121. package/adapters/nestjs/nestgen/templates/commands/delete.handler.ts.hbs +33 -0
  122. package/adapters/nestjs/nestgen/templates/commands/update.command.ts.hbs +6 -0
  123. package/adapters/nestjs/nestgen/templates/commands/update.handler.ts.hbs +34 -0
  124. package/adapters/nestjs/nestgen/templates/entity.controller.ts.hbs +51 -0
  125. package/adapters/nestjs/nestgen/templates/entity.resource.ts.hbs +45 -0
  126. package/adapters/nestjs/nestgen/templates/module.module.ts.hbs +38 -0
  127. package/adapters/nestjs/nestgen/templates/orm/prisma.entity.ts.hbs +10 -0
  128. package/adapters/nestjs/nestgen/templates/orm/prisma.model.prisma.hbs +9 -0
  129. package/adapters/nestjs/nestgen/templates/orm/typeorm.entity.ts.hbs +20 -0
  130. package/adapters/nestjs/nestgen/templates/queries/search.handler.ts.hbs +36 -0
  131. package/adapters/nestjs/nestgen/templates/queries/search.query.ts.hbs +3 -0
  132. package/adapters/nestjs/registries/nest-codegen.registry.json +41 -0
  133. package/adapters/nestjs/registries/nest-unit-test.registry.json +31 -0
  134. package/adapters/nextjs/codegen/runners/README.md +68 -0
  135. package/adapters/nextjs/codegen/runners/generate.mjs +236 -0
  136. package/adapters/nextjs/codegen/runners/lib/component-resolve.mjs +79 -0
  137. package/adapters/nextjs/codegen/runners/lib/design-registry.mjs +333 -0
  138. package/adapters/nextjs/codegen/runners/lib/naming.mjs +236 -0
  139. package/adapters/nextjs/codegen/runners/lib/page-lifecycle.mjs +258 -0
  140. package/adapters/nextjs/codegen/runners/lib/plan.mjs +399 -0
  141. package/adapters/nextjs/codegen/runners/lib/read-spec.mjs +7 -0
  142. package/adapters/nextjs/codegen/runners/lib/render.mjs +47 -0
  143. package/adapters/nextjs/codegen/runners/lib/resolve-hub-id.mjs +288 -0
  144. package/adapters/nextjs/codegen/runners/lib/slots.mjs +121 -0
  145. package/adapters/nextjs/codegen/runners/lib/web-paths.mjs +64 -0
  146. package/adapters/nextjs/codegen/runners/lib/write-files.mjs +106 -0
  147. package/adapters/nextjs/codegen/runners/validate-registry.mjs +99 -0
  148. package/adapters/nextjs/codegen/templates/common/confirm-dialog.hbs +81 -0
  149. package/adapters/nextjs/codegen/templates/common/delete-flow.hbs +106 -0
  150. package/adapters/nextjs/codegen/templates/create/form.tsx.hbs +45 -0
  151. package/adapters/nextjs/codegen/templates/create/mock.ts.hbs +15 -0
  152. package/adapters/nextjs/codegen/templates/create/page.tsx.hbs +12 -0
  153. package/adapters/nextjs/codegen/templates/create/service.ts.hbs +25 -0
  154. package/adapters/nextjs/codegen/templates/create/useForm.ts.hbs +59 -0
  155. package/adapters/nextjs/codegen/templates/create/validation.ts.hbs +16 -0
  156. package/adapters/nextjs/codegen/templates/list/mock.ts.hbs +25 -0
  157. package/adapters/nextjs/codegen/templates/list/page.custom.tsx.hbs +65 -0
  158. package/adapters/nextjs/codegen/templates/list/page.tsx.hbs +37 -0
  159. package/adapters/nextjs/codegen/templates/list/service.ts.hbs +37 -0
  160. package/adapters/nextjs/codegen/templates/list/useList.ts.hbs +93 -0
  161. package/adapters/nextjs/codegen/templates/list/useListColumns.ts.hbs +27 -0
  162. package/adapters/nextjs/codegen/templates/list/useListExport.ts.hbs +31 -0
  163. package/adapters/nextjs/codegen/templates/list/useListFilters.ts.hbs +50 -0
  164. package/adapters/nextjs/codegen/templates/store/store.ts.hbs +28 -0
  165. package/adapters/nextjs/contractgen/runners/README.md +47 -0
  166. package/adapters/nextjs/contractgen/runners/generate.mjs +108 -0
  167. package/adapters/nextjs/contractgen/runners/lib/field-zod.mjs +83 -0
  168. package/adapters/nextjs/contractgen/runners/lib/naming.mjs +46 -0
  169. package/adapters/nextjs/contractgen/runners/lib/plan.mjs +147 -0
  170. package/adapters/nextjs/contractgen/runners/lib/render.mjs +57 -0
  171. package/adapters/nextjs/contractgen/runners/lib/write-files.mjs +54 -0
  172. package/adapters/nextjs/contractgen/runners/validate-registry.mjs +54 -0
  173. package/adapters/nextjs/contractgen/templates/index.ts.hbs +8 -0
  174. package/adapters/nextjs/contractgen/templates/read.schema.ts.hbs +22 -0
  175. package/adapters/nextjs/contractgen/templates/relationships.meta.ts.hbs +23 -0
  176. package/adapters/nextjs/contractgen/templates/types.ts.hbs +15 -0
  177. package/adapters/nextjs/contractgen/templates/write.schema.ts.hbs +11 -0
  178. package/adapters/nextjs/registries/contract-field.registry.json +22 -0
  179. package/adapters/nextjs/unitgen/runners/README.md +12 -0
  180. package/adapters/nextjs/unitgen/runners/generate.mjs +201 -0
  181. package/adapters/nextjs/unitgen/runners/lib/parse-tags.mjs +67 -0
  182. package/adapters/nextjs/unitgen/runners/lib/plan.mjs +563 -0
  183. package/adapters/nextjs/unitgen/runners/lib/read-codegen.mjs +42 -0
  184. package/adapters/nextjs/unitgen/runners/lib/render.mjs +32 -0
  185. package/adapters/nextjs/unitgen/runners/lib/resolve-model.mjs +28 -0
  186. package/adapters/nextjs/unitgen/runners/lib/unit-registry.mjs +52 -0
  187. package/adapters/nextjs/unitgen/runners/lib/write-files.mjs +103 -0
  188. package/adapters/nextjs/unitgen/runners/lib/write-spec-tags.mjs +37 -0
  189. package/adapters/nextjs/unitgen/runners/validate-registry.mjs +74 -0
  190. package/adapters/nextjs/unitgen/templates/hooks/use-form.test.ts.hbs +51 -0
  191. package/adapters/nextjs/unitgen/templates/hooks/use-list.test.ts.hbs +63 -0
  192. package/adapters/nextjs/unitgen/templates/models/schema.test.ts.hbs +24 -0
  193. package/adapters/nextjs/unitgen/templates/services/service.create.test.ts.hbs +28 -0
  194. package/adapters/nextjs/unitgen/templates/services/service.export.test.ts.hbs +20 -0
  195. package/adapters/nextjs/unitgen/templates/services/service.search.test.ts.hbs +25 -0
  196. package/adapters/nextjs/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
  197. package/adapters/nextjs/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
  198. package/adapters/nuxt4/codegen/runners/README.md +83 -0
  199. package/adapters/nuxt4/codegen/runners/generate.mjs +236 -0
  200. package/adapters/nuxt4/codegen/runners/lib/component-resolve.mjs +66 -0
  201. package/adapters/nuxt4/codegen/runners/lib/design-registry.mjs +332 -0
  202. package/adapters/nuxt4/codegen/runners/lib/naming.mjs +246 -0
  203. package/adapters/nuxt4/codegen/runners/lib/page-lifecycle.mjs +254 -0
  204. package/adapters/nuxt4/codegen/runners/lib/plan.mjs +370 -0
  205. package/adapters/nuxt4/codegen/runners/lib/read-spec.mjs +7 -0
  206. package/adapters/nuxt4/codegen/runners/lib/render.mjs +47 -0
  207. package/adapters/nuxt4/codegen/runners/lib/resolve-hub-id.mjs +288 -0
  208. package/adapters/nuxt4/codegen/runners/lib/slots.mjs +121 -0
  209. package/adapters/nuxt4/codegen/runners/lib/write-files.mjs +106 -0
  210. package/adapters/nuxt4/codegen/runners/validate-registry.mjs +121 -0
  211. package/adapters/nuxt4/codegen/templates/create/form.vue.hbs +26 -0
  212. package/adapters/nuxt4/codegen/templates/create/mock.ts.hbs +11 -0
  213. package/adapters/nuxt4/codegen/templates/create/model.schema.ts.hbs +14 -0
  214. package/adapters/nuxt4/codegen/templates/create/model.types.ts.hbs +9 -0
  215. package/adapters/nuxt4/codegen/templates/create/page.vue.hbs +11 -0
  216. package/adapters/nuxt4/codegen/templates/create/service.ts.hbs +25 -0
  217. package/adapters/nuxt4/codegen/templates/create/useForm.ts.hbs +29 -0
  218. package/adapters/nuxt4/codegen/templates/create/validation.ts.hbs +12 -0
  219. package/adapters/nuxt4/codegen/templates/list/mock.ts.hbs +27 -0
  220. package/adapters/nuxt4/codegen/templates/list/model.index.ts.hbs +2 -0
  221. package/adapters/nuxt4/codegen/templates/list/model.schema.ts.hbs +16 -0
  222. package/adapters/nuxt4/codegen/templates/list/model.types.ts.hbs +9 -0
  223. package/adapters/nuxt4/codegen/templates/list/page.custom.vue.hbs +105 -0
  224. package/adapters/nuxt4/codegen/templates/list/page.vue.hbs +55 -0
  225. package/adapters/nuxt4/codegen/templates/list/service.ts.hbs +37 -0
  226. package/adapters/nuxt4/codegen/templates/list/useList.ts.hbs +82 -0
  227. package/adapters/nuxt4/codegen/templates/list/useListColumns.ts.hbs +21 -0
  228. package/adapters/nuxt4/codegen/templates/list/useListExport.ts.hbs +26 -0
  229. package/adapters/nuxt4/codegen/templates/list/useListFilters.ts.hbs +45 -0
  230. package/adapters/nuxt4/codegen/templates/partials/component-stub.vue.hbs +44 -0
  231. package/adapters/nuxt4/codegen/templates/store/store.ts.hbs +30 -0
  232. package/adapters/nuxt4/unitgen/runners/README.md +12 -0
  233. package/adapters/nuxt4/unitgen/runners/generate.mjs +201 -0
  234. package/adapters/nuxt4/unitgen/runners/lib/parse-tags.mjs +49 -0
  235. package/adapters/nuxt4/unitgen/runners/lib/plan.mjs +567 -0
  236. package/adapters/nuxt4/unitgen/runners/lib/read-codegen.mjs +42 -0
  237. package/adapters/nuxt4/unitgen/runners/lib/render.mjs +32 -0
  238. package/adapters/nuxt4/unitgen/runners/lib/unit-registry.mjs +52 -0
  239. package/adapters/nuxt4/unitgen/runners/lib/write-files.mjs +103 -0
  240. package/adapters/nuxt4/unitgen/runners/lib/write-spec-tags.mjs +37 -0
  241. package/adapters/nuxt4/unitgen/runners/validate-registry.mjs +74 -0
  242. package/adapters/nuxt4/unitgen/templates/composables/use-form.test.ts.hbs +56 -0
  243. package/adapters/nuxt4/unitgen/templates/composables/use-list.test.ts.hbs +59 -0
  244. package/adapters/nuxt4/unitgen/templates/models/schema.test.ts.hbs +24 -0
  245. package/adapters/nuxt4/unitgen/templates/services/service.create.test.ts.hbs +28 -0
  246. package/adapters/nuxt4/unitgen/templates/services/service.export.test.ts.hbs +20 -0
  247. package/adapters/nuxt4/unitgen/templates/services/service.search.test.ts.hbs +25 -0
  248. package/adapters/nuxt4/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
  249. package/adapters/nuxt4/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
  250. package/adapters/shared/common-gen.mjs +599 -0
  251. package/adapters/shared/common-ui.catalog.json +224 -0
  252. package/adapters/shared/css-adapters/shadcn.mjs +56 -0
  253. package/adapters/shared/css-adapters/winforms.mjs +46 -0
  254. package/adapters/shared/css-gen.mjs +87 -0
  255. package/adapters/shared/fe-layout-profiles.mjs +74 -0
  256. package/adapters/shared/fe-ui-inventory.mjs +62 -0
  257. package/adapters/shared/i18n-merge.mjs +56 -0
  258. package/adapters/shared/read-fe-ir.mjs +64 -0
  259. package/adapters/shared/resolve-cli.mjs +16 -0
  260. package/adapters/shared/resolve-hub-id.mjs +381 -0
  261. package/adapters/shared/surface-common.mjs +41 -0
  262. package/bin/flowgrid-mcp.mjs +29 -0
  263. package/bin/flowgrid.mjs +915 -0
  264. package/bin/lib/agent-mcp.mjs +70 -0
  265. package/bin/lib/agent-profiles.mjs +127 -0
  266. package/bin/lib/audit-run.mjs +96 -0
  267. package/bin/lib/cli-update.mjs +254 -0
  268. package/bin/lib/doctor.mjs +163 -0
  269. package/bin/lib/harness-overlay.mjs +80 -0
  270. package/bin/lib/harness-sync.mjs +427 -0
  271. package/bin/lib/init-scaffold.mjs +158 -0
  272. package/bin/lib/npm-registry.mjs +45 -0
  273. package/bin/lib/project-gitignore.mjs +39 -0
  274. package/dist/codegen/adapters/run-be.d.ts +13 -0
  275. package/dist/codegen/adapters/run-be.js +190 -0
  276. package/dist/codegen/adapters/run-be.js.map +1 -0
  277. package/dist/codegen/adapters/run.d.ts +44 -0
  278. package/dist/codegen/adapters/run.js +146 -0
  279. package/dist/codegen/adapters/run.js.map +1 -0
  280. package/dist/codegen/config/project-root.d.ts +13 -0
  281. package/dist/codegen/config/project-root.js +64 -0
  282. package/dist/codegen/config/project-root.js.map +1 -0
  283. package/dist/codegen/mcp/tools.d.ts +2 -0
  284. package/dist/codegen/mcp/tools.js +138 -0
  285. package/dist/codegen/mcp/tools.js.map +1 -0
  286. package/dist/codegen/registries/common.d.ts +28 -0
  287. package/dist/codegen/registries/common.js +54 -0
  288. package/dist/codegen/registries/common.js.map +1 -0
  289. package/dist/dna/config/project-root.d.ts +12 -0
  290. package/dist/dna/config/project-root.js +41 -0
  291. package/dist/dna/config/project-root.js.map +1 -0
  292. package/dist/dna/profile/detect.d.ts +14 -0
  293. package/dist/dna/profile/detect.js +159 -0
  294. package/dist/dna/profile/detect.js.map +1 -0
  295. package/dist/dna/profile/manifest.d.ts +17 -0
  296. package/dist/dna/profile/manifest.js +10 -0
  297. package/dist/dna/profile/manifest.js.map +1 -0
  298. package/dist/docs/cli/engines.d.ts +13 -0
  299. package/dist/docs/cli/engines.js +53 -0
  300. package/dist/docs/cli/engines.js.map +1 -0
  301. package/dist/docs/config/docs-root.d.ts +8 -0
  302. package/dist/docs/config/docs-root.js +66 -0
  303. package/dist/docs/config/docs-root.js.map +1 -0
  304. package/dist/docs/mcp/tools.d.ts +2 -0
  305. package/dist/docs/mcp/tools.js +351 -0
  306. package/dist/docs/mcp/tools.js.map +1 -0
  307. package/dist/docs/scan/ids.d.ts +29 -0
  308. package/dist/docs/scan/ids.js +237 -0
  309. package/dist/docs/scan/ids.js.map +1 -0
  310. package/dist/docs/scan/links.d.ts +10 -0
  311. package/dist/docs/scan/links.js +98 -0
  312. package/dist/docs/scan/links.js.map +1 -0
  313. package/dist/docs/scan/route.d.ts +8 -0
  314. package/dist/docs/scan/route.js +114 -0
  315. package/dist/docs/scan/route.js.map +1 -0
  316. package/dist/graph/analyze/analyze-bullets.d.ts +17 -0
  317. package/dist/graph/analyze/analyze-bullets.js +137 -0
  318. package/dist/graph/analyze/analyze-bullets.js.map +1 -0
  319. package/dist/graph/analyze/analyze-spec.d.ts +12 -0
  320. package/dist/graph/analyze/analyze-spec.js +249 -0
  321. package/dist/graph/analyze/analyze-spec.js.map +1 -0
  322. package/dist/graph/analyze/api-routes.d.ts +66 -0
  323. package/dist/graph/analyze/api-routes.js +370 -0
  324. package/dist/graph/analyze/api-routes.js.map +1 -0
  325. package/dist/graph/analyze/context-orphan.d.ts +12 -0
  326. package/dist/graph/analyze/context-orphan.js +229 -0
  327. package/dist/graph/analyze/context-orphan.js.map +1 -0
  328. package/dist/graph/analyze/grill-check.d.ts +31 -0
  329. package/dist/graph/analyze/grill-check.js +92 -0
  330. package/dist/graph/analyze/grill-check.js.map +1 -0
  331. package/dist/graph/analyze/parity-check.d.ts +25 -0
  332. package/dist/graph/analyze/parity-check.js +406 -0
  333. package/dist/graph/analyze/parity-check.js.map +1 -0
  334. package/dist/graph/analyze/product-paths.d.ts +13 -0
  335. package/dist/graph/analyze/product-paths.js +29 -0
  336. package/dist/graph/analyze/product-paths.js.map +1 -0
  337. package/dist/graph/analyze/surface-paths.d.ts +13 -0
  338. package/dist/graph/analyze/surface-paths.js +29 -0
  339. package/dist/graph/analyze/surface-paths.js.map +1 -0
  340. package/dist/graph/config/load-config.d.ts +30 -0
  341. package/dist/graph/config/load-config.js +112 -0
  342. package/dist/graph/config/load-config.js.map +1 -0
  343. package/dist/graph/config/platform-repos.d.ts +36 -0
  344. package/dist/graph/config/platform-repos.js +124 -0
  345. package/dist/graph/config/platform-repos.js.map +1 -0
  346. package/dist/graph/config/resolve-paths.d.ts +45 -0
  347. package/dist/graph/config/resolve-paths.js +121 -0
  348. package/dist/graph/config/resolve-paths.js.map +1 -0
  349. package/dist/graph/db/index-store.d.ts +67 -0
  350. package/dist/graph/db/index-store.js +179 -0
  351. package/dist/graph/db/index-store.js.map +1 -0
  352. package/dist/graph/gen/run-command.d.ts +40 -0
  353. package/dist/graph/gen/run-command.js +110 -0
  354. package/dist/graph/gen/run-command.js.map +1 -0
  355. package/dist/graph/lexicon/infer-lane.d.ts +11 -0
  356. package/dist/graph/lexicon/infer-lane.js +28 -0
  357. package/dist/graph/lexicon/infer-lane.js.map +1 -0
  358. package/dist/graph/lexicon/load-lexicon.d.ts +60 -0
  359. package/dist/graph/lexicon/load-lexicon.js +492 -0
  360. package/dist/graph/lexicon/load-lexicon.js.map +1 -0
  361. package/dist/graph/mcp/tools.d.ts +9 -0
  362. package/dist/graph/mcp/tools.js +326 -0
  363. package/dist/graph/mcp/tools.js.map +1 -0
  364. package/dist/graph/registry/load-registries.d.ts +27 -0
  365. package/dist/graph/registry/load-registries.js +111 -0
  366. package/dist/graph/registry/load-registries.js.map +1 -0
  367. package/dist/graph/types.d.ts +208 -0
  368. package/dist/graph/types.js +11 -0
  369. package/dist/graph/types.js.map +1 -0
  370. package/dist/test/config/project-root.d.ts +5 -0
  371. package/dist/test/config/project-root.js +29 -0
  372. package/dist/test/config/project-root.js.map +1 -0
  373. package/dist/test/engines/run.d.ts +10 -0
  374. package/dist/test/engines/run.js +16 -0
  375. package/dist/test/engines/run.js.map +1 -0
  376. package/dist/test/mcp/tools.d.ts +2 -0
  377. package/dist/test/mcp/tools.js +43 -0
  378. package/dist/test/mcp/tools.js.map +1 -0
  379. package/dist/test/optional/fallback-evidence.d.ts +34 -0
  380. package/dist/test/optional/fallback-evidence.js +103 -0
  381. package/dist/test/optional/fallback-evidence.js.map +1 -0
  382. package/engines/cases/README.md +12 -0
  383. package/engines/cases/check-coverage.mjs +103 -0
  384. package/engines/cases/check-plans.mjs +31 -0
  385. package/engines/cases/gate.mjs +215 -0
  386. package/engines/cases/lib/audit-tc-traceability.mjs +139 -0
  387. package/engines/cases/lib/list-case-yaml.mjs +27 -0
  388. package/engines/cases/lib/parse-bundle-traceability.mjs +77 -0
  389. package/engines/cases/lib/render-github-catalog.mjs +141 -0
  390. package/engines/cases/lib/resolve-bundle-from-screen.mjs +73 -0
  391. package/engines/cases/lib/screen-facet-coverage.mjs +42 -0
  392. package/engines/cases/lib/validate-tc-schema.mjs +61 -0
  393. package/engines/cases/publish.mjs +4 -0
  394. package/engines/cases/render-cases.mjs +182 -0
  395. package/engines/cases/vitepress/config.ts +171 -0
  396. package/engines/cases/vitepress/theme/custom.css +418 -0
  397. package/engines/cases/vitepress/theme/index.ts +46 -0
  398. package/engines/codegen/adapters/shadcn.mjs +58 -0
  399. package/engines/codegen/adapters/winforms.mjs +46 -0
  400. package/engines/codegen/tokens.mjs +64 -0
  401. package/engines/docs/lib/load-dev-base-url.mjs +38 -0
  402. package/engines/docs/lib/markdown-table.mjs +65 -0
  403. package/engines/docs/lib/render-bundle-markdown.mjs +95 -0
  404. package/engines/docs/lib/render-design-tables.mjs +695 -0
  405. package/engines/docs/lib/render-github-catalog.mjs +194 -0
  406. package/engines/docs/lib/render-qa-list.mjs +57 -0
  407. package/engines/docs/lib/render-spec-markdown.mjs +19 -0
  408. package/engines/docs/lib/render-template.mjs +76 -0
  409. package/engines/docs/lib/route-page-probe.mjs +54 -0
  410. package/engines/docs/publish.mjs +4 -0
  411. package/engines/docs/render-docs.mjs +195 -0
  412. package/engines/docs/vitepress/config.ts +442 -0
  413. package/engines/docs/vitepress/surfaces-nav.mjs +171 -0
  414. package/engines/docs/vitepress/theme/custom.css +418 -0
  415. package/engines/docs/vitepress/theme/index.ts +46 -0
  416. package/engines/openapi/build-openapi-ui.mjs +72 -0
  417. package/engines/openapi/build-swagger-ui.mjs +72 -0
  418. package/engines/openapi/check-backend-spec.mjs +66 -0
  419. package/engines/openapi/gen-openapi.mjs +337 -0
  420. package/engines/openapi/render-backend-spec.mjs +170 -0
  421. package/engines/openapi/render-openapi.mjs +155 -0
  422. package/engines/shared/flowgrid-tests-docs.mjs +32 -0
  423. package/engines/spec/extract-i18n.mjs +74 -0
  424. package/engines/spec/legacy-dynamics-validate.mjs +67 -0
  425. package/engines/spec/lib/audit-api-gaps.mjs +198 -0
  426. package/engines/spec/lib/audit-bundle-gaps.mjs +582 -0
  427. package/engines/spec/lib/audit-e2e-coverage.mjs +381 -0
  428. package/engines/spec/lib/audit-fe-be-alignment.mjs +183 -0
  429. package/engines/spec/lib/audit-flow-gaps.mjs +151 -0
  430. package/engines/spec/lib/audit-legacy-gaps.mjs +73 -0
  431. package/engines/spec/lib/audit-scenario-coverage.mjs +175 -0
  432. package/engines/spec/lib/audit-testcase-bundle-cross.mjs +145 -0
  433. package/engines/spec/lib/audit-testcase-gaps.mjs +79 -0
  434. package/engines/spec/lib/audit-testcase-plan-gaps.mjs +131 -0
  435. package/engines/spec/lib/audit-testcase-tc.mjs +182 -0
  436. package/engines/spec/lib/audit-ux-affordance.mjs +269 -0
  437. package/engines/spec/lib/bundle-ir.mjs +360 -0
  438. package/engines/spec/lib/bundle-schema.mjs +199 -0
  439. package/engines/spec/lib/collect-screen-api-intents.mjs +69 -0
  440. package/engines/spec/lib/hydrate-design-api.mjs +58 -0
  441. package/engines/spec/lib/open-qa.mjs +66 -0
  442. package/engines/spec/lib/project-business-layout.mjs +214 -0
  443. package/engines/spec/lib/testcase-matrix-facets.mjs +9 -0
  444. package/engines/spec/merge-bundle.mjs +27 -0
  445. package/engines/spec/normalize-bundle-gen.mjs +69 -0
  446. package/engines/spec/split-all.mjs +78 -0
  447. package/engines/spec/split-bundle.mjs +45 -0
  448. package/engines/template-builder/runner.mjs +96 -0
  449. package/engines/template-builder/scanner.mjs +138 -0
  450. package/engines/testcase/_staging-from-portal/README-STAGING.md +13 -0
  451. package/engines/testcase/_staging-from-portal/runners/README.md +15 -0
  452. package/engines/testcase/_staging-from-portal/runners/generate.mjs +123 -0
  453. package/engines/testcase/_staging-from-portal/runners/lib/e2e-registry.mjs +77 -0
  454. package/engines/testcase/_staging-from-portal/runners/lib/plan.mjs +97 -0
  455. package/engines/testcase/_staging-from-portal/runners/lib/read-testcase.mjs +166 -0
  456. package/engines/testcase/_staging-from-portal/runners/lib/render.mjs +18 -0
  457. package/engines/testcase/_staging-from-portal/runners/lib/semantic-plan.mjs +178 -0
  458. package/engines/testcase/_staging-from-portal/runners/lib/write-files.mjs +42 -0
  459. package/engines/testcase/_staging-from-portal/runners/validate-registry.mjs +75 -0
  460. package/engines/testcase/_staging-from-portal/templates/page.ts.hbs +52 -0
  461. package/engines/testcase/_staging-from-portal/templates/partials/README.md +5 -0
  462. package/engines/testcase/_staging-from-portal/templates/spec.ts.hbs +214 -0
  463. package/engines/testcase/runners/README.md +27 -0
  464. package/engines/testcase/runners/generate-api.mjs +121 -0
  465. package/engines/testcase/runners/generate.mjs +161 -0
  466. package/engines/testcase/runners/lib/api-plan.mjs +64 -0
  467. package/engines/testcase/runners/lib/e2e-registry.mjs +77 -0
  468. package/engines/testcase/runners/lib/plan.mjs +123 -0
  469. package/engines/testcase/runners/lib/read-spec.mjs +37 -0
  470. package/engines/testcase/runners/lib/read-testcase.mjs +179 -0
  471. package/engines/testcase/runners/lib/render.mjs +18 -0
  472. package/engines/testcase/runners/lib/resolve-hub-id.mjs +324 -0
  473. package/engines/testcase/runners/lib/semantic-plan.mjs +178 -0
  474. package/engines/testcase/runners/lib/write-files.mjs +145 -0
  475. package/engines/testcase/runners/validate-registry.mjs +75 -0
  476. package/engines/testcase/templates/api.spec.ts.hbs +40 -0
  477. package/engines/testcase/templates/page.ts.hbs +69 -0
  478. package/engines/testcase/templates/partials/README.md +5 -0
  479. package/engines/testcase/templates/spec.ts.hbs +231 -0
  480. package/harness/agents/claude/rules/claude-flowgrid.mdc +9 -0
  481. package/harness/agents/cursor/rules/cursor-flowgrid.mdc +9 -0
  482. package/harness/agents/gemini_antigravity/rules/antigravity-mcp.mdc +10 -0
  483. package/harness/agents/kiro/rules/kiro-flowgrid.mdc +9 -0
  484. package/harness/be/adapters/dotnet-integration/skills/framework-rules-be/SKILL.md +21 -0
  485. package/harness/be/adapters/fastapi/skills/framework-rules-be/SKILL.md +27 -0
  486. package/harness/be/adapters/laravel/skills/framework-rules-be/SKILL.md +27 -0
  487. package/harness/be/extracts/artifactgraph-hooks-be.md +21 -0
  488. package/harness/be/extracts/risk-classes.md +69 -0
  489. package/harness/be/skills/api/SKILL.md +116 -0
  490. package/harness/be/skills/api-unit/SKILL.md +76 -0
  491. package/harness/be/skills/grill-api/SKILL.md +69 -0
  492. package/harness/be/skills/grill-api-unit/SKILL.md +57 -0
  493. package/harness/common/extracts/artifact-graph.md +23 -0
  494. package/harness/common/extracts/artifactgraph-hooks-core.md +17 -0
  495. package/harness/common/extracts/artifactgraph-phase-hooks.md +106 -0
  496. package/harness/common/extracts/core/agent-discipline.md +8 -0
  497. package/harness/common/extracts/docs-mark-detect.md +48 -0
  498. package/harness/common/extracts/docs-mark.md +62 -0
  499. package/harness/common/extracts/extract-registry.json +29 -0
  500. package/harness/common/extracts/ux-common-patterns.md +172 -0
  501. package/harness/common/rules/artifactgraph.mdc +26 -0
  502. package/harness/common/rules/cross-repo-index.mdc +47 -0
  503. package/harness/common/rules/flowgrid-ux-common.mdc +39 -0
  504. package/harness/common/rules/platform-code-size.mdc +24 -0
  505. package/harness/common/rules/team-flow-harness-state.mdc +12 -0
  506. package/harness/common/skills/business-impact-review/SKILL.md +106 -0
  507. package/harness/common/skills/configure-repo-maps/SKILL.md +58 -0
  508. package/harness/common/skills/docs-mark/SKILL.md +67 -0
  509. package/harness/common/skills/legacy/SKILL.md +29 -0
  510. package/harness/common/skills/ui-proposal/SKILL.md +28 -0
  511. package/harness/docs/extracts/agent-execution-protocol.md +31 -0
  512. package/harness/docs/extracts/architecture-core.md +71 -0
  513. package/harness/docs/extracts/artifactgraph-hooks-docs.md +15 -0
  514. package/harness/docs/extracts/artifactgraph-parity.md +10 -0
  515. package/harness/docs/extracts/business-process-trace.md +66 -0
  516. package/harness/docs/extracts/codegen/readiness.md +8 -0
  517. package/harness/docs/extracts/common-scope.md +65 -0
  518. package/harness/docs/extracts/docs-phase-hooks.md +22 -0
  519. package/harness/docs/extracts/extract-registry.docs.json +45 -0
  520. package/harness/docs/extracts/extract-registry.flowgrid-process.json +12 -0
  521. package/harness/docs/extracts/grill/validation.md +9 -0
  522. package/harness/docs/extracts/grill-docs-reconcile.md +5 -0
  523. package/harness/docs/extracts/qa-inbox.md +36 -0
  524. package/harness/docs/extracts/risk-classes.md +69 -0
  525. package/harness/docs/extracts/spec-core.md +5 -0
  526. package/harness/docs/extracts/spec-requirement.md +5 -0
  527. package/harness/docs/extracts/tpl-adr.md +23 -0
  528. package/harness/docs/extracts/tpl-arc42-chapter.md +29 -0
  529. package/harness/docs/extracts/tpl-cross-cutting.md +24 -0
  530. package/harness/docs/extracts/tpl-deployment.md +23 -0
  531. package/harness/docs/extracts/tpl-module.md +33 -0
  532. package/harness/docs/extracts/update-spec-delta.md +5 -0
  533. package/harness/docs/rules/agent-compliance.mdc +26 -0
  534. package/harness/docs/rules/docs-hub.mdc +54 -0
  535. package/harness/docs/rules/flowgrid-process.mdc +25 -0
  536. package/harness/docs/rules/team-flow-grill.mdc +31 -0
  537. package/harness/docs/rules/team-flow-harness-state.mdc +16 -0
  538. package/harness/docs/rules/team-flow-spec.mdc +36 -0
  539. package/harness/docs/schemas/flowgrid-docs/backend-api.schema.json +175 -0
  540. package/harness/docs/schemas/flowgrid-docs/missing-optional-event.schema.json +39 -0
  541. package/harness/docs/schemas/flowgrid-docs/spec.schema.json +643 -0
  542. package/harness/docs/schemas/flowgrid-docs/testcase.schema.json +29 -0
  543. package/harness/docs/schemas/flowgrid-process/missing-optional-event.schema.json +39 -0
  544. package/harness/docs/skills/adopt/SKILL.md +140 -0
  545. package/harness/docs/skills/api/SKILL.md +40 -0
  546. package/harness/docs/skills/api-integration/SKILL.md +110 -0
  547. package/harness/docs/skills/api-spec/SKILL.md +136 -0
  548. package/harness/docs/skills/api-update/SKILL.md +82 -0
  549. package/harness/docs/skills/architecture/SKILL.md +57 -0
  550. package/harness/docs/skills/architecture-grill/SKILL.md +29 -0
  551. package/harness/docs/skills/background-logic/SKILL.md +100 -0
  552. package/harness/docs/skills/build-templates/SKILL.md +47 -0
  553. package/harness/docs/skills/business-process/SKILL.md +109 -0
  554. package/harness/docs/skills/call-external/SKILL.md +32 -0
  555. package/harness/docs/skills/common/SKILL.md +46 -0
  556. package/harness/docs/skills/common-spec/SKILL.md +55 -0
  557. package/harness/docs/skills/cross-cutting/SKILL.md +33 -0
  558. package/harness/docs/skills/cross-entity-service/SKILL.md +32 -0
  559. package/harness/docs/skills/cross-service/SKILL.md +37 -0
  560. package/harness/docs/skills/db-erd/SKILL.md +29 -0
  561. package/harness/docs/skills/decision/SKILL.md +30 -0
  562. package/harness/docs/skills/deployment/SKILL.md +34 -0
  563. package/harness/docs/skills/docs-hub/SKILL.md +65 -0
  564. package/harness/docs/skills/grill/SKILL.md +46 -0
  565. package/harness/docs/skills/grill-api/SKILL.md +26 -0
  566. package/harness/docs/skills/grill-api-spec/SKILL.md +57 -0
  567. package/harness/docs/skills/grill-bqa/SKILL.md +119 -0
  568. package/harness/docs/skills/grill-common-spec/SKILL.md +43 -0
  569. package/harness/docs/skills/grill-dev/SKILL.md +172 -0
  570. package/harness/docs/skills/grill-docs/SKILL.md +79 -0
  571. package/harness/docs/skills/grill-integration-spec/SKILL.md +51 -0
  572. package/harness/docs/skills/module/SKILL.md +58 -0
  573. package/harness/docs/skills/openapi/SKILL.md +37 -0
  574. package/harness/docs/skills/overview/SKILL.md +42 -0
  575. package/harness/docs/skills/qa-resolve/SKILL.md +91 -0
  576. package/harness/docs/skills/spec/SKILL.md +240 -0
  577. package/harness/docs/skills/surfaces/SKILL.md +52 -0
  578. package/harness/docs/skills/update-spec/SKILL.md +83 -0
  579. package/harness/fe/adapters/dotnet-line/skills/framework-rules/SKILL.md +27 -0
  580. package/harness/fe/adapters/nextjs/skills/framework-rules/SKILL.md +29 -0
  581. package/harness/fe/adapters/nuxt4/skills/framework-rules/SKILL.md +33 -0
  582. package/harness/fe/extracts/artifactgraph-hooks-fe.md +15 -0
  583. package/harness/fe/extracts/risk-classes.md +69 -0
  584. package/harness/fe/rules/cross-repo-index-routing.mdc +24 -0
  585. package/harness/fe/rules/flowgrid-test-optional-accelerators.mdc +21 -0
  586. package/harness/fe/rules/platform-code-size.mdc +43 -0
  587. package/harness/fe/rules/platform-design-vocabulary.mdc +33 -0
  588. package/harness/fe/rules/team-flow-prototype.mdc +32 -0
  589. package/harness/fe/rules/team-flow-unit.mdc +27 -0
  590. package/harness/fe/skills/build-template-code/SKILL.md +42 -0
  591. package/harness/fe/skills/gen-common/SKILL.md +93 -0
  592. package/harness/fe/skills/grill-prototype/SKILL.md +41 -0
  593. package/harness/fe/skills/grill-test/SKILL.md +32 -0
  594. package/harness/fe/skills/grill-unit/SKILL.md +31 -0
  595. package/harness/fe/skills/model/SKILL.md +48 -0
  596. package/harness/fe/skills/prototype/SKILL.md +100 -0
  597. package/harness/fe/skills/test/SKILL.md +37 -0
  598. package/harness/fe/skills/unit/SKILL.md +55 -0
  599. package/harness/fe/skills/wire/SKILL.md +60 -0
  600. package/harness/shared/AGENTS.md +169 -0
  601. package/harness/shared/SSOT_AGENT_PROTOCOL.md +167 -0
  602. package/harness/shared/rules/flowgrid-code-optional-integrations.mdc +53 -0
  603. package/harness/shared/schemas/flowgrid-code/missing-optional-event.schema.json +62 -0
  604. package/harness/tests/extracts/artifactgraph-hooks-test.md +13 -0
  605. package/harness/tests/extracts/plans/readiness.md +14 -0
  606. package/harness/tests/rules/cross-repo-index-routing.mdc +24 -0
  607. package/harness/tests/rules/flowgrid-test-optional-accelerators.mdc +21 -0
  608. package/harness/tests/rules/plans-docs-first.mdc +13 -0
  609. package/harness/tests/skills/grill-testcase/SKILL.md +55 -0
  610. package/harness/tests/skills/scenario/SKILL.md +64 -0
  611. package/harness/tests/skills/test-api/SKILL.md +65 -0
  612. package/harness/tests/skills/testcase/SKILL.md +98 -0
  613. package/harness/tests/templates/SC.example.md +86 -0
  614. package/harness/tests/templates/TC.example-api.yaml +45 -0
  615. package/harness/tests/templates/TC.example.yaml +127 -0
  616. package/lexicon/registry-tags.en.txt +173 -0
  617. package/lexicon/testcase-taxonomy.en.txt +117 -0
  618. package/package.json +98 -0
  619. package/schemas/missing-optional-event.schema.json +37 -0
  620. package/schemas/testcase.schema.json +239 -0
  621. package/scripts/prepare-install.mjs +25 -0
  622. package/stacks/docs.json +21 -0
  623. package/stacks/dotnet-integration.json +66 -0
  624. package/stacks/dotnet-line.json +64 -0
  625. package/stacks/fastapi.json +98 -0
  626. package/stacks/generic.json +11 -0
  627. package/stacks/laravel.json +92 -0
  628. package/stacks/nextjs-nest.json +93 -0
  629. package/stacks/nextjs.json +132 -0
  630. package/stacks/nuxt4-nest.json +123 -0
  631. package/stacks/nuxt4.json +148 -0
  632. package/templates/project-skeleton/architecture/01-introduction/index.md +33 -0
  633. package/templates/project-skeleton/architecture/02-constraints/index.md +34 -0
  634. package/templates/project-skeleton/architecture/03-business-process/FLOW-login.md +101 -0
  635. package/templates/project-skeleton/architecture/03-business-process/FLOW-template.md +149 -0
  636. package/templates/project-skeleton/architecture/04-solution-strategy/index.md +26 -0
  637. package/templates/project-skeleton/architecture/07-deployment/index.md +26 -0
  638. package/templates/project-skeleton/architecture/08-cross-cutting/configuration.md +18 -0
  639. package/templates/project-skeleton/architecture/08-cross-cutting/index.md +27 -0
  640. package/templates/project-skeleton/architecture/08-cross-cutting/observability.md +18 -0
  641. package/templates/project-skeleton/architecture/08-cross-cutting/security.md +18 -0
  642. package/templates/project-skeleton/architecture/09-decisions/ADR-001-arc42-toc.md +31 -0
  643. package/templates/project-skeleton/architecture/09-decisions/index.md +13 -0
  644. package/templates/project-skeleton/architecture/10-quality/index.md +27 -0
  645. package/templates/project-skeleton/architecture/11-risks/index.md +25 -0
  646. package/templates/project-skeleton/architecture/12-glossary/index.md +31 -0
  647. package/templates/project-skeleton/architecture/index.md +1 -0
  648. package/templates/project-skeleton/architecture/model/workspace.dsl +71 -0
  649. package/templates/project-skeleton/index.md +2 -0
  650. package/templates/project-skeleton/overview/.gitkeep +1 -0
  651. package/templates/project-skeleton/overview/index.md +2 -0
  652. package/templates/project-skeleton/qa/README.md +11 -0
  653. package/templates/project-skeleton/qa/open/.gitkeep +0 -0
  654. package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/health.api.yaml +12 -0
  655. package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/index.md +12 -0
  656. package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/empty.ui.yaml +14 -0
  657. package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/index.md +11 -0
  658. package/templates/project-skeleton/surfaces/common/data-model/derived-data.md +26 -0
  659. package/templates/project-skeleton/surfaces/common/data-model/index.md +16 -0
  660. package/templates/project-skeleton/surfaces/common/index.md +32 -0
  661. package/templates/project-skeleton/surfaces/common/md/breadcrumb-flow/common-breadcrumb-flow.md +72 -0
  662. package/templates/project-skeleton/surfaces/common/md/buttons/common-buttons.md +160 -0
  663. package/templates/project-skeleton/surfaces/common/md/confirm-dialog/common-confirm-dialog.md +98 -0
  664. package/templates/project-skeleton/surfaces/common/md/data-table/common-data-table.md +91 -0
  665. package/templates/project-skeleton/surfaces/common/md/delete-flow/common-delete-flow.md +68 -0
  666. package/templates/project-skeleton/surfaces/common/md/feedback/common-feedback.md +140 -0
  667. package/templates/project-skeleton/surfaces/common/md/flat-design/common-flat-design.md +78 -0
  668. package/templates/project-skeleton/surfaces/common/md/form-validation/common-form-validation.md +74 -0
  669. package/templates/project-skeleton/surfaces/common/md/import-csv/common-import-csv.md +89 -0
  670. package/templates/project-skeleton/surfaces/common/md/list-page/common-list-page.md +102 -0
  671. package/templates/project-skeleton/surfaces/common/md/list-toolbar/common-list-toolbar.md +81 -0
  672. package/templates/project-skeleton/surfaces/common/md/navigation/common-navigation.md +70 -0
  673. package/templates/project-skeleton/surfaces/common/md/pagination/common-pagination.md +86 -0
  674. package/templates/project-skeleton/surfaces/common/md/search-filter/common-search-filter.md +96 -0
  675. package/templates/project-skeleton/surfaces/common/md/status-chip/common-status-chip.md +93 -0
  676. package/templates/project-skeleton/surfaces/common/md/table-action-column/common-table-action-column.md +90 -0
  677. package/templates/project-skeleton/surfaces/common/patterns/breadcrumb-flow.md +83 -0
  678. package/templates/project-skeleton/surfaces/common/patterns/delete-flow.md +30 -0
  679. package/templates/project-skeleton/surfaces/common/patterns/ui-spec.md +15 -0
  680. package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/common-breadcrumb-flow.bundle.yaml +60 -0
  681. package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/design.yaml +13 -0
  682. package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/legacy.yaml +11 -0
  683. package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/spec.yaml +31 -0
  684. package/templates/project-skeleton/surfaces/common/yaml/buttons/common-buttons.bundle.yaml +147 -0
  685. package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/design.yaml +13 -0
  686. package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/legacy.yaml +11 -0
  687. package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/spec.yaml +118 -0
  688. package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/common-confirm-dialog.bundle.yaml +89 -0
  689. package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/design.yaml +13 -0
  690. package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/legacy.yaml +11 -0
  691. package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/spec.yaml +60 -0
  692. package/templates/project-skeleton/surfaces/common/yaml/data-table/common-data-table.bundle.yaml +85 -0
  693. package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/design.yaml +13 -0
  694. package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/legacy.yaml +11 -0
  695. package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/spec.yaml +56 -0
  696. package/templates/project-skeleton/surfaces/common/yaml/delete-flow/common-delete-flow.bundle.yaml +59 -0
  697. package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/design.yaml +13 -0
  698. package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/legacy.yaml +11 -0
  699. package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/spec.yaml +30 -0
  700. package/templates/project-skeleton/surfaces/common/yaml/design-system.bundle.yaml +29 -0
  701. package/templates/project-skeleton/surfaces/common/yaml/feedback/common-feedback.bundle.yaml +126 -0
  702. package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/design.yaml +13 -0
  703. package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/legacy.yaml +11 -0
  704. package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/spec.yaml +97 -0
  705. package/templates/project-skeleton/surfaces/common/yaml/flat-design/common-flat-design.bundle.yaml +77 -0
  706. package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/design.yaml +13 -0
  707. package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/legacy.yaml +11 -0
  708. package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/spec.yaml +48 -0
  709. package/templates/project-skeleton/surfaces/common/yaml/form-validation/common-form-validation.bundle.yaml +66 -0
  710. package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/design.yaml +13 -0
  711. package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/legacy.yaml +11 -0
  712. package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/spec.yaml +37 -0
  713. package/templates/project-skeleton/surfaces/common/yaml/import-csv/common-import-csv.bundle.yaml +74 -0
  714. package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/design.yaml +13 -0
  715. package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/legacy.yaml +11 -0
  716. package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/spec.yaml +45 -0
  717. package/templates/project-skeleton/surfaces/common/yaml/list-page/common-list-page.bundle.yaml +90 -0
  718. package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/design.yaml +13 -0
  719. package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/legacy.yaml +14 -0
  720. package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/spec.yaml +58 -0
  721. package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/common-list-toolbar.bundle.yaml +86 -0
  722. package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/design.yaml +13 -0
  723. package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/legacy.yaml +12 -0
  724. package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/spec.yaml +56 -0
  725. package/templates/project-skeleton/surfaces/common/yaml/navigation/common-navigation.bundle.yaml +68 -0
  726. package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/design.yaml +13 -0
  727. package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/legacy.yaml +11 -0
  728. package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/spec.yaml +39 -0
  729. package/templates/project-skeleton/surfaces/common/yaml/pagination/common-pagination.bundle.yaml +84 -0
  730. package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/design.yaml +13 -0
  731. package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/legacy.yaml +13 -0
  732. package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/spec.yaml +53 -0
  733. package/templates/project-skeleton/surfaces/common/yaml/search-filter/common-search-filter.bundle.yaml +88 -0
  734. package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/design.yaml +13 -0
  735. package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/legacy.yaml +11 -0
  736. package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/spec.yaml +59 -0
  737. package/templates/project-skeleton/surfaces/common/yaml/status-chip/common-status-chip.bundle.yaml +89 -0
  738. package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/design.yaml +13 -0
  739. package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/legacy.yaml +11 -0
  740. package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/spec.yaml +60 -0
  741. package/templates/project-skeleton/surfaces/common/yaml/table-action-column/common-table-action-column.bundle.yaml +81 -0
  742. package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/design.yaml +13 -0
  743. package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/legacy.yaml +11 -0
  744. package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/spec.yaml +52 -0
  745. package/templates/project-skeleton/surfaces/index.md +1 -0
  746. package/templates/schemas/backend-api.schema.json +174 -0
  747. package/templates/schemas/legacy-repos.schema.json +24 -0
  748. package/templates/schemas/platform-repos.schema.json +29 -0
  749. package/templates/schemas/spec.schema.json +718 -0
  750. package/templates/schemas/testcase.schema.json +28 -0
  751. package/templates/shared/AUTHORING-COMMON.md +109 -0
  752. package/templates/shared/api-contract-test.yaml +33 -0
  753. package/templates/shared/backend-api-integration.yaml +152 -0
  754. package/templates/shared/backend-api.bundle.yaml +177 -0
  755. package/templates/shared/backend-api.yaml +188 -0
  756. package/templates/shared/breadcrumb-flow.ejs +45 -0
  757. package/templates/shared/bundle-authoring.md +288 -0
  758. package/templates/shared/clients-line.yaml +18 -0
  759. package/templates/shared/default-layout.ejs +234 -0
  760. package/templates/shared/design-spec.yaml +85 -0
  761. package/templates/shared/entity-delta.example.yaml +45 -0
  762. package/templates/shared/feature.bundle.yaml +575 -0
  763. package/templates/shared/integration-adapter.bundle.yaml +77 -0
  764. package/templates/shared/integration-spec.yaml +37 -0
  765. package/templates/shared/ir-design.yaml +34 -0
  766. package/templates/shared/ir-legacy.yaml +12 -0
  767. package/templates/shared/ir-spec.yaml +18 -0
  768. package/templates/shared/line-client.bundle.yaml +65 -0
  769. package/templates/shared/mock-data.yaml +22 -0
  770. package/templates/shared/openapi.yaml +144 -0
  771. package/templates/shared/patterns/.gitkeep +0 -0
  772. package/templates/shared/patterns/admin-crud.pattern.yaml +37 -0
  773. package/templates/shared/qa-item.yaml +15 -0
  774. package/templates/shared/spec.yaml +162 -0
  775. package/templates/shared/testcase.yaml +2 -0
  776. package/templates/tests-skeleton/cases/README.md +5 -0
  777. package/templates/tests-skeleton/catalog/locale.yaml +7 -0
  778. package/templates/tests-skeleton/index.md +7 -0
  779. package/templates/tests-skeleton/scenarios/README.md +3 -0
@@ -0,0 +1,21 @@
1
+ # ArtifactGraph — backend hooks
2
+
3
+ - Resolve endpoint, DTO, API, data, and business-rule tags from the current BE
4
+ repo's local index only.
5
+ - **Before creating a new BE spec**, run `artifactgraph_api_reuse_check` to detect
6
+ existing routes across product surfaces. If a match is found without `#reuse-api`,
7
+ emit `DUPLICATE_API_ROUTE` warning and ask member A/B/C before proceeding.
8
+ - Use `#reuse-api` tag on specs that intentionally reuse an existing common/sibling
9
+ route. Use `#call-external` for third-party integrations (OAuth, SMS, Payment, Webhook).
10
+ Use `#cross-service` / `#cross-entity-service` for multi-aggregate orchestration.
11
+ Use `#derived-data` for computed fields not stored on the entity.
12
+ - Run BE dry generation before write generation when both keys exist.
13
+ - **Code size discipline:** Enforce `platform-code-size.mdc` (~200 lines/file, ~20 lines/func). Automatically split services, DTOs, and handlers during bộ code generation.
14
+ - Full product registry remains in docs; ArtifactGraph does not infer or follow
15
+ a docs checkout.
16
+ - Architecture ID / C4 lookups go to bộ docs (`FLOWGRID_DOCS_ROOT`). Symbol /
17
+ call-graph lookups go to the target repo's `codegraph-<key>` MCP — Platform
18
+ DNA owns that auto-wire, not ArtifactGraph.
19
+ - Promote canonical registry changes in docs; keep only BE-local
20
+ allowlists/templates in the BE repo.
21
+ - Leave `/spec`, `/api-spec`, `/unit`, and `/test` phase skills product-owned.
@@ -0,0 +1,69 @@
1
+ # Risk classes checklist
2
+
3
+ Use with [SKILL.md](SKILL.md). Tick each class against the vertical + horizontal maps.
4
+
5
+ ## AuthZ / IDOR
6
+
7
+ - [ ] Resource by id checked against current tenant (`storeId` / `hotel_id` from trusted source)
8
+ - [ ] Body/query `store_id` cannot switch store context for another hotel
9
+ - [ ] Admin/batch skip of ownership is intentional and not reachable from store UI JWT
10
+ - [ ] Report/filter/list-by-ids rejects foreign ids (404), not only empty data
11
+
12
+ ## Request bag / contract
13
+
14
+ - [ ] ID lists use **named keys** (`ids`, `arrId`, `survey_ids`, `scenarioList`) — not bare `[1,2]` → `0=1`
15
+ - [ ] `$request->all()` / `query()` not treated as “array of business ids”
16
+ - [ ] Middleware `merge` fields (`store_id`, `storeId`, …) stripped or unused when parsing id lists
17
+ - [ ] Allowlist vs denylist clear for context keys vs business keys
18
+
19
+ **Context denylist (typical after ScenarioAuthentication):**
20
+ `store_id`, `storeId`, `service_id`, `serviceId`, `m_service_id`, `isAdmin`, `apiKey`, pagination/date noise if normalizing “all numbers”.
21
+
22
+ **ID allowlist (prefer):**
23
+ `ids`, `arrId`, `survey_ids`, `scenario_ids`, `scenarioList`
24
+
25
+ ## Trust boundary / proxy
26
+
27
+ - [ ] Upstream 404 stays 404 (or explicit not-found JSON), not 200 + empty Resource
28
+ - [ ] FE `throwError` / `createError` aligned with real HTTP status
29
+ - [ ] JWT/`attributes` preferred over client-supplied tenant ids
30
+
31
+ ## Over-broad parse
32
+
33
+ - [ ] No “every positive int in the array is an id” unless array is already allowlisted
34
+ - [ ] CSV/string explode paths do not swallow unrelated query params
35
+
36
+ ## Null / empty
37
+
38
+ - [ ] Missing model → 404 vs empty collection semantics documented
39
+ - [ ] `whereIn([], …)` / empty id list behavior safe (no accidental match-all)
40
+ - [ ] Optional relations null-safe before property access
41
+
42
+ ## Error collapsing
43
+
44
+ - [ ] Distinct failures keep distinct outcomes (authZ 404 ≠ relation-exists ≠ server error)
45
+ - [ ] Controller does not always return one business message when helper returns `true` for multiple reasons
46
+
47
+ ## Hardcode / magic
48
+
49
+ - [ ] No production hardcode of hotel/store/survey/scenario ids
50
+ - [ ] Magic status/codes named or constanted when added
51
+
52
+ ## Async / Jobs / Events
53
+
54
+ - [ ] Job payload carries needed tenant/service context (or reloads safely)
55
+ - [ ] Job path does not assume HTTP middleware ran (`merge`, `attributes->storeId`)
56
+ - [ ] Retries are idempotent for writes/deletes
57
+ - [ ] Failed pre-check cannot leave partial side effects
58
+ - [ ] `dispatch` callers listed in horizontal table
59
+
60
+ ## Business rules
61
+
62
+ - [ ] Relation/existence gates: false positive and false negative both considered
63
+ - [ ] Delete/update constraints still correct after ownership changes
64
+ - [ ] Soft-deleted rows excluded/included as product intends
65
+
66
+ ## Data / transactions
67
+
68
+ - [ ] Multi-step delete/update atomic where required
69
+ - [ ] Soft delete vs force delete consistency with “exists” checks
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: api
3
+ description: /api — backend API generation through bộ code BE adapters.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # /api — Backend API
8
+
9
+ **Owner:** bộ code (`--type=be`)
10
+ **Adapters:** `fastapi` · `laravel` · `dotnet-integration` · `nestjs`
11
+
12
+ ## Generate
13
+
14
+ ```bash
15
+ npm run codegen:api:dry -- --spec /path/to/api/01/01-backend-spec.yaml
16
+ npm run codegen:api -- --spec /path/to/api/01/01-backend-spec.yaml
17
+ npm run codegen:api -- --spec /path/to/api/01/01-backend-spec.yaml --force
18
+ npm run codegen:api:unit:dry -- --spec /path/to/api/01/01-backend-spec.yaml
19
+
20
+ # Fallback direct CLI if wrappers missing:
21
+ flowgrid api-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
22
+ flowgrid api-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
23
+ flowgrid api-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml --force
24
+ flowgrid api-unit-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
25
+
26
+ flowgrid api-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
27
+ flowgrid api-gen --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
28
+
29
+ flowgrid api-unit-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
30
+ flowgrid api-registry --adapter=laravel
31
+ flowgrid api-unit-registry --adapter=laravel
32
+
33
+ # Laravel adapter (PHP): use `flowgrid api-gen` / `flowgrid api-unit-gen` from repo root.
34
+
35
+ flowgrid api-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
36
+ flowgrid api-unit-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
37
+ flowgrid api-registry --adapter=nestjs
38
+ ```
39
+
40
+ BE never reads `ir/design.yaml` or `ir/spec.yaml`. `--id CMP-*` globs every `01-backend-spec.yaml` under that module (`…/api/<seq>/`) and generates them in order (stop on first failure). `--spec <dir>` does the same.
41
+
42
+ FE models (not this skill): `flowgrid contract-gen:dry -- --spec /path/to/ir/design.yaml` on the **FE** lane.
43
+
44
+ ## Docs Root Resolution
45
+
46
+ 1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
47
+ pointer for locating `01-backend-spec.yaml`.
48
+ 2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
49
+ configuration (`platform-dna`) to resolve the docs hub path.
50
+ Platform DNA discovery is slower and more error-prone, so always prefer
51
+ an explicit `FLOWGRID_DOCS_ROOT` when available.
52
+
53
+ ## Route
54
+
55
+ Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); IR via explicit `--spec` /
56
+ `FLOWGRID_DOCS_ROOT` when configured — never ArtifactGraph as the docs
57
+ bridge. This-repo conventions → local CodeGraph if present; other repo X →
58
+ only Platform DNA-wired `codegraph-<key>`. ArtifactGraph = local allowlist
59
+ hints only.
60
+
61
+ The selected backend repository is the only write target. Never infer a sibling
62
+ docs hub or frontend checkout. Never Write `ir/*` or `*.bundle.yaml` on the docs hub;
63
+ missing `codegen.profile` on **01-backend-spec.yaml** → STOP, hand off to docs `/grill-api-spec`.
64
+
65
+ Laravel supports the detected `modules-v1` profile only. FastAPI requires an
66
+ explicit Python runtime or target virtual environment.
67
+
68
+ `dotnet-integration` requires the .NET 8 SDK (`FLOWGRID_DOTNET`, then
69
+ `dotnet`) and supports the pilot-specific `mes-downtime` profile. Its API pass
70
+ already emits test source; it has no separate API unit-generation engine.
71
+
72
+ FastAPI generates all nested module entities, with flat `entities` and legacy
73
+ `codegen.entity` compatibility. Code and unit manifests retain SHA-256
74
+ ownership: identical and unmodified managed files are safe, while unmanaged or
75
+ locally modified files block the whole batch. Inspect dry-run statuses before
76
+ using `--force`, which explicitly overwrites conflicts. Ambiguous global
77
+ endpoints in a multi-entity spec are not shared across entities; the generator
78
+ warns and uses entity-local CRUD defaults.
79
+
80
+ ## Review requirements
81
+
82
+ - Replace generated auth/authorization placeholders with project policy.
83
+ - Verify validation, resources/presenters, transactions and error mapping.
84
+ - Run backend tests and `/business-impact-review` for risky changes.
85
+
86
+ ## Accelerators (optional)
87
+
88
+ ```text
89
+ if ArtifactGraph available: allowlist/recommend API generation
90
+ else: execute bộ code adapter directly
91
+
92
+ if CodeGraph available for this checkout (`codegraph-<key>`): inspect existing module conventions/callers
93
+ else: targeted repository search — never a workspace-parent graph
94
+ else: targeted repository search and reads
95
+ ```
96
+
97
+ Missing accelerators never block API generation. Complete each documented
98
+ direct or targeted-local fallback first, then follow
99
+ `.cursor/rules/flowgrid-code-optional-integrations.mdc` for deduplicated
100
+ once-per-run-and-optional telemetry with observed metrics only.
101
+
102
+ ## Translation Rule (i18n)
103
+ Always wrap static text with native framework i18n helpers (e.g. `__('key')`, `_localizer["key"]`, `i18n.t('key')`).
104
+ - **[MANDATORY]** Read the `i18n` block from `ir/design.yaml`.
105
+ - **[MANDATORY]** Automatically generate or update the corresponding translation locale files (`.json` for NodeJS/PHP/Python, or `.resx` for .NET).
106
+ - **[STRICTLY FORBIDDEN]** Do NOT return unlocalized static raw error messages without an i18n wrapper.
107
+
108
+ ## Profile Handling Behavior
109
+ **[CRITICAL INTERLOCK]** AI MUST NOT rewrite code from scratch. The CLI command `flowgrid api-gen` (Script Engine) MUST run first to emit the foundation scaffolding. Depending on `gen.codegen.profile`, AI reads the scaffolded base and enriches the targeted logic:
110
+ - **`profile: auth`**: Inject authentication logic (Login, JWT token, bcrypt password hashing).
111
+ - **`profile: select-item`**: Streamline into a lightweight selection list returning `id`, `name`/`label` for dropdown components.
112
+ - **`profile: setting`**: Adapt scaffold to read/write static Key-Value configurations or JSON store.
113
+ - **`profile: free`**: Implement domain-specific requirements according to the spec's `summary` / `purpose`.
114
+ - **`profile: export`**: Implement large-dataset retrieval and file export generation (CSV/Excel).
115
+ - **`profile: import`**: Implement file upload parsing, bulk validation, and batch insert.
116
+ - **`profile: dashboard-stats`**: Implement aggregation queries, grouping data to return statistical metrics.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: api-unit
3
+ description: /unit — backend API unit test generation via bộ code BE adapters.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # /unit — Backend API Unit Tests
8
+
9
+ **Owner:** bộ code (`--type=be`)
10
+ **Adapters:** `fastapi` · `laravel` · `nestjs`
11
+
12
+ > `dotnet-integration` emits test source during its primary API pass; it has no
13
+ > separate unit-generation engine.
14
+
15
+ ## Generate
16
+
17
+ ```bash
18
+ npm run codegen:api:unit:dry -- --spec /path/to/api/01/01-backend-spec.yaml
19
+ npm run codegen:api:unit -- --spec /path/to/api/01/01-backend-spec.yaml
20
+
21
+ # Fallback direct CLI if wrappers missing:
22
+ flowgrid api-unit-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
23
+ flowgrid api-unit-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
24
+
25
+ flowgrid api-unit-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
26
+ flowgrid api-unit-gen --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
27
+ flowgrid api-unit-registry --adapter=laravel
28
+
29
+ flowgrid api-unit-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
30
+ flowgrid api-unit-gen --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
31
+ flowgrid api-unit-registry --adapter=nestjs
32
+ ```
33
+
34
+ You MUST run the codegen script (`npm run codegen:api:unit` or
35
+ `flowgrid api-unit-gen`) FIRST to generate the test skeleton from the backend
36
+ spec, before attempting to fill in gaps or add missing tests manually.
37
+
38
+ Requires a prior `01-backend-spec.yaml` under the docs hub API folder.
39
+
40
+ ## Docs Root Resolution
41
+
42
+ 1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
43
+ registry/IR pointer for locating `01-backend-spec.yaml`.
44
+ 2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
45
+ configuration (`platform-dna`) to resolve the docs hub path.
46
+ Platform DNA discovery is slower and more error-prone, so always prefer
47
+ an explicit `FLOWGRID_DOCS_ROOT` when available.
48
+
49
+ ## Route
50
+
51
+ Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); spec via explicit `--spec` /
52
+ `FLOWGRID_DOCS_ROOT` when configured — never ArtifactGraph as the docs
53
+ bridge. This-repo conventions → local CodeGraph if present; other repo X →
54
+ only Platform DNA-wired `codegraph-<key>`. ArtifactGraph = local allowlist
55
+ hints only.
56
+
57
+ ## Review requirements
58
+
59
+ - Verify generated tests cover all endpoints in `01-backend-spec.yaml`.
60
+ - Replace generated auth/mock placeholders with project-specific fixtures.
61
+ - Run backend test suite to confirm generated tests pass.
62
+
63
+ ## Accelerators (optional)
64
+
65
+ ```text
66
+ if ArtifactGraph available: allowlist/recommend API unit generation
67
+ else: execute bộ code adapter directly
68
+
69
+ if CodeGraph available for this checkout (`codegraph-<key>`): inspect existing test conventions
70
+ else: targeted repository search — never a workspace-parent graph
71
+ ```
72
+
73
+ Missing accelerators never block unit generation. Complete each documented
74
+ direct or targeted-local fallback first, then follow
75
+ `.cursor/rules/flowgrid-code-optional-integrations.mdc` for deduplicated
76
+ once-per-run-and-optional telemetry with observed metrics only.
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: grill-api
3
+ description: /grill-api — audit generated FastAPI/Laravel/Nest API before integration.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # /grill-api
8
+
9
+ Run after `npm run codegen:api:dry` / `flowgrid api-gen:dry` and after implementation.
10
+
11
+ **Owner:** bộ code (`--type=be`). Docs hub is **read-only**.
12
+
13
+ ## Target / ID Resolution Rule
14
+
15
+ - User prompt MAY specify a function ID, API slug, or short name (e.g. `API-AUTH-001`, `login`, `CMP-ADM-009`).
16
+ - Agent MUST resolve **`…/api/<seq>/01-backend-spec.yaml`** via `FLOWGRID_DOCS_ROOT` or `flowgrid_docs_route` (screen leaf `CMP-*/<NN…>/api/<seq>/`, or `common/yaml/<slug>/`, or `integrations/…/api/<seq>/`).
17
+ - **Read the entire `01-backend-spec.yaml`**. Do **not** use `ir/design.yaml` or `ir/spec.yaml` as BE contract.
18
+ - Compare generated routes/code against that 01 file. Missing 01 → STOP, hand off to docs `/grill-api-spec`.
19
+ - Do NOT demand full filesystem paths from the user if an ID is given.
20
+
21
+ ## Docs Root Resolution
22
+
23
+ 1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
24
+ pointer for locating `01-backend-spec.yaml`.
25
+ 2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
26
+ configuration (`platform-dna`) to resolve the docs hub path.
27
+ Platform DNA discovery is slower and more error-prone, so always prefer
28
+ an explicit `FLOWGRID_DOCS_ROOT` when available.
29
+
30
+ Check:
31
+
32
+ - Routes/methods/statuses match `01-backend-spec.yaml` (action-suffix paths).
33
+ - AuthZ and tenant scope use trusted context.
34
+ - Validation does not accept request-bag noise.
35
+ - Null/empty/error semantics remain distinct.
36
+ - Writes are transaction-safe; async retries are idempotent.
37
+ - Generated placeholders are replaced before ship.
38
+
39
+ ## Accelerators (optional)
40
+
41
+ ```text
42
+ if ArtifactGraph available: local contract/tag/parity hints only
43
+ else: scoped contract-to-code comparison
44
+
45
+ if codegraph-<repo-key> for this checkout: callers/routes/jobs/listeners
46
+ else: targeted repository search
47
+
48
+ architecture IDs / C4 → bộ docs (FLOWGRID_DOCS_ROOT), never CodeGraph
49
+ ```
50
+
51
+ Missing accelerators never block the grill. Complete each scoped model or
52
+ targeted-local fallback first, then follow
53
+ the remainder of this skill.
54
+
55
+ ## Translation Rule (i18n)
56
+ Always wrap static text with native framework i18n helpers (e.g. `__('key')`, `_localizer["key"]`, `i18n.t('key')`).
57
+ - **[MANDATORY]** Read the `i18n` block from `ir/design.yaml`.
58
+ - **[MANDATORY]** Automatically generate or update the corresponding translation locale files (`.json` for NodeJS/PHP/Python, or `.resx` for .NET).
59
+ - **[STRICTLY FORBIDDEN]** Do NOT return unlocalized static raw error messages without an i18n wrapper.
60
+
61
+ ## Profile Handling Behavior
62
+ **[CRITICAL INTERLOCK]** AI MUST NOT rewrite code from scratch. The CLI command `flowgrid api-gen` (Script Engine) MUST run first to emit the foundation scaffolding. Depending on `gen.codegen.profile`, AI reads the scaffolded base and enriches the targeted logic:
63
+ - **`profile: auth`**: Inject authentication logic (Login, JWT token, bcrypt password hashing).
64
+ - **`profile: select-item`**: Streamline into a lightweight selection list returning `id`, `name`/`label` for dropdown components.
65
+ - **`profile: setting`**: Adapt scaffold to read/write static Key-Value configurations or JSON store.
66
+ - **`profile: free`**: Implement domain-specific requirements according to the spec's `summary` / `purpose`.
67
+ - **`profile: export`**: Implement large-dataset retrieval and file export generation (CSV/Excel).
68
+ - **`profile: import`**: Implement file upload parsing, bulk validation, and batch insert.
69
+ - **`profile: dashboard-stats`**: Implement aggregation queries, grouping data to return statistical metrics.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: grill-api-unit
3
+ description: /grill-unit — BE grill gate before /unit API test generation.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # /grill-unit
8
+
9
+ **Owner:** bộ code · audit gate before BE unit test generation.
10
+
11
+ Run after `npm run codegen:api:unit:dry` / `flowgrid api-unit-gen:dry` and
12
+ before committing generated test code.
13
+
14
+ ## Target / ID Resolution Rule
15
+
16
+ - User prompt MAY specify a function ID, API slug, or short name (e.g. `API-AUTH-001`, `login`, `CMP-ADM-009`).
17
+ - Agent MUST resolve **`…/api/<seq>/01-backend-spec.yaml`** via `FLOWGRID_DOCS_ROOT` or `flowgrid_docs_route`.
18
+ - **Read the entire `01-backend-spec.yaml`**. Do **not** use `ir/design.yaml` or `ir/spec.yaml` as BE contract.
19
+ - Compare generated unit tests against that 01 file. Missing 01 → STOP, hand off to docs `/grill-api-spec`.
20
+ - Do NOT demand full filesystem paths from the user if an ID is given.
21
+
22
+ ## Docs Root Resolution
23
+
24
+ 1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
25
+ pointer for locating `01-backend-spec.yaml`.
26
+ 2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
27
+ configuration (`platform-dna`) to resolve the docs hub path.
28
+ Platform DNA discovery is slower and more error-prone, so always prefer
29
+ an explicit `FLOWGRID_DOCS_ROOT` when available.
30
+
31
+ ## Check
32
+
33
+ ```text
34
+ if local ArtifactGraph available: check the BE repo's allowlist for apiUnitGenDry
35
+ else: npm run codegen:api:unit:dry -- --spec …
36
+ ```
37
+
38
+ - Generated test files match endpoints in `01-backend-spec.yaml`.
39
+ - Auth/tenant fixtures use trusted project context, not generated stubs.
40
+ - Mock dependencies are properly scoped and isolated.
41
+ - Edge cases (null/empty/error) have distinct assertions.
42
+ - Async/retry tests are idempotent.
43
+
44
+ ## Accelerators (optional)
45
+
46
+ ```text
47
+ if ArtifactGraph available: local contract/tag/parity hints only
48
+ else: scoped spec-to-test comparison
49
+
50
+ if codegraph-<repo-key> for this checkout: callers/routes/existing test patterns
51
+ else: targeted repository search
52
+
53
+ architecture IDs / C4 → bộ docs (FLOWGRID_DOCS_ROOT), never CodeGraph
54
+ ```
55
+
56
+ Missing accelerators never block the grill. Complete each scoped model or
57
+ targeted-local fallback first, then follow the remainder of this skill.
@@ -0,0 +1,23 @@
1
+ # Artifact graph — load per phase
2
+
3
+ Extract bundles: `.cursor/extracts/extract-registry.json`
4
+
5
+ Path root: `base-docs Code / `--id``
6
+
7
+ | Phase | Primary artifacts | Do not load |
8
+ |-------|-------------------|-------------|
9
+ | legacy-spec | write `base-docs/surfaces/**/code/**`, Code `*.bundle.yaml` | gen, ir/spec, codegen/* |
10
+ | /spec | `*.bundle.yaml` (spec + design), template | legacy/* |
11
+ | bqa-grill | `ir/design.yaml`, `ir/legacy.yaml` ui slice, common bundles, `review` | ir/spec gen fields, legacy source |
12
+ | dev-grill | `ir/design`, `ir/legacy`, write `gen` / ir/spec | legacy source, models/ |
13
+ | grill-with-docs | bundle + ir/* reconcile | legacy source, archaeology |
14
+ | portal:gen | **`ir/spec.yaml`** | bundle, legacy, design |
15
+ | docs:render | **`*.bundle.yaml`** | — |
16
+ | prototype | **`ir/spec.yaml`** + HANDOFF | legacy IR |
17
+ | /test | `*.test.yaml`, ir/spec testIds | legacy-api-migration |
18
+ | /unit | ir/spec + `{function}/generated/unit.manifest.json` | legacy/* |
19
+ | /model | ir/spec entities + project-config | trace full |
20
+ | /grill-api | legacy/api-migration | models/ |
21
+ | update-spec-legacy | trace slice + bundle.legacy patch | macro legacy read |
22
+
23
+ Generated output: `{function}/generated/` (HANDOFF, manifests) — cạnh bundle, không trong `ir/`.
@@ -0,0 +1,17 @@
1
+ # ArtifactGraph — core hooks
2
+
3
+ 1. Check local status/index before artifact work.
4
+ 2. Analyze or grill locally; ask the member to confirm ambiguous decisions.
5
+ 3. **API reuse check (BE/docs):** Run `artifactgraph_api_reuse_check` before creating
6
+ a new spec. If `found: true` → add `#reuse-api` to the spec (agent applies tag, no gate).
7
+ `grill_check` also detects duplicates and suggests `#reuse-api` via `draftTags`.
8
+ 4. Show `askUser[]` — A/B/C for **grill** and **parity-drift** only.
9
+ `context-orphan` = warn only, not a gate.
10
+ 5. Run only allowlisted generation commands.
11
+ 6. Send only unresolved `cloudPromptSlice` content to cloud models.
12
+ 7. Promote canonical registries in the docs repo. In FE/BE/tests, promote only
13
+ repo-local allowlists/templates.
14
+ 8. Rebuild and remember confirmed decisions.
15
+
16
+ The docs repo is registry SSOT. ArtifactGraph never owns registry payloads and
17
+ never follows another toolkit's cross-repo pointer.
@@ -0,0 +1,106 @@
1
+ # Artifactgraph — phase hooks (local-first DSL)
2
+
3
+ > Used by skill `/artifactgraph` and phase skills. Grill **confirm = local + member**, not cloud.
4
+ > **SSOT:** product repo `registries/*.json` + `codegen/templates` (+ skills/docs). MCP only **indexes** + runs **allowlisted** gen.
5
+
6
+ ## DSL loop (every lane: FE · BE · unit · e2e · docs)
7
+
8
+ ```text
9
+ (1) Read tags + MCP index (rebuild from product registries)
10
+ (2) artifactgraph_api_reuse_check — trước khi tạo spec mới BE/docs (check trùng route)
11
+ (3) artifactgraph_gen <commandKey> — local template/script
12
+ (4) Still #needs-* / HANDOFF missing mẫu?
13
+ → member A/B/C and/or cloudPromptSlice (thiếu only)
14
+ (5) Member OK → promote registry + hbs **in product repo** (not inside MCP)
15
+ (6) artifactgraph_rebuild + remember → lần sau reuse tag + gen
16
+ ```
17
+
18
+ | Lane | Local gen keys (`artifactgraph.json`) | After review promote (product git) |
19
+ |------|----------------------------------------|------------------------------------|
20
+ | **docs** (spec phase) | `specSplit`, `specSplitAll`, `docsRender`, `docsRenderCommon` | Tag chuẩn trên bundle/`ir` — reuse FE/unit/e2e |
21
+ | **fe** | `genDry`, `gen` | `design` / `common` registry + Mo* templates + `platform-code-size.mdc` |
22
+ | **be** (api repo) | `genDry`, `gen` (stack laravel/…) | BE codegen registry + templates + `platform-code-size.mdc` |
23
+ | **unit** | `unitGenDry`, `unitGen` | `unit-test` registry |
24
+ | **e2e** | `testcaseGenDry`, `testcaseGen` | `e2e-test` registry (`{spec}` = testcase path) |
25
+ | **lifecycle** | `lifecycleSync` | `page-lifecycle` registry |
26
+
27
+ Cloud **không** viết registry. Promote = docs `DESIGN-REGISTRY-PROMOTION` / `UNIT-REGISTRY-PROMOTION` / e2e docs + skill `/docs-mark`.
28
+
29
+ ## Shared protocol (every artifact skill)
30
+
31
+ 1. Run `artifactgraph init` once in the current product repo, then use
32
+ `artifactgraph_status`; project-local MCP is the default.
33
+ 2. **Local:** `artifactgraph_analyze` or `artifactgraph_grill_check`; after legacy also **`artifactgraph_parity_check`**.
34
+ 3. **API reuse check (BE/docs):** Run `artifactgraph_api_reuse_check` before creating
35
+ a new spec.
36
+ - `found: true` → route exists → add `#reuse-api` to the spec (no gate, agent applies tag)
37
+ - `found: false` → safe to proceed with new spec
38
+ - `grill_check` also detects duplicates via indexed routes → suggests `#reuse-api` in `draftTags`
39
+ 5. On confirm: `artifactgraph_remember` (`kind=grill|parity`).
40
+ 6. Gen only via `artifactgraph_gen` allowlisted keys; else documented `pnpm` fallback.
41
+ 7. Still missing implementation → **`cloudPromptSlice` only** — never full registries/templates.
42
+ 8. After implement: **promote in product repo** → `registryValidate` / lane registry cmds → `artifactgraph_rebuild`.
43
+
44
+ ## Per skill
45
+
46
+ ### `/spec`
47
+
48
+ - Local: gắn tag chuẩn từ index (shell/common/unit/e2e đã học); `specSplit` / `docsRender` via MCP.
49
+ - Confirm blocks when `specOrigin` is **not** legacy.
50
+ - Cloud: only unknown domain rules in `cloudPromptSlice`.
51
+ - **Không** `portal:gen` app ở phase này (trừ khi skill nói rõ dry gate).
52
+
53
+ ### `/api-spec` · `/api-integration-spec`
54
+
55
+ - **Pre-flight:** `artifactgraph_api_reuse_check({ path, method })` trước khi viết spec.
56
+ - `found: true` → add `#reuse-api` vào spec; không cần tạo spec mới.
57
+ - `found: false` → proceed spec creation.
58
+ - Local: `artifactgraph_grill_check` sau khi draft spec — phát hiện `duplicate-api-route` và suggest `#reuse-api` qua `draftTags`.
59
+ - Cloud: only domain-specific API contract rules.
60
+
61
+ ### `/dev-grill-docs` · `/bqa-grill-docs` · `/grill-with-docs`
62
+
63
+ - **Pre-flight:** `artifactgraph_grill_check` — bao gồm `duplicate-api-route` detection.
64
+ - Local: trace + bundle; **`parity_check`**.
65
+ - Cloud: only ambiguous Mo* naming with no registry alias.
66
+
67
+ ### `/update-spec` · `/update-api-spec`
68
+
69
+ - **Pre-flight:** `artifactgraph_api_reuse_check` nếu spec có API routes mới.
70
+ - Local: `artifactgraph_analyze` sau khi sửa — phát hiện gaps mới phát sinh.
71
+
72
+ ### `/prototype` · `/prototype-handoff`
73
+
74
+ - Local: `artifactgraph_gen` `gen`; Mo* already in design registry → wire only.
75
+ - Cloud: **only** `#needs-component` / `#needs-ui` slots with no file.
76
+
77
+ ### `/unit`
78
+
79
+ - Local: `artifactgraph_suggest_tags` (lane `be` / `fe`) + `artifactgraph_gen` `unitGen`.
80
+
81
+ ### `/test`
82
+
83
+ - Local: taxonomy testcase (`artifactgraph/lexicon/testcase-taxonomy.en.txt`) + `artifactgraph_gen` `testcaseGen`.
84
+
85
+ ### `/docs-mark`
86
+
87
+ - Local: `suggest_tags` → update spec/registry → `artifactgraph_rebuild`.
88
+
89
+ ## Summary table
90
+
91
+ | Skill | Local MCP pre-flight | Allowed gen command | Cloud prompt rule |
92
+ |---|---|---|---|
93
+ | `/spec` | `analyze`, `api_reuse_check` | `specSplit`, `docsRender` | `cloudPromptSlice` only |
94
+ | `/api-spec` | `api_reuse_check`, `grill_check` | `specSplit` | Domain rules only |
95
+ | `/grill-*` | `grill_check`, `parity_check` | — | Ambiguous Mo* names only |
96
+ | `/prototype` | `analyze` | `genDry`, `gen` | `#needs-component` slots only |
97
+ | `/unit` | `suggest_tags` | `unitGenDry`, `unitGen` | Unit pattern gaps only |
98
+ | `/test` | `suggest_tags` | `testcaseGenDry`, `testcaseGen` | Scenario logic only |
99
+ | `/docs-mark` | `suggest_tags`, `rebuild` | — | None |
100
+
101
+ ## Checklist for promote
102
+
103
+ - [ ] Write registry JSON in product repo
104
+ - [ ] Add templates if missing
105
+ - [ ] Run `artifactgraph_rebuild`
106
+ - [ ] Next session reuses new tag automatically
@@ -0,0 +1,8 @@
1
+ # Agent Discipline (Portal phases)
2
+
3
+ Project alwaysApply rules and spec/contract win on conflict.
4
+
5
+ - State assumptions; ask when unclear; prefer simpler approaches.
6
+ - Minimum code for the request; no speculative features or abstractions.
7
+ - Surgical edits only; match existing style; do not refactor unrelated code.
8
+ - Define verifiable success criteria; run scoped verification before claiming done.
@@ -0,0 +1,48 @@
1
+ # Docs-mark — grill detection
2
+
3
+ > Used by docs grill / FE grill skills. Grill **flags** and **asks member** — does not auto-tag.
4
+
5
+ ## Grill spec signals — logic
6
+
7
+ | Signal | Suspected kind | Ask member |
8
+ |--------|----------------|------------|
9
+ | Endpoint mô tả payment/webhook/MES/ERP | `#call-external` | A local B `#call-external` C defer |
10
+ | 2 entity độc lập, 1 flow sync | `#cross-entity-service` | A relationship B cross-entity C split APIs |
11
+ | Field/response key không có trên `ir/spec.yaml` entities | `#derived-data` | A add to contract B `#derived-data` C remove |
12
+ | Tag có nhưng thiếu block (`externalCalls`, `services`, `derivedData`) | validation fail | Fix via `/docs-mark` |
13
+ | `commonRefs` trỏ registry `planned` | HANDOFF debt | Implement or defer in `openQuestions` |
14
+
15
+ ## Grill spec signals — UI & codegen
16
+
17
+ | Signal | Suspected kind | Ask member |
18
+ |--------|----------------|------------|
19
+ | Column `render: custom` / `component:` set | `#needs-component: cell-{key}:MoXxx` | A) Mo local B) common C) defer |
20
+ | Fuzzy widget (drawer vs sheet, chip vs badge) | `#ui:` / `#needs-ui:` | Member chọn canonical |
21
+ | `#needs-component` but Mo* exists elsewhere | promote common-ui | A) copy local B) design registry C) defer |
22
+ | `#needs-ui` → design registry `planned` | HANDOFF | Implement `/prototype` or defer |
23
+
24
+ ## Member prompt template
25
+
26
+ ```text
27
+ [GRILL-MARK] {short finding}
28
+ File/spec: {ref}
29
+
30
+ Chọn:
31
+ A) Giữ local — no mark
32
+ B) {suggested tag} — update spec + registry
33
+ C) Defer — ghi openQuestions, không block gate
34
+ ```
35
+
36
+ If member chooses **B** → run `/docs-mark` in the same session.
37
+
38
+ ## Grill spec signals — API reuse (Section L hashtags)
39
+
40
+ | Signal | Suspected kind | Ask member |
41
+ |--------|----------------|------------|
42
+ | `artifactgraph_api_reuse_check` finds existing route for same path+method | `#reuse-api` | Agent adds `#reuse-api` to spec (no gate) |
43
+ | Endpoint calls payment/webhook/OAuth/SMS/MES/ERP system | `#call-external` | A local B `#call-external` C defer |
44
+ | 2 bounded-context entities in single synchronous flow | `#cross-service` / `#cross-entity-service` | A single service B cross-service C split APIs |
45
+ | Response field không có trên `ir/spec.yaml` entities | `#derived-data` | A add to entity B `#derived-data` C remove |
46
+ | `DUPLICATE_API_ROUTE` gap in grill_check output | add `#reuse-api` | Agent adds `#reuse-api` to current spec |
47
+
48
+ **Rule:** If 2 specs define the exact same URI path+method without `#reuse-api`, ArtifactGraph emits `DUPLICATE_API_ROUTE` gap (`severity: warn`, `draftTags: ['#reuse-api']`). Agent adds the tag to resolve — no member gate needed.