cabloy 5.1.59 → 5.1.60

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 (102) hide show
  1. package/.claude/skills/cabloy-contract-loop/SKILL.md +16 -0
  2. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +26 -0
  3. package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +144 -0
  4. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +18 -0
  5. package/.claude/skills/cabloy-resource-field-update/SKILL.md +267 -0
  6. package/.claude/skills/cabloy-resource-field-update/evals/evals.json +53 -0
  7. package/.claude/skills/cabloy-resource-field-update/references/custom-renderer-demo-checklist.md +102 -0
  8. package/.claude/skills/cabloy-resource-field-update/references/field-update-decision-tree.md +120 -0
  9. package/.claude/skills/cabloy-resource-field-update/references/follow-up-checklist.md +80 -0
  10. package/.claude/skills/cabloy-resource-field-update/references/verification-checklist.md +97 -0
  11. package/.github/workflows/docs-pages.yml +2 -0
  12. package/.github/workflows/vona-cov-pg.yml +2 -0
  13. package/.github/workflows/vona-test-crud.yml +4 -2
  14. package/.github/workflows/vona-test-mysql.yml +2 -0
  15. package/.github/workflows/vona-test-pg.yml +2 -0
  16. package/.github/workflows/vona-test-sqlite3.yml +2 -0
  17. package/.github/workflows/vona-tsc.yml +2 -0
  18. package/.github/workflows/zova-ui.yml +2 -0
  19. package/.gitignore +0 -4
  20. package/CHANGELOG.md +30 -0
  21. package/CLAUDE.md +2 -0
  22. package/README.md +15 -0
  23. package/cabloy-docs/.vitepress/config.mjs +43 -0
  24. package/cabloy-docs/ai/class-placement-rule.md +2 -0
  25. package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
  26. package/cabloy-docs/ai/future-skill-roadmap.md +17 -2
  27. package/cabloy-docs/backend/bean-scene-authoring.md +350 -0
  28. package/cabloy-docs/backend/cli.md +26 -1
  29. package/cabloy-docs/backend/foundation.md +28 -3
  30. package/cabloy-docs/backend/introduction.md +8 -0
  31. package/cabloy-docs/backend/service-guide.md +2 -0
  32. package/cabloy-docs/backend/websocket-call-flow.md +435 -0
  33. package/cabloy-docs/backend/websocket-guide.md +455 -0
  34. package/cabloy-docs/backend/websocket-protocol-guide.md +381 -0
  35. package/cabloy-docs/backend/websocket-usage-guide.md +356 -0
  36. package/cabloy-docs/frontend/bean-scene-authoring.md +372 -0
  37. package/cabloy-docs/frontend/behavior-guide.md +449 -0
  38. package/cabloy-docs/frontend/cli.md +12 -0
  39. package/cabloy-docs/frontend/introduction.md +5 -0
  40. package/cabloy-docs/frontend/ioc-and-beans.md +10 -9
  41. package/cabloy-docs/frontend/router-tabs-admin-web-comparison.md +206 -0
  42. package/cabloy-docs/frontend/router-tabs-introduction.md +106 -0
  43. package/cabloy-docs/frontend/router-tabs-mechanism.md +469 -0
  44. package/cabloy-docs/frontend/router-tabs-overview.md +227 -0
  45. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +343 -0
  46. package/cabloy-docs/frontend/ssr-architecture-overview.md +211 -0
  47. package/cabloy-docs/frontend/ssr-build-deploy-guide.md +308 -0
  48. package/cabloy-docs/frontend/ssr-review-checklist.md +184 -0
  49. package/cabloy-docs/frontend/ssr-troubleshooting-guide.md +301 -0
  50. package/cabloy-docs/fullstack/framework-performance.md +3 -3
  51. package/cabloy-docs/fullstack/introduction.md +29 -0
  52. package/cabloy-docs/fullstack/quickstart.md +7 -1
  53. package/cabloy-docs/fullstack/tutorial-1-first-module.md +111 -0
  54. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +122 -0
  55. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +131 -0
  56. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +119 -0
  57. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +144 -0
  58. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +168 -0
  59. package/cabloy-docs/fullstack/tutorials-overview.md +179 -0
  60. package/cabloy-docs/index.md +4 -3
  61. package/cabloy-docs/reference/bean-scene-boilerplates.md +73 -0
  62. package/cabloy-docs/reference/cli-reference.md +2 -0
  63. package/package.json +6 -2
  64. package/scripts/init.ts +18 -2
  65. package/vona/packages-cli/cabloy-cli/package.json +2 -2
  66. package/vona/packages-cli/cli/package.json +1 -1
  67. package/vona/packages-cli/cli-set-api/package.json +1 -1
  68. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +4 -0
  69. package/vona/packages-vona/vona/package.json +1 -1
  70. package/vona/pnpm-lock.yaml +133 -1088
  71. package/vona/pnpm-workspace.yaml +0 -1
  72. package/vona/src/suite-vendor/a-vona/modules/a-core/assets/static/img/vona.svg +1 -1
  73. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  74. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  75. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +1 -1
  76. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
  77. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  78. package/zova/package.original.json +1 -1
  79. package/zova/packages-cli/cli/package.json +3 -3
  80. package/zova/packages-cli/cli-set-front/cli/templates/init/icon/boilerplate/icons/default/zova.svg +1 -1
  81. package/zova/packages-cli/cli-set-front/package.json +3 -3
  82. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +4 -0
  83. package/zova/packages-cli/cli-set-front/src/lib/command/create.bean.ts +5 -1
  84. package/zova/packages-utils/zova-vite/package.json +2 -2
  85. package/zova/packages-zova/zova/package.json +2 -2
  86. package/zova/pnpm-lock.yaml +284 -1313
  87. package/zova/pnpm-workspace.yaml +0 -1
  88. package/zova/src/suite/a-home/modules/home-icon/icons/social/cabloy.svg +1 -1
  89. package/zova/src/suite/a-home/modules/home-icon/icons/social/vona.svg +1 -1
  90. package/zova/src/suite/a-home/modules/home-icon/icons/social/zova.svg +1 -1
  91. package/zova/src/suite/a-home/modules/home-icon/src/.metadata/icons/groups/social.svg +3 -3
  92. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +9 -0
  93. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  94. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +66 -16
  95. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  96. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
  97. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +60 -18
  98. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  99. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableCell/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  100. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  101. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  102. package/zova/src/suite-vendor/a-zova/package.json +4 -4
@@ -0,0 +1,120 @@
1
+ # Field Update Decision Tree
2
+
3
+ Use this reference with `cabloy-resource-field-update` when a request is about an existing backend resource field.
4
+
5
+ ## 1. Is this an existing-resource update?
6
+
7
+ Use the skill when the task is about:
8
+
9
+ - adding a field to an existing resource
10
+ - refining validation for an existing field
11
+ - adding enum-like constraints
12
+ - changing `ZovaRender.field(...)` or `ZovaRender.cell(...)`
13
+ - deciding whether an existing resource field change needs a `fileVersion` bump
14
+
15
+ Do not use it when the request is really about:
16
+
17
+ - creating a new CRUD/resource thread
18
+ - generic frontend page/component scaffolding
19
+ - stale contract diagnosis
20
+
21
+ ## 2. Persisted field or metadata-only change?
22
+
23
+ ### Persisted field
24
+
25
+ Examples:
26
+
27
+ - add `level: number`
28
+ - add `status: string`
29
+ - add a stored relation key
30
+
31
+ Actions:
32
+
33
+ - ask whether `vonaModule.fileVersion` should be incremented
34
+ - inspect `meta.version.ts`
35
+ - inspect module `package.json`
36
+ - plan fresh install and upgrade behavior
37
+
38
+ ### Metadata-only change
39
+
40
+ Examples:
41
+
42
+ - add enum validation to an existing field
43
+ - add `ZovaRender.field(...)`
44
+ - add `ZovaRender.cell(...)`
45
+ - refine locale labels
46
+ - tighten validation without changing storage
47
+
48
+ Actions:
49
+
50
+ - usually keep `fileVersion` unchanged
51
+ - focus on entity metadata, locale, tests, and optional renderer follow-up
52
+
53
+ ## 3. What is the source of truth?
54
+
55
+ Check these surfaces first:
56
+
57
+ - entity
58
+ - model
59
+ - DTOs
60
+ - controller
61
+ - service
62
+ - `meta.version.ts`
63
+ - module `package.json`
64
+ - locale files
65
+ - tests
66
+
67
+ Prefer:
68
+
69
+ - entity-first field definition
70
+ - inferred DTO flow if the source already uses `$Dto.create(...)`, `$Dto.update(...)`, or `$Dto.get(...)`
71
+
72
+ ## 4. Renderer branch
73
+
74
+ ### Shared renderer reuse
75
+
76
+ Default to shared reuse first, especially for enum-like fields.
77
+
78
+ Typical Cabloy Basic select-style pair:
79
+
80
+ - `basic-select:formFieldSelect`
81
+ - `basic-select:select`
82
+
83
+ Default AI behavior:
84
+
85
+ - provide a user-visible `placeholder` for field-rendering select components unless the UX clearly requires an always-preselected value
86
+ - in Cabloy Basic, prefer `placeholder` over artificial empty-item injection when the goal is to keep the field initially unchosen
87
+ - in Cabloy Start, do not assume the same placeholder or empty-item behavior from `start-select`; verify the wrapper and underlying component semantics before reusing the Basic pattern
88
+
89
+ ### Custom renderer demo
90
+
91
+ Use only when the task explicitly wants to demonstrate the full custom-renderer workflow.
92
+
93
+ Required pieces:
94
+
95
+ - module-local FormField component
96
+ - module-local `@TableCell(...)` bean
97
+ - metadata regeneration
98
+ - frontend build
99
+ - `deps:vona`
100
+ - Vona typecheck and targeted backend test
101
+
102
+ Important:
103
+
104
+ - a plain component alone is not enough for backend `ZovaRender.cell(...)`
105
+ - backend table-cell rendering should point to a registered table-cell key backed by `@TableCell(...)`
106
+
107
+ ## 5. Must-close follow-up layers
108
+
109
+ - locale labels
110
+ - invalid-value test for constrained enum-like fields
111
+ - migration safety if persistence changed
112
+ - narrow verification first, then broader checks if needed
113
+
114
+ ## 6. Migration warning
115
+
116
+ If you add a new persisted field in a version-bump workflow:
117
+
118
+ - do not add the same new column in both an older create path and a new migration branch
119
+ - fresh install may run version branches sequentially
120
+ - duplicate introduction paths can cause duplicate-column failures
@@ -0,0 +1,80 @@
1
+ # Follow-up Checklist
2
+
3
+ After updating or refining a field on an existing backend resource, check which follow-up layers apply.
4
+
5
+ ## Classification follow-up
6
+
7
+ - is this a new persisted field or a metadata-only refinement?
8
+ - does the task require a `fileVersion` decision before persistence edits?
9
+ - is the request purely backend-first, or does it explicitly branch into renderer-aware frontend follow-up?
10
+
11
+ ## Backend thread follow-up
12
+
13
+ - entity field definition
14
+ - model/entity alignment
15
+ - inferred DTO flow vs manual DTO edits
16
+ - controller/service still match the resource contract
17
+ - locale updates for visible field text
18
+
19
+ ## Persistence follow-up
20
+
21
+ Apply when storage shape changes:
22
+
23
+ - `meta.version.ts`
24
+ - module `package.json` `fileVersion`
25
+ - fresh install vs upgrade behavior
26
+ - duplicate-column risk across historical and new migration branches
27
+
28
+ ## Validation and contract follow-up
29
+
30
+ - required vs optional behavior
31
+ - explicit enum-like allowed-value schema when needed
32
+ - `ZovaRender.order(...)`
33
+ - `ZovaRender.field(...)`
34
+ - `ZovaRender.cell(...)`
35
+ - invalid-value test coverage
36
+
37
+ ## Renderer follow-up
38
+
39
+ ### Shared renderer path
40
+
41
+ - confirm an existing shared renderer already fits
42
+ - keep option shapes aligned with the shared renderer baseline
43
+ - avoid custom frontend code when reuse is sufficient
44
+
45
+ ### Custom renderer demo path
46
+
47
+ Apply when the user explicitly wants to demonstrate custom renderer development:
48
+
49
+ - module-local FormField component exists
50
+ - module-local `@TableCell(...)` bean exists
51
+ - backend `ZovaRender.cell(...)` points to the registered table-cell key, not just a plain component
52
+ - metadata regeneration is included
53
+ - frontend build is included
54
+ - `deps:vona` is included
55
+
56
+ ## Verification follow-up
57
+
58
+ ### If persistence changed
59
+
60
+ - `npm run test`
61
+
62
+ ### If the change is narrower
63
+
64
+ - `cd vona && npm run tsc`
65
+ - `cd vona && npm test -- <resource-test>.test.ts`
66
+
67
+ ### If custom frontend renderers were introduced
68
+
69
+ - `npm run zova :tools:metadata <module-name>`
70
+ - `npm run build:zova:admin`
71
+ - `npm run deps:vona`
72
+ - `cd vona && npm run tsc`
73
+ - `cd vona && npm test -- <resource-test>.test.ts`
74
+
75
+ ## Common recovery rule
76
+
77
+ If generated `.zova-rest` output already contains the new renderer keys but Vona still behaves as if old types are installed:
78
+
79
+ - suspect a stale `vona/node_modules` installation state
80
+ - rebuild `vona/node_modules` and reinstall dependencies if normal `deps:vona` sync did not recover the local file-package installation state
@@ -0,0 +1,97 @@
1
+ # Verification Checklist
2
+
3
+ Use this reference with `cabloy-resource-field-update` to choose the right verification path for an existing resource field change.
4
+
5
+ ## 1. If persistence changed
6
+
7
+ This means the task changed storage shape, such as:
8
+
9
+ - a new persisted field
10
+ - a schema migration path
11
+ - `meta.version.ts`
12
+ - module `fileVersion`
13
+
14
+ Run:
15
+
16
+ ```bash
17
+ npm run test
18
+ ```
19
+
20
+ Reason:
21
+
22
+ - the test database should be reinitialized so schema/version mismatches surface early
23
+
24
+ ## 2. If the change is narrower
25
+
26
+ Start with the narrowest meaningful checks first.
27
+
28
+ Typical sequence:
29
+
30
+ ```bash
31
+ cd vona && npm run tsc
32
+ cd vona && npm test -- <resource-test>.test.ts
33
+ ```
34
+
35
+ Use this for:
36
+
37
+ - validation-only refinement
38
+ - locale updates for a field
39
+ - renderer metadata changes on an existing persisted field
40
+
41
+ ## 3. If custom frontend renderers were introduced
42
+
43
+ Run the synchronization chain in order:
44
+
45
+ 1. regenerate frontend metadata
46
+ 2. build the relevant frontend SSR/rest target
47
+ 3. run `deps:vona`
48
+ 4. run Vona typecheck
49
+ 5. run the narrow backend resource test
50
+
51
+ Representative Cabloy Basic admin flow:
52
+
53
+ ```bash
54
+ npm run zova :tools:metadata <module-name>
55
+ npm run build:zova:admin
56
+ npm run deps:vona
57
+ cd vona && npm run tsc
58
+ cd vona && npm test -- <resource-test>.test.ts
59
+ ```
60
+
61
+ If web SSR also matters, add the web build and then repeat dependency sync as needed.
62
+
63
+ ## 4. What to verify in the result
64
+
65
+ ### Backend contract
66
+
67
+ Confirm:
68
+
69
+ - field create/update/view/select behavior still works
70
+ - invalid enum-like values are rejected when applicable
71
+ - inferred DTO surfaces still line up with the entity/model chain
72
+
73
+ ### Renderer integration
74
+
75
+ Confirm:
76
+
77
+ - generated metadata contains the new component or table-cell registrations
78
+ - generated `.zova-rest` or related type surfaces contain the new renderer keys
79
+ - backend `ZovaRender.field(...)` / `ZovaRender.cell(...)` references pass typecheck
80
+
81
+ ## 5. Common recovery rule for stale local file dependencies
82
+
83
+ If all of these are true:
84
+
85
+ - generated `.zova-rest` files already contain the new renderer keys
86
+ - `deps:vona` was run
87
+ - Vona still behaves as if old renderer types are installed
88
+
89
+ Then suspect a stale or unhealthy local installation state in `vona/node_modules`.
90
+
91
+ Recovery action:
92
+
93
+ ```bash
94
+ cd vona && rm -rf node_modules && pnpm install
95
+ ```
96
+
97
+ Use this as a recovery path when the normal sync steps did not restore the local file-package installation state cleanly.
@@ -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,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.60
4
+
5
+ ### Features
6
+
7
+ - Add a mobile field to the demo-student example.
8
+ - Add demo-student summary and force-delete flows.
9
+ - Add a level renderer workflow to the demo-student example.
10
+ - Initialize test data automatically after setup.
11
+ - Refine router tab insertion order.
12
+
13
+ ### Improvements
14
+
15
+ - Add SSR architecture and workflow guides.
16
+ - Add a Web Socket documentation set.
17
+ - Add a Zova Behavior guide.
18
+ - Add router tabs documentation.
19
+ - Add advanced bean scene authoring guides and document boilerplate variants.
20
+ - Add a fullstack quick start tutorial series and document core fullstack principles.
21
+ - Refactor the fullstack AI tutorial series and streamline quick start guidance.
22
+ - Clarify helper placement and strengthen contract loop examples with reusable patterns.
23
+ - Simplify and polish tutorial prompts, verification steps, and user workflow guidance.
24
+ - Unify resource-owned custom item state handling.
25
+ - Update `tmp` to `0.2.7` and `tar` to `7.5.16`.
26
+ - Disable `pnpm` `minimumReleaseAge` in CI workflows.
27
+
28
+ ### Bug Fixes
29
+
30
+ - Make contract loop examples more resilient.
31
+ - Refine select placeholder guidance.
32
+
3
33
  ## 5.1.59
4
34
 
5
35
  ### Features
package/CLAUDE.md CHANGED
@@ -54,9 +54,11 @@ Before inventing a custom implementation path:
54
54
  - Service-scene runtime-anchor bases that should not register in `IBeanRecordGeneral` should prefer the `src/service/*_.ts` form.
55
55
  - `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
56
  - 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.
57
+ - 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
58
 
58
59
  ## Verification expectations
59
60
 
60
61
  - For docs changes: run the docs build and verify links/navigation where practical.
61
62
  - For code-generation or workflow guidance changes: verify that the referenced scripts and command families still exist.
62
63
  - For code changes: prefer the narrowest meaningful verification first, then use shared root scripts when broader confidence is needed.
64
+ - 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
@@ -39,6 +39,26 @@ const fullstackGroups = [
39
39
  { text: 'Quickstart', link: '/fullstack/quickstart' },
40
40
  ],
41
41
  },
42
+ {
43
+ text: 'Fullstack / Tutorials',
44
+ items: [
45
+ { text: 'Tutorials Overview', link: '/fullstack/tutorials-overview' },
46
+ { text: 'Tutorial 1: First Module', link: '/fullstack/tutorial-1-first-module' },
47
+ { text: 'Tutorial 2: First CRUD', link: '/fullstack/tutorial-2-first-crud' },
48
+ {
49
+ text: 'Tutorial 3: Frontend Metadata Sharing',
50
+ link: '/fullstack/tutorial-3-frontend-metadata-sharing',
51
+ },
52
+ {
53
+ text: 'Tutorial 4: Backend Contract Sharing',
54
+ link: '/fullstack/tutorial-4-backend-contract-sharing',
55
+ },
56
+ {
57
+ text: 'Tutorial 5: One Contract Surface, Four Uses',
58
+ link: '/fullstack/tutorial-5-one-contract-four-uses',
59
+ },
60
+ ],
61
+ },
42
62
  {
43
63
  text: 'Tooling & Workflow',
44
64
  items: [
@@ -75,6 +95,7 @@ const referenceGroups = [
75
95
  { text: 'Introduction', link: '/reference/introduction' },
76
96
  { text: 'Repo Scripts', link: '/reference/repo-scripts' },
77
97
  { text: 'CLI Reference', link: '/reference/cli-reference' },
98
+ { text: 'Bean Scene Boilerplate Variants', link: '/reference/bean-scene-boilerplates' },
78
99
  ],
79
100
  },
80
101
  {
@@ -182,6 +203,7 @@ export default defineConfig({
182
203
  text: 'Core Programming Model',
183
204
  items: [
184
205
  { text: 'AOP Overview', link: '/backend/aop-overview' },
206
+ { text: 'Bean Scene Authoring', link: '/backend/bean-scene-authoring' },
185
207
  { text: 'Controller Guide', link: '/backend/controller-guide' },
186
208
  { text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
187
209
  { text: 'Internal AOP Guide', link: '/backend/internal-aop-guide' },
@@ -223,6 +245,10 @@ export default defineConfig({
223
245
  { text: 'Schedule Guide', link: '/backend/schedule-guide' },
224
246
  { text: 'Worker Guide', link: '/backend/worker-guide' },
225
247
  { text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
248
+ { text: 'Web Socket Guide', link: '/backend/websocket-guide' },
249
+ { text: 'Web Socket Usage Guide', link: '/backend/websocket-usage-guide' },
250
+ { text: 'Web Socket Protocol Guide', link: '/backend/websocket-protocol-guide' },
251
+ { text: 'Web Socket Call Flow', link: '/backend/websocket-call-flow' },
226
252
  { text: 'Redlock Guide', link: '/backend/redlock-guide' },
227
253
  ],
228
254
  },
@@ -248,6 +274,8 @@ export default defineConfig({
248
274
  text: 'Architecture & Modules',
249
275
  items: [
250
276
  { text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
277
+ { text: 'Bean Scene Authoring', link: '/frontend/bean-scene-authoring' },
278
+ { text: 'Behavior Guide', link: '/frontend/behavior-guide' },
251
279
  { text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
252
280
  { text: 'Module Scope', link: '/frontend/module-scope' },
253
281
  { text: 'Design Principles', link: '/frontend/design-principles' },
@@ -277,6 +305,17 @@ export default defineConfig({
277
305
  { text: 'Page Params Guide', link: '/frontend/page-params-guide' },
278
306
  { text: 'Zod Guide', link: '/frontend/zod-guide' },
279
307
  { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
308
+ { text: 'Router Tabs Introduction', link: '/frontend/router-tabs-introduction' },
309
+ { text: 'Router Tabs Overview', link: '/frontend/router-tabs-overview' },
310
+ { text: 'Router Tabs Mechanism', link: '/frontend/router-tabs-mechanism' },
311
+ {
312
+ text: 'Router Tabs Route Meta Cookbook',
313
+ link: '/frontend/router-tabs-route-meta-cookbook',
314
+ },
315
+ {
316
+ text: 'Router Tabs Admin and Web Comparison',
317
+ link: '/frontend/router-tabs-admin-web-comparison',
318
+ },
280
319
  { text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
281
320
  { text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
282
321
  ],
@@ -313,6 +352,10 @@ export default defineConfig({
313
352
  {
314
353
  text: 'SSR',
315
354
  items: [
355
+ { text: 'SSR Architecture Overview', link: '/frontend/ssr-architecture-overview' },
356
+ { text: 'SSR Build and Deploy Guide', link: '/frontend/ssr-build-deploy-guide' },
357
+ { text: 'SSR Troubleshooting Guide', link: '/frontend/ssr-troubleshooting-guide' },
358
+ { text: 'SSR Review Checklist', link: '/frontend/ssr-review-checklist' },
316
359
  { text: 'SSR Overview', link: '/frontend/ssr-overview' },
317
360
  { text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
318
361
  { 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,13 @@ 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
+
148
155
  ## Anti-patterns
149
156
 
150
157
  Avoid these mistakes in skills:
@@ -67,7 +67,22 @@ Primary dependencies:
67
67
  - Zova OpenAPI SDK and server-data docs
68
68
  - fullstack collaboration docs
69
69
 
70
- ### 4. Metadata refresh skill
70
+ ### 4. Resource field update skill
71
+
72
+ Purpose:
73
+
74
+ - handle updates to fields on existing backend resources
75
+ - force the right `fileVersion` decision for new persisted fields
76
+ - branch correctly between shared renderer reuse and custom renderer demo follow-up
77
+ - verify entity, locale, migration, test, metadata, build, and dependency-sync implications
78
+
79
+ Primary dependencies:
80
+
81
+ - Vona entity / migration / DTO workflow knowledge
82
+ - Zova metadata/build flows when renderer follow-up is involved
83
+ - the backend resource field workflow note in `.docs-internal/`
84
+
85
+ ### 5. Metadata refresh skill
71
86
 
72
87
  Purpose:
73
88
 
@@ -81,7 +96,7 @@ Primary dependencies:
81
96
  - CLI-to-skill mapping
82
97
  - edition detection docs
83
98
 
84
- ### 5. Distributed backend workflow skill
99
+ ### 6. Distributed backend workflow skill
85
100
 
86
101
  Purpose:
87
102