cabloy 5.1.60 → 5.1.62

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 (232) hide show
  1. package/.claude/hooks/contract-loop-gate.ts +296 -0
  2. package/.claude/settings.json +16 -0
  3. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
  5. package/.claude/skills/cabloy-contract-loop/SKILL.md +89 -16
  6. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +102 -14
  7. package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +4 -0
  8. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -14
  9. package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
  10. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +13 -0
  11. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
  12. package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
  13. package/.claude/skills/cabloy-resource-field-update/SKILL.md +7 -0
  14. package/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
  15. package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
  16. package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -0
  17. package/CHANGELOG.md +64 -0
  18. package/CLAUDE.md +11 -0
  19. package/cabloy-docs/.vitepress/config.mjs +197 -5
  20. package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
  21. package/cabloy-docs/ai/docs-skills-rules-mapping.md +22 -0
  22. package/cabloy-docs/ai/future-skill-roadmap.md +12 -7
  23. package/cabloy-docs/ai/introduction.md +1 -0
  24. package/cabloy-docs/ai/playbook-backend-module.md +6 -0
  25. package/cabloy-docs/ai/playbook-module-removal.md +164 -0
  26. package/cabloy-docs/ai/skills.md +12 -0
  27. package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
  28. package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
  29. package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
  30. package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
  31. package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
  32. package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
  33. package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
  34. package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
  35. package/cabloy-docs/backend/broadcast-guide.md +3 -3
  36. package/cabloy-docs/backend/cli.md +20 -11
  37. package/cabloy-docs/backend/config-guide.md +4 -4
  38. package/cabloy-docs/backend/controller-aop-guide.md +10 -10
  39. package/cabloy-docs/backend/controller-guide.md +12 -2
  40. package/cabloy-docs/backend/crud-workflow.md +7 -3
  41. package/cabloy-docs/backend/dto-guide.md +18 -2
  42. package/cabloy-docs/backend/dto-infer-generation.md +201 -25
  43. package/cabloy-docs/backend/election-guide.md +2 -2
  44. package/cabloy-docs/backend/entity-guide.md +30 -3
  45. package/cabloy-docs/backend/error-guide.md +3 -3
  46. package/cabloy-docs/backend/event-guide.md +4 -4
  47. package/cabloy-docs/backend/external-aop-guide.md +2 -2
  48. package/cabloy-docs/backend/field-indexes.md +9 -3
  49. package/cabloy-docs/backend/foundation.md +8 -8
  50. package/cabloy-docs/backend/i18n-guide.md +6 -6
  51. package/cabloy-docs/backend/internal-aop-guide.md +2 -2
  52. package/cabloy-docs/backend/introduction.md +15 -0
  53. package/cabloy-docs/backend/migration-and-changes.md +3 -3
  54. package/cabloy-docs/backend/model-guide.md +16 -6
  55. package/cabloy-docs/backend/openapi-guide.md +3 -0
  56. package/cabloy-docs/backend/queue-guide.md +3 -3
  57. package/cabloy-docs/backend/redlock-guide.md +2 -2
  58. package/cabloy-docs/backend/schedule-guide.md +2 -2
  59. package/cabloy-docs/backend/scripts.md +8 -0
  60. package/cabloy-docs/backend/serialization-guide.md +12 -2
  61. package/cabloy-docs/backend/service-guide.md +18 -9
  62. package/cabloy-docs/backend/startup-guide.md +5 -5
  63. package/cabloy-docs/backend/status-guide.md +271 -0
  64. package/cabloy-docs/backend/unit-testing.md +3 -3
  65. package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
  66. package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
  67. package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
  68. package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
  69. package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
  70. package/cabloy-docs/frontend/a-router-guide.md +307 -0
  71. package/cabloy-docs/frontend/api-guide.md +6 -4
  72. package/cabloy-docs/frontend/api-schema-guide.md +1 -0
  73. package/cabloy-docs/frontend/app-startup-guide.md +7 -4
  74. package/cabloy-docs/frontend/bean-scene-authoring.md +3 -1
  75. package/cabloy-docs/frontend/behavior-guide.md +16 -16
  76. package/cabloy-docs/frontend/cli.md +14 -2
  77. package/cabloy-docs/frontend/command-scene-authoring.md +504 -0
  78. package/cabloy-docs/frontend/component-guide.md +5 -5
  79. package/cabloy-docs/frontend/component-props-guide.md +1 -1
  80. package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
  81. package/cabloy-docs/frontend/design-principles.md +6 -0
  82. package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
  83. package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
  84. package/cabloy-docs/frontend/form-guide.md +786 -0
  85. package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
  86. package/cabloy-docs/frontend/foundation.md +33 -0
  87. package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
  88. package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
  89. package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
  90. package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
  91. package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
  92. package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
  93. package/cabloy-docs/frontend/generic-component-guide.md +1 -1
  94. package/cabloy-docs/frontend/introduction.md +38 -5
  95. package/cabloy-docs/frontend/ioc-and-beans.md +6 -0
  96. package/cabloy-docs/frontend/mock-guide.md +1 -0
  97. package/cabloy-docs/frontend/model-architecture.md +288 -39
  98. package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
  99. package/cabloy-docs/frontend/model-resource-cookbook.md +508 -0
  100. package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
  101. package/cabloy-docs/frontend/model-resource-owner-pattern.md +402 -0
  102. package/cabloy-docs/frontend/model-resource-usage-guide.md +334 -0
  103. package/cabloy-docs/frontend/model-state-guide.md +371 -15
  104. package/cabloy-docs/frontend/module-scope.md +8 -8
  105. package/cabloy-docs/frontend/modules-and-suites.md +2 -1
  106. package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
  107. package/cabloy-docs/frontend/openapi-sdk-guide.md +17 -6
  108. package/cabloy-docs/frontend/page-guide.md +15 -9
  109. package/cabloy-docs/frontend/page-meta-guide.md +466 -0
  110. package/cabloy-docs/frontend/page-params-guide.md +3 -3
  111. package/cabloy-docs/frontend/page-query-guide.md +2 -2
  112. package/cabloy-docs/frontend/page-route-guide.md +6 -0
  113. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
  114. package/cabloy-docs/frontend/quickstart.md +18 -2
  115. package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
  116. package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
  117. package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
  118. package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
  119. package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
  120. package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
  121. package/cabloy-docs/frontend/route-alias-guide.md +6 -0
  122. package/cabloy-docs/frontend/router-stack-guide.md +229 -0
  123. package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
  124. package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
  125. package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
  126. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
  127. package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
  128. package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
  129. package/cabloy-docs/frontend/server-data.md +4 -1
  130. package/cabloy-docs/frontend/system-startup-guide.md +2 -2
  131. package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
  132. package/cabloy-docs/frontend/table-cell-cookbook.md +568 -0
  133. package/cabloy-docs/frontend/table-guide.md +373 -0
  134. package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
  135. package/cabloy-docs/frontend/zova-app-guide.md +251 -0
  136. package/cabloy-docs/frontend/zova-form-source-reading-map.md +293 -0
  137. package/cabloy-docs/frontend/zova-form-under-the-hood.md +561 -0
  138. package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
  139. package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
  140. package/cabloy-docs/frontend/zova-source-reading-map.md +421 -0
  141. package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
  142. package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
  143. package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
  144. package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +308 -0
  145. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
  146. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
  147. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
  148. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
  149. package/cabloy-docs/fullstack/contract-loop-playbook.md +356 -0
  150. package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
  151. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +199 -23
  152. package/cabloy-docs/fullstack/introduction.md +15 -1
  153. package/cabloy-docs/fullstack/openapi-to-sdk.md +135 -11
  154. package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
  155. package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
  156. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
  157. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +6 -2
  158. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +60 -23
  159. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +14 -7
  160. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +6 -0
  161. package/cabloy-docs/fullstack/tutorials-overview.md +17 -4
  162. package/cabloy-docs/reference/bean-scene-boilerplates.md +15 -13
  163. package/cabloy-docs/reference/package-map.md +4 -3
  164. package/package.json +2 -1
  165. package/scripts/init.ts +2 -18
  166. package/scripts/initTestData.ts +25 -0
  167. package/scripts/upgrade.ts +17 -2
  168. package/vona/pnpm-lock.yaml +48 -194
  169. package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
  170. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
  171. package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
  172. package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  173. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
  174. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
  175. package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
  176. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
  177. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
  178. package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
  179. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
  180. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
  181. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
  182. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
  183. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
  184. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
  185. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
  186. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
  187. package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  188. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
  189. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
  190. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
  191. package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
  192. package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
  193. package/vona/src/suite/a-training/package.json +12 -0
  194. package/vona/src/suite/a-training/tsconfig.base.json +4 -0
  195. package/vona/src/suite/a-training/tsconfig.json +10 -0
  196. package/zova/packages-cli/cli/package.json +2 -2
  197. package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -1
  198. package/zova/packages-cli/cli-set-front/package.json +1 -1
  199. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +34 -4
  200. package/zova/packages-zova/zova/package.json +2 -2
  201. package/zova/pnpm-lock.yaml +416 -690
  202. package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
  203. package/zova/src/suite/a-training/modules/training-student/package.json +52 -0
  204. package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
  205. package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
  206. package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
  207. package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  208. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
  209. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
  210. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
  211. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
  212. package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
  213. package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
  214. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +51 -0
  215. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
  216. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
  217. package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
  218. package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
  219. package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
  220. package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  221. package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
  222. package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
  223. package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
  224. package/zova/src/suite/a-training/package.json +12 -0
  225. package/zova/src/suite/a-training/tsconfig.base.json +4 -0
  226. package/zova/src/suite/a-training/tsconfig.json +4 -0
  227. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
  228. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
  229. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  230. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
  231. package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
  232. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -2,6 +2,8 @@
2
2
 
3
3
  Use this reference when a contract-loop task adds or refactors a custom API that still belongs to an existing resource.
4
4
 
5
+ This is a downstream consumer-alignment pattern for the forward chain. It applies after contract regeneration, not instead of contract generation.
6
+
5
7
  Typical examples:
6
8
 
7
9
  - `summary/:id`
@@ -39,6 +41,8 @@ Use this shape instead:
39
41
  2. add reusable resource-owned helpers for custom query and mutation state
40
42
  3. keep module-local models only as thin semantic facades when the task still benefits from a business-local API surface
41
43
 
44
+ This is the forward-chain downstream rule in practice: regenerate the contract first, then keep the frontend follow-up thin and resource-owner-aware.
45
+
42
46
  A good semantic facade may still expose methods such as:
43
47
 
44
48
  - `summary(id)`
@@ -1,31 +1,47 @@
1
1
  # Verification Checklist
2
2
 
3
- After a contract-loop change, check both sides.
3
+ After a contract-loop change, verify the branch that actually applies.
4
4
 
5
- ## Backend verification
5
+ ## Edition verification
6
6
 
7
+ - Basic or Start marker confirmed
8
+ - affected flavor confirmed
9
+ - generation path matches the active edition
10
+
11
+ ## Forward chain verification
12
+
13
+ - backend contract source is correct
7
14
  - controller action contract is correct
8
15
  - DTO and validation align
9
16
  - OpenAPI output reflects the intended shape
10
- - backend tests pass
11
- - `npm run test`
17
+ - module ownership is constrained
18
+ - regeneration commands completed successfully
19
+ - generated SDK or schema outputs are updated
20
+ - thin model facades and downstream consumers still align with the regenerated contract
12
21
  - `npm run tsc`
13
22
  - `npm run build`
14
23
 
15
- ## Frontend verification
16
-
17
- - regeneration commands completed successfully
18
- - generated SDK/schema outputs are updated
19
- - API/model/page/component consumers still typecheck
24
+ ## Reverse chain verification
25
+
26
+ - frontend-owned source is correct
27
+ - metadata generation completed when applicable
28
+ - the relevant flavor build completed successfully
29
+ - `deps:vona` completed
30
+ - backend consumers can resolve the refreshed frontend-generated handoff
31
+ - prefer visible proof under `zova/src/**/.metadata/**` when it is available
32
+ - this repo does not rely on a contract-loop pre-commit gate; the active safeguard is the Claude hook layer
33
+ - if the change was a high-confidence Zova reverse-source edit through the Claude hook path, confirm whether the hook already auto-ran `npm run build:zova:admin` and `npm run deps:vona`
34
+ - if the change was consumer-side, low-confidence, outside the Claude hook path, or in another edition branch, run the reverse sync flow manually instead of assuming it already happened
35
+ - if the real handoff only appears in `.zova-rest`, treat the safeguard as conservative reminder/auto-sync assistance rather than strict proof
20
36
  - `npm run tsc:zova`
21
- - `npm run build:zova`
22
37
  - relevant flavor-specific or route-specific checks
23
38
 
24
- ## Edition verification
39
+ ## Consumer drift verification
25
40
 
26
- - Basic or Start marker confirmed
27
- - affected flavor confirmed
28
- - generation path matches the active edition
41
+ - source truth already looks correct
42
+ - generated output already looks correct
43
+ - the next consumer layer is the place that still looks stale
44
+ - do not patch source or generated artifacts again until the stale consumer path is identified
29
45
 
30
46
  ## Recovery rule for stale local file consumers
31
47
 
@@ -33,6 +49,8 @@ If all of these are true:
33
49
 
34
50
  - generated `.zova-rest` or related generated consumer artifacts already contain the expected new keys or types
35
51
  - the normal regeneration or sync flow already ran
52
+ - when relevant, the affected Zova flavor build already ran
53
+ - `deps:vona` already ran
36
54
  - Vona still behaves as if old consumer types are installed
37
55
 
38
56
  Then suspect a stale or unhealthy local installation state in `vona/node_modules`.
@@ -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
@@ -134,6 +136,16 @@ Check whether the feature needs:
134
136
  - SSR init-data updates
135
137
  - OpenAPI SDK regeneration
136
138
  - schema-driven UI or `$apiSchema` review
139
+ - reverse fullstack handoff when newly added frontend resources will later be consumed by backend metadata or backend tooling
140
+
141
+ If the frontend change introduces resources such as a custom form-field renderer, table-cell renderer, or other generated metadata that backend `ZovaRender.field(...)` / `ZovaRender.cell(...)` will consume, do not treat the task as frontend-only cleanup.
142
+
143
+ In that case, surface this operational sequence:
144
+
145
+ 1. refresh metadata when needed
146
+ 2. build the affected flavor output
147
+ 3. run `deps:vona`
148
+ 4. if backend-side shared types still look stale, escalate to the contract-loop recovery path instead of continuing source-level debugging
137
149
 
138
150
  ### Component and interaction follow-up
139
151
 
@@ -173,6 +185,7 @@ Stay frontend-first, but if the frontend task clearly depends on backend contrac
173
185
  - backend OpenAPI output may need refresh or inspection
174
186
  - backend DTO/controller response shape may be the real source of truth
175
187
  - frontend SDK or schema-driven layers should be regenerated from contract output rather than hand-patched
188
+ - newly added frontend resources that backend metadata will consume may require a reverse handoff through frontend build output and `deps:vona`
176
189
 
177
190
  Do not turn the skill into a backend workflow. Only surface the reminder when the contract boundary is clearly involved.
178
191
 
@@ -15,6 +15,8 @@ After generating or extending a frontend thread, check which follow-up layers ap
15
15
  - SSR init-data needs
16
16
  - OpenAPI SDK or schema-driven layer impact
17
17
  - backend contract reminder if frontend depends on generated backend contract output
18
+ - if backend metadata will consume newly added frontend render resources, run the relevant Zova build and then `deps:vona`
19
+ - if generated `.zova-rest` output is updated but backend still sees stale shared types, rebuild `vona/node_modules` and reinstall
18
20
 
19
21
  ## Interaction and UI follow-up
20
22
 
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: cabloy-module-removal
3
+ description: Use this skill whenever the user wants to remove or delete an existing Cabloy module, retire a demo module, or cleanly take a backend, frontend, or fullstack module out of the monorepo. Trigger for requests such as remove module, delete module, retire module, remove demo module, or remove fullstack module, including equivalent requests in other languages. Prefer it when the task is about deletion order, generated-runtime cleanup, and verification rather than scaffolding or contract evolution.
4
+ ---
5
+
6
+ # Cabloy Module Removal
7
+
8
+ Use this skill when the user wants to remove an existing module from the Cabloy monorepo.
9
+
10
+ Read the public [Module Removal Playbook](../../../cabloy-docs/ai/playbook-module-removal.md) for the canonical user/agent-facing workflow. This skill is the thinner orchestration layer: it should classify the removal path, choose the right cleanup branch, and point back to the playbook for the shared operational sequence.
11
+
12
+ ## Goals
13
+
14
+ 1. detect whether the active repository is Cabloy Basic or Cabloy Start
15
+ 2. classify the removal scope as backend-only, frontend-only, or fullstack
16
+ 3. keep the workflow source-first instead of debugging generated artifacts too early
17
+ 4. make the stale-generated-runtime recovery branch explicit when needed
18
+ 5. finish with verification guidance that proves the module is gone from the runtime/code graph
19
+
20
+ ## Step 1: Detect repo and classify the removal branch
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
+ Then classify the request into one of three branches:
34
+
35
+ ### Branch A: backend-only removal
36
+
37
+ Use this branch when the user is removing only Vona-side code such as:
38
+
39
+ - `vona/src/module/<module>`
40
+ - backend package references
41
+ - backend tests or metadata tied only to Vona
42
+
43
+ ### Branch B: frontend-only removal
44
+
45
+ Use this branch when the user is removing only Zova-side code such as:
46
+
47
+ - `zova/src/module/<module>`
48
+ - frontend package references
49
+ - Zova-only API/model/component assets
50
+
51
+ ### Branch C: fullstack removal
52
+
53
+ Use this branch when the module exists on both sides or the request affects both Vona and Zova.
54
+
55
+ This is the default branch for demo modules and shared business threads.
56
+
57
+ ## Step 2: Inventory real source and direct references first
58
+
59
+ Before proposing or making cleanup steps, inspect the real module surfaces first:
60
+
61
+ - backend and frontend module roots
62
+ - `vona/package.json`
63
+ - `zova/package.json`
64
+ - generated registries or lockfiles that may need refresh
65
+ - tests tied to the module
66
+ - optional docs/examples only if the user explicitly wants a public scrub
67
+
68
+ Start from the shared root scripts first:
69
+
70
+ - `package.json`
71
+ - `npm run vona`
72
+ - `npm run zova`
73
+
74
+ Do not assume a module lives only in one path family until the actual repo layout has been inspected.
75
+
76
+ ## Step 3: Keep the normal execution order source-first
77
+
78
+ Point the user or the main workflow to this order:
79
+
80
+ 1. remove backend source if in scope
81
+ 2. remove frontend source if in scope
82
+ 3. remove direct workspace dependency references
83
+ 4. run the repo-owned regeneration flow
84
+ 5. verify no references remain
85
+
86
+ Important rule:
87
+
88
+ - do not start by hand-editing generated caches or type surfaces while the real source and dependency references still exist
89
+
90
+ Use the playbook for the full operational sequence and representative commands.
91
+
92
+ ## Step 4: Use generated-runtime cleanup only as a recovery branch
93
+
94
+ When a module has already been removed from source and direct dependency references, but stale generated types or runtime entries still remain, treat generated runtime directories as disposable working state rather than source-of-truth files.
95
+
96
+ Primary recovery targets for this workflow are:
97
+
98
+ - `vona/.vona`
99
+ - `zova/.zova`
100
+
101
+ These directories are auto-generated by the Vona and Zova CLI flows and may survive when a service or build process does not stop cleanly.
102
+
103
+ This is a recovery branch, not the default first step.
104
+
105
+ After cleanup, rerun the normal build/deps/typecheck flow from the playbook.
106
+
107
+ ## Step 5: Finish with branch-aware verification
108
+
109
+ Use the verification path that matches the branch:
110
+
111
+ - backend-only → backend deps/typecheck/tests as needed
112
+ - frontend-only → relevant Zova build/deps/typecheck path
113
+ - fullstack → fullstack regeneration order plus typecheck and targeted tests
114
+
115
+ Verification should prove:
116
+
117
+ - no direct workspace dependency entries remain
118
+ - no stale generated registrations remain
119
+ - no typecheck failures still point at the removed module
120
+ - no important runtime or test surfaces still import the removed module
121
+
122
+ ## Step 6: Treat docs cleanup as a separate scope decision
123
+
124
+ Do not assume module deletion automatically means public docs cleanup.
125
+
126
+ Ask or confirm whether the task is:
127
+
128
+ - code/runtime removal only
129
+ - code/runtime removal plus docs/examples scrub
130
+
131
+ If docs cleanup is in scope, update `cabloy-docs/` separately from the runtime cleanup and keep maintainer rationale in `.docs-internal/`.
132
+
133
+ ## Response pattern
134
+
135
+ When using this skill, structure the response around these points when helpful:
136
+
137
+ 1. detected edition
138
+ 2. detected removal scope
139
+ 3. real module surfaces involved
140
+ 4. recommended cleanup/regeneration branch
141
+ 5. stale-generated-runtime recovery branch if needed
142
+ 6. verification steps
143
+
144
+ Keep the response practical. The value of this skill is to choose the right removal branch quickly and keep generated working state in the correct role.
@@ -164,6 +164,12 @@ Then check whether DTOs are already inferred through patterns such as:
164
164
 
165
165
  If the DTOs are inferred from the entity/model chain, let the entity change propagate. Do not hand-edit DTO field lists unless the source clearly requires it.
166
166
 
167
+ Important serialization reminder:
168
+
169
+ - if the returned field behavior depends on `v.serializerTransform(...)`, `v.serializerExclude()`, `v.serializerReplace(...)`, `v.serializerGetter(...)`, or `v.serializerCustom(...)`, do not assume those transforms run by default
170
+ - for performance reasons, Vona response serialization is opt-in per API action
171
+ - verify that the target controller action explicitly uses `@Core.serializer()` before concluding that serializer metadata is broken
172
+
167
173
  ## Step 6: Apply the renderer branch deliberately
168
174
 
169
175
  ### Default rule: prefer shared renderer reuse
@@ -251,6 +257,7 @@ Typical checks include:
251
257
  - `npm run tsc`
252
258
  - `npm run build`
253
259
  - narrow resource test runs
260
+ - when returned-field masking or exclusion uses `v.serializer*`, verify the action-level `@Core.serializer()` path with an API test, not only static field metadata inspection
254
261
  - renderer/build/deps synchronization when custom frontend renderers are involved
255
262
 
256
263
  ## Response pattern