cabloy 5.1.52 → 5.1.53

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 (65) hide show
  1. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +10 -0
  2. package/CHANGELOG.md +17 -0
  3. package/CLAUDE.md +3 -0
  4. package/cabloy-docs/.vitepress/config.mjs +144 -50
  5. package/cabloy-docs/ai/introduction.md +44 -0
  6. package/cabloy-docs/backend/quickstart.md +1 -1
  7. package/cabloy-docs/editions/cabloy-start.md +3 -3
  8. package/cabloy-docs/editions/choosing-between-basic-and-start.md +5 -5
  9. package/cabloy-docs/editions/overview.md +34 -3
  10. package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
  11. package/cabloy-docs/frontend/environment-config-guide.md +28 -0
  12. package/cabloy-docs/frontend/foundation.md +1 -1
  13. package/cabloy-docs/frontend/introduction.md +69 -1
  14. package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
  15. package/cabloy-docs/frontend/quickstart.md +1 -0
  16. package/cabloy-docs/frontend/scripts.md +1 -1
  17. package/cabloy-docs/frontend/ssr-env.md +23 -0
  18. package/cabloy-docs/frontend/theme-guide.md +140 -7
  19. package/cabloy-docs/fullstack/cli.md +6 -6
  20. package/cabloy-docs/fullstack/edition-collaboration-differences.md +1 -1
  21. package/cabloy-docs/fullstack/introduction.md +39 -1
  22. package/cabloy-docs/fullstack/vona-zova-integration.md +1 -1
  23. package/cabloy-docs/index.md +1 -1
  24. package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
  25. package/cabloy-docs/reference/introduction.md +47 -0
  26. package/cabloy-docs/reference/package-map.md +2 -0
  27. package/cabloy-docs/reference/repo-scripts.md +5 -3
  28. package/package.json +1 -1
  29. package/zova/package.original.json +1 -1
  30. package/zova/packages-cli/cli/package.json +2 -2
  31. package/zova/packages-cli/cli-set-front/package.json +2 -2
  32. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
  33. package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
  34. package/zova/packages-utils/zova-jsx/package.json +2 -2
  35. package/zova/packages-utils/zova-vite/package.json +2 -2
  36. package/zova/packages-zova/zova/package.json +3 -3
  37. package/zova/packages-zova/zova-core/package.json +2 -2
  38. package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
  39. package/zova/pnpm-lock.yaml +270 -270
  40. package/zova/src/front/config/config/config.ts +1 -1
  41. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
  42. package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
  43. package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
  44. package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
  45. package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
  46. package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
  47. package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
  48. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
  49. package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
  50. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
  51. package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
  52. package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
  53. package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
  54. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
  55. package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
  56. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
  57. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
  58. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  59. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +1 -0
  60. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
  61. package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
  62. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +1 -1
  63. package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
  64. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  65. package/zova/src/suite-vendor/a-zova/package.json +6 -6
@@ -156,6 +156,16 @@ Check whether the feature needs:
156
156
  - SSR or route-path verification
157
157
  - edition-specific flavor, SSR site baseline, and project-asset verification
158
158
 
159
+ ### SSR theme review reminder
160
+
161
+ If the frontend change is SSR theme-sensitive, apply this short review before finishing:
162
+
163
+ - detect the active edition marker and UI library before assuming SSR theme behavior
164
+ - do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff
165
+ - in Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth
166
+ - keep theme-finalization logic inside the active theme handler or client boot path instead of duplicating it in page or component code
167
+ - verify both server handoff and client hydration behavior for the active adapter
168
+
159
169
  ### Optional backend-contract reminder
160
170
 
161
171
  Stay frontend-first, but if the frontend task clearly depends on backend contract output, add a reminder such as:
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.53
4
+
5
+ ### Features
6
+
7
+ - Update application functionality across core feature areas.
8
+ - Update configuration behavior and related integration points.
9
+ - Update theme configuration and controller handling.
10
+
11
+ ### Improvements
12
+
13
+ - Remove the generated `$useLocale` helper.
14
+ - Refresh project configuration files and internal implementation details.
15
+
16
+ ### Breaking Changes
17
+
18
+ - Rename the SSR cookie-disabled server flag and update related documentation.
19
+
3
20
  ## 5.1.52
4
21
 
5
22
  ### Features
package/CLAUDE.md CHANGED
@@ -44,6 +44,9 @@ Before inventing a custom implementation path:
44
44
  - Prefer CLI-backed workflows over manual scaffolding whenever Vona or Zova already provides a generator, refactor, metadata, or verification command.
45
45
  - Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
46
46
  - For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
47
+ - For SSR theme-sensitive frontend work, detect the active edition marker and UI library before making assumptions. Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions; Cabloy Start currently means Vuetify assumptions.
48
+ - In Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth. Keep theme-sensitive SSR branching hydration-tolerant or defer final theme-sensitive decisions to the client.
49
+ - Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff. Verify the active theme handler and client hydration path before changing SSR theme behavior.
47
50
  - Reuse existing repo terminology: Cabloy, Vona, Zova, suite, module, bean, SSR, SPA, Web, Admin.
48
51
  - For backend base-class placement, use the A / B1 / B2 rule from `cabloy-docs/ai/class-placement-rule.md`.
49
52
  - Pure helper bases belong in `src/lib`; subclass-only bases should be evaluated case by case and often belong in `src/lib`.
@@ -31,12 +31,60 @@ const aiItems = [
31
31
  { text: 'Verification', link: '/ai/verification' },
32
32
  ];
33
33
 
34
- const referenceItems = [
35
- { text: 'Repo Scripts', link: '/reference/repo-scripts' },
36
- { text: 'CLI Reference', link: '/reference/cli-reference' },
37
- { text: 'Package Map', link: '/reference/package-map' },
38
- { text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
39
- { text: 'Glossary', link: '/reference/glossary' },
34
+ const fullstackGroups = [
35
+ {
36
+ text: 'Fullstack / Getting Started',
37
+ items: [
38
+ { text: 'Introduction', link: '/fullstack/introduction' },
39
+ { text: 'Quickstart', link: '/fullstack/quickstart' },
40
+ ],
41
+ },
42
+ {
43
+ text: 'Tooling & Workflow',
44
+ items: [
45
+ { text: 'CLI', link: '/fullstack/cli' },
46
+ { text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
47
+ ],
48
+ },
49
+ {
50
+ text: 'Architecture & Integration',
51
+ items: [
52
+ {
53
+ text: 'Comparison with Other Frameworks',
54
+ link: '/fullstack/comparison-with-other-frameworks',
55
+ },
56
+ { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
57
+ { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
58
+ {
59
+ text: 'Frontend Metadata Back to Backend',
60
+ link: '/fullstack/frontend-metadata-to-backend',
61
+ },
62
+ {
63
+ text: 'Edition Collaboration Differences',
64
+ link: '/fullstack/edition-collaboration-differences',
65
+ },
66
+ ],
67
+ },
68
+ ];
69
+
70
+ const referenceGroups = [
71
+ {
72
+ text: 'Reference / Workflow Entry',
73
+ items: [
74
+ { text: 'Introduction', link: '/reference/introduction' },
75
+ { text: 'Repo Scripts', link: '/reference/repo-scripts' },
76
+ { text: 'CLI Reference', link: '/reference/cli-reference' },
77
+ ],
78
+ },
79
+ {
80
+ text: 'Structure & Lookup',
81
+ items: [
82
+ { text: 'Package Map', link: '/reference/package-map' },
83
+ { text: 'Backend Directory Structure', link: '/reference/backend-directory-structure' },
84
+ { text: 'Frontend Directory Structure', link: '/reference/frontend-directory-structure' },
85
+ { text: 'Glossary', link: '/reference/glossary' },
86
+ ],
87
+ },
40
88
  ];
41
89
 
42
90
  const GA_MEASUREMENT_ID = process.env.GA_MEASUREMENT_ID;
@@ -74,46 +122,27 @@ export default defineConfig({
74
122
  nav: [
75
123
  { text: 'Home', link: '/' },
76
124
  { text: 'Fullstack', link: '/fullstack/introduction', activeMatch: '^/fullstack/' },
77
- { text: 'Backend', link: '/backend/introduction', activeMatch: '^/backend/' },
78
- { text: 'Frontend', link: '/frontend/introduction', activeMatch: '^/frontend/' },
125
+ { text: 'Backend (Vona)', link: '/backend/introduction', activeMatch: '^/backend/' },
126
+ { text: 'Frontend (Zova)', link: '/frontend/introduction', activeMatch: '^/frontend/' },
79
127
  { text: 'Editions', link: '/editions/overview', activeMatch: '^/editions/' },
80
128
  { text: 'AI Development', link: '/ai/introduction', activeMatch: '^/ai/' },
81
- { text: 'Reference', link: '/reference/repo-scripts', activeMatch: '^/reference/' },
129
+ { text: 'Reference', link: '/reference/introduction', activeMatch: '^/reference/' },
82
130
  ],
83
131
  sidebar: {
84
- '/fullstack/': [
85
- {
86
- text: 'Fullstack',
87
- items: [
88
- { text: 'Introduction', link: '/fullstack/introduction' },
89
- {
90
- text: 'Comparison with Other Frameworks',
91
- link: '/fullstack/comparison-with-other-frameworks',
92
- },
93
- { text: 'Quickstart', link: '/fullstack/quickstart' },
94
- { text: 'CLI', link: '/fullstack/cli' },
95
- { text: 'VS Code Extensions', link: '/fullstack/vscode-extensions' },
96
- { text: 'Vona + Zova Integration', link: '/fullstack/vona-zova-integration' },
97
- { text: 'Backend OpenAPI to Frontend SDK', link: '/fullstack/openapi-to-sdk' },
98
- {
99
- text: 'Frontend Metadata Back to Backend',
100
- link: '/fullstack/frontend-metadata-to-backend',
101
- },
102
- {
103
- text: 'Edition Collaboration Differences',
104
- link: '/fullstack/edition-collaboration-differences',
105
- },
106
- ],
107
- },
108
- ],
132
+ '/fullstack/': fullstackGroups,
109
133
  '/backend/': [
110
134
  {
111
- text: 'Backend (Vona)',
135
+ text: 'Backend (Vona) / Getting Started',
112
136
  items: [
113
137
  { text: 'Introduction', link: '/backend/introduction' },
114
138
  { text: 'Foundation', link: '/backend/foundation' },
115
139
  { text: 'Backend Essentials', link: '/backend/backend-essentials' },
116
140
  { text: 'Quickstart', link: '/backend/quickstart' },
141
+ ],
142
+ },
143
+ {
144
+ text: 'Tooling & Runtime',
145
+ items: [
117
146
  { text: 'CLI', link: '/backend/cli' },
118
147
  { text: 'Scripts', link: '/backend/scripts' },
119
148
  { text: 'Runtime and Flavors', link: '/backend/runtime-and-flavors' },
@@ -123,18 +152,34 @@ export default defineConfig({
123
152
  text: 'Multi-Instance and Instance Resolution',
124
153
  link: '/backend/multi-instance-and-instance-resolution',
125
154
  },
155
+ ],
156
+ },
157
+ {
158
+ text: 'Security & Access',
159
+ items: [
126
160
  { text: 'Auth Guide', link: '/backend/auth-guide' },
127
161
  { text: 'Captcha Guide', link: '/backend/captcha-guide' },
128
162
  { text: 'User Access Guide', link: '/backend/user-access-guide' },
163
+ { text: 'JWT Guide', link: '/backend/jwt-guide' },
164
+ { text: 'Validation Guide', link: '/backend/validation-guide' },
165
+ ],
166
+ },
167
+ {
168
+ text: 'Application Basics',
169
+ items: [
129
170
  { text: 'Menu Guide', link: '/backend/menu-guide' },
130
171
  { text: 'I18n Guide', link: '/backend/i18n-guide' },
131
172
  { text: 'Error Guide', link: '/backend/error-guide' },
132
- { text: 'JWT Guide', link: '/backend/jwt-guide' },
133
173
  { text: 'Event Guide', link: '/backend/event-guide' },
134
174
  { text: 'Logger Guide', link: '/backend/logger-guide' },
135
175
  { text: 'Upload Guide', link: '/backend/upload-guide' },
136
176
  { text: 'Mail Guide', link: '/backend/mail-guide' },
137
177
  { text: 'Serialization Guide', link: '/backend/serialization-guide' },
178
+ ],
179
+ },
180
+ {
181
+ text: 'Core Programming Model',
182
+ items: [
138
183
  { text: 'AOP Overview', link: '/backend/aop-overview' },
139
184
  { text: 'Controller Guide', link: '/backend/controller-guide' },
140
185
  { text: 'Controller AOP Guide', link: '/backend/controller-aop-guide' },
@@ -144,10 +189,14 @@ export default defineConfig({
144
189
  { text: 'Model Guide', link: '/backend/model-guide' },
145
190
  { text: 'Entity Guide', link: '/backend/entity-guide' },
146
191
  { text: 'DTO Guide', link: '/backend/dto-guide' },
192
+ ],
193
+ },
194
+ {
195
+ text: 'Data & CRUD',
196
+ items: [
147
197
  { text: 'CRUD Workflow', link: '/backend/crud-workflow' },
148
198
  { text: 'Migration and Changes', link: '/backend/migration-and-changes' },
149
199
  { text: 'Field Indexes', link: '/backend/field-indexes' },
150
- { text: 'Unit Testing', link: '/backend/unit-testing' },
151
200
  { text: 'ORM Guide', link: '/backend/orm-guide' },
152
201
  { text: 'ORM Configuration Guide', link: '/backend/orm-configuration-guide' },
153
202
  { text: 'ORM Select Guide', link: '/backend/orm-select-guide' },
@@ -155,6 +204,11 @@ export default defineConfig({
155
204
  { text: 'ORM Aggregate and Group Guide', link: '/backend/orm-aggregate-group-guide' },
156
205
  { text: 'Relations Guide', link: '/backend/relations-guide' },
157
206
  { text: 'Transaction Guide', link: '/backend/transaction-guide' },
207
+ ],
208
+ },
209
+ {
210
+ text: 'Infrastructure & Distributed',
211
+ items: [
158
212
  { text: 'Cache Guide', link: '/backend/cache-guide' },
159
213
  {
160
214
  text: 'Multi-Database and Datasource Guide',
@@ -169,55 +223,100 @@ export default defineConfig({
169
223
  { text: 'Worker Guide', link: '/backend/worker-guide' },
170
224
  { text: 'Broadcast Guide', link: '/backend/broadcast-guide' },
171
225
  { text: 'Redlock Guide', link: '/backend/redlock-guide' },
172
- { text: 'Validation Guide', link: '/backend/validation-guide' },
226
+ ],
227
+ },
228
+ {
229
+ text: 'API & Testing',
230
+ items: [
173
231
  { text: 'OpenAPI Guide', link: '/backend/openapi-guide' },
174
232
  { text: 'DTO Infer and Generation', link: '/backend/dto-infer-generation' },
233
+ { text: 'Unit Testing', link: '/backend/unit-testing' },
175
234
  ],
176
235
  },
177
236
  ],
178
237
  '/frontend/': [
179
238
  {
180
- text: 'Frontend (Zova)',
239
+ text: 'Frontend (Zova) / Getting Started',
181
240
  items: [
182
241
  { text: 'Introduction', link: '/frontend/introduction' },
183
242
  { text: 'Quickstart', link: '/frontend/quickstart' },
184
243
  { text: 'Foundation', link: '/frontend/foundation' },
244
+ ],
245
+ },
246
+ {
247
+ text: 'Architecture & Modules',
248
+ items: [
185
249
  { text: 'IoC and Beans', link: '/frontend/ioc-and-beans' },
186
250
  { text: 'Modules and Suites', link: '/frontend/modules-and-suites' },
187
251
  { text: 'Module Scope', link: '/frontend/module-scope' },
252
+ { text: 'Design Principles', link: '/frontend/design-principles' },
253
+ ],
254
+ },
255
+ {
256
+ text: 'Environment & Startup',
257
+ items: [
188
258
  { text: 'Environment and Config Guide', link: '/frontend/environment-config-guide' },
189
259
  { text: 'App Startup Guide', link: '/frontend/app-startup-guide' },
190
260
  { text: 'System Startup Guide', link: '/frontend/system-startup-guide' },
261
+ ],
262
+ },
263
+ {
264
+ text: 'Tooling',
265
+ items: [
266
+ { text: 'CLI', link: '/frontend/cli' },
267
+ { text: 'Scripts', link: '/frontend/scripts' },
268
+ { text: 'Mock Guide', link: '/frontend/mock-guide' },
269
+ ],
270
+ },
271
+ {
272
+ text: 'Pages & Routing',
273
+ items: [
191
274
  { text: 'Page Guide', link: '/frontend/page-guide' },
192
275
  { text: 'Page Query Guide', link: '/frontend/page-query-guide' },
193
276
  { text: 'Page Params Guide', link: '/frontend/page-params-guide' },
194
- { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
195
277
  { text: 'Zod Guide', link: '/frontend/zod-guide' },
278
+ { text: 'Page Route Guide', link: '/frontend/page-route-guide' },
196
279
  { text: 'Route Alias Guide', link: '/frontend/route-alias-guide' },
197
280
  { text: 'Navigation Guards Guide', link: '/frontend/navigation-guards-guide' },
281
+ ],
282
+ },
283
+ {
284
+ text: 'Components & UI',
285
+ items: [
198
286
  { text: 'Component Guide', link: '/frontend/component-guide' },
199
287
  { text: 'Component Props Guide', link: '/frontend/component-props-guide' },
200
288
  { text: 'Component v-model Guide', link: '/frontend/component-v-model-guide' },
201
289
  { text: 'Generic Component Guide', link: '/frontend/generic-component-guide' },
202
- { text: 'CLI', link: '/frontend/cli' },
203
- { text: 'Scripts', link: '/frontend/scripts' },
204
- { text: 'Mock Guide', link: '/frontend/mock-guide' },
205
290
  { text: 'CSS-in-JS Guide', link: '/frontend/css-in-js-guide' },
206
291
  { text: 'Theme Guide', link: '/frontend/theme-guide' },
207
292
  { text: 'Icon Engine Guide', link: '/frontend/icon-engine-guide' },
293
+ ],
294
+ },
295
+ {
296
+ text: 'Data & State',
297
+ items: [
208
298
  { text: 'Server Data', link: '/frontend/server-data' },
209
299
  { text: 'API Guide', link: '/frontend/api-guide' },
210
300
  { text: 'Model Architecture', link: '/frontend/model-architecture' },
211
301
  { text: 'Model State Guide', link: '/frontend/model-state-guide' },
302
+ ],
303
+ },
304
+ {
305
+ text: 'API Contract & SDK',
306
+ items: [
212
307
  { text: 'OpenAPI SDK Guide', link: '/frontend/openapi-sdk-guide' },
213
308
  { text: 'API Schema Guide', link: '/frontend/api-schema-guide' },
214
309
  { text: 'SDK Guide', link: '/frontend/sdk-guide' },
310
+ ],
311
+ },
312
+ {
313
+ text: 'SSR',
314
+ items: [
215
315
  { text: 'SSR Overview', link: '/frontend/ssr-overview' },
216
316
  { text: 'SSR Init Data', link: '/frontend/ssr-init-data' },
217
317
  { text: 'SSR ClientOnly', link: '/frontend/ssr-client-only' },
218
318
  { text: 'SSR SEO Meta', link: '/frontend/ssr-seo-meta' },
219
319
  { text: 'SSR Env', link: '/frontend/ssr-env' },
220
- { text: 'Design Principles', link: '/frontend/design-principles' },
221
320
  ],
222
321
  },
223
322
  ],
@@ -233,12 +332,7 @@ export default defineConfig({
233
332
  items: aiItems,
234
333
  },
235
334
  ],
236
- '/reference/': [
237
- {
238
- text: 'Reference',
239
- items: referenceItems,
240
- },
241
- ],
335
+ '/reference/': referenceGroups,
242
336
  },
243
337
  socialLinks: [{ icon: 'github', link: 'https://github.com/cabloy/cabloy' }],
244
338
  search: {
@@ -23,6 +23,15 @@ The goal is to make AI **reuse the repo’s existing conventions directly**, esp
23
23
  - internal architecture notes
24
24
  - shared public documentation
25
25
 
26
+ ## How to approach AI work
27
+
28
+ For contributor and automation workflows in this repository, prefer this order:
29
+
30
+ 1. inspect the active edition and repo markers before making UI-sensitive or workflow-sensitive assumptions
31
+ 2. inspect root scripts, Vona CLI, and Zova CLI before inventing manual scaffolding or custom workflow steps
32
+ 3. use public docs for durable user-facing guidance and `.docs-internal/` for maintainer rationale
33
+ 4. encode repeatable behavior in Claude rules, commands, or skills instead of relying on unstated habits
34
+
26
35
  ## The knowledge layers
27
36
 
28
37
  ### Public docs
@@ -43,6 +52,41 @@ Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior an
43
52
 
44
53
  Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
45
54
 
55
+ ## AI reading paths
56
+
57
+ Use this page as the main AI-development hub, then choose the path that matches your task.
58
+
59
+ ### Repo workflow path
60
+
61
+ Start here when the task is about choosing the right repo surface, docs location, or automation boundary:
62
+
63
+ - [Repo Guidance](/ai/repo-guidance)
64
+ - [Docs / Skills Mapping](/ai/docs-skills-rules-mapping)
65
+ - [CLI to Skill Map](/ai/cli-to-skill-map)
66
+ - [Skills](/ai/skills)
67
+ - [Rules and Config](/ai/rules-and-config)
68
+
69
+ ### Framework implementation path
70
+
71
+ Use this path when the task is about implementing or reviewing Cabloy code with repo-aware rules:
72
+
73
+ - [Class Placement Rule](/ai/class-placement-rule)
74
+ - [Global Bean Lookup](/ai/global-bean-lookup)
75
+ - [Playbook: Backend Module](/ai/playbook-backend-module)
76
+ - [Playbook: Frontend Page](/ai/playbook-frontend-page)
77
+ - [Playbook: Contract Regeneration](/ai/playbook-contract-regeneration)
78
+ - [Playbook: Metadata Refresh](/ai/playbook-metadata-refresh)
79
+
80
+ ### Verification and roadmap path
81
+
82
+ Use this path when the task is about consistency checks, verification, or future workflow planning:
83
+
84
+ - [Edition Detection](/ai/edition-detection)
85
+ - [Edition Consistency Checklist](/ai/edition-consistency-checklist)
86
+ - [Verification](/ai/verification)
87
+ - [Future Skill Roadmap](/ai/future-skill-roadmap)
88
+ - [CLI for Agents](/ai/cli-for-agents)
89
+
46
90
  ## Recommended AI lookup rules
47
91
 
48
92
  For backend shorthand lookup, prefer these surfaces in order:
@@ -87,7 +87,7 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
87
87
  That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
88
88
 
89
89
  - **Cabloy Basic**: the public framework/reference edition, including the project route created by `npm create cabloy`, with a shared frontend engineering layer and a DaisyUI + Tailwind CSS oriented UI layer in the current public examples
90
- - **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with Vuetify-oriented frontend modules plus Start-specific SSR site baselines and project assets
90
+ - **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with a Vuetify-oriented UI layer plus edition-specific SSR site baselines and project assets
91
91
 
92
92
  In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, UI assumptions, and examples.
93
93
 
@@ -17,9 +17,9 @@ Use Cabloy Start as the edition-aware target when work depends on:
17
17
  - direct use of the licensed private repository source
18
18
  - Vuetify-specific frontend workflows
19
19
  - Cabloy Start flavor names in frontend scripts
20
- - modules that exist in the private Start repository but not in Basic
21
- - licensed private-repo structure and Start-specific project composition
22
- - Start-specific SSR site baselines and project assets
20
+ - edition-specific module composition in the licensed Start repository
21
+ - licensed private-repo structure and edition-specific project composition
22
+ - edition-specific SSR site baselines and project assets
23
23
 
24
24
  ## Get access and initialize
25
25
 
@@ -6,7 +6,7 @@ This guide helps you choose the right Cabloy edition before you start a new proj
6
6
 
7
7
  Choose **Cabloy Basic** when you want the public framework/reference edition, the default `npm create cabloy` project route, and a faster path for open, community-oriented, or small-to-medium system development.
8
8
 
9
- Choose **Cabloy Start** when you want the private commercial edition, purchase-based access to the licensed private repository source, and a stronger baseline for more complex business systems built around the Start-specific suites, SSR sites, project assets, and Vuetify UI layer.
9
+ Choose **Cabloy Start** when you want the private commercial edition, purchase-based access to the licensed private repository source, and a stronger baseline for more complex business systems built around Start-oriented SSR sites, project assets, and a Vuetify-aligned UI layer.
10
10
 
11
11
  ## What stays the same in both editions
12
12
 
@@ -38,7 +38,7 @@ Cabloy Start is usually the better fit when you want:
38
38
  - the private commercial edition
39
39
  - purchase-based access to the licensed private repository source
40
40
  - direct cloning of the Start repository after authorization
41
- - Start-specific suites, flavors, SSR site baselines, and project assets
41
+ - Start-specific flavors, SSR site baselines, and project assets
42
42
  - a UI layer aligned with Vuetify
43
43
  - a stronger starting point for more complex business systems
44
44
  - edition-specific rules, skills, and docs optimized for the Start repo assumptions
@@ -58,12 +58,12 @@ Cabloy Start is usually the better fit when you want:
58
58
  ### Repo and asset model
59
59
 
60
60
  - **Cabloy Basic**: public repository and public reference materials
61
- - **Cabloy Start**: private repository with Start-specific suites, SSR sites, and project assets
61
+ - **Cabloy Start**: private repository with edition-specific SSR sites and project assets
62
62
 
63
63
  ### AI workflow assumptions
64
64
 
65
65
  - **Cabloy Basic**: use Basic-specific examples, flavors, modules, and UI assumptions
66
- - **Cabloy Start**: use Start-specific examples, flavors, modules, SSR site baselines, and UI assumptions
66
+ - **Cabloy Start**: use Start-specific examples, flavors, SSR site baselines, and UI assumptions
67
67
 
68
68
  This is why edition detection matters so much for AI vibe coding.
69
69
 
@@ -72,7 +72,7 @@ This is why edition detection matters so much for AI vibe coding.
72
72
  Use this rule when you need a fast decision:
73
73
 
74
74
  1. If you want the public, default, `npm create cabloy` path, choose **Cabloy Basic**.
75
- 2. If you want the licensed private repo with Start-specific assets, a Vuetify-based business-system baseline, and a clone-plus-`npm run init` onboarding path, choose **Cabloy Start**.
75
+ 2. If you want the licensed private repo with Start-oriented assets, a Vuetify-based business-system baseline, and a clone-plus-`npm run init` onboarding path, choose **Cabloy Start**.
76
76
  3. If AI workflow accuracy matters for UI generation, SSR site assumptions, or flavor-specific commands, confirm the edition before writing prompts, rules, skills, or docs.
77
77
 
78
78
  ## Read together with
@@ -1,5 +1,7 @@
1
1
  # Editions Overview
2
2
 
3
+ This page is the editions hub for deciding which Cabloy baseline you are working with and which assumptions should follow from that choice.
4
+
3
5
  Cabloy currently supports two related but distinct editions:
4
6
 
5
7
  - **Cabloy Basic**
@@ -9,6 +11,35 @@ They share one Cabloy fullstack architecture, but they are distributed, composed
9
11
 
10
12
  If you need a recommendation path, start with [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start).
11
13
 
14
+ ## How to approach editions work
15
+
16
+ For contributor and automation workflows in this repository, prefer this order:
17
+
18
+ 1. identify the active edition before making UI-sensitive, flavor-sensitive, module-sensitive, or asset-sensitive assumptions
19
+ 2. explain the shared Cabloy architecture once before branching into edition-specific notes
20
+ 3. split documentation or workflow guidance only where the editions intentionally diverge
21
+ 4. use explicit edition markers and flavor names instead of treating the editions as interchangeable
22
+
23
+ ## Editions reading paths
24
+
25
+ Use this page as the main editions hub, then choose the path that matches your task.
26
+
27
+ ### Selection path
28
+
29
+ Start here when the task is about choosing the right edition baseline or understanding distribution differences:
30
+
31
+ - [Choosing Basic vs Start](/editions/choosing-between-basic-and-start)
32
+ - [Cabloy Basic](/editions/cabloy-basic)
33
+ - [Cabloy Start](/editions/cabloy-start)
34
+
35
+ ### Detection and workflow path
36
+
37
+ Use this path when the task is about repo-aware automation, flavor assumptions, or edition-safe workflow choices:
38
+
39
+ - [Edition Detection](/editions/detection)
40
+ - [Fullstack Introduction](/fullstack/introduction)
41
+ - [AI Development Introduction](/ai/introduction)
42
+
12
43
  ## Shared fullstack core
13
44
 
14
45
  Both editions are built around the same core direction:
@@ -38,7 +69,7 @@ Cabloy Start is the private commercial edition.
38
69
  - the private repository is marked with `__CABLOY_START__`
39
70
  - users first purchase a license and obtain repository access, then clone the private repository source directly
40
71
  - after cloning, the project is initialized through the Start edition workflow
41
- - Start provides its own suites, flavors, SSR sites, and project assets for that edition
72
+ - Start uses its own edition-specific flavors, SSR site baselines, and project assets for that edition
42
73
 
43
74
  Cabloy Start is optimized as a commercial baseline for more complex business systems while staying on the same Cabloy fullstack direction.
44
75
 
@@ -74,13 +105,13 @@ The editions intentionally diverge in several surfaces:
74
105
  - frontend flavor names
75
106
  - suite and module composition
76
107
  - admin/web SSR site baselines
77
- - licensed private-repo structure and Start-specific project assets
108
+ - licensed private-repo structure and edition-specific project assets
78
109
  - rules, skills, and docs used for AI vibe coding
79
110
 
80
111
  For example:
81
112
 
82
113
  - **Cabloy Basic** provides the `cabloy-basic` suites and the `cabloyBasicAdmin` / `cabloyBasicWeb` Zova flavors
83
- - **Cabloy Start** provides the `cabloy-start` suites and the `cabloyStartAdmin` / `cabloyStartWeb` Zova flavors
114
+ - **Cabloy Start** uses public flavors such as `cabloyStartAdmin` and `cabloyStartWeb`
84
115
 
85
116
  ## Why the repo markers matter
86
117
 
@@ -109,7 +109,7 @@ A practical rule is:
109
109
  This is especially important in Cabloy because the two editions diverge in frontend stack choices:
110
110
 
111
111
  - **Cabloy Basic** aligns with DaisyUI + TailwindCSS oriented examples
112
- - **Cabloy Start** aligns with Vuetify-oriented modules
112
+ - **Cabloy Start** aligns with Vuetify-oriented frontend workflows
113
113
 
114
114
  A UI-library-independent styling layer makes it easier for the same architectural ideas to survive across both editions.
115
115
 
@@ -99,6 +99,34 @@ A representative SSR admin development stack looks like:
99
99
 
100
100
  The config side follows the same merge pattern with `config.ts`, `config.[meta].ts`, and `.local` variants.
101
101
 
102
+ ## Flavor-aware capability differences
103
+
104
+ Different SSR flavors can intentionally expose different runtime capabilities rather than behaving identically.
105
+
106
+ A concrete example in the current Cabloy Basic frontend setup is SSR theme resolution:
107
+
108
+ - Web SSR uses a cookie-disabled path
109
+ - Admin SSR uses a cookie-capable path
110
+
111
+ That means the two flavors should not be treated as providing the same guarantee for theme-sensitive SSR output.
112
+
113
+ In practice:
114
+
115
+ - Web SSR is the stricter path and should treat theme-sensitive SSR reads as lower-authority
116
+ - Admin SSR can provide a stronger server/client theme match guarantee
117
+
118
+ This is exactly why flavor selection is not only a packaging choice. It can also define the supported capability boundary for runtime-sensitive behavior.
119
+
120
+ A second practical rule is that flavor alone is not the full story. Contributors should combine:
121
+
122
+ - flavor and `SSR_COOKIE` capability
123
+ - edition marker
124
+ - active UI-library adapter
125
+
126
+ before assuming how SSR theme state is handed off and finalized.
127
+
128
+ For the theme-side contract and edition-aware checklist, see [Theme Guide](/frontend/theme-guide). For the env-side explanation of `SSR_COOKIE`, see [SSR Environment Variables](/frontend/ssr-env).
129
+
102
130
  ## Scripts and runtime variants
103
131
 
104
132
  Frontend scripts map directly onto the same runtime dimensions.
@@ -28,7 +28,7 @@ That flexibility matters directly for Cabloy’s edition model:
28
28
 
29
29
  - **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries
30
30
  - **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS
31
- - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify-oriented frontend modules, workflows, and SSR site baselines
31
+ - **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify-oriented frontend workflows and may use different module composition and SSR site baselines
32
32
 
33
33
  So docs and skills must separate shared Zova principles from edition-specific UI assumptions.
34
34