@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,39 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://platform.local/schemas/flowgrid-process/missing-optional-event.schema.json",
4
+ "title": "FlowGrid bộ process missing optional accelerator event",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "event",
10
+ "package",
11
+ "runId",
12
+ "optional",
13
+ "reason",
14
+ "fallback",
15
+ "metrics"
16
+ ],
17
+ "properties": {
18
+ "schemaVersion": { "const": "1.0.0" },
19
+ "event": { "const": "flowgrid.missing-optional" },
20
+ "package": { "const": "@platform/flowgrid-process" },
21
+ "runId": { "type": "string", "minLength": 1 },
22
+ "optional": { "type": "string", "minLength": 1 },
23
+ "reason": {
24
+ "enum": ["not-configured", "unavailable", "invocation-failed"]
25
+ },
26
+ "fallback": {
27
+ "enum": ["targeted-local-search", "model-analysis"]
28
+ },
29
+ "metrics": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "required": ["fileReads", "contextBytes"],
33
+ "properties": {
34
+ "fileReads": { "type": "integer", "minimum": 0 },
35
+ "contextBytes": { "type": "integer", "minimum": 0 }
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: adopt
3
+ description: "/adopt — Scan legacy repositories and generate a high-level index mapping catalog & common candidates at root."
4
+ disable-model-invocation: true
5
+ extractBundle: architecture-core
6
+ ---
7
+
8
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
9
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
10
+
11
+ # /adopt — Legacy Adoption Index & Common Discovery
12
+
13
+ **Audit Interlock:** Run `flowgrid audit legacy <target-id>`. Consume JSON gap report to verify mapping or prompt member if index is missing.
14
+
15
+ ---
16
+
17
+ ## Rule: Pre-Scan Mode Selection (AskQuestion Wizard)
18
+
19
+ - **[MANDATORY]** At the start of `/adopt`, the Agent **MUST** prompt the Member via `AskQuestion` wizard (or read from command flags) to select the scan mode:
20
+ - **Option 1 (Recommended):** `(Recommended) Scan Index + Analyze & Propose Common Catalog (Auto-detect code duplication, propose Common UI/API/DTO candidates to prevent copy-pasting in new system)`
21
+ - **Option 2:** `Index Only (Basic adoption-inventory.md mapping)`
22
+
23
+ ---
24
+
25
+ ## Rule: Purpose & Output
26
+
27
+ - **[MANDATORY]** Output: single `adoption-inventory.md` file created directly at workspace root.
28
+ - **[MANDATORY]** Content: clean bullet-point index mapping surfaces, modules, screens, APIs to legacy file paths.
29
+ - **[MANDATORY when Common Mode selected]**: Include **Common Catalog Candidates (`CMN-*`)** section capturing duplicated code/UI patterns caused by legacy copy-pasting habits.
30
+ - **[STRICTLY FORBIDDEN]** Do NOT generate full spec details, diagrams, or tables inside inventory file. This is a reference index & common catalog map.
31
+
32
+ ---
33
+
34
+ ## Rule: Common Discovery & Anti-Copy-Paste Guard
35
+
36
+ - **[MANDATORY when Common Mode selected]**: During legacy code scan across routers, controllers, view components, and services, the Agent **MUST analyze and detect duplicate patterns**:
37
+ 1. **UI Commons (`CMN-UI-*`)**: UI patterns duplicated across screens (e.g. Search Filter Toolbar, Bulk Action Bar, Status Badge Pill, Confirmation Modal, DateRangePicker, Address Cascader...).
38
+ 2. **API/Service Commons (`CMN-API-*`)**: Controller/Service logic duplicated across endpoints (e.g. Audit Logging Interceptor, Paging/Sorting Wrapper, Excel Export Engine, Custom Exception Handler, JWT Token Resolver...).
39
+ 3. **DTO/Data Commons (`CMN-DTO-*`)**: Duplicated DTOs/Entities (e.g. BaseAuditableEntity, AddressDTO, UserSessionHeader, StandardApiResponse...).
40
+ - **[ANTI-COPY-PASTE GUARD - NEW DEVELOPMENT]**:
41
+ - Legacy code remains untouched unless explicitly requested.
42
+ - When creating new specs or developing new features (`/spec`, `/codegen`), **STRICTLY FORBIDDEN to copy-paste legacy code/specs into isolated new files**.
43
+ - Agent & Member **MUST reference and inherit `CMN-*` entries from the Common Catalog** to author reusable Common Specs and Common Code for the new project.
44
+ - **[EXCEPTION - WHOLE PAGE DUPLICATION HANDLER]**:
45
+ - If 2 or more page files are near-identical whole-file copies (e.g. `CreateUser.tsx` vs `EditUser.tsx` or duplicated CRUD forms):
46
+ - ❌ **DO NOT CREATE a `CMN-*` ID for an entire page** (building a common component for a full page is over-engineered anti-pattern).
47
+ - ✅ **LOG A WARNING** in `adoption-inventory.md` under `### Whole Page Duplication Warnings`.
48
+ - Recommend combining them into a single polymorphic spec (`mode: create | edit`) during `/spec` authoring.
49
+
50
+ ---
51
+
52
+ ## Rule: Common Implementation Plan & Execution Pipeline
53
+
54
+ - **[MANDATORY when Common Candidates volume is high (≥5 items)]**:
55
+ - Agent **MUST** create a `common-plan.md` at workspace root, partitioning all `CMN-*` items into **manageable execution Phases (3–5 common candidates per phase)** for member approval.
56
+ - **[3-Step Standard Execution Pipeline per Common Candidate]**:
57
+ - For each approved `CMN-*` item in the plan, Agent executes a closed-loop 3-step pipeline:
58
+ 1. **Step 1: Common Spec (`common-spec`)**: Generate standardized Spec document (`common/specs/CMN-*.yaml` or `.md`), defining Props, Inputs/Outputs, Exception handling, and DSL Contract.
59
+ 2. **Step 2: Common Code Generation (`codegen common`)**: Generate production code inside the new project's shared/common directory (`shared/components/`, `shared/services/`, `shared/utils/`).
60
+ 3. **Step 3: DSL Registration**: Register `CMN-*` into FlowGrid DSL Registry. When generating specs or code for any future screen using this feature, Codegen Engine **automatically links & imports Common Code** without code duplication.
61
+
62
+ ---
63
+
64
+ ## Rule: Scan Sources
65
+
66
+ - **[MANDATORY]** Read repo list from `legacy-repos.local.json` (or `core-repos.local.json` / `platform-repos.local.json`).
67
+ - **[MANDATORY]** If called with scope (e.g. `/adopt "Customer App"` or `/adopt admin-fe`) → scan only that app/module.
68
+ - **[MANDATORY]** Scan: Router, Controllers, View/Page Components, Service Interfaces to extract:
69
+ - **Surfaces**: Application and channel names (Admin Portal, Customer Web, Gateway…)
70
+ - **Modules (`CMP-*`)**: Primary feature groups (Auth, Orders, Profile…)
71
+ - **Screens (`W-*`) & APIs (`API-*`)**: UI screens + API endpoints with legacy file paths (`ID → Legacy File Path`)
72
+ - **Cross-Flow Candidates (`FLOW-*`)**: Business flows spanning multiple screens or services
73
+ - **Common Candidates (`CMN-UI-*`, `CMN-API-*`, `CMN-DTO-*`)**: (If Common Analysis mode selected)
74
+
75
+ ---
76
+
77
+ ## Rule: ID Standardization
78
+
79
+ - **[MANDATORY]** All items MUST use standardized IDs: `CMP-*`, `W-*`, `API-*`, `FLOW-*`, `CMN-UI-*`, `CMN-API-*`, `CMN-DTO-*`.
80
+ - **[MANDATORY]** Every ID MUST map to its corresponding legacy file or directory path.
81
+ - ✅ `W-AD-AUTH-001: Login → admin-fe/src/pages/Login.tsx`
82
+ - ✅ `CMN-UI-001: Filter Toolbar → duplicated in admin-fe/src/pages/Orders.tsx, Users.tsx`
83
+
84
+ ---
85
+
86
+ ## Output Structure Format
87
+
88
+ ```markdown
89
+ # Core Adoption Inventory (Legacy Scan & Common Catalog)
90
+
91
+ > **Scan Date**: YYYY-MM-DD | **Sources Config**: `legacy-repos.local.json` | **Common Analysis**: [Enabled / Disabled]
92
+
93
+ ## 1. Surfaces
94
+ - **Admin Portal** (`surfaces/admin`) → Legacy repo: `admin-fe`
95
+
96
+ ## 2. Modules Catalog (`CMP-*`)
97
+ - **CMP-ADM-001**: Auth & Identity Management → Legacy: `admin-fe/src/modules/auth/`
98
+
99
+ ## 3. Screens & API Function Inventory (`W-*`, `API-*`)
100
+ ### Admin Portal (`surfaces/admin/CMP-ADM-001`)
101
+ - **W-AD-AUTH-001**: Login → Legacy: `admin-fe/src/pages/Login.tsx`
102
+ - **API-ADM-AUTH-01**: Auth Services → Legacy: `auth-service/src/controllers/AuthController.java`
103
+
104
+ ## 4. Cross-Flow Candidates (`FLOW-*`)
105
+ - **FLOW-checkout**: Checkout & Payment Flow → across `CMP-ADM-002` & `CMP-CUS-001`
106
+
107
+ ## 5. Common Catalog Candidates (Anti-Copy-Paste Guard)
108
+ > **Purpose**: Reuse for specs and code of new features / spec updates.
109
+
110
+ ### UI Commons (`CMN-UI-*`)
111
+ - **CMN-UI-001**: Advanced Search & Filter Toolbar → Duplicated in: `admin-fe/src/pages/Orders.tsx`, `Users.tsx`
112
+ - **CMN-UI-002**: Confirm Action Modal → Duplicated in: `admin-fe/src/components/*`
113
+
114
+ ### API & Service Commons (`CMN-API-*`)
115
+ - **CMN-API-001**: Paging Response & Dynamic Sorting Wrapper → Duplicated in: `OrderController.java`, `UserController.java`
116
+ - **CMN-API-002**: Audit Logging Interceptor → Duplicated in: `auth-service`, `order-service`
117
+
118
+ ### DTO & Data Commons (`CMN-DTO-*`)
119
+ - **CMN-DTO-001**: Base Auditable & Soft-Delete Entity → Duplicated across 8 Entities
120
+
121
+ ### ⚠️ Whole Page Duplication Warnings
122
+ > **Note**: Do not create `CMN-*` for full pages. Recommend consolidating into a single polymorphic spec (`mode: create | edit`).
123
+ - **W-AD-USER-001 (Create User)** & **W-AD-USER-002 (Edit User)**: 95% identical → *Recommendation: Consolidate into single Form Spec `CMP-ADM-USER-FORM`*
124
+
125
+ ---
126
+ ## 6. Handoff Usage Guide
127
+ - `/legacy /spec W-AD-AUTH-001` — spec a legacy screen (MUST reuse CMN-* if applicable)
128
+ - `/legacy /business-process FLOW-checkout` — map a legacy flow
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Verification Checklist
134
+
135
+ - [ ] AskQuestion wizard triggered for mode selection (Index Only vs Index + Common Discovery).
136
+ - [ ] Audit script run; index checked or gaps reported.
137
+ - [ ] `adoption-inventory.md` created directly at workspace root.
138
+ - [ ] All items use standardized `CMP-*`, `W-*`, `API-*`, `FLOW-*`, `CMN-*` IDs.
139
+ - [ ] Common Catalog Candidates listed with source files if Common mode selected.
140
+ - [ ] Anti-Copy-Paste Guard enforced for new spec/code.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: api
3
+ description: EXCLUSIVE /api — Backend Router ONLY. Immediately routes to /api-spec or /api-integration without generating gross files.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
8
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
+ > **[MANDATORY]** Check for `01-backend-spec.yaml`, `approval.status`, and `feature.source.kind` before routing.
10
+
11
+ # /api — Backend Router
12
+
13
+ ---
14
+
15
+ ## Rule: Routing Table
16
+
17
+ - **[MANDATORY]** Always delegate — never generate content directly from this skill:
18
+
19
+ | Condition | Route to |
20
+ |---|---|
21
+ | No `01-backend-spec.yaml` + Portal-backed | `/api-spec` |
22
+ | No `01-backend-spec.yaml` + webhook/partner/no FE (`base: none`) | `/api-integration` |
23
+ | Portal specs changed / merge deferred child functions | `/api-update` |
24
+ | BE-only requirement (no FE contract change) | `/api-update --be-only` |
25
+ | Spec exists but not codegen-ready / `approval.status` not `approved` | `/grill-api-spec` or `/grill-integration-spec` (per `source.kind`) |
26
+ | `approval.status: approved` + explicit implement request | bộ code BE `/api` (switch to BE repo skill — NOT this skill) |
27
+
28
+ - **[MANDATORY]** Locate `01-backend-spec.yaml` under: `…/api/<seq>/` (screen leaf), `…/common/yaml/<slug>/`, or `…/integrations/…/api/<seq>/`.
29
+ - **[STRICTLY FORBIDDEN]** Do NOT skip `/grill-api-spec` for new features, cross-portal, or legacy-derived contracts.
30
+ - PHPUnit coverage: NOT routed here — use `/unit-be` directly.
31
+
32
+ Doc: `docs/operational/TEAM-AI-BACKEND-WORKFLOW.md`
33
+
34
+ ---
35
+
36
+ ## Verification Checklist
37
+
38
+ - [ ] Checked `01-backend-spec.yaml` presence, `approval.status`, and `feature.source.kind`.
39
+ - [ ] Correctly routed to contract skills vs bộ code BE `/api`.
40
+ - [ ] Did NOT generate any content from this routing skill.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: api-integration
3
+ description: EXCLUSIVE /api-integration — ONLY for backend integration contracts (partner APIs, webhooks). DO NOT merge multiple integrations into single markdown files.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
8
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
+
10
+ # /api-integration — Integration Contract (no Portal FE)
11
+
12
+ Shared extracts: `api-integration-spec.md`, `entity-relationship.md`, `call-external.md`, `agent-discipline.md`, `verify-gate.md`
13
+
14
+ ---
15
+
16
+ ## Rule: When to Use (vs `/api-spec`)
17
+
18
+ - **[MANDATORY]** Use `/api-integration` for: inbound/outbound webhooks, REST APIs exported to partners/3rd parties, public APIs with dedicated versioning, reverse-engineering legacy handlers or provider OpenAPI specs.
19
+ - **[STRICTLY FORBIDDEN]** If a Portal FE spec exists for the same user journey → use `/api-spec`, not this command.
20
+
21
+ ---
22
+
23
+ ## Rule: Audit Interlock
24
+
25
+ - **[MANDATORY]** If an integration bundle already exists: run an audit before making modifications.
26
+ - ✅ Check for existing endpoints under `surfaces/integrations/` using `flowgrid_docs_route` or glob search before authoring a new contract trio.
27
+ - ❌ Never re-define routes that already exist; link and reuse them.
28
+
29
+ ---
30
+
31
+ ## Rule: Missing Information Handling & Workload Threshold (Law 2)
32
+
33
+ - **[MANDATORY]** When signature verification, retry policy, or retention policy is unknown, evaluate total missing volume:
34
+ - **Small Scope (≤5 questions):** Trigger `AskQuestion` wizard — one question at a time, **≥3 options**: (1) `(Recommended)`, (2) `Other` (free text), (3) `Log as Tech Debt (Pending)`.
35
+ - **Large Scope (≥10 gaps/endpoints):** **[MANDATORY HARD STOP IN CHAT]**. Do not spam single questions in chat. Generate an implementation plan / Plan Mode document partitioned into sequential Phases (3–5 endpoints/gaps per phase) with disk offloading at boundaries.
36
+ - ✅ If "Log as Tech Debt" is selected → create `qa/open/QA-<feature.id>-NNNN.yaml`. Set `integrationBacklog[]` (NOT portal `pendingTechDebt`).
37
+ - ❌ Never write `openQuestions` in YAML. Never invent HMAC secrets or partner-specific validation logic.
38
+
39
+ ---
40
+
41
+ ## Rule: Folder Structure
42
+
43
+ - **[MANDATORY]** Every integration contract must be placed under:
44
+ ```
45
+ surfaces/integrations/<provider>/<slug>/api/<seq>/
46
+ ├── 01-backend-spec.yaml # feature.source.kind + integrationRefs (tech SSOT)
47
+ ├── 02-openapi.yaml # generated by: flowgrid openapi_gen --spec <01>
48
+ └── 03-mock-data.yaml
49
+ ```
50
+ - **[MANDATORY]** One `01` = one primary domain entity. Never dump all provider actions into one single file.
51
+ - **[STRICTLY FORBIDDEN]** Never write `.md` directly. Never combine multiple integrations into one gross monolithic file.
52
+
53
+ ---
54
+
55
+ ## Rule: Explicit URI Naming
56
+
57
+ - **[MANDATORY]** All integration endpoints MUST use explicit action suffixes:
58
+ - Inbound webhook: `POST /api/v1/integrations/<provider>/webhook`
59
+ - Inbound event action: `POST /api/v1/integrations/<provider>/{id}/sync` (or `/receive`)
60
+ - Outbound partner API: `POST /…/create`, `PUT /…/{id}/update`
61
+ - **[STRICTLY FORBIDDEN]** Never use ambiguous RESTful routes lacking explicit action semantics.
62
+
63
+ ---
64
+
65
+ ## Rule: Integration Error Handling
66
+
67
+ - **[MANDATORY]** Document explicit error responses using `#err:*` tags for:
68
+ - `#err:unauthorized` — invalid API key / expired token
69
+ - `#err:signature-invalid` — HMAC signature mismatch on webhook
70
+ - `#err:rate-limit` — partner throttling limit reached
71
+ - `#err:validation` — malformed payload
72
+ - `#err:system` — internal processing failure
73
+ - **[RECOMMENDED]** Global errors (500/503/401) → delegate to OpenAPI `$ref` schemas; do NOT duplicate across each endpoint.
74
+ - **[MANDATORY]** Provide partner-facing error code mappings in both `01-backend-spec.yaml` and `02-openapi.yaml`.
75
+
76
+ ---
77
+
78
+ ## Rule: YAML & Tagging
79
+
80
+ - **[MANDATORY]** Configure: `feature.source.kind`, `base: none`, `integrationRefs[]`, empty `portalRefs`, `contexts.portalLayout: none`, and `contexts.auth` (API key / HMAC / OAuth).
81
+ - **[MANDATORY]** Use domain tags only: `#webhook-inbound`, `#webhook-outbound`, `#partner-api`, `#public-api`, `#call-external`, `#err:*`.
82
+ - **[STRICTLY FORBIDDEN]** No `codegen`, no `#gen:*`, no `approval` beyond `draft` — specialized grill handles those downstream.
83
+ - **[MANDATORY]** All strings with `:` in YAML must be double-quoted.
84
+
85
+ ---
86
+
87
+ ## Workflow
88
+
89
+ 1. Configure source metadata: `feature.source.kind`, `base: none`, `integrationRefs[]`.
90
+ 2. Scan `surfaces/integrations/` for existing endpoints; apply reuse if found.
91
+ 3. Set `contexts.portalLayout: none`; document `contexts.auth`.
92
+ 4. Inventory events/endpoints from provider documentation or legacy source — mark `inferredFromCode` in `notes`.
93
+ 5. Specify entities, idempotency keys, deduplication, and raw payload retention policies in `decisions` / `beOnlyRequirements`.
94
+ 6. Author `api.endpoints` with explicit action URIs.
95
+ 7. Apply integration error storming `#err:*` tags.
96
+ 8. Run `flowgrid openapi_gen --spec …/api/<seq>/01-backend-spec.yaml` → generates `02-openapi.yaml`.
97
+ 9. Author mock data (representative webhook payload JSON + acknowledgement response).
98
+ 10. Run AskQuestion wizard for unresolved unknowns (signature, retry, retention).
99
+ 11. Update `.harness/progress.md`.
100
+
101
+ ---
102
+
103
+ ## Verification Checklist
104
+
105
+ - [ ] Folder structure: contract trio located under `surfaces/integrations/<provider>/<slug>/api/<seq>/`.
106
+ - [ ] `01-backend-spec.yaml`, `02-openapi.yaml`, `03-mock-data.yaml` all generated and populated.
107
+ - [ ] Partner-facing error codes and `#err:*` tags fully documented.
108
+ - [ ] Explicit URI action suffixes strictly applied.
109
+ - [ ] No `.md` authored directly. No gross monolithic files created.
110
+ - [ ] All YAML strings containing `:` are double-quoted.
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: api-spec
3
+ description: EXCLUSIVE /api-spec — ONLY for authoring backend API contract YAML trio per function slug under surfaces/. DO NOT merge multiple modules into single markdown files.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
8
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
+ > **[MANDATORY]** Read template `.flowgrid/templates/backend-api.bundle.yaml` BEFORE generating any YAML.
10
+ > If missing → STOP: *"Template missing. Run `flowgrid init`."*
11
+ > **[MANDATORY]** Read entire `ir/design.yaml` first (actions + nested items with `apiRefs`). If `ir/` is missing, read `*.bundle.yaml`.
12
+
13
+ # /api-spec — Backend API Contract
14
+
15
+ **SSOT:** `…/api/<seq>/01-backend-spec.yaml` only. Do **not** write `bundle.spec.api`.
16
+
17
+ Shared extracts: `spec-evolution.md`, `api-spec-sync.md`, `entity-relationship.md`, `derived-data.md`, `agent-discipline.md`, `verify-gate.md`.
18
+
19
+ Hashtag extracts: `#call-external` → `call-external.md`; `#cross-entity-service` → `cross-entity-service.md`.
20
+
21
+ ---
22
+
23
+ ## Rule: Audit Interlock
24
+
25
+ - **[MANDATORY]** Always run static audit first: `flowgrid audit api <target-api.bundle.yaml>`.
26
+ - ✅ Consume JSON gap report to fix issues or trigger AskQuestion wizard (≥3 options).
27
+ - ❌ Do not skip audit and proceed to authoring directly.
28
+
29
+ ---
30
+
31
+ ## Rule: Missing Information Handling & Workload Threshold (Law 2)
32
+
33
+ - **[MANDATORY]** When API facts are unknown or ambiguous, evaluate total missing volume:
34
+ - **Small Scope (≤5 questions):** Trigger `AskQuestion` wizard — one question at a time, **≥3 options**: (1) `(Recommended)`, (2) `Other` (free text), (3) `Log as Tech Debt (Pending)`.
35
+ - **Large Scope (≥10 gaps/endpoints):** **[MANDATORY HARD STOP IN CHAT]**. Do not spam single questions in chat. Generate an implementation plan / Plan Mode document partitioned into sequential Phases (3–5 endpoints/gaps per phase) with disk offloading at boundaries.
36
+ - ✅ If member selects "Log as Tech Debt" → create `qa-inbox.md` entry `QA-<feature.id>-NNNN`. Set `pendingTechDebt[].id` to same ID.
37
+ - ❌ Never write `openQuestions` in YAML. Do not invent endpoint logic.
38
+
39
+ ---
40
+
41
+ ## Rule: API Reuse (Search Before Creating)
42
+
43
+ - **[MANDATORY]** Before creating any new contract trio, scan in hierarchical order:
44
+ 1. Sibling screens on this `CMP-*`: `surfaces/<surface>/CMP-*/<NN…>/api/<seq>/`
45
+ 2. LCA `common/yaml/` (cluster → module → surface → global)
46
+ 3. Other modules on the same surface
47
+ - **[MANDATORY]** If existing `01-backend-spec.yaml` is found for this action: tag `#reuse-api` + `reuseFrom: <path>` on the **page action/item** in `ir/design.yaml`. Do NOT duplicate the contract.
48
+ - **[STRICTLY FORBIDDEN]** Do NOT create `api/<seq>/` folders for `#reuse-api` actions.
49
+ - **[STRICTLY FORBIDDEN]** Do NOT run `openapi:gen` for reused APIs. If every action is `#reuse-api` → zero `api/` folders created.
50
+ - Only author a new trio for **NEW unique** `apiRefs` with no existing `01`.
51
+
52
+ ---
53
+
54
+ ## Rule: Middleware Injection
55
+
56
+ - **[MANDATORY]** Before authoring: scan `surfaces/<surface>/common/yaml/` and `surfaces/common/yaml/` for common middlewares (auth, rate-limit).
57
+ - ✅ If found: inject `#middleware: <id>` on endpoint; do not duplicate logic.
58
+ - ❌ Never duplicate middleware logic in individual endpoint specs.
59
+
60
+ ---
61
+
62
+ ## Rule: Explicit URI Naming
63
+
64
+ - **[MANDATORY]** All endpoints MUST use explicit action suffixes:
65
+ - `POST /api/v1/…/create`
66
+ - `PUT /api/v1/…/{id}/update`
67
+ - `POST /api/v1/…/{id}/duplicate`
68
+ - `DELETE /api/v1/…/{id}/delete`
69
+ - `GET /api/v1/…/{id}/detail`
70
+ - `GET /api/v1/…/list` or `/search`
71
+ - **[STRICTLY FORBIDDEN]** Never use ambiguous RESTful paths without action suffixes (e.g. bare `PUT /users/{id}`).
72
+
73
+ ---
74
+
75
+ ## Rule: Endpoint Error Storming
76
+
77
+ - **[MANDATORY]** Apply `#err:*` tags based on endpoint nature:
78
+ - Endpoint with `{id}` parameter → MUST have `#err:not-found` (404) + `#err:idor-violation` (403 TENANT_IDOR_VIOLATION).
79
+ - Form submit (POST/PUT) → MUST have `#err:validation` (422) with explicit field rules.
80
+ - Permission-checked route → MUST have `#err:permission-denied` (403 PERMISSION_DENIED).
81
+ - Conflict/duplicate actions → MUST have `#err:conflict` (409 RESOURCE_DUPLICATE / STATE_INVALID).
82
+ - Public/master-data routes with `auth: false` → omit IDOR/auth errors.
83
+ - **[RECOMMENDED]** Global errors (`401`, `503`, `500`) → handled by OpenAPI `$ref: '#/components/responses/…'`; do NOT duplicate per-endpoint.
84
+
85
+ ---
86
+
87
+ ## Rule: Folder Structure
88
+
89
+ - **[MANDATORY]** Function API trio placed AT the leaf alongside FE bundle:
90
+ ```
91
+ surfaces/<surface>/CMP-*/01/01/01/
92
+ <slug>.bundle.yaml
93
+ ir/design.yaml / ir/spec.yaml
94
+ api/01/
95
+ 01-backend-spec.yaml ← VALID YAML (double-quote all colons)
96
+ 02-openapi.yaml
97
+ 03-mock-data.yaml
98
+ ```
99
+ - **[MANDATORY]** Common APIs → LCA `common/yaml/<component-slug>/`.
100
+ - **[MANDATORY]** One `01-backend-spec.yaml` = one module + one primary entity. Never dump every screen API into one file.
101
+ - **[STRICTLY FORBIDDEN]** Never write `.md` directly. Never combine multiple modules/screens into one gross monolithic file.
102
+
103
+ ---
104
+
105
+ ## Rule: YAML Syntax Safety
106
+
107
+ - **[MANDATORY]** All strings containing `:` must be double-quoted.
108
+ - ✅ `summary: "Create: New Employee Registration"`
109
+ - ❌ `summary: Create: New Employee Registration`
110
+ - **[MANDATORY]** Run `flowgrid check --spec …/api/01/01-backend-spec.yaml` before handoff.
111
+ - **[MANDATORY]** Domain tags only (`#call-external`, `#cross-entity-service`, `#err:*`). No `#gen:*` or `codegen` block from this skill.
112
+
113
+ ---
114
+
115
+ ## Workflow
116
+
117
+ 1. Identify feature group, module prefix, Platform/Tenant, aggregates, and pivot M-N relationships.
118
+ 2. List every action/item from `ir/design.yaml` with `apiRefs` or `#reuse-api`.
119
+ 3. Scan sibling + common APIs; apply reuse or create new trio.
120
+ 4. Apply explicit URI action suffixes.
121
+ 5. Apply error storming `#err:*` per endpoint nature.
122
+ 6. Run `flowgrid openapi_gen --spec …/api/<seq>/01-backend-spec.yaml` to generate `02-openapi.yaml`.
123
+ 7. AskQuestion wizard for any unresolved unknowns.
124
+ 8. Update `.harness/progress.md`.
125
+
126
+ ---
127
+
128
+ ## Verification Checklist
129
+
130
+ - [ ] Audit script run; all gaps resolved or wizard triggered.
131
+ - [ ] Every action/item is either `#reuse-api + reuseFrom` or has new `api/<seq>/` trio.
132
+ - [ ] No duplicate trio created for reused APIs.
133
+ - [ ] All new endpoints use explicit action URI suffixes.
134
+ - [ ] `#err:*` tags applied per endpoint nature (not-found + IDOR on `{id}`, validation on POST/PUT, etc.).
135
+ - [ ] Strings with `:` in YAML are double-quoted. No `.md` written directly.
136
+ - [ ] `flowgrid check` passed with zero errors.
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: api-update
3
+ description: EXCLUSIVE /api-update — ONLY for updating/syncing backend contract under surfaces/ when Portal spec changes or BE-only requirements update. DO NOT generate Markdown reports.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
8
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
9
+
10
+ # /api-update — Portal Sync & BE-Only Updates
11
+
12
+ No Laravel code. No `codegen` / `#gen:*` — grill adds those after sync.
13
+
14
+ Shared extracts: `api-spec-sync.md`, `spec-evolution.md`, `entity-relationship.md`, `derived-data.md`, `agent-discipline.md`
15
+
16
+ ---
17
+
18
+ ## Rule: Modes
19
+
20
+ - **[MANDATORY]** Select the correct mode from user prompt:
21
+
22
+ | Mode | Prompt | Action |
23
+ |---|---|---|
24
+ | `portal-sync` (default) | `/api-update <ID or path>` | Diff portal `ir/design.yaml` → patch `01` (+ mock); **regen** `02` via `openapi:gen` |
25
+ | `be-only` | `/api-update <ID or path> --be-only` | Only `beOnlyRequirements`, `derivedData`, internal validation — do NOT change FE contract |
26
+
27
+ ---
28
+
29
+ ## Rule: ID Resolution & Folder Location
30
+
31
+ - **[MANDATORY]** If an ID is provided (e.g. `CMP-ADM-000-001`, `W-AD-AUTH-001`) → use `flowgrid_docs_route` or glob to resolve to `…/api/<seq>/01-backend-spec.yaml`. Do NOT force user to provide full filesystem path.
32
+ - **[MANDATORY]** Trio lives under `api/<seq>/` — never adjacent to `*.bundle.yaml`.
33
+ - Common APIs: `…/common/yaml/<slug>/01-backend-spec.yaml` (one trio per API).
34
+
35
+ ---
36
+
37
+ ## Rule: Portal-Sync Workflow
38
+
39
+ 1. **[MANDATORY]** Read entire `ir/design.yaml` (page actions/items, `apiRefs`, `#reuse-api`, `reuseFrom`).
40
+ - `#reuse-api` actions → do NOT create a new `01`.
41
+ - Do NOT treat projected `design.api` as BE SSOT.
42
+ 2. **[MANDATORY]** Diff requirements, endpoints, acceptance vs `01-backend-spec.yaml`.
43
+ 3. **[MANDATORY]** Patch `01-backend-spec.yaml` (+ `03-mock-data.yaml` if samples change).
44
+ 4. **[MANDATORY]** Run: `flowgrid check --spec …/01-backend-spec.yaml` → `flowgrid openapi_gen --spec …/01-backend-spec.yaml` (writes sibling `02`).
45
+ 5. **[MANDATORY]** Bump `feature.version` + add `changeLog` entry.
46
+ 6. **[STRICTLY FORBIDDEN]** Never hand-edit `02-openapi.yaml` as SSOT. Never write `.md` directly.
47
+
48
+ ---
49
+
50
+ ## Rule: Missing Information / Unknown Facts
51
+
52
+ - **[MANDATORY]** External integrations or unknowns → trigger `AskQuestion` wizard, presenting ≥3 options: (1) Recommended, (2) Other, (3) "Log as Tech Debt (Pending)".
53
+ - ✅ "Log as Tech Debt" → create `qa-inbox.md` entry; close later with `/qa-resolve`.
54
+ - ❌ Never write `openQuestions` in YAML.
55
+ - Export/import/custom → add endpoint stub + `pendingTechDebt.expectedWhenDone` if not merging this session.
56
+
57
+ ---
58
+
59
+ ## Rule: Guardrails
60
+
61
+ - **[STRICTLY FORBIDDEN]** Do NOT split slug folder for child functions in the same bounded context.
62
+ - **[STRICTLY FORBIDDEN]** Do NOT rename API fields for FE convenience.
63
+ - **[STRICTLY FORBIDDEN]** No BQA reports, no framework code snippets.
64
+
65
+ ---
66
+
67
+ ## Done Criteria
68
+
69
+ - Portal delta in `01`; or if deferred: `pendingTechDebt` with `id: QA-<feature.id>-NNNN` + `qa/open/` file.
70
+ - `source.portalRefs` current.
71
+ - `changeLog` + version bumped.
72
+ - Handoff: `/grill-api-spec {slug}` (re-run gates + codegen tags).
73
+
74
+ ---
75
+
76
+ ## Verification Checklist
77
+
78
+ - [ ] Target is `…/api/<seq>/01-backend-spec.yaml` (or `common/yaml/<slug>/`), not a `01` on the FE leaf.
79
+ - [ ] `01` patched; `02` regenerated via `openapi:gen` (not hand-edited).
80
+ - [ ] Gates passed: `flowgrid check` + `flowgrid openapi_gen`.
81
+ - [ ] `changeLog` + `feature.version` bumped.
82
+ - [ ] No `.md` written directly. No `openQuestions` in YAML.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: architecture
3
+ description: /architecture — Routes to child architecture skills based on layer. DO NOT invent topology.
4
+ disable-model-invocation: true
5
+ extractBundle: architecture-core
6
+ ---
7
+
8
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
9
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
10
+ > **[MANDATORY]** Use `flowgrid_docs_route`, `flowgrid_docs_list_ids`, or glob search to resolve target path before authoring.
11
+
12
+ # /architecture — Architecture Router
13
+
14
+ ---
15
+
16
+ ## Rule: Layer → Child Skill Routing
17
+
18
+ - **[MANDATORY]** Route based on the layer being authored:
19
+
20
+ | Layer | Child Skill |
21
+ |---|---|
22
+ | Product overview / operational areas | `/overview` |
23
+ | Business/interaction surfaces | `/surfaces` |
24
+ | Common UX/UI rules (Markdown) | `/common` |
25
+ | Common technical bundles for codegen (YAML) | `/common-spec` / `/grill-common-spec` |
26
+ | Module / CMP box | `/module` |
27
+ | Screen / API detail | `/spec` |
28
+ | Where it runs / Infrastructure | `/deployment` |
29
+ | Architectural decisions | `/decision` |
30
+ | Architecture grill / interview | `/grill` / `/architecture-grill` |
31
+
32
+ ---
33
+
34
+ ## Rule: Architecture vs Business Spec Boundary
35
+
36
+ - **[MANDATORY]** Architecture = PURELY technical: system topology, internal services, cronjobs, database infrastructure, long cross-cutting technical flows.
37
+ - **[STRICTLY FORBIDDEN]** `architecture/01-introduction` MUST NOT repeat Personas or detailed user use-cases. Mention user entry point lightly then jump to technical system composition.
38
+ - **[STRICTLY FORBIDDEN]** API endpoints and contracts belong to Function detail (`/spec`, `/api-spec`), NOT architecture.
39
+ - **[MANDATORY]** Treat Surfaces as business interaction surfaces (e.g. Admin Portal, Customer Web), not repositories or software projects.
40
+ - **[MANDATORY]** Product Code (`W-*` / `API-*`) stays in `surfaces/<surface>/CMP-*/<slug>/code/`.
41
+
42
+ ---
43
+
44
+ ## Rule: Diagrams
45
+
46
+ - **[MANDATORY]** Format: MD + Mermaid (`flowchart` or `sequenceDiagram`).
47
+ - **[MANDATORY]** Every Mermaid diagram MUST explicitly model error paths and exception handling (e.g. Redirect on 401/403 IDOR, validation fail states).
48
+ - **[MANDATORY]** Deployment diagrams → C4 `DEP-*` only when physical placement matters. Use a stub by default if placement is not confirmed.
49
+ - One concern per edit.
50
+
51
+ ---
52
+
53
+ ## Verification Checklist
54
+
55
+ - [ ] Used `flowgrid_docs_route` or `flowgrid_docs_get_element` to locate target element.
56
+ - [ ] Routed to correct child skill.
57
+ - [ ] Architecture boundary respected (no Personas, no UI copy, no API contracts).
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: architecture-grill
3
+ description: /architecture-grill — Specialized architecture interview/grill for higher-level design; prefer /grill for general layer discovery.
4
+ disable-model-invocation: true
5
+ extractBundle: architecture-core
6
+ ---
7
+
8
+ > [!CRITICAL] MANDATORY PRE-FLIGHT
9
+ > **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
10
+
11
+ # /architecture-grill — Architecture Interview & Gap Fill
12
+
13
+ **Scope:** Higher-level design — business flows, context boundaries, and data models above the `Functions` layer.
14
+
15
+ ---
16
+
17
+ ## Rule: When to Use
18
+
19
+ - **[MANDATORY]** Use `/architecture-grill` when conducting interviews at the architecture level: system boundaries, service responsibilities, data ownership, cross-cutting decisions.
20
+ - **[RECOMMENDED]** For general layer discovery (determining which specific skill to use) → use `/grill` instead.
21
+
22
+ ---
23
+
24
+ ## Rule: Missing Information Handling
25
+
26
+ - **[MANDATORY]** For any architecture gaps → trigger `AskQuestion` wizard, presenting one question at a time with ≥3 options: (1) Recommended, (2) Alternative, (3) "Log as Tech Debt".
27
+ - **[STRICTLY FORBIDDEN]** Do NOT invent system topology, service ownership, or data models without explicit user confirmation.
28
+
29
+ **Target Paths:** Applied across architecture layers above `Functions`.