cabloy 5.1.50 → 5.1.52

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 (300) hide show
  1. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +207 -0
  2. package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
  3. package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
  5. package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
  6. package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
  7. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
  8. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
  9. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
  10. package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
  11. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
  12. package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
  13. package/.claude/skills/cabloy-workflow/SKILL.md +292 -0
  14. package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
  15. package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
  16. package/.claude/skills/cabloy-workflow/references/edition-detection.md +30 -0
  17. package/.github/workflows/docs-pages.yml +56 -0
  18. package/.gitignore +1 -0
  19. package/CHANGELOG.md +54 -0
  20. package/CLAUDE.md +59 -0
  21. package/README.md +152 -0
  22. package/cabloy-docs/.vitepress/config.mjs +255 -0
  23. package/cabloy-docs/.vitepress/public/CNAME +1 -0
  24. package/cabloy-docs/.vitepress/theme/custom.css +64 -0
  25. package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
  26. package/cabloy-docs/.vitepress/theme/index.js +5 -0
  27. package/cabloy-docs/ai/class-placement-rule.md +139 -0
  28. package/cabloy-docs/ai/cli-for-agents.md +56 -0
  29. package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
  30. package/cabloy-docs/ai/docs-skills-rules-mapping.md +168 -0
  31. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  32. package/cabloy-docs/ai/edition-detection.md +30 -0
  33. package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
  34. package/cabloy-docs/ai/global-bean-lookup.md +158 -0
  35. package/cabloy-docs/ai/introduction.md +62 -0
  36. package/cabloy-docs/ai/playbook-backend-module.md +111 -0
  37. package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
  38. package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
  39. package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
  40. package/cabloy-docs/ai/repo-guidance.md +58 -0
  41. package/cabloy-docs/ai/rules-and-config.md +29 -0
  42. package/cabloy-docs/ai/skills.md +37 -0
  43. package/cabloy-docs/ai/verification.md +31 -0
  44. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  45. package/cabloy-docs/backend/aop-overview.md +128 -0
  46. package/cabloy-docs/backend/auth-guide.md +151 -0
  47. package/cabloy-docs/backend/backend-essentials.md +128 -0
  48. package/cabloy-docs/backend/broadcast-guide.md +138 -0
  49. package/cabloy-docs/backend/cache-guide.md +70 -0
  50. package/cabloy-docs/backend/captcha-guide.md +162 -0
  51. package/cabloy-docs/backend/cli.md +173 -0
  52. package/cabloy-docs/backend/config-guide.md +249 -0
  53. package/cabloy-docs/backend/controller-aop-guide.md +270 -0
  54. package/cabloy-docs/backend/controller-guide.md +347 -0
  55. package/cabloy-docs/backend/crud-workflow.md +118 -0
  56. package/cabloy-docs/backend/dto-guide.md +161 -0
  57. package/cabloy-docs/backend/dto-infer-generation.md +153 -0
  58. package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
  59. package/cabloy-docs/backend/election-guide.md +141 -0
  60. package/cabloy-docs/backend/entity-guide.md +150 -0
  61. package/cabloy-docs/backend/error-guide.md +108 -0
  62. package/cabloy-docs/backend/event-guide.md +183 -0
  63. package/cabloy-docs/backend/external-aop-guide.md +149 -0
  64. package/cabloy-docs/backend/field-indexes.md +79 -0
  65. package/cabloy-docs/backend/foundation.md +281 -0
  66. package/cabloy-docs/backend/i18n-guide.md +211 -0
  67. package/cabloy-docs/backend/internal-aop-guide.md +181 -0
  68. package/cabloy-docs/backend/introduction.md +95 -0
  69. package/cabloy-docs/backend/jwt-guide.md +276 -0
  70. package/cabloy-docs/backend/logger-guide.md +223 -0
  71. package/cabloy-docs/backend/mail-guide.md +189 -0
  72. package/cabloy-docs/backend/menu-guide.md +80 -0
  73. package/cabloy-docs/backend/migration-and-changes.md +192 -0
  74. package/cabloy-docs/backend/model-guide.md +274 -0
  75. package/cabloy-docs/backend/multi-database-datasource.md +171 -0
  76. package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
  77. package/cabloy-docs/backend/openapi-guide.md +118 -0
  78. package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
  79. package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
  80. package/cabloy-docs/backend/orm-guide.md +109 -0
  81. package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
  82. package/cabloy-docs/backend/orm-select-guide.md +243 -0
  83. package/cabloy-docs/backend/queue-guide.md +271 -0
  84. package/cabloy-docs/backend/quickstart.md +141 -0
  85. package/cabloy-docs/backend/redis-guide.md +70 -0
  86. package/cabloy-docs/backend/redlock-guide.md +60 -0
  87. package/cabloy-docs/backend/relations-guide.md +250 -0
  88. package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
  89. package/cabloy-docs/backend/schedule-guide.md +81 -0
  90. package/cabloy-docs/backend/scripts.md +116 -0
  91. package/cabloy-docs/backend/serialization-guide.md +192 -0
  92. package/cabloy-docs/backend/service-guide.md +166 -0
  93. package/cabloy-docs/backend/sharding-guide.md +49 -0
  94. package/cabloy-docs/backend/startup-guide.md +326 -0
  95. package/cabloy-docs/backend/transaction-guide.md +82 -0
  96. package/cabloy-docs/backend/unit-testing.md +209 -0
  97. package/cabloy-docs/backend/upload-guide.md +160 -0
  98. package/cabloy-docs/backend/user-access-guide.md +157 -0
  99. package/cabloy-docs/backend/validation-guide.md +80 -0
  100. package/cabloy-docs/backend/worker-guide.md +59 -0
  101. package/cabloy-docs/editions/cabloy-basic.md +26 -0
  102. package/cabloy-docs/editions/cabloy-start.md +55 -0
  103. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  104. package/cabloy-docs/editions/detection.md +31 -0
  105. package/cabloy-docs/editions/overview.md +107 -0
  106. package/cabloy-docs/frontend/api-guide.md +93 -0
  107. package/cabloy-docs/frontend/api-schema-guide.md +43 -0
  108. package/cabloy-docs/frontend/app-startup-guide.md +185 -0
  109. package/cabloy-docs/frontend/cli.md +78 -0
  110. package/cabloy-docs/frontend/component-guide.md +105 -0
  111. package/cabloy-docs/frontend/component-props-guide.md +97 -0
  112. package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
  113. package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
  114. package/cabloy-docs/frontend/design-principles.md +55 -0
  115. package/cabloy-docs/frontend/environment-config-guide.md +250 -0
  116. package/cabloy-docs/frontend/foundation.md +58 -0
  117. package/cabloy-docs/frontend/generic-component-guide.md +35 -0
  118. package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
  119. package/cabloy-docs/frontend/introduction.md +33 -0
  120. package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
  121. package/cabloy-docs/frontend/mock-guide.md +109 -0
  122. package/cabloy-docs/frontend/model-architecture.md +87 -0
  123. package/cabloy-docs/frontend/model-state-guide.md +70 -0
  124. package/cabloy-docs/frontend/module-scope.md +168 -0
  125. package/cabloy-docs/frontend/modules-and-suites.md +179 -0
  126. package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
  127. package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
  128. package/cabloy-docs/frontend/page-guide.md +223 -0
  129. package/cabloy-docs/frontend/page-params-guide.md +87 -0
  130. package/cabloy-docs/frontend/page-query-guide.md +96 -0
  131. package/cabloy-docs/frontend/page-route-guide.md +147 -0
  132. package/cabloy-docs/frontend/quickstart.md +202 -0
  133. package/cabloy-docs/frontend/route-alias-guide.md +61 -0
  134. package/cabloy-docs/frontend/scripts.md +86 -0
  135. package/cabloy-docs/frontend/sdk-guide.md +45 -0
  136. package/cabloy-docs/frontend/server-data.md +74 -0
  137. package/cabloy-docs/frontend/ssr-client-only.md +40 -0
  138. package/cabloy-docs/frontend/ssr-env.md +51 -0
  139. package/cabloy-docs/frontend/ssr-init-data.md +46 -0
  140. package/cabloy-docs/frontend/ssr-overview.md +48 -0
  141. package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
  142. package/cabloy-docs/frontend/system-startup-guide.md +186 -0
  143. package/cabloy-docs/frontend/theme-guide.md +154 -0
  144. package/cabloy-docs/frontend/zod-guide.md +161 -0
  145. package/cabloy-docs/fullstack/cli.md +118 -0
  146. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  147. package/cabloy-docs/fullstack/edition-collaboration-differences.md +62 -0
  148. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
  149. package/cabloy-docs/fullstack/introduction.md +81 -0
  150. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
  151. package/cabloy-docs/fullstack/quickstart.md +89 -0
  152. package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
  153. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  154. package/cabloy-docs/index.md +72 -0
  155. package/cabloy-docs/package.json +16 -0
  156. package/cabloy-docs/pnpm-lock.yaml +1607 -0
  157. package/cabloy-docs/reference/backend-directory-structure.md +88 -0
  158. package/cabloy-docs/reference/cli-reference.md +49 -0
  159. package/cabloy-docs/reference/glossary.md +38 -0
  160. package/cabloy-docs/reference/package-map.md +105 -0
  161. package/cabloy-docs/reference/repo-scripts.md +36 -0
  162. package/package.json +4 -1
  163. package/scripts/init.ts +12 -0
  164. package/scripts/upgrade.ts +31 -3
  165. package/vona/README.md +4 -4
  166. package/vona/README.zh-CN.md +4 -4
  167. package/vona/packages-vona/vona/package.json +1 -1
  168. package/vona/pnpm-lock.yaml +383 -38
  169. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
  170. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
  171. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  172. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  173. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  174. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  175. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
  176. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
  177. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  178. package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
  179. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
  180. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  181. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
  183. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
  184. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
  185. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
  186. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
  187. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
  188. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
  189. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
  190. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  191. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
  192. package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  193. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  194. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
  195. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
  196. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
  197. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
  198. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
  199. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
  200. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
  201. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
  202. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
  203. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
  204. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
  205. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
  206. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
  207. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
  208. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
  209. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
  210. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
  211. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
  212. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
  213. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
  214. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
  215. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
  216. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
  217. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
  218. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
  219. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
  220. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
  221. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
  222. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
  223. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
  224. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
  225. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
  226. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
  227. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
  228. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
  229. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
  230. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
  231. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
  232. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
  233. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
  234. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
  235. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
  236. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
  237. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
  238. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
  239. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  240. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
  241. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
  242. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
  243. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  244. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
  245. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
  246. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  247. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
  248. package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  249. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
  250. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
  251. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
  252. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
  253. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
  254. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
  255. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
  256. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
  257. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
  258. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  259. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
  260. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
  261. package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
  262. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  263. package/zova/README.md +5 -5
  264. package/zova/README.zh-CN.md +4 -4
  265. package/zova/package.original.json +4 -4
  266. package/zova/packages-cli/cli/package.json +2 -2
  267. package/zova/packages-cli/cli-set-front/package.json +2 -2
  268. package/zova/packages-utils/zova-jsx/package.json +2 -2
  269. package/zova/packages-utils/zova-vite/package.json +2 -2
  270. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  271. package/zova/packages-zova/zova/package.json +3 -3
  272. package/zova/packages-zova/zova-core/package.json +2 -2
  273. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  274. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  275. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  276. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  277. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  278. package/zova/pnpm-lock.yaml +1596 -1679
  279. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  280. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  281. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  282. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  283. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  284. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  285. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  286. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  287. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  288. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  289. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
  290. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  291. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  292. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  293. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  294. package/zova/src/suite-vendor/a-zova/package.json +6 -6
  295. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
  296. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
  297. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
  298. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
  299. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
  300. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
@@ -0,0 +1,150 @@
1
+ # Edition Consistency Checklist
2
+
3
+ This checklist helps maintainers keep docs, rules, commands, and skills aligned when writing or reviewing Cabloy Basic and Cabloy Start guidance.
4
+
5
+ Use it whenever you add or revise:
6
+
7
+ - edition-aware docs
8
+ - `CLAUDE.md` guidance
9
+ - `.claude/commands/`
10
+ - `.claude/skills/`
11
+ - AI workflow playbooks
12
+
13
+ ## The baseline story that should stay consistent
14
+
15
+ Before checking details, confirm that the content still tells the same baseline story:
16
+
17
+ - **Cabloy Basic** is the public framework/reference edition
18
+ - `npm create cabloy` creates the default Cabloy Basic project route
19
+ - **Cabloy Start** is the private commercial edition
20
+ - Cabloy Start is used by cloning the licensed private repository source directly
21
+ - both editions share the same Cabloy fullstack core
22
+ - both editions share a frontend engineering layer built around Zova, Vue, Vite, Quasar tooling, and related libraries
23
+ - the editions diverge in UI layer, frontend flavors, suites/modules, SSR site baselines, project assets, and some generated outputs
24
+
25
+ If a page, rule, or skill contradicts one of those points, align that content before polishing wording.
26
+
27
+ ## Checklist 1: edition detection is explicit
28
+
29
+ Confirm that the content:
30
+
31
+ - tells the reader or agent to check `__CABLOY_BASIC__` or `__CABLOY_START__`
32
+ - treats edition detection as mandatory before UI-sensitive guidance
33
+ - does not assume Cabloy Basic examples apply to Cabloy Start automatically
34
+ - does not assume the project creation path is the same for both editions
35
+
36
+ ## Checklist 2: creation path assumptions are correct
37
+
38
+ Confirm that the content states or implies the right project-entry model:
39
+
40
+ - **Cabloy Basic** → `npm create cabloy`
41
+ - **Cabloy Start** → licensed private repository clone
42
+
43
+ Watch for drift such as:
44
+
45
+ - implying that Cabloy Start is created through `npm create cabloy`
46
+ - implying that both editions use the same bootstrap path
47
+ - omitting the Start licensing/private-repo model when it matters to the workflow
48
+
49
+ ## Checklist 3: shared core vs edition divergence is separated cleanly
50
+
51
+ Confirm that the content distinguishes:
52
+
53
+ ### Shared core
54
+
55
+ - Vona
56
+ - Zova
57
+ - suite-based architecture
58
+ - CLI-first workflows
59
+ - shared frontend engineering direction
60
+
61
+ ### Edition divergence
62
+
63
+ - UI layer
64
+ - frontend flavors
65
+ - suites/modules
66
+ - SSR site baselines
67
+ - project assets
68
+ - edition-specific generated outputs or script paths where applicable
69
+
70
+ Avoid collapsing the whole difference into “different UI library only.”
71
+
72
+ ## Checklist 4: UI language uses the right layer
73
+
74
+ When the content talks about frontend differences, confirm that it uses the right level:
75
+
76
+ - shared frontend engineering layer
77
+ - edition-specific UI layer
78
+
79
+ Prefer wording such as:
80
+
81
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS UI layer
82
+ - **Cabloy Start**: Vuetify UI layer
83
+
84
+ Avoid wording that makes Quasar sound like the edition UI component library when the intended meaning is tooling.
85
+
86
+ ## Checklist 5: operational examples match the active edition
87
+
88
+ For scripts, flavors, paths, and examples, confirm that:
89
+
90
+ - Basic examples use Basic markers and Basic flavor names
91
+ - Start examples tell the reader to verify the Start repo directly
92
+ - Start workflows do not silently reuse Basic script or flavor assumptions
93
+ - SSR site baseline assumptions match the edition being discussed
94
+ - project-asset references match the repo being discussed
95
+
96
+ ## Checklist 6: docs, rules, and skills play different roles
97
+
98
+ Confirm that the same guidance is distributed correctly:
99
+
100
+ - **docs** explain the workflow in durable prose
101
+ - **`CLAUDE.md`** captures short repo-wide behavioral rules
102
+ - **skills** encode procedural branching and follow-up logic
103
+ - **commands** are used only for named operator workflows, not as the only home for conceptual guidance
104
+
105
+ Avoid these drifts:
106
+
107
+ - a skill contains the only explanation of an edition rule
108
+ - `CLAUDE.md` grows into a long architectural essay
109
+ - docs duplicate every procedural branch that belongs in a skill
110
+
111
+ ## Checklist 7: verification guidance matches the edition model
112
+
113
+ When content ends with verification steps, confirm that it reminds the reader or agent to verify the right edition-specific surfaces when relevant:
114
+
115
+ - flavor names
116
+ - script paths
117
+ - suites/modules
118
+ - SSR site baselines
119
+ - generated outputs
120
+ - project assets
121
+
122
+ For Start-sensitive workflows, confirm that verification points back to the licensed Start repository rather than pretending the current Basic repo is the direct source of truth.
123
+
124
+ ## Checklist 8: wording about system size stays appropriately scoped
125
+
126
+ If the content talks about project fit, confirm that it keeps the intended nuance:
127
+
128
+ - **Cabloy Basic** is optimized for public reference, learning, community workflows, and faster small-to-medium system development
129
+ - **Cabloy Start** is optimized as a stronger baseline for more complex business systems
130
+
131
+ Avoid overstating this into a hard claim that Basic cannot support larger systems.
132
+
133
+ ## Quick review questions
134
+
135
+ Before you finish an edition-aware change, ask:
136
+
137
+ 1. Did I clearly separate shared core from edition-specific divergence?
138
+ 2. Did I preserve the correct Basic vs Start creation path?
139
+ 3. Did I avoid turning UI difference into the whole story?
140
+ 4. Did I point Start-specific operational truth back to the licensed Start repo where needed?
141
+ 5. Do docs, rules, and skills each play their proper role?
142
+
143
+ ## Read together with
144
+
145
+ - [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start)
146
+ - [Editions Overview](/editions/overview)
147
+ - [Edition Detection for AI Workflows](/ai/edition-detection)
148
+ - [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
149
+ - [Rules and Config](/ai/rules-and-config)
150
+ - [Verification](/ai/verification)
@@ -0,0 +1,30 @@
1
+ # Edition Detection for AI Workflows
2
+
3
+ This page applies the general detection rule from [Editions / Detection](/editions/detection) to AI-assisted development specifically.
4
+
5
+ Edition detection should happen before any AI workflow that assumes a frontend stack, module set, or example path.
6
+
7
+ ## AI-specific consequence
8
+
9
+ If an agent skips edition detection, it can:
10
+
11
+ - scaffold against the wrong UI-layer assumptions
12
+ - suggest the wrong frontend flavors
13
+ - cite suites, modules, SSR site baselines, or project assets that do not exist in the active repo
14
+ - generate docs or skills that accidentally hardcode Basic-only behavior or `npm create cabloy` assumptions into Start workflows
15
+
16
+ ## Operational rule
17
+
18
+ Before an AI workflow recommends implementation steps:
19
+
20
+ 1. check the edition marker
21
+ 2. verify the relevant package scripts or CLI entrypoints
22
+ 3. branch the guidance only where the editions truly diverge
23
+
24
+ ## Where this rule should live
25
+
26
+ Keep the same rule in three places on purpose:
27
+
28
+ - **public docs** so people can review it
29
+ - **skills** so agents execute it consistently
30
+ - **`CLAUDE.md`** so repo-wide Claude behavior stays aligned
@@ -0,0 +1,135 @@
1
+ # Future Skill Roadmap
2
+
3
+ This page turns the current documentation work into a practical roadmap for future Cabloy skills.
4
+
5
+ ## Why a roadmap helps
6
+
7
+ The docs now describe a large portion of the Cabloy backend, frontend, fullstack, and edition-aware workflow surface.
8
+
9
+ A roadmap helps convert that documented knowledge into a focused set of high-value skills rather than a random collection of prompts.
10
+
11
+ ## What already exists
12
+
13
+ Current root skill:
14
+
15
+ - `cabloy-workflow`
16
+
17
+ Its current role is broad workflow selection:
18
+
19
+ - detect Basic vs Start
20
+ - classify backend/frontend/fullstack/docs work
21
+ - prefer CLI-first behavior
22
+ - suggest verification
23
+
24
+ This is a strong foundation skill, but it is intentionally general.
25
+
26
+ ## Recommended next skill families
27
+
28
+ ### 1. Backend scaffold skill
29
+
30
+ Purpose:
31
+
32
+ - scaffold Vona controller/service/model/entity/dto/CRUD threads
33
+ - choose between bean creation and CRUD generation
34
+ - verify migration/test implications
35
+
36
+ Primary dependencies:
37
+
38
+ - Vona `create:*`
39
+ - Vona `tools:*`
40
+ - backend docs in `cabloy-docs/backend/`
41
+
42
+ ### 2. Frontend scaffold skill
43
+
44
+ Purpose:
45
+
46
+ - scaffold Zova pages/components/API/models
47
+ - branch correctly between Basic and Start
48
+ - use create/refactor commands before manual edits
49
+
50
+ Primary dependencies:
51
+
52
+ - Zova `create:*`
53
+ - Zova `refactor:*`
54
+ - frontend docs in `cabloy-docs/frontend/`
55
+
56
+ ### 3. Fullstack contract loop skill
57
+
58
+ Purpose:
59
+
60
+ - detect backend contract changes
61
+ - regenerate OpenAPI/SDK-related output
62
+ - verify backend/frontend contract alignment
63
+
64
+ Primary dependencies:
65
+
66
+ - Vona OpenAPI and validation docs
67
+ - Zova OpenAPI SDK and server-data docs
68
+ - fullstack collaboration docs
69
+
70
+ ### 4. Metadata refresh skill
71
+
72
+ Purpose:
73
+
74
+ - detect when route/component/icon or related changes require metadata regeneration
75
+ - run the right metadata flow
76
+ - verify generated artifacts belong to the active edition
77
+
78
+ Primary dependencies:
79
+
80
+ - Zova `tools:*`
81
+ - CLI-to-skill mapping
82
+ - edition detection docs
83
+
84
+ ### 5. Distributed backend workflow skill
85
+
86
+ Purpose:
87
+
88
+ - route tasks into queue / schedule / broadcast / redlock / worker logic
89
+ - help choose the right distributed abstraction
90
+ - verify mode/flavor and transaction/cache implications
91
+
92
+ Primary dependencies:
93
+
94
+ - backend distributed docs
95
+ - Redis / queue / schedule / worker / broadcast / redlock pages
96
+
97
+ ## What should stay in docs rather than becoming a skill
98
+
99
+ Not every good doc topic should become a skill.
100
+
101
+ Keep something in docs only when:
102
+
103
+ - it is mostly conceptual
104
+ - it has no procedural branching worth automating
105
+ - it primarily teaches architecture rather than driving action
106
+
107
+ Examples:
108
+
109
+ - high-level architecture foundations
110
+ - broad conceptual comparisons
111
+ - maintainership rationale
112
+
113
+ ## Skill design rules for future Cabloy skills
114
+
115
+ Future skills should generally:
116
+
117
+ 1. detect edition first when relevant
118
+ 2. classify backend/frontend/fullstack/docs/distributed layer
119
+ 3. prefer CLI/refactor/generator paths
120
+ 4. read docs only where the explanation adds value
121
+ 5. verify the result using the smallest correct command set
122
+
123
+ ## Why this roadmap matters for AI workflows
124
+
125
+ The purpose of the roadmap is not to create many skills.
126
+
127
+ The purpose is to create a small number of high-leverage skills that directly reuse the knowledge system now being built in:
128
+
129
+ - `cabloy-docs/`
130
+ - `CLAUDE.md`
131
+ - `.docs-internal/`
132
+ - `.claude/skills/`
133
+ - the Vona and Zova CLIs
134
+
135
+ That is how Cabloy gets long-term value from the documentation work.
@@ -0,0 +1,158 @@
1
+ # Global Bean Lookup
2
+
3
+ Use this page when AI or contributors need to identify which backend shorthand a bean name refers to, or decide where to continue searching after a shorthand lookup fails.
4
+
5
+ ## Why this lookup rule matters
6
+
7
+ Backend work often starts from code such as:
8
+
9
+ - `this.bean.database`
10
+ - `ctx.bean.model`
11
+ - `app.bean.xxx`
12
+
13
+ If an agent treats every bean-like class as part of one flat container, it wastes time and often inspects the wrong scene first.
14
+
15
+ The goal of this rule is to make global bean lookup fast and structurally correct:
16
+
17
+ - use `IBeanRecordGlobal` for global shorthand lookup
18
+ - use `IBeanRecordGeneral` for general full-name lookup
19
+ - use service-scene metadata and `src/service` for runtime-anchor and service lookup
20
+ - use class placement, not metadata exceptions, to keep these surfaces clean
21
+
22
+ ## The three lookup surfaces
23
+
24
+ ### 1. `IBeanRecordGlobal`
25
+
26
+ Use `IBeanRecordGlobal` for the **global shorthand authoring surface**.
27
+
28
+ This is the first static lookup surface when backend code references:
29
+
30
+ - `this.bean.xxx`
31
+ - `ctx.bean.xxx`
32
+ - `app.bean.xxx`
33
+
34
+ Typical source of truth:
35
+
36
+ - module `src/.metadata/index.ts`
37
+ - corresponding `src/bean` source file
38
+
39
+ Examples:
40
+
41
+ - `database`
42
+ - `model`
43
+
44
+ ### 2. `IBeanRecordGeneral`
45
+
46
+ Use `IBeanRecordGeneral` for the **general full-name bean surface**.
47
+
48
+ This is the right lookup surface when code references a bean by full name, such as:
49
+
50
+ - `bean._getBean('a-orm.service.database')`
51
+ - generated general bean registrations
52
+ - scene-qualified bean identities that are not global shorthand
53
+
54
+ Do not use `IBeanRecordGeneral` as the first lookup step for shorthand expressions like `this.bean.xxx`.
55
+
56
+ ### 3. Service-scene and runtime-anchor lookup
57
+
58
+ Use `src/service`, service metadata, and class-token/selector call sites for classes that are not global shorthand but still rely on container-managed behavior.
59
+
60
+ This is the right path for:
61
+
62
+ - runtime-anchor bases
63
+ - selector-based services
64
+ - class-token lookup targets
65
+ - `src/service/*_.ts` classes that should not participate in `IBeanRecordGeneral`
66
+
67
+ Examples:
68
+
69
+ - `databaseDialectBase_.ts`
70
+ - cache/summer runtime-anchor bases in `src/service`
71
+
72
+ ## The default lookup workflow
73
+
74
+ When backend code references `this.bean.xxx`, `ctx.bean.xxx`, or `app.bean.xxx`, prefer this sequence:
75
+
76
+ 1. check `IBeanRecordGlobal` in the relevant module `src/.metadata/index.ts`
77
+ 2. map the shorthand name to the generated bean type
78
+ 3. jump from the generated type to the source file in `src/bean`
79
+ 4. inspect neighboring bean-scene shorthand files only if needed for context
80
+ 5. only if the shorthand is not found, re-evaluate whether the target is actually:
81
+ - a general full-name bean
82
+ - a service-scene runtime-anchor
83
+ - a lib/helper class
84
+
85
+ This keeps shorthand lookup fast and avoids jumping into `src/service` or `src/lib` too early.
86
+
87
+ ## What to do when the shorthand is not found
88
+
89
+ If `IBeanRecordGlobal` does not contain the target name, do not assume the metadata is incomplete.
90
+
91
+ Re-check the problem category:
92
+
93
+ 1. **Is the code actually using a full-name bean?**
94
+ - then inspect `IBeanRecordGeneral`
95
+ 2. **Is the target really a service-scene runtime-anchor or selector target?**
96
+ - then inspect `src/service`, service metadata, and selector/class-token call sites
97
+ 3. **Is the target only a helper or superclass chain?**
98
+ - then inspect `src/lib`
99
+
100
+ The absence of a name from `IBeanRecordGlobal` often means the target is not a global shorthand at all.
101
+
102
+ ## Relationship to class placement
103
+
104
+ This lookup rule depends on correct backend class placement.
105
+
106
+ - `src/bean` defines the global shorthand surface
107
+ - classes that should not be global shorthand belong in `src/lib` or `src/service`
108
+ - `@Virtual()` does not remove a bean-scene class from `IBeanRecordGlobal`
109
+
110
+ That means lookup quality is improved structurally by placing classes correctly, not by adding more metadata exceptions.
111
+
112
+ For placement decisions, also read [Class Placement Rule](/ai/class-placement-rule).
113
+
114
+ ## Practical examples
115
+
116
+ ### Example: `this.bean.database`
117
+
118
+ 1. inspect the owning module `src/.metadata/index.ts`
119
+ 2. find `database` in `IBeanRecordGlobal`
120
+ 3. map it to the generated bean type
121
+ 4. jump to the corresponding `src/bean` source file
122
+
123
+ ### Example: `ctx.bean.model`
124
+
125
+ 1. inspect `IBeanRecordGlobal`
126
+ 2. find `model`
127
+ 3. jump to the bean-scene shorthand in `src/bean/bean.model.ts`
128
+ 4. continue into `src/lib` only if deeper superclass logic is needed
129
+
130
+ ### Example: database dialect runtime anchor
131
+
132
+ If the target is a dialect base or class-token runtime anchor and does not appear in `IBeanRecordGlobal`, that is expected.
133
+
134
+ Continue with:
135
+
136
+ - `src/service`
137
+ - service metadata
138
+ - class-token or selector call sites
139
+
140
+ ## Anti-patterns to avoid
141
+
142
+ Avoid these mistakes:
143
+
144
+ - treating `IBeanRecordGlobal` as a full container inventory
145
+ - jumping to `src/service` first when the code clearly uses `this.bean.xxx`
146
+ - assuming a missing shorthand means metadata is broken before checking whether the target is actually global
147
+ - keeping non-global classes in `src/bean` and compensating with metadata patches
148
+ - using `@Virtual()` as a shorthand-registration filter
149
+
150
+ ## Related guidance
151
+
152
+ Read these pages together:
153
+
154
+ - [Class Placement Rule](/ai/class-placement-rule)
155
+ - [Virtual Decorator Guidance](/ai/virtual-decorator-guidance)
156
+ - [Repo Guidance](/ai/repo-guidance)
157
+ - [Rules and Config](/ai/rules-and-config)
158
+ - [Verification](/ai/verification)
@@ -0,0 +1,62 @@
1
+ # AI Development Introduction
2
+
3
+ This page is the entrypoint for contributors who are designing, reviewing, or maintaining AI vibe coding workflows in the Cabloy repository.
4
+
5
+ The Cabloy monorepo is a good fit for AI vibe coding because the source tree already contains most of the framework knowledge an agent needs:
6
+
7
+ - root scripts for shared workflows
8
+ - Vona CLI source and command groups
9
+ - Zova CLI source and command groups
10
+ - archived docs that still capture valuable concepts
11
+ - internal engineering docs for maintainers
12
+ - Claude commands and skills
13
+
14
+ ## The main design goal
15
+
16
+ The goal is not to make AI guess Cabloy conventions more effectively.
17
+
18
+ The goal is to make AI **reuse the repo’s existing conventions directly**, especially through:
19
+
20
+ - CLI commands
21
+ - root scripts
22
+ - repo markers
23
+ - internal architecture notes
24
+ - shared public documentation
25
+
26
+ ## The knowledge layers
27
+
28
+ ### Public docs
29
+
30
+ Use `cabloy-docs/` for user-facing and agent-facing guidance that should remain durable and source-aligned.
31
+
32
+ For normal project usage, prefer the user-facing entry docs such as [Fullstack Quickstart](/fullstack/quickstart). This AI section focuses on repository workflows and AI vibe coding.
33
+
34
+ ### Internal engineering docs
35
+
36
+ Use `.docs-internal/` for architecture notes, ADRs, and maintainership rationale that should not be mixed into public how-to documentation.
37
+
38
+ ### Claude rules and commands
39
+
40
+ Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior and repeatable workflows.
41
+
42
+ ### Skills
43
+
44
+ Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
45
+
46
+ ## Recommended AI lookup rules
47
+
48
+ For backend shorthand lookup, prefer these surfaces in order:
49
+
50
+ 1. `IBeanRecordGlobal` for `this.bean.xxx`, `ctx.bean.xxx`, and `app.bean.xxx`
51
+ 2. module `src/.metadata/index.ts` to map shorthand names to generated bean types
52
+ 3. `src/bean` for the shorthand source file itself
53
+ 4. only then re-evaluate whether the target is really a general full-name bean, a service-scene runtime-anchor, or a lib/helper class
54
+
55
+ For the full lookup workflow, read [Global Bean Lookup](/ai/global-bean-lookup).
56
+
57
+ ## Common AI mistakes to avoid
58
+
59
+ - assuming Cabloy Basic and Cabloy Start are identical
60
+ - creating framework files manually when a CLI command already exists
61
+ - trusting stale legacy repo paths instead of current source
62
+ - mixing public documentation and internal rationale into one document set
@@ -0,0 +1,111 @@
1
+ # Playbook: Add a Backend Module
2
+
3
+ This playbook turns the Cabloy backend documentation into a repeatable AI-friendly workflow.
4
+
5
+ ## When to use this playbook
6
+
7
+ Use this playbook when the goal is to add a new backend feature thread in Vona, such as:
8
+
9
+ - a new module
10
+ - a new controller/service/model/entity/dto thread
11
+ - a new CRUD-oriented backend feature
12
+
13
+ ## Step 1: Detect the repo and scope
14
+
15
+ Before generating anything:
16
+
17
+ 1. confirm the active repo marker
18
+ 2. confirm whether the task is backend-only or fullstack
19
+ 3. inspect the root `package.json`
20
+ 4. inspect `npm run vona` command families
21
+
22
+ This avoids solving the wrong problem or choosing the wrong edition assumptions.
23
+
24
+ ## Step 2: Prefer the Vona CLI first
25
+
26
+ Choose the smallest matching Vona command family.
27
+
28
+ Typical options include:
29
+
30
+ - `create:*` for module/bean/test scaffolding
31
+ - `tools:*` for CRUD generation
32
+ - `init:*` for config/locale/constant/type helpers
33
+
34
+ Example paths:
35
+
36
+ ```bash
37
+ npm run vona :create:module ...
38
+ npm run vona :create:bean ...
39
+ npm run vona :tools:crud ...
40
+ ```
41
+
42
+ Do not start by hand-writing the whole thread if the generator already exists.
43
+
44
+ ## Step 3: Inspect the generated thread
45
+
46
+ After generation, inspect the resulting backend layers:
47
+
48
+ - controller
49
+ - service
50
+ - model
51
+ - entity
52
+ - dto
53
+ - migration/meta files if applicable
54
+ - locale and test files if applicable
55
+
56
+ Use the generated structure as the baseline rather than replacing it.
57
+
58
+ ## Step 4: Add contract and persistence details
59
+
60
+ Depending on the feature, extend the generated code with the right framework-level concerns:
61
+
62
+ - validation
63
+ - OpenAPI metadata
64
+ - DTO inference or explicit DTOs
65
+ - model relations
66
+ - migration and changes
67
+ - field indexes
68
+
69
+ Relevant docs:
70
+
71
+ - [Controller Guide](/backend/controller-guide)
72
+ - [Service Guide](/backend/service-guide)
73
+ - [Model Guide](/backend/model-guide)
74
+ - [Entity Guide](/backend/entity-guide)
75
+ - [DTO Guide](/backend/dto-guide)
76
+ - [Migration and Changes](/backend/migration-and-changes)
77
+
78
+ ## Step 5: Verify the backend path
79
+
80
+ Choose verification based on scope.
81
+
82
+ Typical checks include:
83
+
84
+ ```bash
85
+ npm run test
86
+ npm run tsc
87
+ npm run build
88
+ ```
89
+
90
+ Or narrower checks such as:
91
+
92
+ - module tests
93
+ - migration reset flow
94
+ - controller action testing
95
+
96
+ ## AI rule of thumb
97
+
98
+ A good AI backend workflow in Cabloy is usually:
99
+
100
+ 1. detect
101
+ 2. choose CLI
102
+ 3. generate
103
+ 4. inspect
104
+ 5. refine
105
+ 6. verify
106
+
107
+ Not:
108
+
109
+ 1. imagine the file structure
110
+ 2. write everything manually
111
+ 3. hope it matches framework conventions