cabloy 5.1.50 → 5.1.51

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 (260) 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 +288 -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 +29 -0
  17. package/.github/workflows/docs-pages.yml +54 -0
  18. package/.gitignore +1 -0
  19. package/CHANGELOG.md +29 -0
  20. package/CLAUDE.md +59 -0
  21. package/README.md +137 -0
  22. package/cabloy-docs/.vitepress/config.mjs +222 -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 +138 -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 +167 -0
  31. package/cabloy-docs/ai/edition-detection.md +30 -0
  32. package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
  33. package/cabloy-docs/ai/global-bean-lookup.md +157 -0
  34. package/cabloy-docs/ai/introduction.md +62 -0
  35. package/cabloy-docs/ai/playbook-backend-module.md +111 -0
  36. package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
  37. package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
  38. package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
  39. package/cabloy-docs/ai/repo-guidance.md +58 -0
  40. package/cabloy-docs/ai/rules-and-config.md +29 -0
  41. package/cabloy-docs/ai/skills.md +35 -0
  42. package/cabloy-docs/ai/verification.md +30 -0
  43. package/cabloy-docs/backend/aop-overview.md +128 -0
  44. package/cabloy-docs/backend/auth-guide.md +151 -0
  45. package/cabloy-docs/backend/backend-essentials.md +128 -0
  46. package/cabloy-docs/backend/broadcast-guide.md +138 -0
  47. package/cabloy-docs/backend/cache-guide.md +70 -0
  48. package/cabloy-docs/backend/captcha-guide.md +162 -0
  49. package/cabloy-docs/backend/cli.md +173 -0
  50. package/cabloy-docs/backend/config-guide.md +249 -0
  51. package/cabloy-docs/backend/controller-aop-guide.md +270 -0
  52. package/cabloy-docs/backend/controller-guide.md +347 -0
  53. package/cabloy-docs/backend/crud-workflow.md +118 -0
  54. package/cabloy-docs/backend/dto-guide.md +161 -0
  55. package/cabloy-docs/backend/dto-infer-generation.md +153 -0
  56. package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
  57. package/cabloy-docs/backend/election-guide.md +141 -0
  58. package/cabloy-docs/backend/entity-guide.md +150 -0
  59. package/cabloy-docs/backend/error-guide.md +108 -0
  60. package/cabloy-docs/backend/event-guide.md +183 -0
  61. package/cabloy-docs/backend/external-aop-guide.md +149 -0
  62. package/cabloy-docs/backend/field-indexes.md +79 -0
  63. package/cabloy-docs/backend/foundation.md +281 -0
  64. package/cabloy-docs/backend/i18n-guide.md +211 -0
  65. package/cabloy-docs/backend/internal-aop-guide.md +181 -0
  66. package/cabloy-docs/backend/introduction.md +95 -0
  67. package/cabloy-docs/backend/jwt-guide.md +276 -0
  68. package/cabloy-docs/backend/logger-guide.md +223 -0
  69. package/cabloy-docs/backend/mail-guide.md +189 -0
  70. package/cabloy-docs/backend/menu-guide.md +80 -0
  71. package/cabloy-docs/backend/migration-and-changes.md +192 -0
  72. package/cabloy-docs/backend/model-guide.md +274 -0
  73. package/cabloy-docs/backend/multi-database-datasource.md +171 -0
  74. package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
  75. package/cabloy-docs/backend/openapi-guide.md +118 -0
  76. package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
  77. package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
  78. package/cabloy-docs/backend/orm-guide.md +109 -0
  79. package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
  80. package/cabloy-docs/backend/orm-select-guide.md +243 -0
  81. package/cabloy-docs/backend/queue-guide.md +271 -0
  82. package/cabloy-docs/backend/quickstart.md +141 -0
  83. package/cabloy-docs/backend/redis-guide.md +70 -0
  84. package/cabloy-docs/backend/redlock-guide.md +60 -0
  85. package/cabloy-docs/backend/relations-guide.md +250 -0
  86. package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
  87. package/cabloy-docs/backend/schedule-guide.md +81 -0
  88. package/cabloy-docs/backend/scripts.md +116 -0
  89. package/cabloy-docs/backend/serialization-guide.md +192 -0
  90. package/cabloy-docs/backend/service-guide.md +166 -0
  91. package/cabloy-docs/backend/sharding-guide.md +49 -0
  92. package/cabloy-docs/backend/startup-guide.md +326 -0
  93. package/cabloy-docs/backend/transaction-guide.md +82 -0
  94. package/cabloy-docs/backend/unit-testing.md +209 -0
  95. package/cabloy-docs/backend/upload-guide.md +160 -0
  96. package/cabloy-docs/backend/user-access-guide.md +157 -0
  97. package/cabloy-docs/backend/validation-guide.md +80 -0
  98. package/cabloy-docs/backend/worker-guide.md +59 -0
  99. package/cabloy-docs/editions/cabloy-basic.md +25 -0
  100. package/cabloy-docs/editions/cabloy-start.md +24 -0
  101. package/cabloy-docs/editions/detection.md +31 -0
  102. package/cabloy-docs/editions/overview.md +44 -0
  103. package/cabloy-docs/frontend/api-guide.md +93 -0
  104. package/cabloy-docs/frontend/api-schema-guide.md +43 -0
  105. package/cabloy-docs/frontend/app-startup-guide.md +185 -0
  106. package/cabloy-docs/frontend/cli.md +78 -0
  107. package/cabloy-docs/frontend/component-guide.md +105 -0
  108. package/cabloy-docs/frontend/component-props-guide.md +97 -0
  109. package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
  110. package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
  111. package/cabloy-docs/frontend/design-principles.md +55 -0
  112. package/cabloy-docs/frontend/environment-config-guide.md +250 -0
  113. package/cabloy-docs/frontend/foundation.md +57 -0
  114. package/cabloy-docs/frontend/generic-component-guide.md +35 -0
  115. package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
  116. package/cabloy-docs/frontend/introduction.md +32 -0
  117. package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
  118. package/cabloy-docs/frontend/mock-guide.md +109 -0
  119. package/cabloy-docs/frontend/model-architecture.md +87 -0
  120. package/cabloy-docs/frontend/model-state-guide.md +70 -0
  121. package/cabloy-docs/frontend/module-scope.md +168 -0
  122. package/cabloy-docs/frontend/modules-and-suites.md +179 -0
  123. package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
  124. package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
  125. package/cabloy-docs/frontend/page-guide.md +223 -0
  126. package/cabloy-docs/frontend/page-params-guide.md +87 -0
  127. package/cabloy-docs/frontend/page-query-guide.md +96 -0
  128. package/cabloy-docs/frontend/page-route-guide.md +147 -0
  129. package/cabloy-docs/frontend/quickstart.md +201 -0
  130. package/cabloy-docs/frontend/route-alias-guide.md +61 -0
  131. package/cabloy-docs/frontend/scripts.md +86 -0
  132. package/cabloy-docs/frontend/sdk-guide.md +45 -0
  133. package/cabloy-docs/frontend/server-data.md +74 -0
  134. package/cabloy-docs/frontend/ssr-client-only.md +40 -0
  135. package/cabloy-docs/frontend/ssr-env.md +51 -0
  136. package/cabloy-docs/frontend/ssr-init-data.md +46 -0
  137. package/cabloy-docs/frontend/ssr-overview.md +48 -0
  138. package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
  139. package/cabloy-docs/frontend/system-startup-guide.md +186 -0
  140. package/cabloy-docs/frontend/theme-guide.md +154 -0
  141. package/cabloy-docs/frontend/zod-guide.md +161 -0
  142. package/cabloy-docs/fullstack/edition-collaboration-differences.md +61 -0
  143. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
  144. package/cabloy-docs/fullstack/introduction.md +69 -0
  145. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
  146. package/cabloy-docs/fullstack/quickstart.md +86 -0
  147. package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
  148. package/cabloy-docs/index.md +73 -0
  149. package/cabloy-docs/package.json +16 -0
  150. package/cabloy-docs/pnpm-lock.yaml +1607 -0
  151. package/cabloy-docs/reference/backend-directory-structure.md +88 -0
  152. package/cabloy-docs/reference/cli-reference.md +49 -0
  153. package/cabloy-docs/reference/glossary.md +38 -0
  154. package/cabloy-docs/reference/package-map.md +105 -0
  155. package/cabloy-docs/reference/repo-scripts.md +36 -0
  156. package/package.json +4 -1
  157. package/scripts/init.ts +12 -0
  158. package/scripts/upgrade.ts +31 -3
  159. package/vona/README.md +3 -3
  160. package/vona/README.zh-CN.md +4 -4
  161. package/vona/packages-vona/vona/package.json +1 -1
  162. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
  163. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
  164. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  165. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
  166. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
  167. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  168. package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
  169. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
  170. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  171. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  172. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
  173. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
  174. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
  175. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
  176. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
  177. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
  178. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
  179. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
  180. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  181. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  183. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  184. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
  185. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
  186. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
  187. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
  188. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
  189. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
  190. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
  191. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
  192. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
  193. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
  194. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
  195. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
  196. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
  197. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
  198. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
  199. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
  200. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
  201. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
  202. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
  203. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
  204. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
  205. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
  206. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
  207. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
  208. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
  209. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
  210. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
  211. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
  212. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
  213. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
  214. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
  215. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
  216. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
  217. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
  218. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
  219. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
  220. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
  221. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
  222. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
  223. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
  224. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
  225. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
  226. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
  227. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
  228. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
  229. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  230. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
  231. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
  232. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
  233. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  234. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
  235. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
  236. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  237. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
  238. package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  239. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
  240. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
  241. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
  242. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
  243. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
  244. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
  245. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
  246. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
  247. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
  248. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  249. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
  250. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
  251. package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
  252. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  253. package/zova/README.md +4 -4
  254. package/zova/README.zh-CN.md +4 -4
  255. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
  256. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
  257. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
  258. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
  259. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
  260. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
@@ -0,0 +1,138 @@
1
+ # Class Placement Rule
2
+
3
+ Use this rule when deciding where a backend base class should live.
4
+
5
+ The goal is to keep pure helpers out of the bean registry, keep runtime-anchor classes container-managed, and keep the global bean shorthand surface intentional.
6
+
7
+ ## The short rule
8
+
9
+ - **A**: pure helper base -> `src/lib`
10
+ - **B1**: subclass-only base -> evaluate case by case, often `src/lib`
11
+ - **B2**: runtime-anchor base that still needs container-managed or selector/class-token behavior but should not be a global bean -> prefer `src/service` with `@Service()`
12
+
13
+ ## What the categories mean
14
+
15
+ ### A: pure helper base
16
+
17
+ Use A when the class is only a reusable implementation helper.
18
+
19
+ Typical signals:
20
+
21
+ - no bean lifecycle requirement
22
+ - no class-token lookup requirement
23
+ - no selector-based resolution requirement
24
+ - no need for bean-managed context or injection
25
+
26
+ Recommended placement:
27
+
28
+ - `src/lib`
29
+
30
+ ### B1: subclass-only base
31
+
32
+ Use B1 when the class mainly exists as a superclass for concrete subclasses.
33
+
34
+ Typical signals:
35
+
36
+ - concrete behavior is usually reached through subclasses
37
+ - the superclass may not need its own durable runtime identity
38
+ - registration may be historical rather than essential
39
+
40
+ Recommended placement:
41
+
42
+ - evaluate case by case
43
+ - often `src/lib`
44
+
45
+ ### B2: runtime-anchor base
46
+
47
+ Use B2 when the class still participates in runtime bean resolution, even if it should not be treated as a public global bean.
48
+
49
+ Typical signals:
50
+
51
+ - used as a class token
52
+ - used in `_getBean(...)` or `_getBeanSelector(...)`
53
+ - participates in selector-aware resolution or instance caching
54
+ - depends on bean lifecycle or other container-managed behavior
55
+ - already uses `@Virtual()` for an intentional business meaning that should survive the move
56
+
57
+ Recommended placement:
58
+
59
+ - `src/service` with `@Service()`
60
+ - if the original class was virtual, keep `@Virtual()` after the move
61
+
62
+ ## Service underscore files
63
+
64
+ For service-scene classes, a trailing underscore in the file name is not only a naming style.
65
+
66
+ Prefer the `src/service/*_.ts` form when a class should remain container-managed but should **not** participate in the general full-name registration surface.
67
+
68
+ This usually fits classes that are:
69
+
70
+ - runtime-anchor bases
71
+ - selector or class-token anchors
72
+ - virtual bases with real runtime meaning
73
+ - not intended to be exposed as general full-name beans
74
+
75
+ Prefer a normal `src/service/*.ts` file when the service-scene class itself should remain part of the general full-name surface.
76
+
77
+ Examples:
78
+
79
+ - `cacheMemBase_.ts`
80
+ - `cacheRedisBase_.ts`
81
+ - `summerCacheBase_.ts`
82
+
83
+ Do not choose the underscore form only because a class is abstract or uses `@Virtual()`. The deciding factor is the runtime role and registration surface.
84
+
85
+ ## Bean-scene and global shorthand
86
+
87
+ For backend classes, `src/bean` defines the global shorthand surface.
88
+
89
+ A bean-scene class should be expected to participate in `IBeanRecordGlobal`, even when it uses `@Virtual()` for a real business meaning.
90
+
91
+ Do not use `@Virtual()` as a reason to suppress a bean-scene class from `IBeanRecordGlobal`.
92
+
93
+ If a class should not appear on the global shorthand surface, fix placement instead:
94
+
95
+ - move pure helper or subclass-only bases to `src/lib`
96
+ - move runtime-anchor bases to `src/service`, often `src/service/*_.ts`
97
+
98
+ Do not keep non-global classes in `src/bean` and compensate with metadata-generation exceptions or manual type patches.
99
+
100
+ ## Fast classification checklist
101
+
102
+ Ask these questions in order:
103
+
104
+ 1. Does the class still need container-managed behavior?
105
+ - if no, it is usually A or B1
106
+ 2. Is it mainly a runtime anchor rather than a public global bean?
107
+ - if yes, it is usually B2
108
+ 3. Is it mostly a superclass convenience whose logic runs through concrete subclasses?
109
+ - if yes, it is usually B1
110
+
111
+ ## Why B2 uses service-scene
112
+
113
+ B2 is about runtime semantics, not business naming.
114
+
115
+ The point is not that the class suddenly becomes a business-oriented service. The point is that it still needs container-managed behavior while no longer belonging on the global bean shorthand surface.
116
+
117
+ That is why `src/service` with `@Service()` is usually the better fit than moving it directly to `src/lib`.
118
+
119
+ If the original class already used `@Virtual()`, preserve `@Virtual()` after the move. Virtuality and service-scene placement describe different concerns and should not be conflated.
120
+
121
+ ## Validated B2 examples
122
+
123
+ The cache and summer runtime-anchor bases validated this rule in practice.
124
+
125
+ That validation also confirmed an important constraint:
126
+
127
+ - if a B2 base already used `@Virtual()`, keep `@Virtual()` after moving it to `src/service`
128
+
129
+ The next separate step after placement validation is naming consistency for the public base-class surface.
130
+
131
+ ## Related guidance
132
+
133
+ Read these pages together:
134
+
135
+ - [Backend Foundation](/backend/foundation)
136
+ - [Service Guide](/backend/service-guide)
137
+ - [Global Bean Lookup](/ai/global-bean-lookup)
138
+ - [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
@@ -0,0 +1,56 @@
1
+ # CLI for Agents
2
+
3
+ The Vona and Zova CLIs are the highest-leverage automation surface in this repository.
4
+
5
+ ## Why CLI-first matters
6
+
7
+ Using the CLI reduces both token use and framework drift.
8
+
9
+ Instead of asking the model to infer every generated file or naming convention, the skill or agent can:
10
+
11
+ 1. discover the relevant command family
12
+ 2. execute the command
13
+ 3. inspect the output
14
+ 4. apply only the smallest necessary follow-up edits
15
+
16
+ ## Existing command families
17
+
18
+ ### Vona
19
+
20
+ Vona already exposes command families such as:
21
+
22
+ - `bin:*`
23
+ - `create:*`
24
+ - `init:*`
25
+ - `tools:*`
26
+
27
+ Typical use cases:
28
+
29
+ - create suite/module/bean/test resources
30
+ - initialize config, locale, constants, assets, or types
31
+ - generate CRUD-related artifacts
32
+ - refresh metadata and dependency wiring
33
+ - run build, dev, test, typecheck, play, or database reset flows
34
+
35
+ ### Zova
36
+
37
+ Zova already exposes command families such as:
38
+
39
+ - `bin:*`
40
+ - `create:*`
41
+ - `init:*`
42
+ - `refactor:*`
43
+ - `tools:*`
44
+ - `openapi:*`
45
+
46
+ Typical use cases:
47
+
48
+ - create suite/module/page/component/mock/bean resources
49
+ - initialize app/system assets and typing helpers
50
+ - run focused refactors for page and component patterns
51
+ - generate OpenAPI-related outputs
52
+ - refresh metadata and dependency wiring
53
+
54
+ ## Edition-aware CLI usage
55
+
56
+ The command families are shared, but examples and generated targets may differ between Cabloy Basic and Cabloy Start. Detect the edition before recommending a frontend-specific example.
@@ -0,0 +1,165 @@
1
+ # CLI to Skill Map
2
+
3
+ This page explains how Cabloy skills should map onto Vona and Zova CLI capabilities.
4
+
5
+ ## Why this mapping matters
6
+
7
+ The CLI is the most efficient automation surface in the repo.
8
+
9
+ Skills should normally orchestrate CLI capabilities rather than replacing them.
10
+
11
+ That is how Cabloy reduces token use and keeps AI output aligned with framework conventions.
12
+
13
+ ## The general rule
14
+
15
+ When a task matches an existing generator, refactor, metadata, or execution command:
16
+
17
+ 1. detect the active edition
18
+ 2. identify the relevant framework side
19
+ 3. choose the correct CLI family
20
+ 4. run or recommend the CLI command
21
+ 5. inspect output
22
+ 6. apply minimal follow-up edits
23
+ 7. verify
24
+
25
+ ## Vona CLI families and likely skill roles
26
+
27
+ ### `create:*`
28
+
29
+ Typical use cases:
30
+
31
+ - suite/module/bean/test generation
32
+ - controller/service/model/entity/dto creation
33
+
34
+ Typical skill role:
35
+
36
+ - choose the right bean or module workflow
37
+ - branch on context
38
+ - then delegate creation to Vona CLI
39
+
40
+ ### `init:*`
41
+
42
+ Typical use cases:
43
+
44
+ - config / locale / constant / asset / types initialization
45
+
46
+ Typical skill role:
47
+
48
+ - decide whether the task belongs to module setup or later feature work
49
+ - then delegate initialization to Vona CLI
50
+
51
+ ### `tools:*`
52
+
53
+ Typical use cases:
54
+
55
+ - CRUD generation
56
+ - metadata and dependency refresh
57
+
58
+ Typical skill role:
59
+
60
+ - recognize when a task is “scaffold a thread” rather than “hand-build layers”
61
+ - choose the right generator
62
+ - then inspect and refine output
63
+
64
+ ### `bin:*`
65
+
66
+ Typical use cases:
67
+
68
+ - dev / test / tsc / play / db-reset / build
69
+
70
+ Typical skill role:
71
+
72
+ - pick the right verification or execution path after changes
73
+
74
+ ## Zova CLI families and likely skill roles
75
+
76
+ ### `create:*`
77
+
78
+ Typical use cases:
79
+
80
+ - page / component / module / mock / bean generation
81
+
82
+ Typical skill role:
83
+
84
+ - detect whether the task is page/component/API/model-oriented
85
+ - then delegate generation to Zova CLI
86
+
87
+ ### `refactor:*`
88
+
89
+ Typical use cases:
90
+
91
+ - page query
92
+ - page params
93
+ - component props
94
+ - generic component
95
+ - v-model
96
+
97
+ Typical skill role:
98
+
99
+ - recognize when a task is “add a framework feature to an existing page/component”
100
+ - then delegate the structural transform to Zova CLI
101
+
102
+ ### `openapi:*`
103
+
104
+ Typical use cases:
105
+
106
+ - config generation
107
+ - SDK generation
108
+
109
+ Typical skill role:
110
+
111
+ - connect backend contract changes to frontend regeneration
112
+ - then delegate to Zova OpenAPI commands
113
+
114
+ ### `tools:*`
115
+
116
+ Typical use cases:
117
+
118
+ - metadata regeneration
119
+ - dependency refresh
120
+
121
+ Typical skill role:
122
+
123
+ - notice when route/component/icon changes require metadata regeneration
124
+
125
+ ## Example mappings
126
+
127
+ ### Example: “Create a student CRUD backend thread”
128
+
129
+ - skill decides this is a backend CRUD task
130
+ - skill chooses Vona `tools:*`
131
+ - likely CLI path: `npm run vona :tools:crud ...`
132
+ - skill then verifies the generated layers and suggests follow-up edits
133
+
134
+ ### Example: “Add page params to an existing Zova page”
135
+
136
+ - skill decides this is a frontend page refactor task
137
+ - skill chooses Zova `refactor:*`
138
+ - likely CLI path: `npm run zova :refactor:pageParams ...`
139
+ - skill then reminds the user to regenerate metadata and verify route behavior
140
+
141
+ ### Example: “Backend contract changed, frontend needs refresh”
142
+
143
+ - skill decides this is a fullstack contract loop task
144
+ - skill uses docs + edition detection
145
+ - likely CLI path: Zova `openapi:*` or REST build flows
146
+ - skill then verifies the right edition-specific flavor path
147
+
148
+ ## Anti-patterns
149
+
150
+ Avoid these mistakes in skills:
151
+
152
+ - hand-writing all generated files when a CLI command exists
153
+ - editing page/component/model structure manually before checking `refactor:*`
154
+ - ignoring metadata regeneration after route/component/icon changes
155
+ - using Basic-specific examples in Start without edition detection
156
+
157
+ ## Current root skill example
158
+
159
+ The root-level skill:
160
+
161
+ - `.claude/skills/cabloy-workflow/SKILL.md`
162
+
163
+ already follows this philosophy: detect edition, classify layer, prefer CLI, then verify.
164
+
165
+ Future skills should follow the same mapping pattern.
@@ -0,0 +1,167 @@
1
+ # Docs, Skills, Rules, and CLI Mapping
2
+
3
+ This page is for docs, skills, and workflow authors who need to decide where Cabloy AI guidance should live.
4
+
5
+ This page explains how the Cabloy AI knowledge system is divided across public docs, skills, rules, and CLI capabilities.
6
+
7
+ ## Why this mapping matters
8
+
9
+ Without a clear mapping, AI systems and contributors repeat the same mistakes:
10
+
11
+ - knowledge is stored in the wrong place
12
+ - CLI capabilities are documented but not reused in skills
13
+ - skills explain things that should live in docs
14
+ - rules become too large because they try to teach everything
15
+ - the same guidance drifts across multiple files
16
+
17
+ The goal is to give each layer a distinct job.
18
+
19
+ ## The four main layers
20
+
21
+ ### 1. Public docs
22
+
23
+ Location:
24
+
25
+ - `cabloy-docs/`
26
+
27
+ Use public docs for:
28
+
29
+ - durable user-facing guidance
30
+ - durable agent-facing workflow guidance
31
+ - architecture explanations that people and agents should both understand
32
+ - edition-aware usage notes that need to be reviewed in prose
33
+
34
+ Public docs answer questions like:
35
+
36
+ - how does the fullstack collaboration loop work?
37
+ - how should Vona ORM and OpenAPI be understood?
38
+ - how does Zova page or model architecture work?
39
+ - what is different between Cabloy Basic and Cabloy Start?
40
+
41
+ ### 2. Internal engineering docs
42
+
43
+ Location:
44
+
45
+ - `.docs-internal/`
46
+
47
+ Use internal docs for:
48
+
49
+ - ADRs
50
+ - architecture rationale
51
+ - maintenance boundaries
52
+ - “why this design exists” notes that do not belong in public user docs
53
+
54
+ Internal docs answer questions like:
55
+
56
+ - why were docs and internal notes separated?
57
+ - why is AI enablement structured this way?
58
+ - what invariants should future contributors preserve?
59
+
60
+ ### 3. Rules and commands
61
+
62
+ Locations:
63
+
64
+ - `CLAUDE.md`
65
+ - `.claude/commands/`
66
+
67
+ Use rules for:
68
+
69
+ - concise repo-wide operational guidance
70
+ - default behavior Claude should follow in this repo
71
+ - short durable constraints such as edition detection and CLI-first preference
72
+
73
+ Use commands for:
74
+
75
+ - named recurring operator workflows
76
+ - shorter, explicit actions such as release or future migration helpers
77
+
78
+ These layers answer questions like:
79
+
80
+ - what should Claude check first in this repo?
81
+ - when should CLI be preferred over manual scaffolding?
82
+ - what recurring workflow deserves a named command?
83
+
84
+ ### 4. Skills
85
+
86
+ Location:
87
+
88
+ - `.claude/skills/`
89
+
90
+ Use skills for:
91
+
92
+ - procedural decision trees
93
+ - reusable workflows with branching logic
94
+ - tasks that benefit from bundled references, evals, or future deterministic helpers
95
+ - repo-specific orchestration over CLI and source inspection
96
+
97
+ Skills answer questions like:
98
+
99
+ - how should Claude choose the right Cabloy workflow?
100
+ - when should it branch between Basic and Start?
101
+ - what is the right verification path after generation or refactor work?
102
+
103
+ ## Decision rule for authors: where should a new piece of knowledge go?
104
+
105
+ Use this quick rule:
106
+
107
+ - if people and agents both need to read and understand it, put it in **public docs**
108
+ - if it is maintainer rationale or long-lived design history, put it in **internal docs**
109
+ - if it is short repo-wide behavioral guidance, put it in **CLAUDE.md**
110
+ - if it is a named repeatable operator action, put it in a **command**
111
+ - if it is a reusable procedural workflow with branching, put it in a **skill**
112
+
113
+ ## Example mappings
114
+
115
+ ### Example: “Always detect Basic vs Start before giving UI-sensitive advice”
116
+
117
+ - public explanation → [AI Edition Detection](/ai/edition-detection)
118
+ - repo-wide behavior rule → `CLAUDE.md`
119
+ - procedural enforcement → `cabloy-workflow` skill
120
+
121
+ ### Example: “Use Zova CLI refactors before hand-editing page params/query/component props”
122
+
123
+ - conceptual explanation → public docs in frontend and AI sections
124
+ - default agent behavior → `CLAUDE.md`
125
+ - step-by-step orchestration → `cabloy-workflow` skill or future specialized skills
126
+
127
+ ### Example: “How should a backend base class be placed?”
128
+
129
+ - public operational explanation → [Class Placement Rule](/ai/class-placement-rule)
130
+ - maintainer rationale and invariants → `.docs-internal/architecture/class-placement-a-b1-b2.md`
131
+ - default repo-wide behavior → `CLAUDE.md`
132
+ - procedural decision workflow → `cabloy-workflow` skill
133
+
134
+ ### Example: “How should AI look up a backend global bean?”
135
+
136
+ - public lookup explanation → [Global Bean Lookup](/ai/global-bean-lookup)
137
+ - default repo-wide behavior → `CLAUDE.md`
138
+ - procedural lookup sequence → `cabloy-workflow` skill
139
+
140
+ ### Example: “How backend OpenAPI becomes frontend SDK”
141
+
142
+ - full explanation → [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
143
+ - workflow steering → skill and rules can point to the docs and choose the right CLI path
144
+
145
+ ## Anti-patterns to avoid
146
+
147
+ Avoid these mistakes:
148
+
149
+ - putting large conceptual explanations in `CLAUDE.md`
150
+ - using a skill as the only place where an important architectural rule is explained
151
+ - duplicating the same workflow prose across docs and skills without giving each a distinct role
152
+ - creating a command for something that actually needs a branching decision tree
153
+ - creating a skill that re-implements an existing CLI generator manually
154
+
155
+ ## Why this matters for AI workflows
156
+
157
+ This mapping reduces token waste and drift.
158
+
159
+ If each layer does the right job:
160
+
161
+ - docs hold durable explanations
162
+ - rules hold short repo behavior
163
+ - commands hold named actions
164
+ - skills orchestrate real workflows
165
+ - CLI executes framework-native generation and refactor behavior
166
+
167
+ That is the AI-development model Cabloy is optimizing for.
@@ -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 assumptions
12
+ - suggest the wrong frontend flavors
13
+ - cite modules that do not exist in the active repo
14
+ - generate docs or skills that accidentally hardcode Basic-only behavior 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.