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.
- package/.claude/hooks/contract-loop-gate.ts +296 -0
- package/.claude/settings.json +16 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +103 -14
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +126 -12
- package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +148 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +49 -13
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +11 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
- package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +274 -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/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
- package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
- package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -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 +52 -0
- package/CLAUDE.md +12 -0
- package/README.md +15 -0
- package/cabloy-docs/.vitepress/config.mjs +89 -0
- package/cabloy-docs/ai/class-placement-rule.md +2 -0
- package/cabloy-docs/ai/cli-to-skill-map.md +14 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +14 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +27 -9
- package/cabloy-docs/ai/introduction.md +1 -0
- package/cabloy-docs/ai/playbook-backend-module.md +6 -0
- package/cabloy-docs/ai/playbook-module-removal.md +164 -0
- package/cabloy-docs/ai/skills.md +11 -0
- package/cabloy-docs/backend/bean-scene-authoring.md +350 -0
- package/cabloy-docs/backend/cli.md +26 -1
- package/cabloy-docs/backend/dto-guide.md +6 -0
- package/cabloy-docs/backend/entity-guide.md +18 -0
- package/cabloy-docs/backend/foundation.md +28 -3
- package/cabloy-docs/backend/introduction.md +10 -0
- package/cabloy-docs/backend/serialization-guide.md +10 -0
- package/cabloy-docs/backend/service-guide.md +2 -0
- package/cabloy-docs/backend/status-guide.md +271 -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/api-guide.md +2 -0
- package/cabloy-docs/frontend/bean-scene-authoring.md +374 -0
- package/cabloy-docs/frontend/behavior-guide.md +449 -0
- package/cabloy-docs/frontend/cli.md +24 -0
- package/cabloy-docs/frontend/command-scene-authoring.md +495 -0
- package/cabloy-docs/frontend/design-principles.md +6 -0
- package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
- package/cabloy-docs/frontend/form-guide.md +795 -0
- package/cabloy-docs/frontend/foundation.md +29 -0
- package/cabloy-docs/frontend/introduction.md +17 -1
- package/cabloy-docs/frontend/ioc-and-beans.md +16 -9
- package/cabloy-docs/frontend/mock-guide.md +1 -0
- package/cabloy-docs/frontend/model-architecture.md +252 -39
- package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
- package/cabloy-docs/frontend/model-resource-cookbook.md +505 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +382 -0
- package/cabloy-docs/frontend/model-resource-usage-guide.md +318 -0
- package/cabloy-docs/frontend/model-state-guide.md +366 -13
- package/cabloy-docs/frontend/openapi-sdk-guide.md +5 -2
- package/cabloy-docs/frontend/page-guide.md +6 -0
- package/cabloy-docs/frontend/quickstart.md +4 -0
- package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
- 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/server-data.md +2 -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/frontend/zova-form-source-reading-map.md +295 -0
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +556 -0
- package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +327 -0
- package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +308 -0
- package/cabloy-docs/fullstack/contract-loop-playbook.md +350 -0
- package/cabloy-docs/fullstack/framework-performance.md +3 -3
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +44 -1
- package/cabloy-docs/fullstack/introduction.md +40 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +19 -9
- 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 +144 -0
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +146 -0
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +170 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +192 -0
- package/cabloy-docs/index.md +4 -3
- package/cabloy-docs/reference/bean-scene-boilerplates.md +75 -0
- package/cabloy-docs/reference/cli-reference.md +2 -0
- package/package.json +7 -2
- package/scripts/initTestData.ts +25 -0
- package/scripts/upgrade.ts +17 -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 +226 -1091
- 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/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -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/bean/cli.openapi.generate.ts +34 -4
- 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 +282 -1311
- 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,308 @@
|
|
|
1
|
+
# SSR Build and Deploy Guide
|
|
2
|
+
|
|
3
|
+
This guide explains the public SSR build and deploy workflow in Zova within the Cabloy monorepo.
|
|
4
|
+
|
|
5
|
+
## Why this page exists
|
|
6
|
+
|
|
7
|
+
The other SSR pages explain architecture, behavior, and troubleshooting.
|
|
8
|
+
|
|
9
|
+
This page answers a more operational question:
|
|
10
|
+
|
|
11
|
+
- how do you build and package SSR output correctly for Cabloy?
|
|
12
|
+
|
|
13
|
+
That matters because Cabloy SSR is a fullstack workflow, not only a frontend build command.
|
|
14
|
+
|
|
15
|
+
A complete SSR deployment path usually needs all of these pieces to stay aligned:
|
|
16
|
+
|
|
17
|
+
- the correct frontend SSR flavor build
|
|
18
|
+
- any related REST/type generation steps used by the target workflow
|
|
19
|
+
- the backend runtime that consumes the built frontend output
|
|
20
|
+
- environment/config choices that differ between dev and prod
|
|
21
|
+
|
|
22
|
+
## Start from the shared root scripts
|
|
23
|
+
|
|
24
|
+
In Cabloy Basic, the root `package.json` is the first workflow surface.
|
|
25
|
+
|
|
26
|
+
Representative current root scripts include:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm run dev:zova:admin
|
|
30
|
+
npm run dev:zova:web
|
|
31
|
+
npm run build:zova
|
|
32
|
+
npm run build:zova:admin
|
|
33
|
+
npm run build:zova:web
|
|
34
|
+
npm run build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
A practical rule is:
|
|
38
|
+
|
|
39
|
+
1. start from the root wrapper when the normal repo workflow already covers your need
|
|
40
|
+
2. drop into deeper Zova flavor-specific scripts only when you need tighter control or debugging detail
|
|
41
|
+
|
|
42
|
+
Read together with:
|
|
43
|
+
|
|
44
|
+
- [Repo Scripts](/reference/repo-scripts)
|
|
45
|
+
- [Frontend Scripts](/frontend/scripts)
|
|
46
|
+
- [Fullstack Vona + Zova Integration](/fullstack/vona-zova-integration)
|
|
47
|
+
|
|
48
|
+
## Detect the edition first
|
|
49
|
+
|
|
50
|
+
Before documenting or automating SSR build commands, detect the active edition.
|
|
51
|
+
|
|
52
|
+
In the current public repo:
|
|
53
|
+
|
|
54
|
+
- `__CABLOY_BASIC__` means Cabloy Basic
|
|
55
|
+
- current public root wrappers target Basic-specific flavors such as `cabloyBasicAdmin` and `cabloyBasicWeb`
|
|
56
|
+
|
|
57
|
+
For Cabloy Start:
|
|
58
|
+
|
|
59
|
+
- the same high-level SSR workflow still applies
|
|
60
|
+
- but flavor names, site baselines, assets, and project paths can differ
|
|
61
|
+
- do not reuse Basic flavor examples blindly in Start-specific documentation or automation
|
|
62
|
+
|
|
63
|
+
## Two common workflow levels
|
|
64
|
+
|
|
65
|
+
### Level 1: root-wrapper workflow
|
|
66
|
+
|
|
67
|
+
Use this when you want the standard Cabloy Basic monorepo workflow.
|
|
68
|
+
|
|
69
|
+
Representative commands:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm run dev:zova:admin
|
|
73
|
+
npm run dev:zova:web
|
|
74
|
+
npm run build:zova
|
|
75
|
+
npm run build
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Practical interpretation:
|
|
79
|
+
|
|
80
|
+
- `dev:zova:*` is for normal frontend SSR development entry
|
|
81
|
+
- `build:zova` builds frontend SSR output in batch mode
|
|
82
|
+
- `build:zova:admin` and `build:zova:web` are explicit root-wrapper paths for flavor-specific SSR output plus related REST generation
|
|
83
|
+
- `build` is the fullstack alignment path when frontend and backend output should move together
|
|
84
|
+
|
|
85
|
+
### Level 2: flavor-specific Zova workflow
|
|
86
|
+
|
|
87
|
+
Use this when you need appMode/flavor detail explicitly.
|
|
88
|
+
|
|
89
|
+
Representative current Basic examples include:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cd zova && npm run dev:ssr:cabloyBasicAdmin
|
|
93
|
+
cd zova && npm run dev:ssr:cabloyBasicWeb
|
|
94
|
+
cd zova && npm run build:ssr:cabloyBasicAdmin
|
|
95
|
+
cd zova && npm run build:ssr:cabloyBasicWeb
|
|
96
|
+
cd zova && npm run build:rest:cabloyBasicAdmin
|
|
97
|
+
cd zova && npm run build:rest:cabloyBasicWeb
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This level is useful when you need to separate:
|
|
101
|
+
|
|
102
|
+
- admin vs web
|
|
103
|
+
- SSR output vs REST/type output
|
|
104
|
+
- root-wrapper behavior vs lower-level flavor behavior
|
|
105
|
+
|
|
106
|
+
## Development workflow
|
|
107
|
+
|
|
108
|
+
A normal SSR development workflow in Cabloy Basic is:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
npm run dev:zova:admin
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
or:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npm run dev:zova:web
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Use this when the task is:
|
|
121
|
+
|
|
122
|
+
- page development
|
|
123
|
+
- route debugging
|
|
124
|
+
- SSR UI iteration
|
|
125
|
+
- hydration behavior review
|
|
126
|
+
|
|
127
|
+
If you need deeper script control or need to verify the exact Zova flavor path, inspect the flavor-specific scripts described in [Frontend Scripts](/frontend/scripts).
|
|
128
|
+
|
|
129
|
+
## Build workflow
|
|
130
|
+
|
|
131
|
+
### Build frontend SSR output only
|
|
132
|
+
|
|
133
|
+
Use this when you need the frontend SSR artifacts refreshed but do not yet need the full backend build flow.
|
|
134
|
+
|
|
135
|
+
Representative current Basic command:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm run build:zova
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
This is the first useful step when:
|
|
142
|
+
|
|
143
|
+
- frontend SSR code changed
|
|
144
|
+
- static assets or SSR bundle output need regeneration
|
|
145
|
+
- you want to distinguish frontend build problems from backend runtime problems
|
|
146
|
+
|
|
147
|
+
### Build the fullstack output together
|
|
148
|
+
|
|
149
|
+
Use this when frontend SSR output and backend runtime should be aligned in one workflow.
|
|
150
|
+
|
|
151
|
+
Representative current root command:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
npm run build
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
In the current repo, this means:
|
|
158
|
+
|
|
159
|
+
- build Zova SSR output first
|
|
160
|
+
- then build Vona
|
|
161
|
+
|
|
162
|
+
This is the safer default when a change crosses the frontend/backend SSR boundary.
|
|
163
|
+
|
|
164
|
+
## Where REST/type generation fits
|
|
165
|
+
|
|
166
|
+
Some workflows need more than SSR HTML output alone.
|
|
167
|
+
|
|
168
|
+
In current Basic examples, there are separate REST/type generation commands such as:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
cd zova && npm run build:rest:cabloyBasicAdmin
|
|
172
|
+
cd zova && npm run build:rest:cabloyBasicWeb
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Treat these deliberately.
|
|
176
|
+
|
|
177
|
+
Use them when the workflow depends on generated contract-aligned frontend surfaces in addition to SSR bundle output.
|
|
178
|
+
|
|
179
|
+
Do **not** assume every SSR-only change needs manual extra regeneration, but do verify whether your target workflow depends on these generated artifacts.
|
|
180
|
+
|
|
181
|
+
## Dev vs prod mindset
|
|
182
|
+
|
|
183
|
+
A frequent SSR mistake is assuming that “works in dev” means “ready for deploy.”
|
|
184
|
+
|
|
185
|
+
Dev and prod can differ in important ways:
|
|
186
|
+
|
|
187
|
+
- dev may proxy through a frontend dev server
|
|
188
|
+
- prod depends on built SSR output and built client assets
|
|
189
|
+
- asset path assumptions can differ after build
|
|
190
|
+
- runtime env/config choices can differ between dev and prod
|
|
191
|
+
|
|
192
|
+
That is why SSR deployment work should always include both:
|
|
193
|
+
|
|
194
|
+
1. the build step
|
|
195
|
+
2. a targeted verification pass against built behavior
|
|
196
|
+
|
|
197
|
+
Read together with:
|
|
198
|
+
|
|
199
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
200
|
+
- [Environment and Config Guide](/frontend/environment-config-guide)
|
|
201
|
+
|
|
202
|
+
## Practical deployment checklist
|
|
203
|
+
|
|
204
|
+
Use this checklist before treating an SSR build as deploy-ready.
|
|
205
|
+
|
|
206
|
+
### 1. confirm the target edition and flavor
|
|
207
|
+
|
|
208
|
+
Ask:
|
|
209
|
+
|
|
210
|
+
- am I in Cabloy Basic or Cabloy Start?
|
|
211
|
+
- is this admin or web?
|
|
212
|
+
- am I using the correct SSR flavor for that target?
|
|
213
|
+
|
|
214
|
+
### 2. confirm the intended workflow level
|
|
215
|
+
|
|
216
|
+
Ask:
|
|
217
|
+
|
|
218
|
+
- is the root wrapper enough?
|
|
219
|
+
- do I need the lower-level Zova flavor script for this task?
|
|
220
|
+
- does the workflow also depend on REST/type generation?
|
|
221
|
+
|
|
222
|
+
### 3. rebuild the relevant frontend SSR output
|
|
223
|
+
|
|
224
|
+
Use the narrowest meaningful build first.
|
|
225
|
+
|
|
226
|
+
Typical options:
|
|
227
|
+
|
|
228
|
+
- `npm run build:zova`
|
|
229
|
+
- targeted `build:ssr:*` commands inside `zova`
|
|
230
|
+
|
|
231
|
+
### 4. align backend and frontend when the change crosses the boundary
|
|
232
|
+
|
|
233
|
+
If the change affects the integrated SSR runtime path, prefer:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
npm run build
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
That reduces the chance of testing stale frontend output against newer backend code or the reverse.
|
|
240
|
+
|
|
241
|
+
### 5. verify built behavior, not only dev behavior
|
|
242
|
+
|
|
243
|
+
At minimum, re-check:
|
|
244
|
+
|
|
245
|
+
- the expected page loads through SSR
|
|
246
|
+
- client assets load correctly
|
|
247
|
+
- hydration behaves as expected
|
|
248
|
+
- no edition-specific UI/theme assumption breaks the real target flavor
|
|
249
|
+
|
|
250
|
+
## Common deployment mistakes
|
|
251
|
+
|
|
252
|
+
### Mistake 1: only testing dev mode
|
|
253
|
+
|
|
254
|
+
Dev success does not prove that the built SSR bundle and built client assets are correct.
|
|
255
|
+
|
|
256
|
+
### Mistake 2: building the wrong flavor
|
|
257
|
+
|
|
258
|
+
A command can succeed while still producing output for the wrong target.
|
|
259
|
+
|
|
260
|
+
Always confirm whether the target is:
|
|
261
|
+
|
|
262
|
+
- Basic vs Start
|
|
263
|
+
- admin vs web
|
|
264
|
+
- root-wrapper path vs direct flavor script
|
|
265
|
+
|
|
266
|
+
### Mistake 3: forgetting the fullstack boundary
|
|
267
|
+
|
|
268
|
+
If the issue appears only after frontend/backend integration, a frontend-only build check may be insufficient.
|
|
269
|
+
|
|
270
|
+
Use the fullstack build path when the change crosses the SSR boundary.
|
|
271
|
+
|
|
272
|
+
### Mistake 4: assuming deploy problems are page-logic problems
|
|
273
|
+
|
|
274
|
+
Some SSR deploy failures come from stale output, missing assets, wrong flavor selection, or env/config mismatch before they come from page logic itself.
|
|
275
|
+
|
|
276
|
+
## How this guide relates to other SSR docs
|
|
277
|
+
|
|
278
|
+
Use these pages together:
|
|
279
|
+
|
|
280
|
+
- [SSR Overview](/frontend/ssr-overview) for the baseline SSR feature model
|
|
281
|
+
- [SSR Architecture Overview](/frontend/ssr-architecture-overview) for the fullstack mental model
|
|
282
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide) for symptom-based diagnosis
|
|
283
|
+
- [Frontend Scripts](/frontend/scripts) for script lookup
|
|
284
|
+
- [Environment and Config Guide](/frontend/environment-config-guide) for runtime/config selection
|
|
285
|
+
- [Fullstack Vona + Zova Integration](/fullstack/vona-zova-integration) for the monorepo integration model
|
|
286
|
+
|
|
287
|
+
## Recommended reading order
|
|
288
|
+
|
|
289
|
+
If you are deploying or packaging SSR behavior, use this path:
|
|
290
|
+
|
|
291
|
+
1. this page for build/deploy workflow
|
|
292
|
+
2. [Frontend Scripts](/frontend/scripts)
|
|
293
|
+
3. [Environment and Config Guide](/frontend/environment-config-guide)
|
|
294
|
+
4. [SSR Architecture Overview](/frontend/ssr-architecture-overview)
|
|
295
|
+
5. [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
296
|
+
6. [Fullstack Vona + Zova Integration](/fullstack/vona-zova-integration)
|
|
297
|
+
|
|
298
|
+
## Implementation checks for SSR build/deploy changes
|
|
299
|
+
|
|
300
|
+
Before finalizing an SSR build/deploy change, ask:
|
|
301
|
+
|
|
302
|
+
1. did I detect the correct edition and target flavor first?
|
|
303
|
+
2. did I choose the right workflow level: root wrapper or lower-level flavor script?
|
|
304
|
+
3. did I rebuild the relevant frontend SSR output?
|
|
305
|
+
4. if the change crosses the frontend/backend SSR boundary, did I verify the aligned fullstack build path?
|
|
306
|
+
5. did I verify built behavior rather than relying only on dev behavior?
|
|
307
|
+
|
|
308
|
+
That keeps SSR deployment guidance aligned with the real Cabloy monorepo workflow rather than with generic frontend-only assumptions.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# SSR Review Checklist
|
|
2
|
+
|
|
3
|
+
This checklist helps contributors and AI workflows review SSR-related changes in Zova within the Cabloy monorepo.
|
|
4
|
+
|
|
5
|
+
## Why this page exists
|
|
6
|
+
|
|
7
|
+
The other SSR pages explain architecture, build/deploy flow, and troubleshooting.
|
|
8
|
+
|
|
9
|
+
This page answers a narrower review question:
|
|
10
|
+
|
|
11
|
+
- what should you verify before accepting an SSR-related change?
|
|
12
|
+
|
|
13
|
+
That matters because SSR changes can look correct in one narrow path while still being wrong at a framework boundary.
|
|
14
|
+
|
|
15
|
+
Common review failures include:
|
|
16
|
+
|
|
17
|
+
- checking only client behavior and skipping server-render behavior
|
|
18
|
+
- checking only dev behavior and skipping built behavior
|
|
19
|
+
- reviewing page logic without checking the SSR layer it depends on
|
|
20
|
+
- assuming a theme or UI rule is shared across editions when it is not
|
|
21
|
+
|
|
22
|
+
## Use this checklist with the layer model
|
|
23
|
+
|
|
24
|
+
Use the [SSR Architecture Overview](/frontend/ssr-architecture-overview) as the base model.
|
|
25
|
+
|
|
26
|
+
For review, the practical layers are:
|
|
27
|
+
|
|
28
|
+
1. **Vona SSR orchestration**
|
|
29
|
+
2. **frontend build output**
|
|
30
|
+
3. **Zova SSR server render**
|
|
31
|
+
4. **client hydration**
|
|
32
|
+
|
|
33
|
+
A good SSR review starts by asking which of these layers the change touches.
|
|
34
|
+
|
|
35
|
+
## Fast review checklist
|
|
36
|
+
|
|
37
|
+
Use this short checklist for PR review, AI review, or self-review.
|
|
38
|
+
|
|
39
|
+
- [ ] I identified which SSR layer the change touches first.
|
|
40
|
+
- [ ] I checked whether the change affects server render, client hydration, or both.
|
|
41
|
+
- [ ] I verified that the change uses existing SSR abstractions rather than inventing a parallel workaround.
|
|
42
|
+
- [ ] I checked whether the change needs verification in built mode rather than only in dev mode.
|
|
43
|
+
- [ ] I reviewed whether the change depends on edition-specific UI or theme assumptions.
|
|
44
|
+
|
|
45
|
+
## Layer-by-layer review checklist
|
|
46
|
+
|
|
47
|
+
### 1. Vona SSR orchestration
|
|
48
|
+
|
|
49
|
+
Review these questions when the change affects SSR site routing, backend-side SSR integration, or request entry behavior.
|
|
50
|
+
|
|
51
|
+
- [ ] Does the request still enter the correct SSR site?
|
|
52
|
+
- [ ] Does the change preserve the intended SSR site/path assumptions?
|
|
53
|
+
- [ ] If route-to-page handoff changed, is it still using the intended SSR render/redirect boundary?
|
|
54
|
+
- [ ] If the issue is dev-only or prod-only, did I verify whether the failure belongs to orchestration rather than page logic?
|
|
55
|
+
|
|
56
|
+
Read together:
|
|
57
|
+
|
|
58
|
+
- [SSR Architecture Overview](/frontend/ssr-architecture-overview)
|
|
59
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
60
|
+
|
|
61
|
+
### 2. Frontend build output
|
|
62
|
+
|
|
63
|
+
Review these questions when the change affects scripts, flavors, generated assets, or deploy packaging.
|
|
64
|
+
|
|
65
|
+
- [ ] Did I verify the correct edition and target flavor first?
|
|
66
|
+
- [ ] Did I verify whether the change needs the root wrapper or a flavor-specific script path?
|
|
67
|
+
- [ ] Did I check whether built SSR output, client assets, or related generated artifacts need regeneration?
|
|
68
|
+
- [ ] If the change crosses the fullstack SSR boundary, did I verify the aligned build workflow rather than a frontend-only build assumption?
|
|
69
|
+
|
|
70
|
+
Read together:
|
|
71
|
+
|
|
72
|
+
- [SSR Build and Deploy Guide](/frontend/ssr-build-deploy-guide)
|
|
73
|
+
- [Frontend Scripts](/frontend/scripts)
|
|
74
|
+
- [Fullstack Vona + Zova Integration](/fullstack/vona-zova-integration)
|
|
75
|
+
|
|
76
|
+
### 3. Zova SSR server render
|
|
77
|
+
|
|
78
|
+
Review these questions when the change affects route resolution, server-side data, or server-generated HTML/meta.
|
|
79
|
+
|
|
80
|
+
- [ ] Is the initial server-rendered HTML still correct before hydration begins?
|
|
81
|
+
- [ ] If data is involved, is it prepared through the intended SSR/model/controller flow?
|
|
82
|
+
- [ ] If metadata is involved, is it still produced through the intended SSR-aware meta path?
|
|
83
|
+
- [ ] If the change touches SSR-only behavior, did I verify it at the server-render stage rather than only after client boot?
|
|
84
|
+
|
|
85
|
+
Read together:
|
|
86
|
+
|
|
87
|
+
- [SSR Init Data](/frontend/ssr-init-data)
|
|
88
|
+
- [SSR SEO Meta](/frontend/ssr-seo-meta)
|
|
89
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
90
|
+
|
|
91
|
+
### 4. Client hydration
|
|
92
|
+
|
|
93
|
+
Review these questions when the change affects browser-only behavior, first paint, or client takeover after SSR.
|
|
94
|
+
|
|
95
|
+
- [ ] Is the client reusing server-provided state rather than recomputing a different first-screen result?
|
|
96
|
+
- [ ] If browser-only behavior is involved, should part of the UI be isolated with `ClientOnly`?
|
|
97
|
+
- [ ] Did I separate a hydration issue from a server-render issue before changing code?
|
|
98
|
+
- [ ] If the final browser state differs from the server output, is that difference expected and framework-supported?
|
|
99
|
+
|
|
100
|
+
Read together:
|
|
101
|
+
|
|
102
|
+
- [SSR ClientOnly](/frontend/ssr-client-only)
|
|
103
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
104
|
+
|
|
105
|
+
## Theme and edition-sensitive review gate
|
|
106
|
+
|
|
107
|
+
Use this gate whenever a change touches theme, tokens, first paint, or dark/light behavior.
|
|
108
|
+
|
|
109
|
+
- [ ] I identified the active edition before reviewing SSR theme behavior.
|
|
110
|
+
- [ ] I identified the active UI layer before assuming token or hydration behavior.
|
|
111
|
+
- [ ] I checked whether the active SSR path provides cookie-backed theme resolution.
|
|
112
|
+
- [ ] I did not treat server-side theme-sensitive reads as final browser truth when the active SSR path does not guarantee that.
|
|
113
|
+
- [ ] I verified whether the rule is shared across editions or adapter-specific.
|
|
114
|
+
|
|
115
|
+
Read together:
|
|
116
|
+
|
|
117
|
+
- [Theme Guide](/frontend/theme-guide)
|
|
118
|
+
- [SSR Environment Variables](/frontend/ssr-env)
|
|
119
|
+
|
|
120
|
+
## Build/deploy review gate
|
|
121
|
+
|
|
122
|
+
Use this gate whenever a change may pass in dev but fail in built SSR output.
|
|
123
|
+
|
|
124
|
+
- [ ] I checked whether the change must be verified in built mode.
|
|
125
|
+
- [ ] I verified the relevant build path instead of assuming dev success is enough.
|
|
126
|
+
- [ ] I checked whether client assets and SSR output stay aligned for the target flavor.
|
|
127
|
+
- [ ] If the change crosses the frontend/backend SSR boundary, I reviewed the fullstack build path too.
|
|
128
|
+
|
|
129
|
+
## What a reviewer should flag immediately
|
|
130
|
+
|
|
131
|
+
Flag the change for follow-up when any of these are true:
|
|
132
|
+
|
|
133
|
+
- the review checked only client behavior and skipped server-render behavior
|
|
134
|
+
- the fix adds a parallel SSR-specific workaround instead of using an existing framework abstraction
|
|
135
|
+
- the change assumes one edition's theme/UI behavior applies universally
|
|
136
|
+
- the change was validated only in dev even though the failure is deploy- or build-sensitive
|
|
137
|
+
- the review never identified which SSR layer was actually changing
|
|
138
|
+
|
|
139
|
+
## Reviewer template
|
|
140
|
+
|
|
141
|
+
Use this short template in PR review, AI review, or self-review when a change touches SSR behavior.
|
|
142
|
+
|
|
143
|
+
- [ ] I identified the SSR layer first.
|
|
144
|
+
- [ ] I separated server-render checks from hydration checks.
|
|
145
|
+
- [ ] I verified whether the change needs built-mode validation.
|
|
146
|
+
- [ ] I checked whether the change reuses existing SSR abstractions.
|
|
147
|
+
- [ ] I reviewed edition/theme assumptions where relevant.
|
|
148
|
+
- [ ] I verified the most relevant neighboring guide for this change category.
|
|
149
|
+
|
|
150
|
+
## Prompt-ready reviewer snippet
|
|
151
|
+
|
|
152
|
+
Use this block directly in a reviewer-agent or code-review prompt when a change touches SSR behavior:
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
Review this change with the Cabloy SSR checklist in mind.
|
|
156
|
+
|
|
157
|
+
1. Identify which SSR layer the change touches: Vona SSR orchestration, frontend build output, Zova SSR server render, or client hydration.
|
|
158
|
+
2. Separate server-render correctness from hydration correctness.
|
|
159
|
+
3. Verify whether the change reuses the intended framework abstraction instead of adding a parallel workaround.
|
|
160
|
+
4. Check whether the change needs built-mode validation rather than only dev-mode validation.
|
|
161
|
+
5. Review edition-sensitive UI/theme assumptions when the change touches first paint, tokens, dark mode, or SSR env behavior.
|
|
162
|
+
6. Flag any change whose review never identifies the failing or affected SSR layer.
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Read together
|
|
166
|
+
|
|
167
|
+
Use this page together with:
|
|
168
|
+
|
|
169
|
+
- [SSR Architecture Overview](/frontend/ssr-architecture-overview)
|
|
170
|
+
- [SSR Build and Deploy Guide](/frontend/ssr-build-deploy-guide)
|
|
171
|
+
- [SSR Troubleshooting Guide](/frontend/ssr-troubleshooting-guide)
|
|
172
|
+
- [Theme Guide](/frontend/theme-guide)
|
|
173
|
+
- [Verification](/ai/verification)
|
|
174
|
+
|
|
175
|
+
## Verification checklist
|
|
176
|
+
|
|
177
|
+
Before accepting an SSR-related change, ask:
|
|
178
|
+
|
|
179
|
+
1. did the review identify the affected SSR layer clearly?
|
|
180
|
+
2. did the review cover both the relevant runtime stage and the relevant workflow stage?
|
|
181
|
+
3. did the review verify edition/theme assumptions when the change was SSR-UI-sensitive?
|
|
182
|
+
4. did the review use the smallest correct checklist rather than relying on intuition alone?
|
|
183
|
+
|
|
184
|
+
That keeps SSR reviews consistent across human contributors and AI-assisted workflows.
|