cabloy 5.1.61 → 5.1.63

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 (230) hide show
  1. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -1
  3. package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
  4. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +2 -0
  5. package/CHANGELOG.md +55 -0
  6. package/CLAUDE.md +1 -0
  7. package/cabloy-docs/.vitepress/config.mjs +158 -12
  8. package/cabloy-docs/ai/docs-skills-rules-mapping.md +8 -0
  9. package/cabloy-docs/ai/future-skill-roadmap.md +2 -0
  10. package/cabloy-docs/ai/skills.md +1 -0
  11. package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
  12. package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
  13. package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
  14. package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
  15. package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
  16. package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
  17. package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
  18. package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
  19. package/cabloy-docs/backend/broadcast-guide.md +3 -3
  20. package/cabloy-docs/backend/cli.md +20 -11
  21. package/cabloy-docs/backend/config-guide.md +4 -4
  22. package/cabloy-docs/backend/controller-aop-guide.md +10 -10
  23. package/cabloy-docs/backend/controller-guide.md +12 -2
  24. package/cabloy-docs/backend/crud-workflow.md +7 -3
  25. package/cabloy-docs/backend/dto-guide.md +12 -2
  26. package/cabloy-docs/backend/dto-infer-generation.md +201 -25
  27. package/cabloy-docs/backend/election-guide.md +2 -2
  28. package/cabloy-docs/backend/entity-guide.md +12 -3
  29. package/cabloy-docs/backend/error-guide.md +3 -3
  30. package/cabloy-docs/backend/event-guide.md +4 -4
  31. package/cabloy-docs/backend/external-aop-guide.md +2 -2
  32. package/cabloy-docs/backend/field-indexes.md +9 -3
  33. package/cabloy-docs/backend/foundation.md +8 -8
  34. package/cabloy-docs/backend/i18n-guide.md +6 -6
  35. package/cabloy-docs/backend/internal-aop-guide.md +2 -2
  36. package/cabloy-docs/backend/introduction.md +13 -0
  37. package/cabloy-docs/backend/migration-and-changes.md +3 -3
  38. package/cabloy-docs/backend/model-guide.md +16 -6
  39. package/cabloy-docs/backend/openapi-guide.md +3 -0
  40. package/cabloy-docs/backend/queue-guide.md +3 -3
  41. package/cabloy-docs/backend/redlock-guide.md +2 -2
  42. package/cabloy-docs/backend/schedule-guide.md +2 -2
  43. package/cabloy-docs/backend/scripts.md +8 -0
  44. package/cabloy-docs/backend/serialization-guide.md +2 -2
  45. package/cabloy-docs/backend/service-guide.md +18 -9
  46. package/cabloy-docs/backend/startup-guide.md +5 -5
  47. package/cabloy-docs/backend/status-guide.md +7 -7
  48. package/cabloy-docs/backend/unit-testing.md +3 -3
  49. package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
  50. package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
  51. package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
  52. package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
  53. package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
  54. package/cabloy-docs/frontend/a-router-guide.md +307 -0
  55. package/cabloy-docs/frontend/api-guide.md +4 -4
  56. package/cabloy-docs/frontend/api-schema-guide.md +1 -0
  57. package/cabloy-docs/frontend/app-startup-guide.md +7 -4
  58. package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
  59. package/cabloy-docs/frontend/behavior-guide.md +16 -16
  60. package/cabloy-docs/frontend/cli.md +5 -5
  61. package/cabloy-docs/frontend/command-scene-authoring.md +17 -8
  62. package/cabloy-docs/frontend/component-guide.md +5 -5
  63. package/cabloy-docs/frontend/component-props-guide.md +1 -1
  64. package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
  65. package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
  66. package/cabloy-docs/frontend/form-guide.md +27 -30
  67. package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
  68. package/cabloy-docs/frontend/foundation.md +10 -6
  69. package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
  70. package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
  71. package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
  72. package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
  73. package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
  74. package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
  75. package/cabloy-docs/frontend/generic-component-guide.md +1 -1
  76. package/cabloy-docs/frontend/introduction.md +29 -7
  77. package/cabloy-docs/frontend/model-architecture.md +38 -2
  78. package/cabloy-docs/frontend/model-resource-cookbook.md +11 -8
  79. package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
  80. package/cabloy-docs/frontend/model-resource-owner-pattern.md +22 -2
  81. package/cabloy-docs/frontend/model-resource-usage-guide.md +22 -6
  82. package/cabloy-docs/frontend/model-state-guide.md +12 -9
  83. package/cabloy-docs/frontend/module-scope.md +8 -8
  84. package/cabloy-docs/frontend/modules-and-suites.md +2 -1
  85. package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
  86. package/cabloy-docs/frontend/openapi-sdk-guide.md +12 -4
  87. package/cabloy-docs/frontend/page-guide.md +9 -9
  88. package/cabloy-docs/frontend/page-meta-guide.md +466 -0
  89. package/cabloy-docs/frontend/page-params-guide.md +3 -3
  90. package/cabloy-docs/frontend/page-query-guide.md +2 -2
  91. package/cabloy-docs/frontend/page-route-guide.md +6 -0
  92. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
  93. package/cabloy-docs/frontend/quickstart.md +14 -2
  94. package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
  95. package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
  96. package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
  97. package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
  98. package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
  99. package/cabloy-docs/frontend/route-alias-guide.md +6 -0
  100. package/cabloy-docs/frontend/router-stack-guide.md +229 -0
  101. package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
  102. package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
  103. package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
  104. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
  105. package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
  106. package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
  107. package/cabloy-docs/frontend/server-data.md +2 -1
  108. package/cabloy-docs/frontend/system-startup-guide.md +2 -2
  109. package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
  110. package/cabloy-docs/frontend/table-cell-cookbook.md +571 -0
  111. package/cabloy-docs/frontend/table-guide.md +373 -0
  112. package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
  113. package/cabloy-docs/frontend/zova-app-guide.md +251 -0
  114. package/cabloy-docs/frontend/zova-form-source-reading-map.md +7 -9
  115. package/cabloy-docs/frontend/zova-form-under-the-hood.md +5 -0
  116. package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
  117. package/cabloy-docs/frontend/zova-source-reading-map.md +101 -7
  118. package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
  119. package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
  120. package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
  121. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
  122. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
  123. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
  124. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
  125. package/cabloy-docs/fullstack/contract-loop-playbook.md +8 -2
  126. package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
  127. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +181 -48
  128. package/cabloy-docs/fullstack/introduction.md +3 -0
  129. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -2
  130. package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
  131. package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
  132. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
  133. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +4 -0
  134. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +31 -19
  135. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +5 -0
  136. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +4 -0
  137. package/cabloy-docs/fullstack/tutorials-overview.md +1 -1
  138. package/cabloy-docs/reference/bean-scene-boilerplates.md +13 -13
  139. package/cabloy-docs/reference/package-map.md +4 -3
  140. package/package.json +1 -1
  141. package/vona/pnpm-lock.yaml +22 -258
  142. package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
  143. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
  144. package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
  145. package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  146. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
  147. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
  148. package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
  149. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
  150. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
  151. package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
  152. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
  153. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
  154. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
  155. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
  156. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
  157. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
  158. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
  159. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
  160. package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  161. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
  162. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
  163. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
  164. package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
  165. package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
  166. package/vona/src/suite/a-training/package.json +12 -0
  167. package/vona/src/suite/a-training/tsconfig.base.json +4 -0
  168. package/vona/src/suite/a-training/tsconfig.json +10 -0
  169. package/zova/packages-zova/zova/package.json +2 -2
  170. package/zova/pnpm-lock.yaml +423 -682
  171. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/render.tsx +5 -3
  172. package/zova/src/suite/a-home/modules/home-login/src/page/login/render.tsx +5 -3
  173. package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
  174. package/zova/src/suite/a-training/modules/training-student/package.json +57 -0
  175. package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
  176. package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
  177. package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
  178. package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  179. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
  180. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
  181. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
  182. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
  183. package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
  184. package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
  185. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +53 -0
  186. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
  187. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
  188. package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
  189. package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
  190. package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
  191. package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  192. package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
  193. package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
  194. package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
  195. package/zova/src/suite/a-training/package.json +12 -0
  196. package/zova/src/suite/a-training/tsconfig.base.json +4 -0
  197. package/zova/src/suite/a-training/tsconfig.json +4 -0
  198. package/zova/src/suite/cabloy-basic/modules/basic-app/package.json +60 -0
  199. package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/index.ts +137 -0
  200. package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/locales.ts +7 -0
  201. package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/this.ts +2 -0
  202. package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +260 -0
  203. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +39 -0
  204. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/en-us.ts +7 -0
  205. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/zh-cn.ts +7 -0
  206. package/zova/src/suite/cabloy-basic/modules/basic-app/src/index.ts +4 -0
  207. package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/appModalItem.ts +16 -0
  208. package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/index.ts +1 -0
  209. package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkey.ts +38 -0
  210. package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkeySys.ts +14 -0
  211. package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +89 -0
  212. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +52 -0
  213. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/index.ts +1 -0
  214. package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.build.json +13 -0
  215. package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.json +5 -0
  216. package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +6 -1
  217. package/zova/src/suite/cabloy-basic/modules/basic-commands/src/.metadata/index.ts +16 -0
  218. package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.alert.tsx +8 -14
  219. package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.confirm.tsx +10 -7
  220. package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.prompt.tsx +30 -0
  221. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx +5 -3
  222. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
  223. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
  224. package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +6 -1
  225. package/zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionDelete.tsx +4 -2
  226. package/zova/src/suite/cabloy-basic/package.json +1 -0
  227. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  228. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
  229. package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
  230. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -36,6 +36,8 @@ Then classify the request:
36
36
 
37
37
  Default to backend-first. Only escalate mentally to a broader fullstack workflow when the backend change obviously crosses the contract boundary.
38
38
 
39
+ If the user is still deciding a new business-domain boundary or suite/module naming, use the root `cabloy-domain-planning` skill before scaffolding.
40
+
39
41
  If the task is really a broad cross-stack workflow, consider whether the root `cabloy-workflow` skill is the better primary router.
40
42
 
41
43
  ## Step 2: Start from Vona CLI and repo entrypoints
@@ -15,7 +15,7 @@ After generating or extending a backend thread, check which follow-up layers app
15
15
  - OpenAPI metadata
16
16
  - inferred DTO opportunities
17
17
  - frontend contract impact
18
- - `@Api.field(...)` ordering when explicit zod schema is present: put `z.xxx(...)` last so later helpers do not get ignored
18
+ - `@Api.field(...)` / `$makeSchema(...)` ordering when an explicit zod/custom schema is present: put that schema last because `makeSchemaLikes(...)` applies arguments right-to-left and later helpers can otherwise be ignored
19
19
 
20
20
  ## Persistence follow-up
21
21
 
@@ -0,0 +1,212 @@
1
+ ---
2
+ name: cabloy-domain-planning
3
+ description: Use this skill whenever the user wants to plan a new business domain in this Cabloy repo, such as CRM, OA, training, ERP, or a similar long-lived domain. Trigger when the request is about deciding suite-first structure, proposing or validating providerId, suite, and module names, comparing naming options, confirming names before scaffolding, or keeping a custom naming path open. Prefer it before backend or frontend scaffolding when the main question is domain naming and structure rather than immediate file generation.
4
+ ---
5
+
6
+ # Cabloy Domain Planning
7
+
8
+ Use this skill when the user is still deciding how to name and structure a new business domain.
9
+
10
+ ## Goals
11
+
12
+ 1. detect whether the active repository is Cabloy Basic or Cabloy Start
13
+ 2. classify the request as domain planning rather than immediate scaffolding
14
+ 3. default to suite-first planning for real business domains
15
+ 4. propose valid `providerId`, suite, and module names before any generation happens
16
+ 5. require explicit confirmation before handing off to scaffold commands
17
+ 6. always keep a custom naming path available for the user
18
+ 7. finish with the CLI-first next step and matching verification guidance
19
+
20
+ ## Step 1: Detect edition first
21
+
22
+ Check the repository root for these marker files:
23
+
24
+ - `__CABLOY_BASIC__`
25
+ - `__CABLOY_START__`
26
+
27
+ Interpretation:
28
+
29
+ - `__CABLOY_BASIC__` present → this is Cabloy Basic
30
+ - `__CABLOY_START__` present → this is Cabloy Start
31
+ - neither present → inspect nearby scripts and ask before making edition-specific assumptions
32
+
33
+ This matters most when examples, frontend flavors, or suite/module availability may differ between editions.
34
+
35
+ ## Step 2: Confirm that this is a planning request
36
+
37
+ Use this skill when the user is asking things such as:
38
+
39
+ - how to plan a new CRM, OA, training, ERP, or similar business area
40
+ - whether the work should start as a suite or only a module
41
+ - how to choose `providerId`, `suiteName`, or first module names
42
+ - whether a proposed name is valid
43
+ - which naming option should be preferred before scaffolding
44
+
45
+ Do not use this skill once naming is already confirmed and the request is clearly about backend or frontend scaffolding. In that case, route to the appropriate scaffold skill.
46
+
47
+ ## Step 3: Default to suite-first planning
48
+
49
+ For real business work, prefer the suite-first path described in:
50
+
51
+ - `cabloy-docs/fullstack/suites-and-modules.md`
52
+
53
+ Use this practical rule:
54
+
55
+ - prefer a **suite** for the business domain boundary
56
+ - prefer **modules** for the capabilities inside that domain
57
+ - treat a standalone module as the exception for very small, disposable, or tutorial-only work
58
+
59
+ Do not jump into `:create:module` first when the real question is still the domain boundary.
60
+
61
+ ## Step 4: Collect or infer the planning inputs
62
+
63
+ Before proposing names, determine these inputs:
64
+
65
+ 1. the business domain term
66
+ - examples: crm, oa, training
67
+ 2. whether the user already has a required namespace or provider prefix
68
+ - examples: `demo`, `biz`, `mycorp`
69
+ 3. whether the work is backend-only, frontend-only, or fullstack
70
+ 4. whether the user wants a conservative functional naming style or a custom/branded naming style
71
+
72
+ If the user already provides names, validate them instead of replacing them silently.
73
+
74
+ ## Step 5: Validate the naming rules
75
+
76
+ Reuse the durable naming rules from:
77
+
78
+ - `cabloy-docs/fullstack/suites-and-modules.md`
79
+ - `cabloy-docs/frontend/modules-and-suites.md`
80
+
81
+ ### Suite short name rule
82
+
83
+ A suite short name follows:
84
+
85
+ ```text
86
+ {providerId}-{suiteName}
87
+ ```
88
+
89
+ In this repository:
90
+
91
+ - `suiteName` must use lowercase English letters only
92
+ - `suiteName` must not contain another `-`
93
+
94
+ So a name such as `crm-core` is not valid as the `suiteName` segment.
95
+
96
+ When a proposed name is invalid:
97
+
98
+ - explain whether the invalid part is `providerId`, `suiteName`, or the combined short name
99
+ - do not collapse those layers into one vague error
100
+ - provide the nearest valid alternatives when possible
101
+
102
+ For example:
103
+
104
+ - `crm-core` is invalid as a `suiteName`
105
+ - `crm-core` can still be a valid suite short name if it is interpreted as:
106
+ - `providerId = crm`
107
+ - `suiteName = core`
108
+
109
+ ### Module planning rule
110
+
111
+ Module names should represent capability ownership inside the suite.
112
+
113
+ Prefer names that:
114
+
115
+ - map cleanly to a business capability
116
+ - remain natural when they become resource owners, controller names, API paths, or menu/page anchors
117
+ - avoid technical placeholder words such as `base`, `core`, or `common` unless the module is truly a shared technical layer
118
+
119
+ If more detail is needed, prefer expressing it in the module name rather than by making the suite name longer.
120
+
121
+ ## Step 6: Propose names in a compact planning table
122
+
123
+ When the user has not finalized naming, propose:
124
+
125
+ 1. one **recommended** option
126
+ 2. one or two **alternatives** if there is a meaningful trade-off
127
+ 3. one **custom naming** path
128
+
129
+ The proposal should be compact and practical. Include:
130
+
131
+ - `providerId`
132
+ - suite short name
133
+ - Vona suite full name
134
+ - Zova suite full name
135
+ - 3-6 likely first module names
136
+ - which module should be scaffolded first
137
+
138
+ Use examples such as:
139
+
140
+ - suite: `demo-training`
141
+ - modules: `training-student`, `training-course`, `training-record`
142
+
143
+ When helpful, explain why the recommendation is better than obvious alternatives.
144
+
145
+ ## Step 7: Require confirmation before scaffolding
146
+
147
+ Before suggesting any scaffold execution, explicitly confirm:
148
+
149
+ - `providerId`
150
+ - suite short name
151
+ - first module names
152
+ - whether the user wants backend-only, frontend-only, or fullstack scaffolding
153
+
154
+ Do not treat silence as confirmation.
155
+
156
+ Always leave a custom path available, for example:
157
+
158
+ - “If you want a different `providerId`, suite short name, or first module set, give the custom names and I will validate them against the repo rules.”
159
+
160
+ ## Step 8: Hand off to CLI-first scaffolding only after confirmation
161
+
162
+ Once naming is confirmed, route to the real generators rather than hand-authoring structure.
163
+
164
+ Typical commands are:
165
+
166
+ ```bash
167
+ npm run vona :create:suite <suiteShortName>
168
+ npm run zova :create:suite <suiteShortName>
169
+ npm run vona :create:module <moduleName> -- --suite=<suiteShortName>
170
+ npm run zova :create:module <moduleName> -- --suite=<suiteShortName>
171
+ ```
172
+
173
+ Then route to:
174
+
175
+ - `cabloy-backend-scaffold` for backend generation and follow-up
176
+ - `cabloy-frontend-scaffold` for frontend generation and follow-up
177
+ - `cabloy-workflow` if the task becomes a broader cross-stack routing problem
178
+
179
+ ## Step 9: Verification
180
+
181
+ Always finish with a verification path that matches the scope.
182
+
183
+ Before generation, verify:
184
+
185
+ - the proposed suite name follows the naming rule
186
+ - the proposed module names are natural business capability owners
187
+ - the command family still exists through `npm run vona` / `npm run zova`
188
+
189
+ After generation, verify with the narrowest useful checks first:
190
+
191
+ - `npm run vona :`
192
+ - `npm run zova :`
193
+ - `npm run deps:vona`
194
+ - `npm run deps:zova`
195
+ - `npm run tsc`
196
+
197
+ For docs or AI-asset changes that accompany this workflow, also verify that referenced public docs and skill descriptions still tell a consistent story.
198
+
199
+ ## Response pattern
200
+
201
+ When helpful, structure the response around these points:
202
+
203
+ 1. detected edition
204
+ 2. suite-first recommendation
205
+ 3. recommended naming table
206
+ 4. alternatives and trade-offs
207
+ 5. custom naming path
208
+ 6. confirmation gate before scaffolding
209
+ 7. next CLI commands after confirmation
210
+ 8. verification steps
211
+
212
+ Keep the response practical. The value of this skill is to turn vague new-domain requests into a confirmed, valid, and CLI-ready naming plan before any scaffolding starts.
@@ -36,6 +36,8 @@ Then classify the request:
36
36
 
37
37
  Default to frontend-first. Only escalate mentally to a broader fullstack workflow when the frontend task obviously crosses the contract boundary.
38
38
 
39
+ If the user is still deciding a new business-domain boundary or suite/module naming, use the root `cabloy-domain-planning` skill before scaffolding.
40
+
39
41
  If the task is really a broad cross-stack workflow, consider whether the root `cabloy-workflow` skill is the better primary router.
40
42
 
41
43
  ## Step 2: Start from Zova CLI and repo entrypoints
package/CHANGELOG.md CHANGED
@@ -1,5 +1,60 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.63
4
+
5
+ ### Features
6
+
7
+ - Add the `basic-app` modal module.
8
+ - Add update functionality.
9
+
10
+ ### Improvements
11
+
12
+ - Update the force-delete action modal flow.
13
+ - Unify modal command usage.
14
+ - Migrate remaining confirmation dialogs to `basic-app`.
15
+
16
+ ## 5.1.62
17
+
18
+ ### Features
19
+
20
+ - Add a domain planning skill.
21
+ - Add a masked mobile field to the student resource.
22
+ - Generate an OpenAPI SDK for `demo-student`.
23
+ - Add student summary and force-delete actions.
24
+ - Customize student level renderers.
25
+ - Add the `demo-student` module with a full student CRUD flow.
26
+
27
+ ### Bug Fixes
28
+
29
+ - Localize the student menu in `zh-cn`.
30
+ - Override the level filter placeholder correctly.
31
+ - Stabilize empty select value mapping.
32
+ - Polish inline select spacing.
33
+ - Forward select blur handling correctly.
34
+ - Refine borderless styling for filter selects.
35
+ - Place explicit schemas last in `demo-student` metadata.
36
+
37
+ ### Improvements
38
+
39
+ - Clarify level renderer examples.
40
+ - Clarify the standalone tutorial sandbox.
41
+ - Refresh training-student references.
42
+ - Move `demo-student` into the `a-training` suite.
43
+ - Add a suite-first modularization guide.
44
+ - Clarify the thin model facade reading path.
45
+ - Include `demo-student` in the root npm package.
46
+ - Expand source-reading and contract-loop guides.
47
+ - Clean `demo-student` locale resources.
48
+ - Move `TableCell` beans to app scope.
49
+ - Align the student summary query flow.
50
+ - Simplify the student summary action flow.
51
+ - Refine the student level renderer hierarchy.
52
+ - Add a page meta guide and cross-links.
53
+ - Add a rest-resource runtime documentation set.
54
+ - Refine tutorial 4 AI prompt wording.
55
+ - Expand Zova Router ecosystem guides.
56
+ - Add the Zova Table documentation cluster.
57
+
3
58
  ## 5.1.61
4
59
 
5
60
  ### Features
package/CLAUDE.md CHANGED
@@ -48,6 +48,7 @@ Before inventing a custom implementation path:
48
48
  - After forward regeneration, keep frontend follow-up thin: prefer semantic model facades and reuse the existing resource-owner when the custom API still belongs to the same resource.
49
49
  - For the reverse chain, when Vona consumes newly added or changed Zova Admin render/action/metadata, always run `npm run build:zova:admin` before `npm run deps:vona`. Do not treat `build:rest:cabloyBasicAdmin` alone as sufficient, because the Admin JS bundle and rest output must move together.
50
50
  - If generated artifacts already contain the expected changes but consumers still behave stale, suspect local dependency drift before making more source edits.
51
+ - For Vona consumption drift after Zova-generated type/rest output changes, if `npm run deps:vona` still leaves stale consumer types, delete `vona/node_modules` and reinstall dependencies before further debugging or hand-patching dependency links.
51
52
  - For Cabloy Start, apply the same reverse-chain logic but resolve the Start-specific flavor names and generated-output paths from the active Start repo before recommending commands.
52
53
  - Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
53
54
  - For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
@@ -38,6 +38,7 @@ const fullstackGroups = [
38
38
  items: [
39
39
  { text: 'Introduction', link: '/fullstack/introduction' },
40
40
  { text: 'Quickstart', link: '/fullstack/quickstart' },
41
+ { text: 'Suites and Modules', link: '/fullstack/suites-and-modules' },
41
42
  ],
42
43
  },
43
44
  {
@@ -81,6 +82,22 @@ const fullstackGroups = [
81
82
  { text: 'Framework Performance', link: '/fullstack/framework-performance' },
82
83
  { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
83
84
  { text: 'Contract Loop Playbook', link: '/fullstack/contract-loop-playbook' },
85
+ {
86
+ text: 'Backend Metadata to Frontend Table Actions',
87
+ link: '/fullstack/backend-metadata-to-frontend-table-actions',
88
+ },
89
+ {
90
+ text: 'Backend Metadata to Frontend Table Actions Verify Playbook',
91
+ link: '/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook',
92
+ },
93
+ {
94
+ text: 'Backend Metadata to Frontend Table Actions Debug Checklist',
95
+ link: '/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist',
96
+ },
97
+ {
98
+ text: 'Backend Metadata to Frontend Table Actions Source Reading Map',
99
+ link: '/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map',
100
+ },
84
101
  { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
85
102
  {
86
103
  text: 'Frontend Metadata Back to Backend',
@@ -166,6 +183,19 @@ export default defineConfig({
166
183
  { text: 'Foundation', link: '/backend/foundation' },
167
184
  { text: 'Backend Essentials', link: '/backend/backend-essentials' },
168
185
  { text: 'Quickstart', link: '/backend/quickstart' },
186
+ {
187
+ text: 'Backend Source Reading Roadmap',
188
+ link: '/backend/backend-source-reading-roadmap',
189
+ },
190
+ { text: 'Vona Source Reading Map', link: '/backend/vona-source-reading-map' },
191
+ {
192
+ text: 'Backend Source Reading Verify Playbook',
193
+ link: '/backend/backend-source-reading-verify-playbook',
194
+ },
195
+ {
196
+ text: 'Backend Source Reading Debug Checklist',
197
+ link: '/backend/backend-source-reading-debug-checklist',
198
+ },
169
199
  ],
170
200
  },
171
201
  {
@@ -218,6 +248,10 @@ export default defineConfig({
218
248
  { text: 'Model Guide', link: '/backend/model-guide' },
219
249
  { text: 'Entity Guide', link: '/backend/entity-guide' },
220
250
  { text: 'DTO Guide', link: '/backend/dto-guide' },
251
+ {
252
+ text: 'Backend Resource/Module Contract Chain',
253
+ link: '/backend/backend-resource-module-contract-chain',
254
+ },
221
255
  ],
222
256
  },
223
257
  {
@@ -263,6 +297,18 @@ export default defineConfig({
263
297
  text: 'API & Testing',
264
298
  items: [
265
299
  { text: 'OpenAPI Guide', link: '/backend/openapi-guide' },
300
+ {
301
+ text: 'Backend Contract Emission Specimen',
302
+ link: '/backend/backend-contract-emission-specimen',
303
+ },
304
+ {
305
+ text: 'Backend Contract Emission Source Reading Map',
306
+ link: '/backend/backend-contract-emission-source-reading-map',
307
+ },
308
+ {
309
+ text: 'Backend Contract Emission Output Inspection',
310
+ link: '/backend/backend-contract-emission-output-inspection',
311
+ },
266
312
  { text: 'DTO Infer and Generation', link: '/backend/dto-infer-generation' },
267
313
  { text: 'Unit Testing', link: '/backend/unit-testing' },
268
314
  ],
@@ -287,6 +333,10 @@ export default defineConfig({
287
333
  text: 'Zova Reactivity Under the Hood',
288
334
  link: '/frontend/zova-reactivity-under-the-hood',
289
335
  },
336
+ {
337
+ text: 'Frontend Source Reading Roadmap',
338
+ link: '/frontend/frontend-source-reading-roadmap',
339
+ },
290
340
  {
291
341
  text: 'Zova Source Reading Map',
292
342
  link: '/frontend/zova-source-reading-map',
@@ -309,6 +359,8 @@ export default defineConfig({
309
359
  items: [
310
360
  { text: 'Environment and Config Guide', link: '/frontend/environment-config-guide' },
311
361
  { text: 'App Startup Guide', link: '/frontend/app-startup-guide' },
362
+ { text: 'Zova App Guide', link: '/frontend/zova-app-guide' },
363
+ { text: 'Root Behaviors Guide', link: '/frontend/root-behaviors-guide' },
312
364
  { text: 'System Startup Guide', link: '/frontend/system-startup-guide' },
313
365
  ],
314
366
  },
@@ -328,9 +380,19 @@ export default defineConfig({
328
380
  { text: 'Page Params Guide', link: '/frontend/page-params-guide' },
329
381
  { text: 'Zod Guide', link: '/frontend/zod-guide' },
330
382
  { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
383
+ { text: 'A-Router Guide', link: '/frontend/a-router-guide' },
384
+ { text: 'Zova Router Under the Hood', link: '/frontend/zova-router-under-the-hood' },
385
+ { text: 'Router View Hosts Guide', link: '/frontend/router-view-hosts-guide' },
331
386
  { text: 'Router Tabs Introduction', link: '/frontend/router-tabs-introduction' },
332
387
  { text: 'Router Tabs Overview', link: '/frontend/router-tabs-overview' },
333
388
  { text: 'Router Tabs Mechanism', link: '/frontend/router-tabs-mechanism' },
389
+ { text: 'Router Tabs vs Stack', link: '/frontend/router-tabs-vs-stack' },
390
+ { text: 'Router Stack Guide', link: '/frontend/router-stack-guide' },
391
+ { text: 'Page Meta Guide', link: '/frontend/page-meta-guide' },
392
+ {
393
+ text: 'Router Tabs Layout Integration',
394
+ link: '/frontend/router-tabs-layout-integration',
395
+ },
334
396
  {
335
397
  text: 'Router Tabs Route Meta Cookbook',
336
398
  link: '/frontend/router-tabs-route-meta-cookbook',
@@ -356,6 +418,36 @@ export default defineConfig({
356
418
  text: 'Zova Form Source Reading Map',
357
419
  link: '/frontend/zova-form-source-reading-map',
358
420
  },
421
+ {
422
+ text: 'Form Scene to Page Meta',
423
+ link: '/frontend/form-scene-to-page-meta-guide',
424
+ },
425
+ {
426
+ text: 'Permission, formScene, and Action Visibility',
427
+ link: '/frontend/permission-formscene-action-visibility-guide',
428
+ },
429
+ { text: 'Table Guide', link: '/frontend/table-guide' },
430
+ { text: 'TableCell Authoring Cookbook', link: '/frontend/table-cell-cookbook' },
431
+ {
432
+ text: 'Table + Resource CRUD Cookbook',
433
+ link: '/frontend/table-resource-crud-cookbook',
434
+ },
435
+ {
436
+ text: 'Table Action Visibility & Permission Flow',
437
+ link: '/frontend/table-action-visibility-permission-flow-guide',
438
+ },
439
+ {
440
+ text: 'Zova Table Under the Hood',
441
+ link: '/frontend/zova-table-under-the-hood',
442
+ },
443
+ {
444
+ text: 'Zova Table Controller Render Deep Dive',
445
+ link: '/frontend/zova-table-controller-render-supplement',
446
+ },
447
+ {
448
+ text: 'Zova Table Source Reading Map',
449
+ link: '/frontend/zova-table-source-reading-map',
450
+ },
359
451
  { text: 'Component Props Guide', link: '/frontend/component-props-guide' },
360
452
  { text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
361
453
  { text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
@@ -370,20 +462,54 @@ export default defineConfig({
370
462
  { text: 'Server Data', link: '/frontend/server-data' },
371
463
  { text: 'Fetch Interceptor Guide', link: '/frontend/fetch-interceptor-guide' },
372
464
  { text: 'API Guide', link: '/frontend/api-guide' },
465
+ { text: 'OpenAPI Runtime Under the Hood', link: '/frontend/a-openapi-under-the-hood' },
373
466
  { text: 'Model Architecture', link: '/frontend/model-architecture' },
374
- { text: 'Model State Guide', link: '/frontend/model-state-guide' },
375
- { text: 'Model Resource Owner Pattern', link: '/frontend/model-resource-owner-pattern' },
467
+ { text: 'Model Runtime Under the Hood', link: '/frontend/a-model-under-the-hood' },
376
468
  {
377
- text: 'Using ModelResource in Your Module',
378
- link: '/frontend/model-resource-usage-guide',
379
- },
380
- {
381
- text: 'Resource Model Best Practices',
382
- link: '/frontend/model-resource-best-practices',
383
- },
384
- {
385
- text: 'Resource Model Cookbook',
386
- link: '/frontend/model-resource-cookbook',
469
+ text: 'Resource Models & CRUD',
470
+ items: [
471
+ { text: 'Model State Guide', link: '/frontend/model-state-guide' },
472
+ {
473
+ text: 'Model Resource Owner Pattern',
474
+ link: '/frontend/model-resource-owner-pattern',
475
+ },
476
+ {
477
+ text: 'Rest Resource Under the Hood',
478
+ link: '/frontend/rest-resource-under-the-hood',
479
+ },
480
+ {
481
+ text: 'Rest Resource Source Reading Map',
482
+ link: '/frontend/rest-resource-source-reading-map',
483
+ },
484
+ {
485
+ text: 'Resource Entry Page Deep Dive',
486
+ link: '/frontend/resource-entry-page-deep-dive',
487
+ },
488
+ {
489
+ text: 'Resource List Page Deep Dive',
490
+ link: '/frontend/resource-list-page-deep-dive',
491
+ },
492
+ {
493
+ text: 'ModelResource Internals Deep Dive',
494
+ link: '/frontend/model-resource-internals-deep-dive',
495
+ },
496
+ {
497
+ text: 'Filter to Query to Select Data Flow',
498
+ link: '/frontend/filter-query-select-data-flow-guide',
499
+ },
500
+ {
501
+ text: 'Using ModelResource in Your Module',
502
+ link: '/frontend/model-resource-usage-guide',
503
+ },
504
+ {
505
+ text: 'Resource Model Best Practices and Anti-Patterns',
506
+ link: '/frontend/model-resource-best-practices',
507
+ },
508
+ {
509
+ text: 'Resource Model Cookbook',
510
+ link: '/frontend/model-resource-cookbook',
511
+ },
512
+ ],
387
513
  },
388
514
  ],
389
515
  },
@@ -391,6 +517,26 @@ export default defineConfig({
391
517
  text: 'API Contract & SDK',
392
518
  items: [
393
519
  { text: 'OpenAPI SDK Guide', link: '/frontend/openapi-sdk-guide' },
520
+ {
521
+ text: 'Generated Contract Consumption Specimen',
522
+ link: '/frontend/generated-contract-consumption-specimen',
523
+ },
524
+ {
525
+ text: 'Generated Contract Consumption: List Branch',
526
+ link: '/frontend/generated-contract-consumption-list-branch',
527
+ },
528
+ {
529
+ text: 'Generated Contract Consumption: Entry Branch',
530
+ link: '/frontend/generated-contract-consumption-entry-branch',
531
+ },
532
+ {
533
+ text: 'Generated Contract Consumption Verify Playbook',
534
+ link: '/frontend/generated-contract-consumption-verify-playbook',
535
+ },
536
+ {
537
+ text: 'Generated Contract Consumption Debug Checklist',
538
+ link: '/frontend/generated-contract-consumption-debug-checklist',
539
+ },
394
540
  { text: 'API Schema Guide', link: '/frontend/api-schema-guide' },
395
541
  { text: 'SDK Guide', link: '/frontend/sdk-guide' },
396
542
  ],
@@ -150,6 +150,14 @@ Use this quick rule:
150
150
  - avoid putting the full workflow in `CLAUDE.md` because the task needs branching, cleanup order, generated-runtime recovery, and verification
151
151
  - procedural decision workflow → `cabloy-module-removal` skill
152
152
 
153
+ ### Example: “How should AI plan a new business domain name and structure?”
154
+
155
+ - public naming and suite-first explanation → [Suites and Modules](/fullstack/suites-and-modules)
156
+ - frontend-side naming companion → [Modules and Suites](/frontend/modules-and-suites)
157
+ - keep the durable naming rules in docs instead of duplicating them in repo rules
158
+ - avoid putting the full branching workflow in `CLAUDE.md` because the task needs proposal, validation, confirmation, and CLI handoff
159
+ - procedural decision workflow → `cabloy-domain-planning` skill
160
+
153
161
  ### Example: “What `@Api.field(...)` ordering rule should AI preserve when mixing helpers and zod?”
154
162
 
155
163
  - full explanation → [Entity Guide](/backend/entity-guide) and [DTO Guide](/backend/dto-guide)
@@ -13,6 +13,7 @@ A roadmap helps convert that documented knowledge into a focused set of high-val
13
13
  Current root skills include:
14
14
 
15
15
  - `cabloy-workflow`
16
+ - `cabloy-domain-planning`
16
17
  - `cabloy-contract-loop`
17
18
  - `cabloy-resource-field-update`
18
19
  - `cabloy-module-removal`
@@ -20,6 +21,7 @@ Current root skills include:
20
21
  Their current roles are:
21
22
 
22
23
  - `cabloy-workflow` → broad workflow selection, edition detection, CLI-first routing, and verification framing
24
+ - `cabloy-domain-planning` → suite-first naming proposals, providerId confirmation, module-boundary suggestions, and scaffold handoff for new business domains
23
25
  - `cabloy-contract-loop` → backend/frontend contract regeneration, reverse-chain handling, and drift diagnosis
24
26
  - `cabloy-resource-field-update` → existing backend resource-field changes with `fileVersion` and renderer-aware follow-up
25
27
  - `cabloy-module-removal` → backend/frontend/fullstack module deletion order, generated-runtime cleanup, and verification
@@ -41,6 +41,7 @@ For edition-aware skills, use [Edition Detection for AI Workflows](/ai/edition-d
41
41
  Current examples include:
42
42
 
43
43
  - `cabloy-workflow` for choosing the correct Cabloy work path before implementation
44
+ - `cabloy-domain-planning` for proposing and confirming providerId, suite, and initial module names before scaffolding a new business domain
44
45
  - `cabloy-contract-loop` for backend/frontend contract regeneration and drift diagnosis
45
46
  - `cabloy-resource-field-update` for updating an existing backend resource field thread
46
47
  - `cabloy-module-removal` for removing a backend, frontend, or fullstack module cleanly, including generated-runtime cleanup, stale-residue recovery, and verification