cabloy 5.1.52 → 5.1.54

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 (266) hide show
  1. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +10 -0
  2. package/.github/workflows/docs-pages.yml +1 -1
  3. package/.github/workflows/vona-cov-pg.yml +1 -1
  4. package/.github/workflows/vona-test-crud.yml +1 -1
  5. package/.github/workflows/vona-test-mysql.yml +1 -1
  6. package/.github/workflows/vona-test-pg.yml +1 -1
  7. package/.github/workflows/vona-test-sqlite3.yml +1 -1
  8. package/.github/workflows/vona-tsc.yml +1 -1
  9. package/.github/workflows/zova-ui.yml +1 -1
  10. package/CHANGELOG.md +33 -0
  11. package/CLAUDE.md +3 -0
  12. package/README.md +8 -8
  13. package/cabloy-docs/.vitepress/config.mjs +144 -50
  14. package/cabloy-docs/ai/introduction.md +44 -0
  15. package/cabloy-docs/backend/model-guide.md +7 -0
  16. package/cabloy-docs/backend/orm-mutation-guide.md +10 -0
  17. package/cabloy-docs/backend/orm-select-guide.md +7 -6
  18. package/cabloy-docs/backend/quickstart.md +9 -9
  19. package/cabloy-docs/editions/cabloy-start.md +3 -3
  20. package/cabloy-docs/editions/choosing-between-basic-and-start.md +5 -5
  21. package/cabloy-docs/editions/overview.md +34 -3
  22. package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
  23. package/cabloy-docs/frontend/environment-config-guide.md +28 -0
  24. package/cabloy-docs/frontend/foundation.md +1 -1
  25. package/cabloy-docs/frontend/introduction.md +69 -1
  26. package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
  27. package/cabloy-docs/frontend/quickstart.md +1 -0
  28. package/cabloy-docs/frontend/scripts.md +1 -1
  29. package/cabloy-docs/frontend/ssr-env.md +23 -0
  30. package/cabloy-docs/frontend/theme-guide.md +140 -7
  31. package/cabloy-docs/fullstack/cli.md +6 -6
  32. package/cabloy-docs/fullstack/edition-collaboration-differences.md +1 -1
  33. package/cabloy-docs/fullstack/introduction.md +39 -1
  34. package/cabloy-docs/fullstack/quickstart.md +8 -8
  35. package/cabloy-docs/fullstack/vona-zova-integration.md +1 -1
  36. package/cabloy-docs/index.md +1 -1
  37. package/cabloy-docs/pnpm-workspace.yaml +2 -0
  38. package/cabloy-docs/reference/cli-reference.md +65 -20
  39. package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
  40. package/cabloy-docs/reference/introduction.md +47 -0
  41. package/cabloy-docs/reference/package-map.md +2 -0
  42. package/cabloy-docs/reference/repo-scripts.md +5 -3
  43. package/package.json +3 -3
  44. package/scripts/init.ts +18 -0
  45. package/vona/README.md +5 -5
  46. package/vona/README.zh-CN.md +5 -5
  47. package/vona/package.original.json +1 -6
  48. package/vona/packages-cli/cabloy-cli/package.json +2 -2
  49. package/vona/packages-cli/cli/README.md +56 -0
  50. package/vona/packages-cli/cli/package.json +1 -1
  51. package/vona/packages-cli/cli/src/bin/vona.ts +0 -26
  52. package/vona/packages-cli/cli-set-api/README.md +48 -0
  53. package/vona/packages-cli/cli-set-api/cli/templates/create/module/boilerplate/_package.json +1 -1
  54. package/vona/packages-cli/cli-set-api/package.json +2 -2
  55. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.bin.test.ts +16 -5
  56. package/vona/packages-cli/cli-set-api/src/lib/command/bin.build.ts +2 -2
  57. package/vona/packages-cli/cli-set-api/src/lib/command/bin.buildGeneral.ts +1 -1
  58. package/vona/packages-cli/cli-set-api/src/lib/command/bin.buildModule.ts +1 -1
  59. package/vona/packages-cli/cli-set-api/src/lib/command/bin.play.ts +2 -1
  60. package/vona/packages-cli/cli-set-api/src/lib/command/bin.test.ts +1 -1
  61. package/vona/packages-utils/cascade-extend/package.json +2 -2
  62. package/vona/packages-utils/compose/package.json +2 -2
  63. package/vona/packages-utils/deps/package.json +2 -2
  64. package/vona/packages-utils/dotenv/package.json +2 -2
  65. package/vona/packages-utils/extend/package.json +2 -2
  66. package/vona/packages-utils/json5/package.json +2 -2
  67. package/vona/packages-utils/lint/package.json +1 -1
  68. package/vona/packages-utils/lint/src/oxc/lint.ts +1 -4
  69. package/vona/packages-utils/lint/src/oxc/lintVue.ts +1 -4
  70. package/vona/packages-utils/localeutil/package.json +2 -2
  71. package/vona/packages-utils/module-glob/package.json +2 -2
  72. package/vona/packages-utils/module-info-pro/package.json +2 -2
  73. package/vona/packages-utils/password-hash-salt/package.json +2 -2
  74. package/vona/packages-utils/process-helper/package.json +2 -2
  75. package/vona/packages-utils/socket/package.json +2 -2
  76. package/vona/packages-utils/table-identity/package.json +2 -2
  77. package/vona/packages-utils/utils/package.json +2 -2
  78. package/vona/packages-utils/zod-errors-custom/package.json +2 -2
  79. package/vona/packages-utils/zod-openapi/package.json +2 -2
  80. package/vona/packages-utils/zod-query/package.json +2 -2
  81. package/vona/packages-vona/vona/package.json +2 -2
  82. package/vona/packages-vona/vona-core/package.json +2 -2
  83. package/vona/packages-vona/vona-mock/package.json +2 -2
  84. package/vona/packages-vona/vona-shared/package.json +2 -2
  85. package/vona/pnpm-lock.yaml +1520 -1826
  86. package/vona/pnpm-workspace.yaml +28 -7
  87. package/vona/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  88. package/vona/src/suite/a-home/modules/home-base/package.json +1 -1
  89. package/vona/src/suite/a-home/modules/home-index/package.json +1 -1
  90. package/vona/src/suite/a-home/modules/home-user/package.json +1 -1
  91. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/package.json +1 -1
  92. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/package.json +1 -1
  93. package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +2 -2
  94. package/vona/src/suite-vendor/a-auth/modules/auth-oauth/package.json +2 -2
  95. package/vona/src/suite-vendor/a-auth/modules/auth-simple/package.json +2 -2
  96. package/vona/src/suite-vendor/a-auth/package.json +2 -2
  97. package/vona/src/suite-vendor/a-cabloy/modules/a-cabloy/package.json +2 -2
  98. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +2 -2
  99. package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/package.json +2 -2
  100. package/vona/src/suite-vendor/a-cabloy/modules/a-socket/package.json +2 -2
  101. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +2 -2
  102. package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/package.json +2 -2
  103. package/vona/src/suite-vendor/a-cabloy/modules/a-status/package.json +2 -2
  104. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  105. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +2 -2
  106. package/vona/src/suite-vendor/a-captcha/modules/captcha-simple/package.json +2 -2
  107. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  108. package/vona/src/suite-vendor/a-paypal/modules/a-paypal/package.json +2 -2
  109. package/vona/src/suite-vendor/a-paypal/package.json +1 -1
  110. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +2 -2
  111. package/vona/src/suite-vendor/a-vona/modules/a-aspectutils/package.json +2 -2
  112. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +2 -2
  113. package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/package.json +2 -2
  114. package/vona/src/suite-vendor/a-vona/modules/a-body/package.json +2 -2
  115. package/vona/src/suite-vendor/a-vona/modules/a-broadcast/package.json +2 -2
  116. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +2 -2
  117. package/vona/src/suite-vendor/a-vona/modules/a-caching/package.json +2 -2
  118. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +2 -2
  119. package/vona/src/suite-vendor/a-vona/modules/a-election/package.json +2 -2
  120. package/vona/src/suite-vendor/a-vona/modules/a-error/package.json +2 -2
  121. package/vona/src/suite-vendor/a-vona/modules/a-event/package.json +2 -2
  122. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +2 -2
  123. package/vona/src/suite-vendor/a-vona/modules/a-hmr/package.json +2 -2
  124. package/vona/src/suite-vendor/a-vona/modules/a-hmrbase/package.json +2 -2
  125. package/vona/src/suite-vendor/a-vona/modules/a-index/package.json +2 -2
  126. package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +2 -2
  127. package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +2 -2
  128. package/vona/src/suite-vendor/a-vona/modules/a-locale/package.json +2 -2
  129. package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +2 -2
  130. package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +2 -2
  131. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +2 -2
  132. package/vona/src/suite-vendor/a-vona/modules/a-menu/package.json +2 -2
  133. package/vona/src/suite-vendor/a-vona/modules/a-meta/package.json +2 -2
  134. package/vona/src/suite-vendor/a-vona/modules/a-onion/package.json +2 -2
  135. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +2 -2
  136. package/vona/src/suite-vendor/a-vona/modules/a-openapischema/package.json +2 -2
  137. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +2 -2
  138. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +2 -2
  139. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/buildWhere.ts +8 -9
  140. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/bean.model/bean.model_cache.ts +15 -9
  141. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelWhere.ts +2 -2
  142. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +2 -2
  143. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +2 -2
  144. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +2 -2
  145. package/vona/src/suite-vendor/a-vona/modules/a-play/package.json +2 -2
  146. package/vona/src/suite-vendor/a-vona/modules/a-printtip/package.json +2 -2
  147. package/vona/src/suite-vendor/a-vona/modules/a-queue/package.json +2 -2
  148. package/vona/src/suite-vendor/a-vona/modules/a-redis/package.json +2 -2
  149. package/vona/src/suite-vendor/a-vona/modules/a-redlock/package.json +2 -2
  150. package/vona/src/suite-vendor/a-vona/modules/a-runtime/package.json +2 -2
  151. package/vona/src/suite-vendor/a-vona/modules/a-schedule/package.json +2 -2
  152. package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +2 -2
  153. package/vona/src/suite-vendor/a-vona/modules/a-serialization/package.json +2 -2
  154. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +2 -2
  155. package/vona/src/suite-vendor/a-vona/modules/a-static/package.json +2 -2
  156. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +2 -2
  157. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +2 -2
  158. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
  159. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +2 -2
  160. package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +2 -2
  161. package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +2 -2
  162. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -2
  163. package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +2 -2
  164. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +2 -2
  165. package/vona/src/suite-vendor/a-vona/modules/a-zod/package.json +2 -2
  166. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  167. package/zova/package.original.json +2 -15
  168. package/zova/packages-cli/cli/README.md +58 -0
  169. package/zova/packages-cli/cli/package.json +4 -4
  170. package/zova/packages-cli/cli/src/bin/zova.ts +0 -25
  171. package/zova/packages-cli/cli-set-front/README.md +50 -0
  172. package/zova/packages-cli/cli-set-front/cli/templates/create/module/boilerplate/_package.json +1 -1
  173. package/zova/packages-cli/cli-set-front/package.json +7 -7
  174. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.bin.buildRest.ts +49 -15
  175. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
  176. package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
  177. package/zova/packages-cli/cli-set-front/src/lib/beans.ts +0 -4
  178. package/zova/packages-cli/cli-set-front/src/lib/command/bin.buildModule.ts +1 -1
  179. package/zova/packages-cli/cli-set-front/src/lib/command/bin.buildRest.ts +1 -1
  180. package/zova/packages-utils/logger/package.json +3 -3
  181. package/zova/packages-utils/zova-jsx/package.json +6 -6
  182. package/zova/packages-utils/zova-openapi/package.json +2 -2
  183. package/zova/packages-utils/zova-vite/package.json +6 -6
  184. package/zova/packages-zova/zova/package.json +4 -4
  185. package/zova/packages-zova/zova-core/package.json +13 -13
  186. package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
  187. package/zova/pnpm-lock.yaml +427 -375
  188. package/zova/pnpm-workspace.yaml +21 -0
  189. package/zova/src/front/config/config/config.ts +1 -1
  190. package/zova/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  191. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
  192. package/zova/src/suite/a-demo/modules/demo-todo/package.json +1 -1
  193. package/zova/src/suite/a-devui/modules/devui-adapter/package.json +1 -1
  194. package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
  195. package/zova/src/suite/a-home/modules/home-api/package.json +1 -1
  196. package/zova/src/suite/a-home/modules/home-base/package.json +1 -1
  197. package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
  198. package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
  199. package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
  200. package/zova/src/suite/a-home/modules/home-icon/package.json +1 -1
  201. package/zova/src/suite/a-home/modules/home-indexadmin/package.json +1 -1
  202. package/zova/src/suite/a-home/modules/home-indexweb/package.json +1 -1
  203. package/zova/src/suite/a-home/modules/home-layoutadmin/package.json +1 -1
  204. package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
  205. package/zova/src/suite/a-home/modules/home-layoutempty/package.json +1 -1
  206. package/zova/src/suite/a-home/modules/home-layoutweb/package.json +1 -1
  207. package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
  208. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
  209. package/zova/src/suite/a-home/modules/home-login/package.json +1 -1
  210. package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
  211. package/zova/src/suite/a-home/modules/home-passport/package.json +1 -1
  212. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
  213. package/zova/src/suite/a-home/modules/home-theme/package.json +1 -1
  214. package/zova/src/suite/cabloy-basic/modules/basic-adapter/package.json +1 -1
  215. package/zova/src/suite/cabloy-basic/modules/basic-captcha/package.json +1 -1
  216. package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
  217. package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +1 -1
  218. package/zova/src/suite/cabloy-basic/modules/basic-commandssync/package.json +1 -1
  219. package/zova/src/suite/cabloy-basic/modules/basic-currency/package.json +1 -1
  220. package/zova/src/suite/cabloy-basic/modules/basic-date/package.json +1 -1
  221. package/zova/src/suite/cabloy-basic/modules/basic-form/package.json +1 -1
  222. package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
  223. package/zova/src/suite/cabloy-basic/modules/basic-input/package.json +1 -1
  224. package/zova/src/suite/cabloy-basic/modules/basic-page/package.json +1 -1
  225. package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
  226. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/package.json +1 -1
  227. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
  228. package/zova/src/suite/cabloy-basic/modules/basic-select/package.json +1 -1
  229. package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +1 -1
  230. package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
  231. package/zova/src/suite/cabloy-basic/modules/basic-text/package.json +1 -1
  232. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +2 -2
  233. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  234. package/zova/src/suite-vendor/a-zova/modules/a-api/package.json +2 -2
  235. package/zova/src/suite-vendor/a-zova/modules/a-app/package.json +2 -2
  236. package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +2 -2
  237. package/zova/src/suite-vendor/a-zova/modules/a-behavior/package.json +2 -2
  238. package/zova/src/suite-vendor/a-zova/modules/a-behaviors/package.json +2 -2
  239. package/zova/src/suite-vendor/a-zova/modules/a-boundary/package.json +2 -2
  240. package/zova/src/suite-vendor/a-zova/modules/a-command/package.json +2 -2
  241. package/zova/src/suite-vendor/a-zova/modules/a-fetch/package.json +2 -2
  242. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +2 -2
  243. package/zova/src/suite-vendor/a-zova/modules/a-icon/package.json +2 -2
  244. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +2 -2
  245. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
  246. package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +3 -3
  247. package/zova/src/suite-vendor/a-zova/modules/a-meta/package.json +2 -2
  248. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +3 -3
  249. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +2 -2
  250. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +2 -2
  251. package/zova/src/suite-vendor/a-zova/modules/a-routerstack/package.json +2 -2
  252. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +2 -2
  253. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +2 -2
  254. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +1 -0
  255. package/zova/src/suite-vendor/a-zova/modules/a-ssrhmr/package.json +3 -3
  256. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +2 -2
  257. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +2 -2
  258. package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
  259. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +2 -2
  260. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +5 -5
  261. package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
  262. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +9 -9
  263. package/zova/src/suite-vendor/a-zova/package.json +26 -26
  264. package/zova/packages-cli/cli-set-front/src/lib/command/init.legacy.ts +0 -10
  265. package/zova/packages-cli/cli-set-front/src/lib/command/refactor.componentEmits.ts +0 -33
  266. package/zova/packages-cli/cli-set-front/src/lib/command/refactor.componentSlots.ts +0 -33
@@ -156,6 +156,16 @@ Check whether the feature needs:
156
156
  - SSR or route-path verification
157
157
  - edition-specific flavor, SSR site baseline, and project-asset verification
158
158
 
159
+ ### SSR theme review reminder
160
+
161
+ If the frontend change is SSR theme-sensitive, apply this short review before finishing:
162
+
163
+ - detect the active edition marker and UI library before assuming SSR theme behavior
164
+ - do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff
165
+ - in Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth
166
+ - keep theme-finalization logic inside the active theme handler or client boot path instead of duplicating it in page or component code
167
+ - verify both server handoff and client hydration behavior for the active adapter
168
+
159
169
  ### Optional backend-contract reminder
160
170
 
161
171
  Stay frontend-first, but if the frontend task clearly depends on backend contract output, add a reminder such as:
@@ -25,7 +25,7 @@ jobs:
25
25
  - uses: actions/checkout@v6
26
26
  - uses: pnpm/action-setup@v5
27
27
  with:
28
- version: 10.19.0
28
+ version: 11.5.2
29
29
  - uses: actions/setup-node@v6
30
30
  with:
31
31
  node-version: 24
@@ -29,7 +29,7 @@ jobs:
29
29
  node-version: ${{ matrix.node-version }}
30
30
  - uses: pnpm/action-setup@v5
31
31
  with:
32
- version: 10.19.0
32
+ version: 11.5.2
33
33
  - name: init
34
34
  run: npm run init
35
35
  - name: cov
@@ -22,7 +22,7 @@ jobs:
22
22
  node-version: ${{ matrix.node-version }}
23
23
  - uses: pnpm/action-setup@v5
24
24
  with:
25
- version: 10.19.0
25
+ version: 11.5.2
26
26
  - name: init
27
27
  run: npm run init
28
28
  - run: npm run vona :create:module demo-student -- --suite --ci
@@ -29,7 +29,7 @@ jobs:
29
29
  node-version: ${{ matrix.node-version }}
30
30
  - uses: pnpm/action-setup@v5
31
31
  with:
32
- version: 10.19.0
32
+ version: 11.5.2
33
33
  - name: init
34
34
  run: npm run init
35
35
  - run: DATABASE_DEFAULT_CLIENT=mysql DATABASE_CLIENT_MYSQL_HOST=127.0.0.1 DATABASE_CLIENT_MYSQL_PASSWORD=root npm run test
@@ -29,7 +29,7 @@ jobs:
29
29
  node-version: ${{ matrix.node-version }}
30
30
  - uses: pnpm/action-setup@v5
31
31
  with:
32
- version: 10.19.0
32
+ version: 11.5.2
33
33
  - name: init
34
34
  run: npm run init
35
35
  - run: DATABASE_DEFAULT_CLIENT=pg npm run test
@@ -22,7 +22,7 @@ jobs:
22
22
  node-version: ${{ matrix.node-version }}
23
23
  - uses: pnpm/action-setup@v5
24
24
  with:
25
- version: 10.19.0
25
+ version: 11.5.2
26
26
  - name: init
27
27
  run: npm run init
28
28
  - run: DATABASE_DEFAULT_CLIENT=sqlite3 npm run test
@@ -17,7 +17,7 @@ jobs:
17
17
  node-version: ${{ matrix.node-version }}
18
18
  - uses: pnpm/action-setup@v5
19
19
  with:
20
- version: 10.19.0
20
+ version: 11.5.2
21
21
  - name: init
22
22
  run: npm run init
23
23
  - name: tsc
@@ -17,7 +17,7 @@ jobs:
17
17
  node-version: ${{ matrix.node-version }}
18
18
  - uses: pnpm/action-setup@v5
19
19
  with:
20
- version: 10.19.0
20
+ version: 11.5.2
21
21
  - name: init
22
22
  run: npm run init
23
23
  - name: suite
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.54
4
+
5
+ ### Features
6
+
7
+ - Add a set of incremental feature updates across the codebase to expand supported functionality and behavior.
8
+
9
+ ### Bug Fixes
10
+
11
+ - Support `src/module` test targets.
12
+ - Support module-relative test targets.
13
+
14
+ ### Improvements
15
+
16
+ - Clarify ORM omit semantics in tests and documentation.
17
+ - Refine query and model-related internals, including updates to post handling, `where` building, and model cache behavior.
18
+
19
+ ## 5.1.53
20
+
21
+ ### Features
22
+
23
+ - Update application functionality across core feature areas.
24
+ - Update configuration behavior and related integration points.
25
+ - Update theme configuration and controller handling.
26
+
27
+ ### Improvements
28
+
29
+ - Remove the generated `$useLocale` helper.
30
+ - Refresh project configuration files and internal implementation details.
31
+
32
+ ### Breaking Changes
33
+
34
+ - Rename the SSR cookie-disabled server flag and update related documentation.
35
+
3
36
  ## 5.1.52
4
37
 
5
38
  ### Features
package/CLAUDE.md CHANGED
@@ -44,6 +44,9 @@ Before inventing a custom implementation path:
44
44
  - Prefer CLI-backed workflows over manual scaffolding whenever Vona or Zova already provides a generator, refactor, metadata, or verification command.
45
45
  - Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
46
46
  - For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
47
+ - For SSR theme-sensitive frontend work, detect the active edition marker and UI library before making assumptions. Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions; Cabloy Start currently means Vuetify assumptions.
48
+ - In Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth. Keep theme-sensitive SSR branching hydration-tolerant or defer final theme-sensitive decisions to the client.
49
+ - Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff. Verify the active theme handler and client hydration path before changing SSR theme behavior.
47
50
  - Reuse existing repo terminology: Cabloy, Vona, Zova, suite, module, bean, SSR, SPA, Web, Admin.
48
51
  - For backend base-class placement, use the A / B1 / B2 rule from `cabloy-docs/ai/class-placement-rule.md`.
49
52
  - Pure helper bases belong in `src/lib`; subclass-only bases should be evaluated case by case and often belong in `src/lib`.
package/README.md CHANGED
@@ -20,14 +20,14 @@ With Vona, Zova, suite-based modules, and CLI-first workflows, Cabloy turns comm
20
20
 
21
21
  Before creating a new Cabloy project, make sure your environment has:
22
22
 
23
- | Name | Version |
24
- | ---------- | ----------- |
25
- | pnpm | `>=10.19.0` |
26
- | Node.js | `>=24.4.0` |
27
- | Redis | `>=7.2.6` |
28
- | SQLite3 | `Built-in` |
29
- | MySQL | `>=8` |
30
- | PostgreSQL | `>=16` |
23
+ | Name | Version |
24
+ | ---------- | ---------- |
25
+ | pnpm | `>=11.5.2` |
26
+ | Node.js | `>=24.4.0` |
27
+ | Redis | `>=7.2.6` |
28
+ | SQLite3 | `Built-in` |
29
+ | MySQL | `>=8` |
30
+ | PostgreSQL | `>=16` |
31
31
 
32
32
  - `Redis`: powers queue, schedule, startup, broadcast, caching, two-layer cache, and redlock
33
33
  - `SQLite3`: if you use `better-sqlite3`, set up `node-gyp` before installing dependencies
@@ -31,12 +31,60 @@ const aiItems = [
31
31
  { text: 'Verification', link: '/ai/verification' },
32
32
  ];
33
33
 
34
- const referenceItems = [
35
- { text: 'Repo Scripts', link: '/reference/repo-scripts' },
36
- { text: 'CLI Reference', link: '/reference/cli-reference' },
37
- { text: 'Package Map', link: '/reference/package-map' },
38
- { text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
39
- { text: 'Glossary', link: '/reference/glossary' },
34
+ const fullstackGroups = [
35
+ {
36
+ text: 'Fullstack / Getting Started',
37
+ items: [
38
+ { text: 'Introduction', link: '/fullstack/introduction' },
39
+ { text: 'Quickstart', link: '/fullstack/quickstart' },
40
+ ],
41
+ },
42
+ {
43
+ text: 'Tooling & Workflow',
44
+ items: [
45
+ { text: 'CLI', link: '/fullstack/cli' },
46
+ { text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
47
+ ],
48
+ },
49
+ {
50
+ text: 'Architecture & Integration',
51
+ items: [
52
+ {
53
+ text: 'Comparison with Other Frameworks',
54
+ link: '/fullstack/comparison-with-other-frameworks',
55
+ },
56
+ { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
57
+ { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
58
+ {
59
+ text: 'Frontend Metadata Back to Backend',
60
+ link: '/fullstack/frontend-metadata-to-backend',
61
+ },
62
+ {
63
+ text: 'Edition Collaboration Differences',
64
+ link: '/fullstack/edition-collaboration-differences',
65
+ },
66
+ ],
67
+ },
68
+ ];
69
+
70
+ const referenceGroups = [
71
+ {
72
+ text: 'Reference / Workflow Entry',
73
+ items: [
74
+ { text: 'Introduction', link: '/reference/introduction' },
75
+ { text: 'Repo Scripts', link: '/reference/repo-scripts' },
76
+ { text: 'CLI Reference', link: '/reference/cli-reference' },
77
+ ],
78
+ },
79
+ {
80
+ text: 'Structure & Lookup',
81
+ items: [
82
+ { text: 'Package Map', link: '/reference/package-map' },
83
+ { text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
84
+ { text: 'Frontend Directory Structure', link: '/reference/frontend-directory-structure' },
85
+ { text: 'Glossary', link: '/reference/glossary' },
86
+ ],
87
+ },
40
88
  ];
41
89
 
42
90
  const GA_MEASUREMENT_ID = process.env.GA_MEASUREMENT_ID;
@@ -74,46 +122,27 @@ export default defineConfig({
74
122
  nav: [
75
123
  { text: 'Home', link: '/' },
76
124
  { text: 'Fullstack', link: '/fullstack/introduction', activeMatch: '^/fullstack/' },
77
- { text: 'Backend', link: '/backend/introduction', activeMatch: '^/backend/' },
78
- { text: 'Frontend', link: '/frontend/introduction', activeMatch: '^/frontend/' },
125
+ { text: 'Backend (Vona)', link: '/backend/introduction', activeMatch: '^/backend/' },
126
+ { text: 'Frontend (Zova)', link: '/frontend/introduction', activeMatch: '^/frontend/' },
79
127
  { text: 'Editions', link: '/editions/overview', activeMatch: '^/editions/' },
80
128
  { text: 'AI Development', link: '/ai/introduction', activeMatch: '^/ai/' },
81
- { text: 'Reference', link: '/reference/repo-scripts', activeMatch: '^/reference/' },
129
+ { text: 'Reference', link: '/reference/introduction', activeMatch: '^/reference/' },
82
130
  ],
83
131
  sidebar: {
84
- '/fullstack/': [
85
- {
86
- text: 'Fullstack',
87
- items: [
88
- { text: 'Introduction', link: '/fullstack/introduction' },
89
- {
90
- text: 'Comparison with Other Frameworks',
91
- link: '/fullstack/comparison-with-other-frameworks',
92
- },
93
- { text: 'Quickstart', link: '/fullstack/quickstart' },
94
- { text: 'CLI', link: '/fullstack/cli' },
95
- { text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
96
- { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
97
- { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
98
- {
99
- text: 'Frontend Metadata Back to Backend',
100
- link: '/fullstack/frontend-metadata-to-backend',
101
- },
102
- {
103
- text: 'Edition Collaboration Differences',
104
- link: '/fullstack/edition-collaboration-differences',
105
- },
106
- ],
107
- },
108
- ],
132
+ '/fullstack/': fullstackGroups,
109
133
  '/backend/': [
110
134
  {
111
- text: 'Backend (Vona)',
135
+ text: 'Backend (Vona) / Getting Started',
112
136
  items: [
113
137
  { text: 'Introduction', link: '/backend/introduction' },
114
138
  { text: 'Foundation', link: '/backend/foundation' },
115
139
  { text: 'Backend Essentials', link: '/backend/backend-essentials' },
116
140
  { text: 'Quickstart', link: '/backend/quickstart' },
141
+ ],
142
+ },
143
+ {
144
+ text: 'Tooling & Runtime',
145
+ items: [
117
146
  { text: 'CLI', link: '/backend/cli' },
118
147
  { text: 'Scripts', link: '/backend/scripts' },
119
148
  { text: 'Runtime and Flavors', link: '/backend/runtime-and-flavors' },
@@ -123,18 +152,34 @@ export default defineConfig({
123
152
  text: 'Multi-Instance and Instance Resolution',
124
153
  link: '/backend/multi-instance-and-instance-resolution',
125
154
  },
155
+ ],
156
+ },
157
+ {
158
+ text: 'Security & Access',
159
+ items: [
126
160
  { text: 'Auth Guide', link: '/backend/auth-guide' },
127
161
  { text: 'Captcha Guide', link: '/backend/captcha-guide' },
128
162
  { text: 'User Access Guide', link: '/backend/user-access-guide' },
163
+ { text: 'JWT Guide', link: '/backend/jwt-guide' },
164
+ { text: 'Validation Guide', link: '/backend/validation-guide' },
165
+ ],
166
+ },
167
+ {
168
+ text: 'Application Basics',
169
+ items: [
129
170
  { text: 'Menu Guide', link: '/backend/menu-guide' },
130
171
  { text: 'I18n Guide', link: '/backend/i18n-guide' },
131
172
  { text: 'Error Guide', link: '/backend/error-guide' },
132
- { text: 'JWT Guide', link: '/backend/jwt-guide' },
133
173
  { text: 'Event Guide', link: '/backend/event-guide' },
134
174
  { text: 'Logger Guide', link: '/backend/logger-guide' },
135
175
  { text: 'Upload Guide', link: '/backend/upload-guide' },
136
176
  { text: 'Mail Guide', link: '/backend/mail-guide' },
137
177
  { text: 'Serialization Guide', link: '/backend/serialization-guide' },
178
+ ],
179
+ },
180
+ {
181
+ text: 'Core Programming Model',
182
+ items: [
138
183
  { text: 'AOP Overview', link: '/backend/aop-overview' },
139
184
  { text: 'Controller Guide', link: '/backend/controller-guide' },
140
185
  { text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
@@ -144,10 +189,14 @@ export default defineConfig({
144
189
  { text: 'Model Guide', link: '/backend/model-guide' },
145
190
  { text: 'Entity Guide', link: '/backend/entity-guide' },
146
191
  { text: 'DTO Guide', link: '/backend/dto-guide' },
192
+ ],
193
+ },
194
+ {
195
+ text: 'Data & CRUD',
196
+ items: [
147
197
  { text: 'CRUD Workflow', link: '/backend/crud-workflow' },
148
198
  { text: 'Migration and Changes', link: '/backend/migration-and-changes' },
149
199
  { text: 'Field Indexes', link: '/backend/field-indexes' },
150
- { text: 'Unit Testing', link: '/backend/unit-testing' },
151
200
  { text: 'ORM Guide', link: '/backend/orm-guide' },
152
201
  { text: 'ORM Configuration Guide', link: '/backend/orm-configuration-guide' },
153
202
  { text: 'ORM Select Guide', link: '/backend/orm-select-guide' },
@@ -155,6 +204,11 @@ export default defineConfig({
155
204
  { text: 'ORM Aggregate and Group Guide', link: '/backend/orm-aggregate-group-guide' },
156
205
  { text: 'Relations Guide', link: '/backend/relations-guide' },
157
206
  { text: 'Transaction Guide', link: '/backend/transaction-guide' },
207
+ ],
208
+ },
209
+ {
210
+ text: 'Infrastructure & Distributed',
211
+ items: [
158
212
  { text: 'Cache Guide', link: '/backend/cache-guide' },
159
213
  {
160
214
  text: 'Multi-Database and Datasource Guide',
@@ -169,55 +223,100 @@ export default defineConfig({
169
223
  { text: 'Worker Guide', link: '/backend/worker-guide' },
170
224
  { text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
171
225
  { text: 'Redlock Guide', link: '/backend/redlock-guide' },
172
- { text: 'Validation Guide', link: '/backend/validation-guide' },
226
+ ],
227
+ },
228
+ {
229
+ text: 'API & Testing',
230
+ items: [
173
231
  { text: 'OpenAPI Guide', link: '/backend/openapi-guide' },
174
232
  { text: 'DTO Infer and Generation', link: '/backend/dto-infer-generation' },
233
+ { text: 'Unit Testing', link: '/backend/unit-testing' },
175
234
  ],
176
235
  },
177
236
  ],
178
237
  '/frontend/': [
179
238
  {
180
- text: 'Frontend (Zova)',
239
+ text: 'Frontend (Zova) / Getting Started',
181
240
  items: [
182
241
  { text: 'Introduction', link: '/frontend/introduction' },
183
242
  { text: 'Quickstart', link: '/frontend/quickstart' },
184
243
  { text: 'Foundation', link: '/frontend/foundation' },
244
+ ],
245
+ },
246
+ {
247
+ text: 'Architecture & Modules',
248
+ items: [
185
249
  { text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
186
250
  { text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
187
251
  { text: 'Module Scope', link: '/frontend/module-scope' },
252
+ { text: 'Design Principles', link: '/frontend/design-principles' },
253
+ ],
254
+ },
255
+ {
256
+ text: 'Environment & Startup',
257
+ items: [
188
258
  { text: 'Environment and Config Guide', link: '/frontend/environment-config-guide' },
189
259
  { text: 'App Startup Guide', link: '/frontend/app-startup-guide' },
190
260
  { text: 'System Startup Guide', link: '/frontend/system-startup-guide' },
261
+ ],
262
+ },
263
+ {
264
+ text: 'Tooling',
265
+ items: [
266
+ { text: 'CLI', link: '/frontend/cli' },
267
+ { text: 'Scripts', link: '/frontend/scripts' },
268
+ { text: 'Mock Guide', link: '/frontend/mock-guide' },
269
+ ],
270
+ },
271
+ {
272
+ text: 'Pages & Routing',
273
+ items: [
191
274
  { text: 'Page Guide', link: '/frontend/page-guide' },
192
275
  { text: 'Page Query Guide', link: '/frontend/page-query-guide' },
193
276
  { text: 'Page Params Guide', link: '/frontend/page-params-guide' },
194
- { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
195
277
  { text: 'Zod Guide', link: '/frontend/zod-guide' },
278
+ { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
196
279
  { text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
197
280
  { text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
281
+ ],
282
+ },
283
+ {
284
+ text: 'Components & UI',
285
+ items: [
198
286
  { text: 'Component Guide', link: '/frontend/component-guide' },
199
287
  { text: 'Component Props Guide', link: '/frontend/component-props-guide' },
200
288
  { text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
201
289
  { text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
202
- { text: 'CLI', link: '/frontend/cli' },
203
- { text: 'Scripts', link: '/frontend/scripts' },
204
- { text: 'Mock Guide', link: '/frontend/mock-guide' },
205
290
  { text: 'CSS-in-JS Guide', link: '/frontend/css-in-js-guide' },
206
291
  { text: 'Theme Guide', link: '/frontend/theme-guide' },
207
292
  { text: 'Icon Engine Guide', link: '/frontend/icon-engine-guide' },
293
+ ],
294
+ },
295
+ {
296
+ text: 'Data & State',
297
+ items: [
208
298
  { text: 'Server Data', link: '/frontend/server-data' },
209
299
  { text: 'API Guide', link: '/frontend/api-guide' },
210
300
  { text: 'Model Architecture', link: '/frontend/model-architecture' },
211
301
  { text: 'Model State Guide', link: '/frontend/model-state-guide' },
302
+ ],
303
+ },
304
+ {
305
+ text: 'API Contract & SDK',
306
+ items: [
212
307
  { text: 'OpenAPI SDK Guide', link: '/frontend/openapi-sdk-guide' },
213
308
  { text: 'API Schema Guide', link: '/frontend/api-schema-guide' },
214
309
  { text: 'SDK Guide', link: '/frontend/sdk-guide' },
310
+ ],
311
+ },
312
+ {
313
+ text: 'SSR',
314
+ items: [
215
315
  { text: 'SSR Overview', link: '/frontend/ssr-overview' },
216
316
  { text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
217
317
  { text: 'SSR ClientOnly', link: '/frontend/ssr-client-only' },
218
318
  { text: 'SSR SEO Meta', link: '/frontend/ssr-seo-meta' },
219
319
  { text: 'SSR Env', link: '/frontend/ssr-env' },
220
- { text: 'Design Principles', link: '/frontend/design-principles' },
221
320
  ],
222
321
  },
223
322
  ],
@@ -233,12 +332,7 @@ export default defineConfig({
233
332
  items: aiItems,
234
333
  },
235
334
  ],
236
- '/reference/': [
237
- {
238
- text: 'Reference',
239
- items: referenceItems,
240
- },
241
- ],
335
+ '/reference/': referenceGroups,
242
336
  },
243
337
  socialLinks: [{ icon: 'github', link: 'https://github.com/cabloy/cabloy' }],
244
338
  search: {
@@ -23,6 +23,15 @@ The goal is to make AI **reuse the repo’s existing conventions directly**, esp
23
23
  - internal architecture notes
24
24
  - shared public documentation
25
25
 
26
+ ## How to approach AI work
27
+
28
+ For contributor and automation workflows in this repository, prefer this order:
29
+
30
+ 1. inspect the active edition and repo markers before making UI-sensitive or workflow-sensitive assumptions
31
+ 2. inspect root scripts, Vona CLI, and Zova CLI before inventing manual scaffolding or custom workflow steps
32
+ 3. use public docs for durable user-facing guidance and `.docs-internal/` for maintainer rationale
33
+ 4. encode repeatable behavior in Claude rules, commands, or skills instead of relying on unstated habits
34
+
26
35
  ## The knowledge layers
27
36
 
28
37
  ### Public docs
@@ -43,6 +52,41 @@ Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior an
43
52
 
44
53
  Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
45
54
 
55
+ ## AI reading paths
56
+
57
+ Use this page as the main AI-development hub, then choose the path that matches your task.
58
+
59
+ ### Repo workflow path
60
+
61
+ Start here when the task is about choosing the right repo surface, docs location, or automation boundary:
62
+
63
+ - [Repo Guidance](/ai/repo-guidance)
64
+ - [Docs / Skills Mapping](/ai/docs-skills-rules-mapping)
65
+ - [CLI to Skill Map](/ai/cli-to-skill-map)
66
+ - [Skills](/ai/skills)
67
+ - [Rules and Config](/ai/rules-and-config)
68
+
69
+ ### Framework implementation path
70
+
71
+ Use this path when the task is about implementing or reviewing Cabloy code with repo-aware rules:
72
+
73
+ - [Class Placement Rule](/ai/class-placement-rule)
74
+ - [Global Bean Lookup](/ai/global-bean-lookup)
75
+ - [Playbook: Backend Module](/ai/playbook-backend-module)
76
+ - [Playbook: Frontend Page](/ai/playbook-frontend-page)
77
+ - [Playbook: Contract Regeneration](/ai/playbook-contract-regeneration)
78
+ - [Playbook: Metadata Refresh](/ai/playbook-metadata-refresh)
79
+
80
+ ### Verification and roadmap path
81
+
82
+ Use this path when the task is about consistency checks, verification, or future workflow planning:
83
+
84
+ - [Edition Detection](/ai/edition-detection)
85
+ - [Edition Consistency Checklist](/ai/edition-consistency-checklist)
86
+ - [Verification](/ai/verification)
87
+ - [Future Skill Roadmap](/ai/future-skill-roadmap)
88
+ - [CLI for Agents](/ai/cli-for-agents)
89
+
46
90
  ## Recommended AI lookup rules
47
91
 
48
92
  For backend shorthand lookup, prefer these surfaces in order:
@@ -105,6 +105,13 @@ return await this.scope.model.student.deleteById(id);
105
105
 
106
106
  These methods are also part of the generated CRUD thread; see [CRUD Workflow](/backend/crud-workflow).
107
107
 
108
+ When using magic methods, keep one semantic detail in mind:
109
+
110
+ - default `eq` methods can treat an omitted argument as `null`
111
+ - non-`eq` methods require an explicit argument
112
+
113
+ For omission inside structured `where` objects, prefer `Op.omit`; for SQL null checks, use `null`.
114
+
108
115
  ## Query-builder support
109
116
 
110
117
  Vona models are built on Knex, so the model layer also supports lower-level query builder access when needed.
@@ -180,6 +180,16 @@ The important rule is:
180
180
  - the underlying write semantics still come from the standard ORM mutation surface
181
181
  - custom model methods take precedence when business-specific behavior is needed
182
182
 
183
+ There is also a useful argument-handling rule to remember:
184
+
185
+ - default `eq` magic methods such as `getByName()` or `selectByName()` treat an omitted argument as `null`
186
+ - non-`eq` magic methods such as `getByNameEqI()` require an explicit value and throw if the argument is omitted
187
+
188
+ This aligns magic-method behavior with the current ORM `where` semantics:
189
+
190
+ - `Op.omit` means omit a condition explicitly
191
+ - `null` means SQL `IS NULL`
192
+
183
193
  That means mutation should stay conceptually grounded in the standard model methods even when convenience wrappers are present.
184
194
 
185
195
  ## Implementation checks for ORM mutation changes
@@ -110,7 +110,6 @@ The operator model is broad and includes examples like:
110
110
  - `_includes_`
111
111
  - case-insensitive variants
112
112
  - `_ref_`
113
- - `_skip_`
114
113
 
115
114
  That operator vocabulary is part of the Cabloy data language and should be reused consistently.
116
115
 
@@ -121,15 +120,17 @@ A practical operator-family reading is:
121
120
  - null checks: `_is_`, `_isNot_`
122
121
  - string matching: `_startsWith_`, `_endsWith_`, `_includes_`, and case-insensitive variants
123
122
  - composition/subquery: `_and_`, `_or_`, `_not_`, `_exists_`, `_notExists_`
124
- - identifier or composition helpers: `_ref_`, `_skip_`
123
+ - identifier helper: `_ref_`
125
124
 
126
- ### `_skip_`
125
+ ### Omitting a condition with `Op.omit`
127
126
 
128
- `_skip_` is especially useful when building query objects compositionally.
127
+ Use `Op.omit` when you want to express omission explicitly at the call site. `Op.omit` is defined as `undefined`, but using the named constant makes the business meaning of the query object clearer.
129
128
 
130
129
  Representative pattern:
131
130
 
132
131
  ```typescript
132
+ import { Op } from 'vona-module-a-orm';
133
+
133
134
  const where = {
134
135
  title: { _includes_: 'ai' },
135
136
  stars: { _gt_: 20 },
@@ -138,12 +139,12 @@ const where = {
138
139
  await this.scope.model.post.select({
139
140
  where: {
140
141
  ...where,
141
- stars: '_skip_' as const,
142
+ stars: Op.omit,
142
143
  },
143
144
  });
144
145
  ```
145
146
 
146
- This lets a query builder remove one condition cleanly without rebuilding the whole `where` object by hand.
147
+ This lets a query builder remove one condition cleanly without rebuilding the whole `where` object by hand, while `null` remains available for SQL `IS NULL` semantics.
147
148
 
148
149
  ## Joint operators and subqueries
149
150
 
@@ -16,14 +16,14 @@ Use this page when you are contributing backend work in the framework repository
16
16
 
17
17
  ## Prerequisites
18
18
 
19
- | Name | Version |
20
- | ---------- | --------- |
21
- | pnpm | >=10.19.0 |
22
- | Node.js | >=24.8.0 |
23
- | Redis | >=7.2.6 |
24
- | Sqlite3 | Built-in |
25
- | MySQL | >=8 |
26
- | Postgresql | >=16 |
19
+ | Name | Version |
20
+ | ---------- | -------- |
21
+ | pnpm | >=11.5.2 |
22
+ | Node.js | >=24.8.0 |
23
+ | Redis | >=7.2.6 |
24
+ | Sqlite3 | Built-in |
25
+ | MySQL | >=8 |
26
+ | Postgresql | >=16 |
27
27
 
28
28
  Notes:
29
29
 
@@ -87,7 +87,7 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
87
87
  That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
88
88
 
89
89
  - **Cabloy Basic**: the public framework/reference edition, including the project route created by `npm create cabloy`, with a shared frontend engineering layer and a DaisyUI + Tailwind CSS oriented UI layer in the current public examples
90
- - **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with Vuetify-oriented frontend modules plus Start-specific SSR site baselines and project assets
90
+ - **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with a Vuetify-oriented UI layer plus edition-specific SSR site baselines and project assets
91
91
 
92
92
  In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, UI assumptions, and examples.
93
93