@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,148 @@
1
+ {
2
+ "stack": "nuxt4",
3
+ "mode": "brownfield",
4
+ "commands": {
5
+ "genDry": [
6
+ "flowgrid",
7
+ "gen:dry",
8
+ "--adapter=nuxt4",
9
+ "--",
10
+ "--id",
11
+ "{spec}"
12
+ ],
13
+ "gen": [
14
+ "flowgrid",
15
+ "gen",
16
+ "--adapter=nuxt4",
17
+ "--",
18
+ "--id",
19
+ "{spec}"
20
+ ],
21
+ "unitGenDry": [
22
+ "flowgrid",
23
+ "unit-gen:dry",
24
+ "--adapter=nuxt4",
25
+ "--",
26
+ "--id",
27
+ "{spec}"
28
+ ],
29
+ "unitGen": [
30
+ "flowgrid",
31
+ "unit-gen",
32
+ "--adapter=nuxt4",
33
+ "--",
34
+ "--id",
35
+ "{spec}"
36
+ ],
37
+ "testcaseGenDry": [
38
+ "flowgrid",
39
+ "testcase:gen:dry",
40
+ "--",
41
+ "--id",
42
+ "{spec}"
43
+ ],
44
+ "testcaseGen": [
45
+ "flowgrid",
46
+ "testcase:gen",
47
+ "--",
48
+ "--id",
49
+ "{spec}"
50
+ ],
51
+ "registryValidate": [
52
+ "flowgrid",
53
+ "registry",
54
+ "--adapter=nuxt4"
55
+ ],
56
+ "unitRegistry": [
57
+ "flowgrid",
58
+ "unit-registry",
59
+ "--adapter=nuxt4"
60
+ ],
61
+ "e2eRegistry": [
62
+ "flowgrid",
63
+ "e2e-registry"
64
+ ],
65
+ "commonRegistry": [
66
+ "flowgrid",
67
+ "common-registry"
68
+ ]
69
+ },
70
+ "registries": [
71
+ "registries/design.registry.json",
72
+ "registries/common.registry.json",
73
+ "registries/unit-test.registry.json",
74
+ "registries/e2e-test.registry.json",
75
+ "registries/page-lifecycle.registry.json"
76
+ ],
77
+ "gapSources": [
78
+ "**/generated/HANDOFF.md",
79
+ "**/generated/UNIT-HANDOFF.md",
80
+ "**/generated/codegen.manifest.json"
81
+ ],
82
+ "specRoots": [],
83
+ "templates": {
84
+ "root": "adapters/nuxt4/codegen/templates",
85
+ "engine": "hbs",
86
+ "note": "SSOT in FlowGrid bộ code; product has no root codegen/"
87
+ },
88
+ "dsl": {
89
+ "ssot": "product-repo",
90
+ "lanes": {
91
+ "fe": {
92
+ "registries": [
93
+ "registries/design.registry.json",
94
+ "registries/common.registry.json"
95
+ ],
96
+ "genKeys": [
97
+ "genDry",
98
+ "gen"
99
+ ],
100
+ "needsTags": [
101
+ "#needs-component",
102
+ "#needs-ui",
103
+ "#shell:",
104
+ "#widget:"
105
+ ],
106
+ "note": "Review OK → promote design/common registry in product repo; rebuild index"
107
+ },
108
+ "unit": {
109
+ "registries": [
110
+ "registries/unit-test.registry.json"
111
+ ],
112
+ "genKeys": [
113
+ "unitGenDry",
114
+ "unitGen"
115
+ ],
116
+ "needsTags": [
117
+ "#needs-unit-test"
118
+ ],
119
+ "note": "Promote unit-test.registry.json after pattern OK"
120
+ },
121
+ "e2e": {
122
+ "registries": [
123
+ "registries/e2e-test.registry.json"
124
+ ],
125
+ "genKeys": [
126
+ "testcaseGenDry",
127
+ "testcaseGen"
128
+ ],
129
+ "needsTags": [
130
+ "#needs-testcase",
131
+ "#needs-e2e"
132
+ ],
133
+ "note": "{spec} = hub id (W-|TC-|CMP-|suite) for --id"
134
+ },
135
+ "lifecycle": {
136
+ "registries": [
137
+ "registries/page-lifecycle.registry.json"
138
+ ],
139
+ "genKeys": [],
140
+ "needsTags": [],
141
+ "note": "Updated by flowgrid gen; no separate lifecycle CLI"
142
+ }
143
+ }
144
+ },
145
+ "vocabularies": {
146
+ "registryTags": "artifactgraph/lexicon/registry-tags.en.txt"
147
+ }
148
+ }
@@ -0,0 +1,33 @@
1
+ # 01 — Introduction
2
+
3
+ status: active
4
+
5
+ ## Purpose
6
+
7
+ Goals and scope of this **docs hub** architecture narrative (*why* we document) — not a product marketing intro.
8
+
9
+ ## Goals
10
+
11
+ 1. **Navigate** — arc42 chapters as TOC so humans and AI skills land on the right layer.
12
+ 2. **Describe** — C4 views (`LND`/`CTX`/`CTR`) + product `CMP-*` without duplicating Code.
13
+ 3. **Curate** — only high-value runtime journeys (`FLOW-*`), not every agile story.
14
+
15
+ ## Audience
16
+
17
+ | Reader | Use |
18
+ |--------|-----|
19
+ | Platform / product engineers | Context → containers → component → journey |
20
+ | AI skills (`/architecture`, `/journey`, …) | Chapter + ID routing |
21
+ | New joiners | Start §03 + `FLOW-login`; deepen via §05 / product |
22
+
23
+ ## Out of scope
24
+
25
+ - Feature Code (`W-*`/`API-*`) and grill/codegen detail → `surfaces/`
26
+ - Day-to-day toolchain how-to → `platform/`
27
+ - Full E2E/`TC-*` plans → `base-tests`
28
+
29
+ ## See also
30
+
31
+ - People entry: [Start now](/platform/guide/start-now)
32
+ - Tree: [System doc structure](/platform/guide/SYSTEM-DOC-STRUCTURE)
33
+ - [03 Context](/architecture/03-context/)
@@ -0,0 +1,34 @@
1
+ # 02 — Constraints
2
+
3
+ status: active
4
+
5
+ ## Purpose
6
+
7
+ Constraints that shape how we write and structure architecture docs (and what we refuse to invent).
8
+
9
+ ## Technical
10
+
11
+ | Constraint | Implication |
12
+ |------------|-------------|
13
+ | Docs live in git as Markdown | Diagrams = Mermaid in MD; no proprietary SSOT |
14
+ | Product IDs (`CMP-*`/`W-*`/`API-*`) are stable | Architecture migrate must not rename L3 schemas |
15
+ | VitePress Mermaid 11 | Prefer `sequenceDiagram` / `flowchart`; avoid Mermaid `C4Context` |
16
+ | Multi-repo workspace | Cross-repo links via `platform-repos`; FE↔BE contract only when mapped |
17
+
18
+ ## Organizational
19
+
20
+ | Constraint | Implication |
21
+ |------------|-------------|
22
+ | Stub-first §07 | No invented prod topology — `DEP-*` only when placement matters |
23
+ | Curated journeys (~10–20%) | `/journey` refuses backlog-dump sequences |
24
+ | AI author + human review | Skills + optional flowgrid MCP validate IDs; humans own ADRs |
25
+
26
+ ## Legal / security (docs)
27
+
28
+ No secrets, tokens, or real prod endpoints in architecture MD. Local IDE/WSL tips are out of scope for this hub.
29
+
30
+ ## See also
31
+
32
+ - [04 Solution strategy](/architecture/04-solution-strategy/)
33
+ - [09 Decisions](/architecture/09-decisions/)
34
+ - [ADR-001](/architecture/09-decisions/ADR-001-arc42-toc)
@@ -0,0 +1,101 @@
1
+ ---
2
+ id: FLOW-LOGIN
3
+ title: "Quy trình Đăng nhập Quản trị viên"
4
+ domain: "Admin Operations"
5
+ surface: "Admin Web Portal"
6
+ actors: ["Quản trị viên (Admin User)"]
7
+ has_background_logic: false
8
+ status: "approved"
9
+ ---
10
+
11
+ # FLOW-LOGIN: Quy trình Đăng nhập Quản trị viên
12
+
13
+ ---
14
+
15
+ ## 1. Bối cảnh & Ma trận Phân quyền Nghiệp vụ
16
+
17
+ * **Bối cảnh kích hoạt:** Quản trị viên truy cập vào cổng quản trị để quản lý hệ thống. Phiên đăng nhập hiện tại chưa có hoặc đã hết hạn.
18
+ * **Ma trận Vai trò & Quyền hạn:**
19
+ | Tác nhân (Actor) | Vai trò trong Quy trình | Quyền hạn trên Màn hình |
20
+ | :--- | :--- | :--- |
21
+ | **Quản trị viên (Admin)** | Đăng nhập tài khoản | Nhập thông tin trên `[W-AD-AUTH-01]`, truy cập `[W-AD-DASH-01]` |
22
+
23
+ ---
24
+
25
+ ## 2. Chuỗi User Stories Đa Tầng
26
+
27
+ ### Story 1: Xác thực & Truy cập Hệ thống (Primary Action Story)
28
+ > **Là một** Quản trị viên hệ thống,
29
+ > **Tôi muốn** nhập tên đăng nhập và mật khẩu hợp lệ trên màn hình đăng nhập `[W-AD-AUTH-01]`,
30
+ > **Để** hệ thống xác thực danh tính và cấp quyền truy cập vào trang tổng quan `[W-AD-DASH-01]`.
31
+
32
+ ### Story 2: Xử lý Sai Thông tin & Khóa Tài khoản (Security Fallback Story)
33
+ > **Là một** Quản trị viên hệ thống,
34
+ > **Tôi muốn** nhận được thông báo lỗi rõ ràng nếu nhập sai thông tin đăng nhập,
35
+ > **Để** tôi biết và điều chỉnh lại, đồng thời hệ thống tự động khóa tạm thời nếu nhập sai quá số lần quy định nhằm bảo mật thông tin.
36
+
37
+ *(Quy trình này thuần tương tác màn hình xác thực, không có tác vụ background job ngầm).*
38
+
39
+ ---
40
+
41
+ ## 3. Quy tắc Nghiệp vụ (Business Rules) & Vòng đời Trạng thái
42
+
43
+ ### Danh mục Quy tắc Nghiệp vụ
44
+ * **BR-01 (Giới hạn thử lại):** Cho phép nhập sai tối đa 5 lần liên tiếp. Nếu vượt quá, khóa tài khoản tạm thời trong 15 phút.
45
+ * **BR-02 (Thời hạn phiên làm việc):** Phiên làm việc (Session) duy trì tối đa 8 giờ hoặc tự động đăng xuất sau 30 phút không có thao tác.
46
+ * **BR-03 (Bảo mật thông báo):** Khi đăng nhập thất bại, chỉ hiển thị thông báo chung: "Tên đăng nhập hoặc mật khẩu không chính xác", không tiết lộ tài khoản có tồn tại hay không.
47
+
48
+ ### Ma trận Chuyển đổi Trạng thái
49
+ | Thực thể | Trạng thái Bắt đầu | Hành động kích hoạt | Trạng thái Kết thúc | Điều kiện |
50
+ | :--- | :--- | :--- | :--- | :--- |
51
+ | **Phiên làm việc** | `UNAUTHENTICATED` | Nhập đúng thông tin & bấm "Đăng nhập" | `AUTHENTICATED` | Tài khoản hợp lệ, chưa bị khóa |
52
+ | **Tài khoản** | `ACTIVE` | Nhập sai liên tiếp 5 lần | `LOCKED_TEMPORARY` | Vi phạm BR-01 |
53
+
54
+ ---
55
+
56
+ ## 4. Đặc tả Chi tiết Hành trình Từng Chặng
57
+
58
+ ### Chặng 1: Nhập thông tin trên `[W-AD-AUTH-01]`
59
+ 1. **Thao tác:** Quản trị viên mở trang đăng nhập, điền `username` và `password`.
60
+ 2. **Bấm "Đăng nhập":**
61
+ * Hệ thống kiểm tra xác thực thông tin đối soát với cơ sở dữ liệu tài khoản.
62
+ * **Nếu hợp lệ:** Khởi tạo phiên làm việc an toàn, điều hướng sang `[W-AD-DASH-01] Dashboard`.
63
+ * **Nếu sai thông tin:** Giữ nguyên màn hình đăng nhập, xóa trắng trường mật khẩu và hiển thị cảnh báo đỏ theo BR-03.
64
+
65
+ ---
66
+
67
+ ## 5. Ma trận Đối chiếu (Traceability Matrix)
68
+
69
+ | Bước trong User Story | Màn hình liên quan | Hành động trên Sequence Diagram | Thành phần kỹ thuật đảm nhiệm |
70
+ | :--- | :--- | :--- | :--- |
71
+ | **Story 1 (Đăng nhập)** | `[W-AD-AUTH-01]` | `Admin ->> W_Auth ->> Core: Xác thực` | Auth Service, User Table |
72
+ | **Story 1 (Điều hướng)** | `[W-AD-DASH-01]` | `W_Auth -->> W_Dash: Mở Dashboard` | Router & Session Storage |
73
+ | **Story 2 (Sai mật khẩu)** | `[W-AD-AUTH-01]` | `W_Auth -->> Admin: Báo lỗi` | Form State & Error Alert |
74
+
75
+ ---
76
+
77
+ ## 6. Sơ đồ Tuần tự Nghiệp vụ Liên Màn hình (Screen-to-Screen Sequence Diagram)
78
+
79
+ ```mermaid
80
+ sequenceDiagram
81
+ autonumber
82
+ actor Admin as Quản trị viên
83
+ participant W_Auth as [W-AD-AUTH-01] Màn hình Đăng nhập
84
+ participant Core as Dịch vụ Xác thực (Auth Service)
85
+ participant Storage as Cơ sở dữ liệu Người dùng
86
+ participant W_Dash as [W-AD-DASH-01] Bàn làm việc (Dashboard)
87
+
88
+ Admin->>W_Auth: 1. Mở trang đăng nhập
89
+ Admin->>W_Auth: 2. Nhập tên tài khoản, mật khẩu & bấm "Đăng nhập"
90
+ W_Auth->>Core: Gửi yêu cầu xác thực thông tin
91
+ Core->>Storage: Kiểm tra tài khoản và trạng thái khóa
92
+
93
+ alt Thông tin đăng nhập chính xác & tài khoản hoạt động
94
+ Core-->>W_Auth: Xác thực thành công & cấp phiên làm việc
95
+ W_Auth-->>W_Dash: 3. Tự động điều hướng vào Dashboard
96
+ W_Dash-->>Admin: Hiển thị thông tin tổng quan và menu quản trị
97
+ else Sai thông tin hoặc tài khoản bị khóa
98
+ Core-->>W_Auth: Phản hồi từ chối đăng nhập (Kèm lý do bảo mật)
99
+ W_Auth-->>Admin: Hiển thị cảnh báo lỗi & yêu cầu nhập lại
100
+ end
101
+ ```
@@ -0,0 +1,149 @@
1
+ ---
2
+ id: FLOW-TEMPLATE
3
+ title: "Tên quy trình nghiệp vụ chuẩn"
4
+ surface: "Tên Surface (vd: Admin Portal / Customer Web / Mobile App)"
5
+ actors: ["Tác nhân chính", "Tác nhân thụ hưởng"]
6
+ has_background_logic: true
7
+ status: "draft"
8
+ ---
9
+
10
+ # FLOW-TEMPLATE: [Tên Quy Trình Nghiệp Vụ]
11
+
12
+ ---
13
+
14
+ ## 1. Bối cảnh & Ma trận Phân quyền Nghiệp vụ (Context & Role Matrix)
15
+
16
+ * **Bối cảnh kích hoạt (Trigger Context):** [Mô tả hoàn cảnh hoặc sự kiện nào khiến quy trình này diễn ra. Ví dụ: Khách hàng yêu cầu đặt hàng, hoặc quản trị viên khởi tạo chiến dịch khuyến mãi...]
17
+ * **Mục tiêu kinh doanh (Business Goal):** [Giá trị kinh doanh hoặc bài toán mà quy trình này giải quyết...]
18
+ * **Ma trận Vai trò & Quyền hạn (Role & Permission Matrix):**
19
+ | Tác nhân (Actor) | Vai trò trong Quy trình | Quyền hạn trên Màn hình |
20
+ | :--- | :--- | :--- |
21
+ | **[Tác nhân chính]** | [Thực hiện thao tác chính] | [Quyền CRUD trên màn hình W-*] |
22
+ | **[Tác nhân phụ/phê duyệt]** | [Xem xét / phê duyệt / thụ hưởng] | [Xem báo cáo / nhận thông báo] |
23
+ | **[Background Job Worker]* | [Tự động xử lý ngầm sau khi lưu] | [Tự động đọc dữ liệu & gửi thông điệp] |
24
+
25
+ *(Ghi chú: Nếu quy trình KHÔNG có background logic, có thể lược bỏ dòng Background Job Worker).*
26
+
27
+ ---
28
+
29
+ ## 2. Chuỗi User Stories Đa Tầng (Multi-tiered User Stories)
30
+
31
+ ### Story 1: Thao tác Chuẩn bị / Cấu hình (Setup Story - Tùy chọn)
32
+ > **Là một** [Vai trò chuẩn bị, vd: Quản trị viên],
33
+ > **Tôi muốn** [Hành động cấu hình trên màn hình W-SET-01],
34
+ > **Để** [Mục đích chuẩn bị cho các bước giao dịch tiếp theo].
35
+
36
+ ### Story 2: Thao tác Nghiệp vụ Chính (Primary Action Story)
37
+ > **Là một** [Vai trò người dùng, vd: Nhân viên vận hành / Khách hàng],
38
+ > **Tôi muốn** [Nhập liệu và gửi yêu cầu trên màn hình W-ACTION-01],
39
+ > **Để** [Hoàn tất thủ tục giao dịch nghiệp vụ].
40
+
41
+ ### Story 3: Xử lý Tự động Ngầm (Automated System Story - Khi có Background Logic)
42
+ > **Là một** Hệ thống Tự động (Background Job Worker),
43
+ > **Tôi muốn** tự động bắt sự kiện lưu đơn, so khớp điều kiện và điều phối lệnh xử lý tới [Kênh đích / Cổng đối tác],
44
+ > **Để** tự động hóa quy trình, giảm thiểu độ trễ và tránh sai sót thao tác thủ công, đồng thời đảm bảo không xử lý lặp lại (Idempotency).
45
+
46
+ ### Story 4: Giám sát Trạng thái & Xử lý Ngoại lệ (Tracking & Fallback Story)
47
+ > **Là một** [Vai trò người dùng / Quản lý],
48
+ > **Tôi muốn** theo dõi tiến độ và trạng thái xử lý trên màn hình chi tiết `[W-DETAIL-01]`,
49
+ > **Để** nắm bắt kết quả tức thì và can thiệp xử lý thủ công (Fallback) nếu hệ thống gặp sự cố.
50
+
51
+ ---
52
+
53
+ ## 3. Quy tắc Nghiệp vụ (Business Rules) & Vòng đời Trạng thái
54
+
55
+ ### Danh mục Quy tắc Nghiệp vụ (Business Rules)
56
+ * **BR-01 (Quy tắc thẩm định dữ liệu):** [Mô tả điều kiện hợp lệ để cho phép đi tiếp sang bước kế tiếp...]
57
+ * **BR-02 (Quy tắc ưu tiên / giới hạn):** [Ví dụ: Thứ tự ưu tiên bộ lọc, hạn mức giao dịch tối đa...]
58
+ * **BR-03 (Chính sách Retry khi xử lý ngầm):** [Nếu có Job: Số lần thử lại (vd: tối đa 3 lần), khoảng cách thời gian giữa các lần, và điều kiện hủy bỏ khi gặp lỗi client 4xx.]
59
+ * **BR-04 (Bảo mật & Lưu trữ):** [Quy tắc lưu trữ file trên S3, thời hạn link presigned URL hoặc chính sách bảo mật dữ liệu cá nhân.]
60
+
61
+ ### Ma trận Chuyển đổi Trạng thái (State Transitions)
62
+ | Thực thể (Entity) | Trạng thái Bắt đầu | Hành động / Sự kiện kích hoạt | Trạng thái Kết thúc | Điều kiện chuyển trạng thái |
63
+ | :--- | :--- | :--- | :--- | :--- |
64
+ | **[Thực thể chính]** | `DRAFT` / `NONE` | Bấm "Lưu" trên `[W-ACTION-01]` | `CREATED` | Dữ liệu form hợp lệ |
65
+ | **[Tác vụ ngầm/Job]** | `PENDING_TRIGGER` | Backend bắn sự kiện kích hoạt | `PROCESSING` | Worker nhận job từ queue |
66
+ | **[Tác vụ ngầm/Job]** | `PROCESSING` | Xử lý thành công (cổng trả 200) | `COMPLETED` / `SENT` | Khách nhận tin / Đơn cập nhật |
67
+ | **[Tác vụ ngầm/Job]** | `PROCESSING` | Thất bại sau tối đa lượt retry | `FAILED` | Bật cảnh báo lỗi trên màn hình |
68
+
69
+ ---
70
+
71
+ ## 4. Đặc tả Chi tiết Hành trình Từng Chặng (Step-by-step Journey)
72
+
73
+ ### Chặng 1: Thao tác & Nhập liệu trên Màn hình `[W-ACTION-01]`
74
+ 1. **Thao tác người dùng:** Người dùng truy cập form, điền các thông tin bắt buộc.
75
+ 2. **Dữ liệu nhập (Key fields):**
76
+ * Field A: `[Tên trường]` = `[Giá trị mẫu]`
77
+ * Field B: `[Tên trường]` = `[Giá trị mẫu]`
78
+ 3. **Bấm "Lưu & Xác nhận":**
79
+ * *Kiểm tra tại chỗ:* Hệ thống validate dữ liệu giao diện.
80
+ * *Lưu trữ:* Ghi nhận thông tin vào Database (Table: `[tên_table]`), tải file đính kèm lên S3 Bucket `[tên_bucket]`.
81
+ * *Chuyển màn hình:* Điều hướng người dùng sang `[W-DETAIL-01]`.
82
+
83
+ ### Chặng 2: Xử lý Ngầm Phía Sau (Background Logic Execution - Nếu có)
84
+ 1. **Kích hoạt sự kiện:** Backend bắn sự kiện `[EventName]` kèm ID thực thể.
85
+ 2. **Worker xử lý:** Background Job quét điều kiện so khớp:
86
+ * *Kiểm tra Idempotency:* Đảm bảo chưa từng xử lý sự kiện này trước đó.
87
+ * *So khớp quy tắc:* Đối chiếu với BR-01 và BR-02.
88
+ 3. **Thực thi giao tiếp:** Gọi cổng ngoại vi / dịch vụ thứ 3 (Zalo/SMS/Email/Partner Webhook).
89
+ 4. **Cập nhật kết quả:** Ghi nhận log vào table `[tên_log_table]`, cập nhật trạng thái đơn thành `COMPLETED` (hoặc `FAILED` nếu vượt quá số lần retry).
90
+
91
+ ### Chặng 3: Phản hồi Trạng thái trên Màn hình `[W-DETAIL-01]`
92
+ 1. **Hiển thị kết quả:** Màn hình cập nhật badge trạng thái (Xanh: Thành công / Đỏ: Thất bại kèm lý do).
93
+ 2. **Cơ chế phục hồi (Fallback):** Nếu trạng thái là thất bại, hiển thị nút bấm `[Thử lại thủ công]` để người dùng kích hoạt lại mà không cần nhập lại form.
94
+
95
+ ---
96
+
97
+ ## 5. Ma trận Đối chiếu (Traceability Matrix)
98
+
99
+ | Bước trong User Story | Màn hình liên quan | Hành động trên Sequence Diagram | Thành phần kỹ thuật đảm nhiệm |
100
+ | :--- | :--- | :--- | :--- |
101
+ | **Story 1 (Setup)** | `[W-SET-01]` | `Admin ->> W_Set ->> Core: Lưu cấu hình` | Table cấu hình |
102
+ | **Story 2 (Primary Action)** | `[W-ACTION-01]` | `User ->> W_Action ->> Core: Gửi dữ liệu` | Core Service, Table chính, S3 |
103
+ | **Story 3 (Background Job)** | N/A (Chạy ngầm) | `Core ->> Job ->> Gateway: Xử lý ngầm` | Background Worker, Message Queue |
104
+ | **Story 4 (Tracking)** | `[W-DETAIL-01]` | `Job -->> W_Detail: Push trạng thái` | UI Detail Screen, Log Table |
105
+
106
+ ---
107
+
108
+ ## 6. Sơ đồ Tuần tự Nghiệp vụ Liên Màn hình (Screen-to-Screen Business Sequence Diagram)
109
+
110
+ ```mermaid
111
+ sequenceDiagram
112
+ autonumber
113
+ actor User as Người dùng / Nhân viên
114
+ participant W_Action as [W-ACTION-01] Màn hình Nhập liệu
115
+ participant W_Detail as [W-DETAIL-01] Chi tiết Giao dịch
116
+ participant Core as Core Service
117
+ participant Storage as Database (table) & S3 (bucket)
118
+ participant Job as Background Worker (Job)
119
+ participant Gateway as Kênh Bên Ngoài (Gateway)
120
+ actor Beneficiary as Người thụ hưởng / Đối tác
121
+
122
+ %% BƯỚC 1: THAO TÁC MÀN HÌNH
123
+ rect rgb(255, 250, 240)
124
+ Note over User, Storage: Giai đoạn 1: Thao tác trên giao diện người dùng
125
+ User->>W_Action: 1. Nhập thông tin giao dịch & đính kèm tài liệu
126
+ User->>W_Action: 2. Nhấn nút "Lưu & Xác nhận"
127
+ W_Action->>Core: Gửi dữ liệu giao dịch
128
+ Core->>Storage: Lưu dữ liệu vào Database & tải file lên S3
129
+ Core-->>W_Action: Phản hồi tạo giao dịch thành công (ID: REC-001)
130
+ W_Action-->>User: Điều hướng sang [W-DETAIL-01] Chi tiết Giao dịch
131
+ end
132
+
133
+ %% BƯỚC 2: XỬ LÝ NGẦM (NẾU CÓ)
134
+ rect rgb(245, 255, 245)
135
+ Note over Core, Beneficiary: Giai đoạn 2: Xử lý ngầm (Background Logic)
136
+ Core->>Job: Trigger sự kiện 'TransactionCreated' (mã: REC-001)
137
+ Job->>Storage: Kiểm tra điều kiện nghiệp vụ & chống trùng lặp
138
+ alt Khớp điều kiện & Xử lý thành công
139
+ Job->>Gateway: Gửi thông điệp / dữ liệu qua cổng ngoại vi
140
+ Gateway-->>Beneficiary: Người thụ hưởng nhận thông báo
141
+ Gateway-->>Job: Báo phản hồi thành công
142
+ Job->>Storage: Ghi log lịch sử & cập nhật trạng thái COMPLETED
143
+ Job-->>W_Detail: Push cập nhật trạng thái: "Hoàn tất thành công"
144
+ else Thất bại sau khi thử lại (Retry exhausted)
145
+ Job->>Storage: Ghi nhận log lỗi & cập nhật trạng thái FAILED
146
+ Job-->>W_Detail: Push cảnh báo lỗi (kèm nút Thử lại thủ công)
147
+ end
148
+ end
149
+ ```
@@ -0,0 +1,26 @@
1
+ # 04 — Solution strategy
2
+
3
+ status: active
4
+
5
+ ## Purpose
6
+
7
+ High-level approach: docs hub as arc42 TOC + C4 views; product Code under `CMP-*`; curated journeys.
8
+
9
+ ## Content
10
+
11
+ | Theme | Decision |
12
+ |-------|----------|
13
+ | Docs structure | [ADR-001](../09-decisions/ADR-001-arc42-toc) — arc42 TOC over flat C4 folders |
14
+ | Admin runtime | Admin Web + Admin API ([§07](../07-deployment/)) |
15
+ | Auth entry | [CMP-01](/surfaces/CMP-01-auth/) · [FLOW-login](../06-runtime/journeys/FLOW-login) |
16
+
17
+ Further ADRs land in [§09](../09-decisions/).
18
+
19
+ ## Out of scope
20
+
21
+ Per-feature UI/API DSL (`surfaces/**/code/`).
22
+
23
+ ## See also
24
+
25
+ - [09 Decisions](/architecture/09-decisions/)
26
+ - [05 Building blocks](/architecture/05-building-blocks/)
@@ -0,0 +1,26 @@
1
+ # 07 — Deployment
2
+
3
+ status: stub
4
+
5
+ **Optional.** Write `DEP-*` only when runtime **placement** matters.
6
+ Do not invent prod topology. Local machine tips stay out of this repo.
7
+
8
+ ## DEP-local
9
+
10
+ Local WSL / Docker compose style layout for platform bases.
11
+ Prod/staging: TBD.
12
+
13
+ ```mermaid
14
+ flowchart LR
15
+ Dev[Developer machine]
16
+ Docs[base-docs VitePress]
17
+ FE[FE base :3000]
18
+ API[API base]
19
+ Dev --> Docs
20
+ Dev --> FE
21
+ FE --> API
22
+ ```
23
+
24
+ ## Notes
25
+
26
+ - Redirect: [`/architecture/deployments/`](/architecture/deployments/)
@@ -0,0 +1,18 @@
1
+ # Configuration
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | Owner | TBD |
6
+ | Status | stub |
7
+
8
+ ## Intent
9
+
10
+ How runtime config is supplied to admin FE/API bases (env, secrets boundary).
11
+
12
+ ## Approach
13
+
14
+ TBD — do not put secrets in this repo.
15
+
16
+ ## Out of scope
17
+
18
+ Developer machine / WSL setup notes — not part of this docs hub.
@@ -0,0 +1,27 @@
1
+ # 08 — Cross-cutting
2
+
3
+ status: active
4
+
5
+ Enterprise concerns that cut across containers/components. Skill: **`/cross-cutting`**.
6
+
7
+ | Topic | Owner | Status | Doc |
8
+ |-------|-------|--------|-----|
9
+ | Security | TBD | stub | [security](./security) |
10
+ | Observability | TBD | stub | [observability](./observability) |
11
+ | Configuration | TBD | stub | [configuration](./configuration) |
12
+ | Logging | TBD | stub | — |
13
+ | Caching | TBD | stub | — |
14
+ | Messaging | TBD | stub | — |
15
+ | Exception handling | TBD | stub | — |
16
+ | Validation | TBD | stub | — |
17
+ | Localization | TBD | stub | — |
18
+ | Authorization | TBD | stub | — |
19
+
20
+ ## Out of scope
21
+
22
+ Full OpenAPI, UI DSL, E2E plans (`base-tests`).
23
+
24
+ ## See also
25
+
26
+ - [09 Decisions](/architecture/09-decisions/)
27
+ - Template: `.cursor/extracts/tpl-cross-cutting.md`
@@ -0,0 +1,18 @@
1
+ # Observability
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | Owner | TBD |
6
+ | Status | stub |
7
+
8
+ ## Intent
9
+
10
+ Logging, metrics, and tracing across Admin Web / Admin API (and future layers).
11
+
12
+ ## Approach
13
+
14
+ TBD.
15
+
16
+ ## Out of scope
17
+
18
+ APM vendor runbooks in `platform/` handbook may live separately.
@@ -0,0 +1,18 @@
1
+ # Security
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | Owner | TBD |
6
+ | Status | stub |
7
+
8
+ ## Intent
9
+
10
+ Authenticate admin operators and protect Admin API (session/token). Details evolve with product ADRs.
11
+
12
+ ## Approach
13
+
14
+ TBD — link ADR / CMP-01 / FLOW-login when expanded.
15
+
16
+ ## Out of scope
17
+
18
+ Full threat model docs, UI DSL, OpenAPI bodies.
@@ -0,0 +1,31 @@
1
+ # ADR-001 — Docs hub uses arc42 TOC over flat C4 folders
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | Status | accepted |
6
+ | Date | 2026-07-15 |
7
+ | Deciders | docs hub |
8
+
9
+ ## Context
10
+
11
+ Flat `architecture/{landscape,context,containers,dynamics,deployments}` answered *what* (C4 views) but not *why*. AI-first docs need a stable TOC for narrative chapters (constraints, cross-cutting, quality, risks).
12
+
13
+ ## Decision
14
+
15
+ - `architecture/01`…`12` follow **arc42** as TOC.
16
+ - C4 IDs (`LND`/`CTX`/`CTR`/`FLOW`/`DEP`) live **inside** chapters.
17
+ - Product Code (`CMP`/`W`/`API`) stays under `surfaces/`.
18
+ - Journeys use `FLOW-*` + `/journey`; `DYN-*`/`/dynamics` are deprecated aliases.
19
+
20
+ ## Consequences
21
+
22
+ - Migrate pilot content; keep redirect stubs on old paths.
23
+ - Skills: Layer-1 chapter router later; Layer-2 `/journey` now.
24
+ - Deployment chapter remains optional/stub by default.
25
+
26
+ ## Related
27
+
28
+ - [Start now](/platform/guide/start-now)
29
+ - [Doc structure](/platform/guide/SYSTEM-DOC-STRUCTURE)
30
+ - [06 Runtime](/architecture/06-runtime/)
31
+ - [FLOW-login](/architecture/06-runtime/journeys/FLOW-login)
@@ -0,0 +1,13 @@
1
+ # 09 — Decisions (ADR)
2
+
3
+ status: active
4
+
5
+ Architecture Decision Records for the **product / system** (not platform handbook process).
6
+
7
+ | ID | Title | Status |
8
+ |----|-------|--------|
9
+ | [ADR-001](./ADR-001-arc42-toc.md) | Docs hub uses arc42 TOC over flat C4 folders | accepted |
10
+
11
+ Former path [`shared/adr`](/shared/adr/) redirects here.
12
+
13
+ Template: `.cursor/extracts/tpl-adr.md`