cabloy 5.1.59 → 5.1.61

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 (149) hide show
  1. package/.claude/hooks/contract-loop-gate.ts +296 -0
  2. package/.claude/settings.json +16 -0
  3. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
  4. package/.claude/skills/cabloy-contract-loop/SKILL.md +103 -14
  5. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +126 -12
  6. package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +148 -0
  7. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +49 -13
  8. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +11 -0
  9. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
  10. package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
  11. package/.claude/skills/cabloy-resource-field-update/SKILL.md +274 -0
  12. package/.claude/skills/cabloy-resource-field-update/evals/evals.json +53 -0
  13. package/.claude/skills/cabloy-resource-field-update/references/custom-renderer-demo-checklist.md +102 -0
  14. package/.claude/skills/cabloy-resource-field-update/references/field-update-decision-tree.md +120 -0
  15. package/.claude/skills/cabloy-resource-field-update/references/follow-up-checklist.md +80 -0
  16. package/.claude/skills/cabloy-resource-field-update/references/verification-checklist.md +97 -0
  17. package/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
  18. package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
  19. package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -0
  20. package/.github/workflows/docs-pages.yml +2 -0
  21. package/.github/workflows/vona-cov-pg.yml +2 -0
  22. package/.github/workflows/vona-test-crud.yml +4 -2
  23. package/.github/workflows/vona-test-mysql.yml +2 -0
  24. package/.github/workflows/vona-test-pg.yml +2 -0
  25. package/.github/workflows/vona-test-sqlite3.yml +2 -0
  26. package/.github/workflows/vona-tsc.yml +2 -0
  27. package/.github/workflows/zova-ui.yml +2 -0
  28. package/.gitignore +0 -4
  29. package/CHANGELOG.md +52 -0
  30. package/CLAUDE.md +12 -0
  31. package/README.md +15 -0
  32. package/cabloy-docs/.vitepress/config.mjs +89 -0
  33. package/cabloy-docs/ai/class-placement-rule.md +2 -0
  34. package/cabloy-docs/ai/cli-to-skill-map.md +14 -0
  35. package/cabloy-docs/ai/docs-skills-rules-mapping.md +14 -0
  36. package/cabloy-docs/ai/future-skill-roadmap.md +27 -9
  37. package/cabloy-docs/ai/introduction.md +1 -0
  38. package/cabloy-docs/ai/playbook-backend-module.md +6 -0
  39. package/cabloy-docs/ai/playbook-module-removal.md +164 -0
  40. package/cabloy-docs/ai/skills.md +11 -0
  41. package/cabloy-docs/backend/bean-scene-authoring.md +350 -0
  42. package/cabloy-docs/backend/cli.md +26 -1
  43. package/cabloy-docs/backend/dto-guide.md +6 -0
  44. package/cabloy-docs/backend/entity-guide.md +18 -0
  45. package/cabloy-docs/backend/foundation.md +28 -3
  46. package/cabloy-docs/backend/introduction.md +10 -0
  47. package/cabloy-docs/backend/serialization-guide.md +10 -0
  48. package/cabloy-docs/backend/service-guide.md +2 -0
  49. package/cabloy-docs/backend/status-guide.md +271 -0
  50. package/cabloy-docs/backend/websocket-call-flow.md +435 -0
  51. package/cabloy-docs/backend/websocket-guide.md +455 -0
  52. package/cabloy-docs/backend/websocket-protocol-guide.md +381 -0
  53. package/cabloy-docs/backend/websocket-usage-guide.md +356 -0
  54. package/cabloy-docs/frontend/api-guide.md +2 -0
  55. package/cabloy-docs/frontend/bean-scene-authoring.md +374 -0
  56. package/cabloy-docs/frontend/behavior-guide.md +449 -0
  57. package/cabloy-docs/frontend/cli.md +24 -0
  58. package/cabloy-docs/frontend/command-scene-authoring.md +495 -0
  59. package/cabloy-docs/frontend/design-principles.md +6 -0
  60. package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
  61. package/cabloy-docs/frontend/form-guide.md +795 -0
  62. package/cabloy-docs/frontend/foundation.md +29 -0
  63. package/cabloy-docs/frontend/introduction.md +17 -1
  64. package/cabloy-docs/frontend/ioc-and-beans.md +16 -9
  65. package/cabloy-docs/frontend/mock-guide.md +1 -0
  66. package/cabloy-docs/frontend/model-architecture.md +252 -39
  67. package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
  68. package/cabloy-docs/frontend/model-resource-cookbook.md +505 -0
  69. package/cabloy-docs/frontend/model-resource-owner-pattern.md +382 -0
  70. package/cabloy-docs/frontend/model-resource-usage-guide.md +318 -0
  71. package/cabloy-docs/frontend/model-state-guide.md +366 -13
  72. package/cabloy-docs/frontend/openapi-sdk-guide.md +5 -2
  73. package/cabloy-docs/frontend/page-guide.md +6 -0
  74. package/cabloy-docs/frontend/quickstart.md +4 -0
  75. package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
  76. package/cabloy-docs/frontend/router-tabs-admin-web-comparison.md +206 -0
  77. package/cabloy-docs/frontend/router-tabs-introduction.md +106 -0
  78. package/cabloy-docs/frontend/router-tabs-mechanism.md +469 -0
  79. package/cabloy-docs/frontend/router-tabs-overview.md +227 -0
  80. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +343 -0
  81. package/cabloy-docs/frontend/server-data.md +2 -0
  82. package/cabloy-docs/frontend/ssr-architecture-overview.md +211 -0
  83. package/cabloy-docs/frontend/ssr-build-deploy-guide.md +308 -0
  84. package/cabloy-docs/frontend/ssr-review-checklist.md +184 -0
  85. package/cabloy-docs/frontend/ssr-troubleshooting-guide.md +301 -0
  86. package/cabloy-docs/frontend/zova-form-source-reading-map.md +295 -0
  87. package/cabloy-docs/frontend/zova-form-under-the-hood.md +556 -0
  88. package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
  89. package/cabloy-docs/frontend/zova-source-reading-map.md +327 -0
  90. package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +308 -0
  91. package/cabloy-docs/fullstack/contract-loop-playbook.md +350 -0
  92. package/cabloy-docs/fullstack/framework-performance.md +3 -3
  93. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +44 -1
  94. package/cabloy-docs/fullstack/introduction.md +40 -0
  95. package/cabloy-docs/fullstack/openapi-to-sdk.md +19 -9
  96. package/cabloy-docs/fullstack/quickstart.md +7 -1
  97. package/cabloy-docs/fullstack/tutorial-1-first-module.md +111 -0
  98. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +122 -0
  99. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +131 -0
  100. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +144 -0
  101. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +146 -0
  102. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +170 -0
  103. package/cabloy-docs/fullstack/tutorials-overview.md +192 -0
  104. package/cabloy-docs/index.md +4 -3
  105. package/cabloy-docs/reference/bean-scene-boilerplates.md +75 -0
  106. package/cabloy-docs/reference/cli-reference.md +2 -0
  107. package/package.json +7 -2
  108. package/scripts/initTestData.ts +25 -0
  109. package/scripts/upgrade.ts +17 -2
  110. package/vona/packages-cli/cabloy-cli/package.json +2 -2
  111. package/vona/packages-cli/cli/package.json +1 -1
  112. package/vona/packages-cli/cli-set-api/package.json +1 -1
  113. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +4 -0
  114. package/vona/packages-vona/vona/package.json +1 -1
  115. package/vona/pnpm-lock.yaml +226 -1091
  116. package/vona/pnpm-workspace.yaml +0 -1
  117. package/vona/src/suite-vendor/a-vona/modules/a-core/assets/static/img/vona.svg +1 -1
  118. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  119. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  120. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +1 -1
  121. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
  122. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  123. package/zova/package.original.json +1 -1
  124. package/zova/packages-cli/cli/package.json +3 -3
  125. package/zova/packages-cli/cli-set-front/cli/templates/init/icon/boilerplate/icons/default/zova.svg +1 -1
  126. package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -1
  127. package/zova/packages-cli/cli-set-front/package.json +3 -3
  128. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +4 -0
  129. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +34 -4
  130. package/zova/packages-cli/cli-set-front/src/lib/command/create.bean.ts +5 -1
  131. package/zova/packages-utils/zova-vite/package.json +2 -2
  132. package/zova/packages-zova/zova/package.json +2 -2
  133. package/zova/pnpm-lock.yaml +282 -1311
  134. package/zova/pnpm-workspace.yaml +0 -1
  135. package/zova/src/suite/a-home/modules/home-icon/icons/social/cabloy.svg +1 -1
  136. package/zova/src/suite/a-home/modules/home-icon/icons/social/vona.svg +1 -1
  137. package/zova/src/suite/a-home/modules/home-icon/icons/social/zova.svg +1 -1
  138. package/zova/src/suite/a-home/modules/home-icon/src/.metadata/icons/groups/social.svg +3 -3
  139. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +9 -0
  140. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  141. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +66 -16
  142. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  143. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
  144. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +60 -18
  145. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  146. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableCell/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  147. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  148. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  149. package/zova/src/suite-vendor/a-zova/package.json +4 -4
@@ -0,0 +1,91 @@
1
+ # Analysis Modes
2
+
3
+ Use this reference to choose the shortest correct analysis posture before reading Zova source deeply.
4
+
5
+ ## Mode A: source-location mode
6
+
7
+ Use this mode when the user is mainly asking:
8
+
9
+ - where should I start reading?
10
+ - which files matter?
11
+ - what order should I read the source in?
12
+ - where is this implemented?
13
+
14
+ ### Workflow
15
+
16
+ 1. detect the active edition if UI-sensitive assumptions might matter
17
+ 2. start from the public frontend docs first
18
+ 3. pick the smallest matching thread from `cabloy-docs/frontend/zova-source-reading-map.md`
19
+ 4. cite the initial source files in the recommended reading order
20
+ 5. stop before tracing deeper runtime layers unless the user also wants runtime-flow analysis
21
+
22
+ ### Output emphasis
23
+
24
+ - reading order
25
+ - key file paths
26
+ - why those files are the right starting points
27
+
28
+ ## Mode B: runtime-flow mode
29
+
30
+ Use this mode when the user is mainly asking:
31
+
32
+ - how does this work internally?
33
+ - why is this reactive?
34
+ - where does this controller/page/component behavior come from?
35
+ - how does render, route state, or lifecycle enter the runtime?
36
+
37
+ ### Workflow
38
+
39
+ 1. read the public Zova-native explanation docs first:
40
+ - `reading-zova-for-vue-developers.md`
41
+ - `zova-reactivity-under-the-hood.md`
42
+ 2. identify the concrete thread:
43
+ - page controller
44
+ - component controller
45
+ - route/state
46
+ - model
47
+ - behavior
48
+ - SSR
49
+ 3. trace the smallest current-source path that confirms the runtime behavior
50
+ 4. distinguish source-confirmed behavior from interpretation
51
+ 5. only after the Zova-native explanation is clear, add Vue analogy if helpful
52
+
53
+ ### Output emphasis
54
+
55
+ - entrypoint
56
+ - intermediate runtime files
57
+ - what triggers the behavior
58
+ - what is source-confirmed
59
+
60
+ ## Mode C: Vue-vs-Zova comparison mode
61
+
62
+ Use this mode when the user is mainly asking:
63
+
64
+ - how should I understand this relative to Vue 3?
65
+ - is this just Vue with a different syntax?
66
+ - what is the Zova way here?
67
+
68
+ ### Workflow
69
+
70
+ 1. explain the Zova-native architectural role first
71
+ 2. identify which public Zova doc best defines that role
72
+ 3. if needed, trace one representative source path to confirm the runtime grounding
73
+ 4. only then provide Vue analogies as approximate translations
74
+ 5. explicitly avoid flattening Zova back into generic Vue habits
75
+
76
+ ### Output emphasis
77
+
78
+ - Zova-native role
79
+ - closest Vue analogy
80
+ - what is genuinely shared underneath
81
+ - what changes at the authoring-model level
82
+
83
+ ## Combined requests
84
+
85
+ If a request spans multiple modes, answer in this order:
86
+
87
+ 1. source-location mode
88
+ 2. runtime-flow mode
89
+ 3. Vue-vs-Zova comparison mode
90
+
91
+ This keeps the explanation anchored in the real source path before analogy work begins.
@@ -0,0 +1,117 @@
1
+ # Core Reading Paths
2
+
3
+ Use this reference to choose the shortest source path after the analysis mode is known.
4
+
5
+ ## Page controller and page reactivity
6
+
7
+ Read in this order:
8
+
9
+ 1. the concrete page controller source
10
+ 2. `zova-core/src/composables/useController.ts`
11
+ 3. `zova-core/src/bean/beanContainer.ts`
12
+ 4. `zova-core/src/bean/beanBase.ts`
13
+ 5. `zova-core/src/bean/beanControllerPageBase.ts`
14
+ 6. `zova-core/src/core/context/component.ts`
15
+ 7. router integration files such as `a-router/src/monkey.ts`
16
+
17
+ Use when the question is about:
18
+
19
+ - plain controller fields
20
+ - `$computed`
21
+ - `$params` / `$query`
22
+ - page render flow
23
+
24
+ ## Component controller and wrapper path
25
+
26
+ Read in this order:
27
+
28
+ 1. representative wrapper metadata under `src/.metadata/component/`
29
+ 2. `zova-core/src/composables/useController.ts`
30
+ 3. `zova-core/src/bean/beanControllerBase.ts`
31
+ 4. `zova-core/src/core/context/component.ts`
32
+ 5. the concrete component controller source
33
+
34
+ Use when the question is about:
35
+
36
+ - wrapper components
37
+ - `controllerRef`
38
+ - component-local controller behavior
39
+
40
+ ## Bean lifecycle and helper API path
41
+
42
+ Read in this order:
43
+
44
+ 1. `zova-core/src/bean/beanBase.ts`
45
+ 2. `zova-core/src/bean/beanBaseSimple.ts`
46
+ 3. `zova-core/src/bean/beanContainer.ts`
47
+ 4. `zova-core/src/core/context/util.ts`
48
+
49
+ Use when the question is about:
50
+
51
+ - `__init__`
52
+ - `__dispose__`
53
+ - `$watch`
54
+ - `$toRef`
55
+ - instance scope
56
+
57
+ ## Route and page-shell path
58
+
59
+ Read in this order:
60
+
61
+ 1. the local `routes.ts`
62
+ 2. `a-router/src/monkey.ts`
63
+ 3. router utility files
64
+ 4. page schema sources
65
+ 5. `BeanControllerPageBase`
66
+
67
+ Use when the question is about:
68
+
69
+ - route records
70
+ - params/query parsing
71
+ - layout shell implications
72
+ - route-aware controller state
73
+
74
+ ## Model/state ownership path
75
+
76
+ Read in this order:
77
+
78
+ 1. the relevant model bean
79
+ 2. framework model state helper files
80
+ 3. representative built-in model beans
81
+ 4. consuming page/controller/service code
82
+
83
+ Use when the question is about:
84
+
85
+ - model-owned state
86
+ - cache-oriented state
87
+ - async vs sync state ownership
88
+
89
+ ## Behavior path
90
+
91
+ Read in this order:
92
+
93
+ 1. the public behavior wrapper/controller path
94
+ 2. the concrete behavior bean
95
+ 3. the behavior composer/service files
96
+ 4. host-scoped injected dependencies
97
+
98
+ Use when the question is about:
99
+
100
+ - render-time interception
101
+ - behavior composition
102
+ - Behavior vs Component vs Helper
103
+
104
+ ## SSR runtime path
105
+
106
+ Read in this order:
107
+
108
+ 1. the SSR site or bundle entry
109
+ 2. SSR runtime/context files in `zova-core`
110
+ 3. relevant page/controller/model code
111
+ 4. Vona SSR handoff layer if needed
112
+
113
+ Use when the question is about:
114
+
115
+ - SSR entry
116
+ - hydration handoff
117
+ - whether the bug belongs to Vona or Zova
@@ -21,6 +21,8 @@ concurrency:
21
21
  jobs:
22
22
  build:
23
23
  runs-on: ubuntu-latest
24
+ env:
25
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
24
26
  steps:
25
27
  - uses: actions/checkout@v6
26
28
  - uses: pnpm/action-setup@v5
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  services:
14
16
  redis:
15
17
  image: redis:latest
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  services:
14
16
  redis:
15
17
  image: redis:latest
@@ -25,11 +27,11 @@ jobs:
25
27
  version: 11.5.2
26
28
  - name: init
27
29
  run: npm run init
28
- - run: npm run vona :create:module demo-student -- --suite --ci
30
+ - run: npm run vona :create:module demo-student2 -- --suite --ci
29
31
  working-directory: vona
30
32
  - run: npm run vona :tools:deps
31
33
  working-directory: vona
32
- - run: npm run vona :tools:crud student -- --module=demo-student
34
+ - run: npm run vona :tools:crud student2 -- --module=demo-student2
33
35
  working-directory: vona
34
36
  - run: npm run test
35
37
  working-directory: vona
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  services:
14
16
  redis:
15
17
  image: redis:latest
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  services:
14
16
  redis:
15
17
  image: redis:latest
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  services:
14
16
  redis:
15
17
  image: redis:latest
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  steps:
14
16
  - uses: actions/checkout@v6
15
17
  - uses: actions/setup-node@v6
@@ -10,6 +10,8 @@ jobs:
10
10
  matrix:
11
11
  node-version: [24]
12
12
  runs-on: ubuntu-latest
13
+ env:
14
+ PNPM_CONFIG_MINIMUM_RELEASE_AGE: 0
13
15
  steps:
14
16
  - uses: actions/checkout@v6
15
17
  - uses: actions/setup-node@v6
package/.gitignore CHANGED
@@ -62,7 +62,6 @@ zova/.quasar
62
62
  **/.vitepress/cache
63
63
  **/.rollup.cache
64
64
  **/.temp-dynamic-*
65
- /.cabloy-version
66
65
  vona/package.json
67
66
  zova/package.json
68
67
  vona/docker-compose.yml
@@ -76,6 +75,3 @@ vona/src/suite/cabloy-basic/modules/basic-siteadmin/assets/site
76
75
  vona/src/suite/cabloy-basic/modules/basic-siteadmin/zovaRest
77
76
  vona/src/suite/cabloy-basic/modules/basic-siteweb/assets/site
78
77
  vona/src/suite/cabloy-basic/modules/basic-siteweb/zovaRest
79
-
80
- /vona/src/module/demo-student
81
- /zova/src/module/demo-student
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.61
4
+
5
+ ### Features
6
+
7
+ - Enforce explicit OpenAPI operation filters.
8
+ - Remove the demo-student module and document the module-removal workflow.
9
+ - Add a mobile field to students and document serializer guidance.
10
+
11
+ ### Bug Fixes
12
+
13
+ - Decouple test data initialization from application initialization.
14
+ - Refresh the student summary after updates.
15
+
16
+ ### Improvements
17
+
18
+ - Migrate the contract-loop hook to TypeScript.
19
+ - Harden and simplify contract-loop guidance and gate behavior.
20
+ - Add Zova Form documentation and navigation.
21
+ - Refine ModelResource guidance and examples.
22
+ - Add Zova command scene, fetch interceptor, frontend reading, and Status architecture guides.
23
+ - Update backend contract-sharing tutorial and related skill documentation.
24
+
25
+ ## 5.1.60
26
+
27
+ ### Features
28
+
29
+ - Add a mobile field to the demo-student example.
30
+ - Add demo-student summary and force-delete flows.
31
+ - Add a level renderer workflow to the demo-student example.
32
+ - Initialize test data automatically after setup.
33
+ - Refine router tab insertion order.
34
+
35
+ ### Improvements
36
+
37
+ - Add SSR architecture and workflow guides.
38
+ - Add a Web Socket documentation set.
39
+ - Add a Zova Behavior guide.
40
+ - Add router tabs documentation.
41
+ - Add advanced bean scene authoring guides and document boilerplate variants.
42
+ - Add a fullstack quick start tutorial series and document core fullstack principles.
43
+ - Refactor the fullstack AI tutorial series and streamline quick start guidance.
44
+ - Clarify helper placement and strengthen contract loop examples with reusable patterns.
45
+ - Simplify and polish tutorial prompts, verification steps, and user workflow guidance.
46
+ - Unify resource-owned custom item state handling.
47
+ - Update `tmp` to `0.2.7` and `tar` to `7.5.16`.
48
+ - Disable `pnpm` `minimumReleaseAge` in CI workflows.
49
+
50
+ ### Bug Fixes
51
+
52
+ - Make contract loop examples more resilient.
53
+ - Refine select placeholder guidance.
54
+
3
55
  ## 5.1.59
4
56
 
5
57
  ### Features
package/CLAUDE.md CHANGED
@@ -42,8 +42,18 @@ Before inventing a custom implementation path:
42
42
  ## AI development rules
43
43
 
44
44
  - Prefer CLI-backed workflows over manual scaffolding whenever Vona or Zova already provides a generator, refactor, metadata, or verification command.
45
+ - The Cabloy contract-loop model applies to both Cabloy Basic and Cabloy Start; detect the edition to choose commands and output paths, not to redefine the workflow model.
46
+ - Treat contract-loop work as one of four branches: forward chain, reverse chain, consumer drift, or local dependency drift.
47
+ - For the forward chain, change backend contract truth first and regenerate frontend consumers rather than hand-patching them.
48
+ - After forward regeneration, keep frontend follow-up thin: prefer semantic model facades and reuse the existing resource-owner when the custom API still belongs to the same resource.
49
+ - For the reverse chain, when Vona consumes newly added or changed Zova Admin render/action/metadata, always run `npm run build:zova:admin` before `npm run deps:vona`. Do not treat `build:rest:cabloyBasicAdmin` alone as sufficient, because the Admin JS bundle and rest output must move together.
50
+ - If generated artifacts already contain the expected changes but consumers still behave stale, suspect local dependency drift before making more source edits.
51
+ - For Cabloy Start, apply the same reverse-chain logic but resolve the Start-specific flavor names and generated-output paths from the active Start repo before recommending commands.
45
52
  - Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
46
53
  - 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.
54
+ - For Zova frontend analysis, do not default to generic Vue reinterpretation first. Read the code through Zova’s controller / bean / IoC architecture before mapping it to Vue concepts.
55
+ - For Zova source-reading or Vue-vs-Zova explanation tasks, start from the frontend reading guides and source-reading map in `cabloy-docs/frontend/` before doing framework-neutral reinterpretation.
56
+ - Keep repo-wide AI rules in `CLAUDE.md` short and durable; put branching Zova analysis workflows in `.claude/skills/`.
47
57
  - 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
58
  - 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
59
  - 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.
@@ -54,9 +64,11 @@ Before inventing a custom implementation path:
54
64
  - Service-scene runtime-anchor bases that should not register in `IBeanRecordGeneral` should prefer the `src/service/*_.ts` form.
55
65
  - `src/bean` defines the global shorthand surface; classes that should not appear in `IBeanRecordGlobal` should move to `src/lib` or `src/service` rather than being filtered by `@Virtual()`.
56
66
  - When backend code references `this.bean.xxx`, `ctx.bean.xxx`, or `app.bean.xxx`, use `IBeanRecordGlobal` and module `src/.metadata/index.ts` as the first static lookup surface; use `IBeanRecordGeneral` or `src/service` only when the target is not a global shorthand.
67
+ - When adding a persisted field to an existing backend resource, ask the user whether `vonaModule.fileVersion` should be incremented before changing `meta.version.ts` or the module schema path. If yes, add a new migration version and bump `fileVersion`. If no, keep the current `fileVersion` and fold the schema change into the current version path. Do not assume the versioning strategy without confirmation.
57
68
 
58
69
  ## Verification expectations
59
70
 
60
71
  - For docs changes: run the docs build and verify links/navigation where practical.
61
72
  - For code-generation or workflow guidance changes: verify that the referenced scripts and command families still exist.
62
73
  - For code changes: prefer the narrowest meaningful verification first, then use shared root scripts when broader confidence is needed.
74
+ - Any change to `meta.version.ts` requires running `npm run test` so the test database is reinitialized and schema/data consistency issues surface early.
package/README.md CHANGED
@@ -14,6 +14,21 @@ With Vona, Zova, suite-based modules, and CLI-first workflows, Cabloy turns comm
14
14
 
15
15
  [Documentation](https://docs.cabloy.com) · [npm](https://www.npmjs.com/package/cabloy) · [Web Demo](https://cabloy.com) · [Admin Demo](https://cabloy.com/admin) · [GitHub](https://github.com/cabloy/cabloy)
16
16
 
17
+ ## Fullstack Principles
18
+
19
+ Cabloy’s fullstack model is built around two core principles:
20
+
21
+ 1. **Frontend build output participates directly in backend SSR**
22
+ - Zova owns the frontend application source
23
+ - the generated frontend bundle and SSR-related artifacts are consumed by the Vona-side SSR flow
24
+ - backend rendering and frontend hydration stay on one coordinated delivery path
25
+
26
+ 2. **Type information flows in both directions**
27
+ - **Backend -> Frontend**: Vona emits Swagger/OpenAPI contracts that Zova can use to generate SDKs and related schema-aware helpers
28
+ - **Frontend -> Backend**: Zova generates structural metadata and typing surfaces such as routes, components, and icons that can improve backend-side tooling and type hints
29
+
30
+ For the complete explanation, see [Fullstack Introduction](https://docs.cabloy.com/fullstack/introduction), [Vona + Zova Integration](https://docs.cabloy.com/fullstack/vona-zova-integration), [Backend OpenAPI to Frontend SDK](https://docs.cabloy.com/fullstack/openapi-to-sdk), and [Frontend Metadata Back to Backend](https://docs.cabloy.com/fullstack/frontend-metadata-to-backend).
31
+
17
32
  ## Get Started
18
33
 
19
34
  ### Prerequisites
@@ -23,6 +23,7 @@ const aiItems = [
23
23
  { text: 'Playbook: Backend Module', link: '/ai/playbook-backend-module' },
24
24
  { text: 'Playbook: Frontend Page', link: '/ai/playbook-frontend-page' },
25
25
  { text: 'Playbook: Contract Regeneration', link: '/ai/playbook-contract-regeneration' },
26
+ { text: 'Playbook: Module Removal', link: '/ai/playbook-module-removal' },
26
27
  { text: 'Playbook: Metadata Refresh', link: '/ai/playbook-metadata-refresh' },
27
28
  { text: 'CLI for Agents', link: '/ai/cli-for-agents' },
28
29
  { text: 'Rules and Config', link: '/ai/rules-and-config' },
@@ -39,6 +40,30 @@ const fullstackGroups = [
39
40
  { text: 'Quickstart', link: '/fullstack/quickstart' },
40
41
  ],
41
42
  },
43
+ {
44
+ text: 'Fullstack / Tutorials',
45
+ items: [
46
+ { text: 'Tutorials Overview', link: '/fullstack/tutorials-overview' },
47
+ { text: 'Tutorial 1: First Module', link: '/fullstack/tutorial-1-first-module' },
48
+ { text: 'Tutorial 2: First CRUD', link: '/fullstack/tutorial-2-first-crud' },
49
+ {
50
+ text: 'Tutorial 3: Frontend Metadata Sharing',
51
+ link: '/fullstack/tutorial-3-frontend-metadata-sharing',
52
+ },
53
+ {
54
+ text: 'Tutorial 4: Custom Form/Table Renderers for Level',
55
+ link: '/fullstack/tutorial-4-custom-level-renderers',
56
+ },
57
+ {
58
+ text: 'Tutorial 5: Backend Contract Sharing',
59
+ link: '/fullstack/tutorial-5-backend-contract-sharing',
60
+ },
61
+ {
62
+ text: 'Tutorial 6: One Contract Surface, Four Uses',
63
+ link: '/fullstack/tutorial-6-one-contract-four-uses',
64
+ },
65
+ ],
66
+ },
42
67
  {
43
68
  text: 'Tooling & Workflow',
44
69
  items: [
@@ -55,6 +80,7 @@ const fullstackGroups = [
55
80
  },
56
81
  { text: 'Framework Performance', link: '/fullstack/framework-performance' },
57
82
  { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
83
+ { text: 'Contract Loop Playbook', link: '/fullstack/contract-loop-playbook' },
58
84
  { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
59
85
  {
60
86
  text: 'Frontend Metadata Back to Backend',
@@ -75,6 +101,7 @@ const referenceGroups = [
75
101
  { text: 'Introduction', link: '/reference/introduction' },
76
102
  { text: 'Repo Scripts', link: '/reference/repo-scripts' },
77
103
  { text: 'CLI Reference', link: '/reference/cli-reference' },
104
+ { text: 'Bean Scene Boilerplate Variants', link: '/reference/bean-scene-boilerplates' },
78
105
  ],
79
106
  },
80
107
  {
@@ -182,6 +209,7 @@ export default defineConfig({
182
209
  text: 'Core Programming Model',
183
210
  items: [
184
211
  { text: 'AOP Overview', link: '/backend/aop-overview' },
212
+ { text: 'Bean Scene Authoring', link: '/backend/bean-scene-authoring' },
185
213
  { text: 'Controller Guide', link: '/backend/controller-guide' },
186
214
  { text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
187
215
  { text: 'Internal AOP Guide', link: '/backend/internal-aop-guide' },
@@ -221,8 +249,13 @@ export default defineConfig({
221
249
  { text: 'Queue Guide', link: '/backend/queue-guide' },
222
250
  { text: 'Election Guide', link: '/backend/election-guide' },
223
251
  { text: 'Schedule Guide', link: '/backend/schedule-guide' },
252
+ { text: 'Status Guide', link: '/backend/status-guide' },
224
253
  { text: 'Worker Guide', link: '/backend/worker-guide' },
225
254
  { text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
255
+ { text: 'Web Socket Guide', link: '/backend/websocket-guide' },
256
+ { text: 'Web Socket Usage Guide', link: '/backend/websocket-usage-guide' },
257
+ { text: 'Web Socket Protocol Guide', link: '/backend/websocket-protocol-guide' },
258
+ { text: 'Web Socket Call Flow', link: '/backend/websocket-call-flow' },
226
259
  { text: 'Redlock Guide', link: '/backend/redlock-guide' },
227
260
  ],
228
261
  },
@@ -242,12 +275,30 @@ export default defineConfig({
242
275
  { text: 'Introduction', link: '/frontend/introduction' },
243
276
  { text: 'Quickstart', link: '/frontend/quickstart' },
244
277
  { text: 'Foundation', link: '/frontend/foundation' },
278
+ {
279
+ text: 'Reading Zova for Vue Developers',
280
+ link: '/frontend/reading-zova-for-vue-developers',
281
+ },
282
+ {
283
+ text: 'Zova vs Vue 3 Comparison',
284
+ link: '/frontend/zova-vs-vue3-comparison',
285
+ },
286
+ {
287
+ text: 'Zova Reactivity Under the Hood',
288
+ link: '/frontend/zova-reactivity-under-the-hood',
289
+ },
290
+ {
291
+ text: 'Zova Source Reading Map',
292
+ link: '/frontend/zova-source-reading-map',
293
+ },
245
294
  ],
246
295
  },
247
296
  {
248
297
  text: 'Architecture & Modules',
249
298
  items: [
250
299
  { text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
300
+ { text: 'Bean Scene Authoring', link: '/frontend/bean-scene-authoring' },
301
+ { text: 'Behavior Guide', link: '/frontend/behavior-guide' },
251
302
  { text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
252
303
  { text: 'Module Scope', link: '/frontend/module-scope' },
253
304
  { text: 'Design Principles', link: '/frontend/design-principles' },
@@ -277,6 +328,17 @@ export default defineConfig({
277
328
  { text: 'Page Params Guide', link: '/frontend/page-params-guide' },
278
329
  { text: 'Zod Guide', link: '/frontend/zod-guide' },
279
330
  { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
331
+ { text: 'Router Tabs Introduction', link: '/frontend/router-tabs-introduction' },
332
+ { text: 'Router Tabs Overview', link: '/frontend/router-tabs-overview' },
333
+ { text: 'Router Tabs Mechanism', link: '/frontend/router-tabs-mechanism' },
334
+ {
335
+ text: 'Router Tabs Route Meta Cookbook',
336
+ link: '/frontend/router-tabs-route-meta-cookbook',
337
+ },
338
+ {
339
+ text: 'Router Tabs Admin and Web Comparison',
340
+ link: '/frontend/router-tabs-admin-web-comparison',
341
+ },
280
342
  { text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
281
343
  { text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
282
344
  ],
@@ -285,6 +347,15 @@ export default defineConfig({
285
347
  text: 'Components & UI',
286
348
  items: [
287
349
  { text: 'Component Guide', link: '/frontend/component-guide' },
350
+ { text: 'Form Guide', link: '/frontend/form-guide' },
351
+ {
352
+ text: 'Zova Form Under the Hood',
353
+ link: '/frontend/zova-form-under-the-hood',
354
+ },
355
+ {
356
+ text: 'Zova Form Source Reading Map',
357
+ link: '/frontend/zova-form-source-reading-map',
358
+ },
288
359
  { text: 'Component Props Guide', link: '/frontend/component-props-guide' },
289
360
  { text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
290
361
  { text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
@@ -297,9 +368,23 @@ export default defineConfig({
297
368
  text: 'Data & State',
298
369
  items: [
299
370
  { text: 'Server Data', link: '/frontend/server-data' },
371
+ { text: 'Fetch Interceptor Guide', link: '/frontend/fetch-interceptor-guide' },
300
372
  { text: 'API Guide', link: '/frontend/api-guide' },
301
373
  { text: 'Model Architecture', link: '/frontend/model-architecture' },
302
374
  { text: 'Model State Guide', link: '/frontend/model-state-guide' },
375
+ { text: 'Model Resource Owner Pattern', link: '/frontend/model-resource-owner-pattern' },
376
+ {
377
+ text: 'Using ModelResource in Your Module',
378
+ link: '/frontend/model-resource-usage-guide',
379
+ },
380
+ {
381
+ text: 'Resource Model Best Practices',
382
+ link: '/frontend/model-resource-best-practices',
383
+ },
384
+ {
385
+ text: 'Resource Model Cookbook',
386
+ link: '/frontend/model-resource-cookbook',
387
+ },
303
388
  ],
304
389
  },
305
390
  {
@@ -313,6 +398,10 @@ export default defineConfig({
313
398
  {
314
399
  text: 'SSR',
315
400
  items: [
401
+ { text: 'SSR Architecture Overview', link: '/frontend/ssr-architecture-overview' },
402
+ { text: 'SSR Build and Deploy Guide', link: '/frontend/ssr-build-deploy-guide' },
403
+ { text: 'SSR Troubleshooting Guide', link: '/frontend/ssr-troubleshooting-guide' },
404
+ { text: 'SSR Review Checklist', link: '/frontend/ssr-review-checklist' },
316
405
  { text: 'SSR Overview', link: '/frontend/ssr-overview' },
317
406
  { text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
318
407
  { text: 'SSR ClientOnly', link: '/frontend/ssr-client-only' },
@@ -27,6 +27,8 @@ Recommended placement:
27
27
 
28
28
  - `src/lib`
29
29
 
30
+ For reusable module-local helper functions that are not classes, follow the same structural idea: initialize the module `src/lib` directory and place shared pure helper functions there. For the fuller backend placement context around module-local helpers, also see [Backend Foundation](/backend/foundation).
31
+
30
32
  ### B1: subclass-only base
31
33
 
32
34
  Use B1 when the class mainly exists as a superclass for concrete subclasses.
@@ -145,6 +145,20 @@ Typical skill role:
145
145
  - likely CLI path: Zova `openapi:*` or REST build flows
146
146
  - skill then verifies the right edition-specific flavor path
147
147
 
148
+ ### Example: “Update a field on an existing backend resource”
149
+
150
+ - skill decides this is an existing-resource field-update task
151
+ - skill classifies persisted-field vs metadata-only refinement
152
+ - likely CLI path: Vona persistence verification plus Zova metadata/build flows only if renderer follow-up is required
153
+ - skill then verifies entity, locale, tests, `fileVersion` logic, and renderer/build/deps follow-up when applicable
154
+
155
+ ### Example: “Remove an existing module cleanly”
156
+
157
+ - skill decides this is a module-removal workflow rather than scaffolding or contract evolution
158
+ - skill classifies backend-only vs frontend-only vs fullstack removal
159
+ - likely CLI path: root build/deps/typecheck scripts such as `npm run build:zova:admin`, `npm run deps:vona`, `npm run deps:zova`, and `npm run tsc`
160
+ - skill then verifies that source, package references, generated registrations, and stale runtime directories are handled in the correct order
161
+
148
162
  ## Anti-patterns
149
163
 
150
164
  Avoid these mistakes in skills:
@@ -143,6 +143,20 @@ Use this quick rule:
143
143
  - full explanation → [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
144
144
  - workflow steering → skill and rules can point to the docs and choose the right CLI path
145
145
 
146
+ ### Example: “How should AI remove an existing module cleanly?”
147
+
148
+ - public operational explanation → [Playbook: Module Removal](/ai/playbook-module-removal)
149
+ - maintainer rationale and pitfalls → `.docs-internal/architecture/module-removal-workflow.md`
150
+ - avoid putting the full workflow in `CLAUDE.md` because the task needs branching, cleanup order, generated-runtime recovery, and verification
151
+ - procedural decision workflow → `cabloy-module-removal` skill
152
+
153
+ ### Example: “What `@Api.field(...)` ordering rule should AI preserve when mixing helpers and zod?”
154
+
155
+ - full explanation → [Entity Guide](/backend/entity-guide) and [DTO Guide](/backend/dto-guide)
156
+ - AI workflow reminder → [Playbook: Add a Backend Module](/ai/playbook-backend-module)
157
+ - procedural checklist reminder → backend scaffold skill references
158
+ - avoid putting the full explanation only in `CLAUDE.md` because this is a framework-specific authoring rule, not a short global behavior rule
159
+
146
160
  ## Anti-patterns to avoid
147
161
 
148
162
  Avoid these mistakes: