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.
- package/.claude/skills/cabloy-contract-loop/SKILL.md +16 -0
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +26 -0
- package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +144 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +18 -0
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +267 -0
- package/.claude/skills/cabloy-resource-field-update/evals/evals.json +53 -0
- package/.claude/skills/cabloy-resource-field-update/references/custom-renderer-demo-checklist.md +102 -0
- package/.claude/skills/cabloy-resource-field-update/references/field-update-decision-tree.md +120 -0
- package/.claude/skills/cabloy-resource-field-update/references/follow-up-checklist.md +80 -0
- package/.claude/skills/cabloy-resource-field-update/references/verification-checklist.md +97 -0
- package/.github/workflows/docs-pages.yml +2 -0
- package/.github/workflows/vona-cov-pg.yml +2 -0
- package/.github/workflows/vona-test-crud.yml +4 -2
- package/.github/workflows/vona-test-mysql.yml +2 -0
- package/.github/workflows/vona-test-pg.yml +2 -0
- package/.github/workflows/vona-test-sqlite3.yml +2 -0
- package/.github/workflows/vona-tsc.yml +2 -0
- package/.github/workflows/zova-ui.yml +2 -0
- package/.gitignore +0 -4
- package/CHANGELOG.md +30 -0
- package/CLAUDE.md +2 -0
- package/README.md +15 -0
- package/cabloy-docs/.vitepress/config.mjs +43 -0
- package/cabloy-docs/ai/class-placement-rule.md +2 -0
- package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +17 -2
- package/cabloy-docs/backend/bean-scene-authoring.md +350 -0
- package/cabloy-docs/backend/cli.md +26 -1
- package/cabloy-docs/backend/foundation.md +28 -3
- package/cabloy-docs/backend/introduction.md +8 -0
- package/cabloy-docs/backend/service-guide.md +2 -0
- package/cabloy-docs/backend/websocket-call-flow.md +435 -0
- package/cabloy-docs/backend/websocket-guide.md +455 -0
- package/cabloy-docs/backend/websocket-protocol-guide.md +381 -0
- package/cabloy-docs/backend/websocket-usage-guide.md +356 -0
- package/cabloy-docs/frontend/bean-scene-authoring.md +372 -0
- package/cabloy-docs/frontend/behavior-guide.md +449 -0
- package/cabloy-docs/frontend/cli.md +12 -0
- package/cabloy-docs/frontend/introduction.md +5 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +10 -9
- package/cabloy-docs/frontend/router-tabs-admin-web-comparison.md +206 -0
- package/cabloy-docs/frontend/router-tabs-introduction.md +106 -0
- package/cabloy-docs/frontend/router-tabs-mechanism.md +469 -0
- package/cabloy-docs/frontend/router-tabs-overview.md +227 -0
- package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +343 -0
- package/cabloy-docs/frontend/ssr-architecture-overview.md +211 -0
- package/cabloy-docs/frontend/ssr-build-deploy-guide.md +308 -0
- package/cabloy-docs/frontend/ssr-review-checklist.md +184 -0
- package/cabloy-docs/frontend/ssr-troubleshooting-guide.md +301 -0
- package/cabloy-docs/fullstack/framework-performance.md +3 -3
- package/cabloy-docs/fullstack/introduction.md +29 -0
- package/cabloy-docs/fullstack/quickstart.md +7 -1
- package/cabloy-docs/fullstack/tutorial-1-first-module.md +111 -0
- package/cabloy-docs/fullstack/tutorial-2-first-crud.md +122 -0
- package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +131 -0
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +119 -0
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +144 -0
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +168 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +179 -0
- package/cabloy-docs/index.md +4 -3
- package/cabloy-docs/reference/bean-scene-boilerplates.md +73 -0
- package/cabloy-docs/reference/cli-reference.md +2 -0
- package/package.json +6 -2
- package/scripts/init.ts +18 -2
- package/vona/packages-cli/cabloy-cli/package.json +2 -2
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli-set-api/package.json +1 -1
- package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +4 -0
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +133 -1088
- package/vona/pnpm-workspace.yaml +0 -1
- package/vona/src/suite-vendor/a-vona/modules/a-core/assets/static/img/vona.svg +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/package.original.json +1 -1
- package/zova/packages-cli/cli/package.json +3 -3
- package/zova/packages-cli/cli-set-front/cli/templates/init/icon/boilerplate/icons/default/zova.svg +1 -1
- package/zova/packages-cli/cli-set-front/package.json +3 -3
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +4 -0
- package/zova/packages-cli/cli-set-front/src/lib/command/create.bean.ts +5 -1
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +284 -1313
- package/zova/pnpm-workspace.yaml +0 -1
- package/zova/src/suite/a-home/modules/home-icon/icons/social/cabloy.svg +1 -1
- package/zova/src/suite/a-home/modules/home-icon/icons/social/vona.svg +1 -1
- package/zova/src/suite/a-home/modules/home-icon/icons/social/zova.svg +1 -1
- package/zova/src/suite/a-home/modules/home-icon/src/.metadata/icons/groups/social.svg +3 -3
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +9 -0
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +66 -16
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +60 -18
- package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/cli/tableCell/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- 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.
|
|
@@ -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-
|
|
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
|
|
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
|
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.
|
|
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
|
-
###
|
|
99
|
+
### 6. Distributed backend workflow skill
|
|
85
100
|
|
|
86
101
|
Purpose:
|
|
87
102
|
|