cabloy 5.1.51 → 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 (113) hide show
  1. package/.claude/skills/cabloy-contract-loop/SKILL.md +1 -1
  2. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +11 -1
  3. package/.claude/skills/cabloy-workflow/SKILL.md +8 -4
  4. package/.claude/skills/cabloy-workflow/references/edition-detection.md +3 -2
  5. package/.github/workflows/docs-pages.yml +2 -0
  6. package/CHANGELOG.md +42 -0
  7. package/CLAUDE.md +7 -4
  8. package/README.md +36 -21
  9. package/cabloy-docs/.vitepress/config.mjs +171 -44
  10. package/cabloy-docs/ai/class-placement-rule.md +1 -0
  11. package/cabloy-docs/ai/cli-for-agents.md +1 -1
  12. package/cabloy-docs/ai/docs-skills-rules-mapping.md +1 -0
  13. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  14. package/cabloy-docs/ai/edition-detection.md +3 -3
  15. package/cabloy-docs/ai/global-bean-lookup.md +1 -0
  16. package/cabloy-docs/ai/introduction.md +47 -3
  17. package/cabloy-docs/ai/repo-guidance.md +2 -2
  18. package/cabloy-docs/ai/rules-and-config.md +1 -1
  19. package/cabloy-docs/ai/skills.md +2 -0
  20. package/cabloy-docs/ai/verification.md +1 -0
  21. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  22. package/cabloy-docs/backend/introduction.md +2 -2
  23. package/cabloy-docs/backend/logger-guide.md +1 -1
  24. package/cabloy-docs/backend/quickstart.md +3 -3
  25. package/cabloy-docs/editions/cabloy-basic.md +4 -3
  26. package/cabloy-docs/editions/cabloy-start.md +34 -3
  27. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  28. package/cabloy-docs/editions/overview.md +114 -20
  29. package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
  30. package/cabloy-docs/frontend/environment-config-guide.md +28 -0
  31. package/cabloy-docs/frontend/foundation.md +3 -2
  32. package/cabloy-docs/frontend/introduction.md +73 -4
  33. package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
  34. package/cabloy-docs/frontend/quickstart.md +4 -2
  35. package/cabloy-docs/frontend/scripts.md +2 -2
  36. package/cabloy-docs/frontend/ssr-env.md +23 -0
  37. package/cabloy-docs/frontend/theme-guide.md +140 -7
  38. package/cabloy-docs/fullstack/cli.md +118 -0
  39. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  40. package/cabloy-docs/fullstack/edition-collaboration-differences.md +3 -2
  41. package/cabloy-docs/fullstack/introduction.md +84 -34
  42. package/cabloy-docs/fullstack/quickstart.md +7 -4
  43. package/cabloy-docs/fullstack/vona-zova-integration.md +2 -2
  44. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  45. package/cabloy-docs/index.md +39 -40
  46. package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
  47. package/cabloy-docs/reference/glossary.md +2 -2
  48. package/cabloy-docs/reference/introduction.md +47 -0
  49. package/cabloy-docs/reference/package-map.md +2 -0
  50. package/cabloy-docs/reference/repo-scripts.md +5 -3
  51. package/package.json +1 -1
  52. package/vona/README.md +1 -1
  53. package/vona/pnpm-lock.yaml +383 -38
  54. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  55. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  56. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  57. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  58. package/zova/README.md +1 -1
  59. package/zova/package.original.json +4 -4
  60. package/zova/packages-cli/cli/package.json +2 -2
  61. package/zova/packages-cli/cli-set-front/package.json +2 -2
  62. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
  63. package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
  64. package/zova/packages-utils/zova-jsx/package.json +2 -2
  65. package/zova/packages-utils/zova-vite/package.json +2 -2
  66. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  67. package/zova/packages-zova/zova/package.json +3 -3
  68. package/zova/packages-zova/zova-core/package.json +2 -2
  69. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  70. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  71. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  72. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  73. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  74. package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
  75. package/zova/pnpm-lock.yaml +1607 -1690
  76. package/zova/src/front/config/config/config.ts +1 -1
  77. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  78. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
  79. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  80. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  81. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  82. package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
  83. package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
  84. package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
  85. package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
  86. package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
  87. package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
  88. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
  89. package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
  90. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
  91. package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
  92. package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
  93. package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
  94. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
  95. package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
  96. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
  97. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
  98. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  99. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  100. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  101. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  102. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  103. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  104. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +8 -2
  105. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  106. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  107. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  108. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
  109. package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
  110. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +1 -1
  111. package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
  112. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  113. package/zova/src/suite-vendor/a-zova/package.json +9 -9
@@ -115,6 +115,7 @@ Use this quick rule:
115
115
  ### Example: “Always detect Basic vs Start before giving UI-sensitive advice”
116
116
 
117
117
  - public explanation → [AI Edition Detection](/ai/edition-detection)
118
+ - consistency review surface → [Edition Consistency Checklist](/ai/edition-consistency-checklist)
118
119
  - repo-wide behavior rule → `CLAUDE.md`
119
120
  - procedural enforcement → `cabloy-workflow` skill
120
121
 
@@ -0,0 +1,150 @@
1
+ # Edition Consistency Checklist
2
+
3
+ This checklist helps maintainers keep docs, rules, commands, and skills aligned when writing or reviewing Cabloy Basic and Cabloy Start guidance.
4
+
5
+ Use it whenever you add or revise:
6
+
7
+ - edition-aware docs
8
+ - `CLAUDE.md` guidance
9
+ - `.claude/commands/`
10
+ - `.claude/skills/`
11
+ - AI workflow playbooks
12
+
13
+ ## The baseline story that should stay consistent
14
+
15
+ Before checking details, confirm that the content still tells the same baseline story:
16
+
17
+ - **Cabloy Basic** is the public framework/reference edition
18
+ - `npm create cabloy` creates the default Cabloy Basic project route
19
+ - **Cabloy Start** is the private commercial edition
20
+ - Cabloy Start is used by cloning the licensed private repository source directly
21
+ - both editions share the same Cabloy fullstack core
22
+ - both editions share a frontend engineering layer built around Zova, Vue, Vite, Quasar tooling, and related libraries
23
+ - the editions diverge in UI layer, frontend flavors, suites/modules, SSR site baselines, project assets, and some generated outputs
24
+
25
+ If a page, rule, or skill contradicts one of those points, align that content before polishing wording.
26
+
27
+ ## Checklist 1: edition detection is explicit
28
+
29
+ Confirm that the content:
30
+
31
+ - tells the reader or agent to check `__CABLOY_BASIC__` or `__CABLOY_START__`
32
+ - treats edition detection as mandatory before UI-sensitive guidance
33
+ - does not assume Cabloy Basic examples apply to Cabloy Start automatically
34
+ - does not assume the project creation path is the same for both editions
35
+
36
+ ## Checklist 2: creation path assumptions are correct
37
+
38
+ Confirm that the content states or implies the right project-entry model:
39
+
40
+ - **Cabloy Basic** → `npm create cabloy`
41
+ - **Cabloy Start** → licensed private repository clone
42
+
43
+ Watch for drift such as:
44
+
45
+ - implying that Cabloy Start is created through `npm create cabloy`
46
+ - implying that both editions use the same bootstrap path
47
+ - omitting the Start licensing/private-repo model when it matters to the workflow
48
+
49
+ ## Checklist 3: shared core vs edition divergence is separated cleanly
50
+
51
+ Confirm that the content distinguishes:
52
+
53
+ ### Shared core
54
+
55
+ - Vona
56
+ - Zova
57
+ - suite-based architecture
58
+ - CLI-first workflows
59
+ - shared frontend engineering direction
60
+
61
+ ### Edition divergence
62
+
63
+ - UI layer
64
+ - frontend flavors
65
+ - suites/modules
66
+ - SSR site baselines
67
+ - project assets
68
+ - edition-specific generated outputs or script paths where applicable
69
+
70
+ Avoid collapsing the whole difference into “different UI library only.”
71
+
72
+ ## Checklist 4: UI language uses the right layer
73
+
74
+ When the content talks about frontend differences, confirm that it uses the right level:
75
+
76
+ - shared frontend engineering layer
77
+ - edition-specific UI layer
78
+
79
+ Prefer wording such as:
80
+
81
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS UI layer
82
+ - **Cabloy Start**: Vuetify UI layer
83
+
84
+ Avoid wording that makes Quasar sound like the edition UI component library when the intended meaning is tooling.
85
+
86
+ ## Checklist 5: operational examples match the active edition
87
+
88
+ For scripts, flavors, paths, and examples, confirm that:
89
+
90
+ - Basic examples use Basic markers and Basic flavor names
91
+ - Start examples tell the reader to verify the Start repo directly
92
+ - Start workflows do not silently reuse Basic script or flavor assumptions
93
+ - SSR site baseline assumptions match the edition being discussed
94
+ - project-asset references match the repo being discussed
95
+
96
+ ## Checklist 6: docs, rules, and skills play different roles
97
+
98
+ Confirm that the same guidance is distributed correctly:
99
+
100
+ - **docs** explain the workflow in durable prose
101
+ - **`CLAUDE.md`** captures short repo-wide behavioral rules
102
+ - **skills** encode procedural branching and follow-up logic
103
+ - **commands** are used only for named operator workflows, not as the only home for conceptual guidance
104
+
105
+ Avoid these drifts:
106
+
107
+ - a skill contains the only explanation of an edition rule
108
+ - `CLAUDE.md` grows into a long architectural essay
109
+ - docs duplicate every procedural branch that belongs in a skill
110
+
111
+ ## Checklist 7: verification guidance matches the edition model
112
+
113
+ When content ends with verification steps, confirm that it reminds the reader or agent to verify the right edition-specific surfaces when relevant:
114
+
115
+ - flavor names
116
+ - script paths
117
+ - suites/modules
118
+ - SSR site baselines
119
+ - generated outputs
120
+ - project assets
121
+
122
+ For Start-sensitive workflows, confirm that verification points back to the licensed Start repository rather than pretending the current Basic repo is the direct source of truth.
123
+
124
+ ## Checklist 8: wording about system size stays appropriately scoped
125
+
126
+ If the content talks about project fit, confirm that it keeps the intended nuance:
127
+
128
+ - **Cabloy Basic** is optimized for public reference, learning, community workflows, and faster small-to-medium system development
129
+ - **Cabloy Start** is optimized as a stronger baseline for more complex business systems
130
+
131
+ Avoid overstating this into a hard claim that Basic cannot support larger systems.
132
+
133
+ ## Quick review questions
134
+
135
+ Before you finish an edition-aware change, ask:
136
+
137
+ 1. Did I clearly separate shared core from edition-specific divergence?
138
+ 2. Did I preserve the correct Basic vs Start creation path?
139
+ 3. Did I avoid turning UI difference into the whole story?
140
+ 4. Did I point Start-specific operational truth back to the licensed Start repo where needed?
141
+ 5. Do docs, rules, and skills each play their proper role?
142
+
143
+ ## Read together with
144
+
145
+ - [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start)
146
+ - [Editions Overview](/editions/overview)
147
+ - [Edition Detection for AI Workflows](/ai/edition-detection)
148
+ - [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
149
+ - [Rules and Config](/ai/rules-and-config)
150
+ - [Verification](/ai/verification)
@@ -8,10 +8,10 @@ Edition detection should happen before any AI workflow that assumes a frontend s
8
8
 
9
9
  If an agent skips edition detection, it can:
10
10
 
11
- - scaffold against the wrong UI assumptions
11
+ - scaffold against the wrong UI-layer assumptions
12
12
  - suggest the wrong frontend flavors
13
- - cite modules that do not exist in the active repo
14
- - generate docs or skills that accidentally hardcode Basic-only behavior into Start workflows
13
+ - cite suites, modules, SSR site baselines, or project assets that do not exist in the active repo
14
+ - generate docs or skills that accidentally hardcode Basic-only behavior or `npm create cabloy` assumptions into Start workflows
15
15
 
16
16
  ## Operational rule
17
17
 
@@ -152,6 +152,7 @@ Avoid these mistakes:
152
152
  Read these pages together:
153
153
 
154
154
  - [Class Placement Rule](/ai/class-placement-rule)
155
+ - [Virtual Decorator Guidance](/ai/virtual-decorator-guidance)
155
156
  - [Repo Guidance](/ai/repo-guidance)
156
157
  - [Rules and Config](/ai/rules-and-config)
157
158
  - [Verification](/ai/verification)
@@ -1,8 +1,8 @@
1
1
  # AI Development Introduction
2
2
 
3
- This page is the entrypoint for contributors who are designing, reviewing, or maintaining AI-assisted workflows in the Cabloy repository.
3
+ This page is the entrypoint for contributors who are designing, reviewing, or maintaining AI vibe coding workflows in the Cabloy repository.
4
4
 
5
- The Cabloy monorepo is a good fit for AI-assisted development because the source tree already contains most of the framework knowledge an agent needs:
5
+ The Cabloy monorepo is a good fit for AI vibe coding because the source tree already contains most of the framework knowledge an agent needs:
6
6
 
7
7
  - root scripts for shared workflows
8
8
  - Vona CLI source and command groups
@@ -23,13 +23,22 @@ 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
29
38
 
30
39
  Use `cabloy-docs/` for user-facing and agent-facing guidance that should remain durable and source-aligned.
31
40
 
32
- For normal project usage, prefer the user-facing entry docs such as [Fullstack Quickstart](/fullstack/quickstart). This AI section focuses on repository workflows and AI-assisted development.
41
+ For normal project usage, prefer the user-facing entry docs such as [Fullstack Quickstart](/fullstack/quickstart). This AI section focuses on repository workflows and AI vibe coding.
33
42
 
34
43
  ### Internal engineering docs
35
44
 
@@ -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:
@@ -38,9 +38,9 @@ Edition detection is especially important when the work touches:
38
38
 
39
39
  - page creation
40
40
  - component generation
41
- - UI library usage
41
+ - UI-layer usage
42
42
  - frontend flavor scripts
43
- - edition-specific modules or assets
43
+ - edition-specific suites, modules, SSR site baselines, or project assets
44
44
 
45
45
  ## 5. Use the right lookup surface before searching broadly
46
46
 
@@ -10,7 +10,7 @@ Use the root `CLAUDE.md` for concise, durable operational guidance such as:
10
10
  - where public docs live
11
11
  - where internal docs live
12
12
  - which command entrypoints are preferred
13
- - why edition detection is mandatory before UI-sensitive guidance
13
+ - why edition detection is mandatory before UI-sensitive guidance or project-creation assumptions
14
14
 
15
15
  ## `.claude/commands/`
16
16
 
@@ -33,3 +33,5 @@ A strong Cabloy skill usually includes:
33
33
  5. references to durable source-of-truth files
34
34
 
35
35
  When a skill needs to apply an architectural rule such as backend class placement, prefer a branching decision tree that points back to durable docs instead of embedding the full architecture rationale inside the skill itself.
36
+
37
+ For edition-aware skills, use [Edition Detection for AI Workflows](/ai/edition-detection) and [Edition Consistency Checklist](/ai/edition-consistency-checklist) as the durable review surfaces before expanding edition-specific branches.
@@ -18,6 +18,7 @@ For skills and repo guidance:
18
18
  - confirm the workflow still points to real command entrypoints
19
19
  - confirm edition branches match the active repo markers and scripts
20
20
  - confirm public docs, skills, and root `CLAUDE.md` tell the same story
21
+ - review edition-aware changes against [Edition Consistency Checklist](/ai/edition-consistency-checklist)
21
22
 
22
23
  ## Code-generation verification
23
24
 
@@ -0,0 +1,206 @@
1
+ # Virtual Decorator Guidance
2
+
3
+ Use this page when deciding whether a backend class should use `@Virtual()`, or when AI needs to understand what `@Virtual()` changes in Vona bean behavior.
4
+
5
+ The goal is to preserve real runtime semantics, keep class placement intentional, and prevent `@Virtual()` from being reused as a shorthand or registration filter.
6
+
7
+ ## Short definition
8
+
9
+ `@Virtual()` marks a container-managed class as a virtual inherited runtime node.
10
+
11
+ Its core effect is to make bean registration inherit `moduleBelong` from the parent bean chain instead of treating the current class as a new independent runtime ownership center.
12
+
13
+ ## What `@Virtual()` does not mean
14
+
15
+ `@Virtual()` does **not** mean any of the following:
16
+
17
+ - suppress bean registration
18
+ - remove a bean-scene class from `IBeanRecordGlobal`
19
+ - act as a shorthand-registration filter
20
+ - compensate for incorrect class placement
21
+ - mean only that a class is abstract or internal
22
+
23
+ If a class should not appear on the global shorthand surface, fix placement instead.
24
+
25
+ For related guidance, also read:
26
+
27
+ - [Class Placement Rule](/ai/class-placement-rule)
28
+ - [Global Bean Lookup](/ai/global-bean-lookup)
29
+
30
+ ## Runtime effect
31
+
32
+ `@Virtual()` matters at registration time and then keeps affecting runtime scope resolution.
33
+
34
+ ### 1. Decorator stage
35
+
36
+ The decorator writes virtual metadata on the class.
37
+
38
+ Conceptually:
39
+
40
+ ```text
41
+ @Virtual()
42
+ -> metadata(SymbolDecoratorVirtual = true)
43
+ ```
44
+
45
+ ### 2. Registration stage
46
+
47
+ When the bean is registered, Vona reads that metadata and computes `moduleBelong`.
48
+
49
+ - non-virtual bean -> `moduleBelong` stays equal to the current module
50
+ - virtual bean -> `moduleBelong` is inherited from the nearest parent bean that already has one
51
+
52
+ Conceptually:
53
+
54
+ ```text
55
+ @Virtual()
56
+ -> addBean()
57
+ -> _parseModuleBelong()
58
+ -> inherited moduleBelong
59
+ ```
60
+
61
+ ### 3. Runtime stage
62
+
63
+ Bean instances then resolve runtime scope resources from that inherited `moduleBelong`.
64
+
65
+ This directly affects access to:
66
+
67
+ - `this.scope`
68
+ - `this.module`
69
+ - `this.config`
70
+ - `this.constant`
71
+ - `this.error`
72
+ - `this.locale`
73
+ - `this.util`
74
+ - `this.model`
75
+ - `this.entity`
76
+ - module meta and scene resources
77
+
78
+ Short version:
79
+
80
+ > `@Virtual()` changes runtime ownership resolution, not registration existence.
81
+
82
+ ## Relationship to `@Bean()` and `@Service()`
83
+
84
+ These decorators solve different problems.
85
+
86
+ - `@Bean()` / `@Service()` / `@Controller()` decide which scene the class registers into
87
+ - `@Virtual()` decides how runtime ownership is resolved
88
+
89
+ They are orthogonal.
90
+
91
+ Examples:
92
+
93
+ - `@Service() + @Virtual()`
94
+ - service-scene bean
95
+ - runtime ownership follows the parent bean chain
96
+ - `@Bean() + @Virtual()`
97
+ - bean-scene bean
98
+ - still a virtual bridge node rather than a new independent ownership center
99
+
100
+ ## When to use `@Virtual()`
101
+
102
+ Use `@Virtual()` when a class is still container-managed, but is not intended to become a new independent runtime ownership center.
103
+
104
+ Typical cases:
105
+
106
+ ### 1. Runtime-anchor bases
107
+
108
+ These classes still need bean lifecycle, class-token lookup, selector-aware behavior, or framework-managed context.
109
+
110
+ Representative examples:
111
+
112
+ - `vona/src/suite-vendor/a-vona/modules/a-orm/src/service/databaseDialectBase_.ts`
113
+ - `vona/src/suite-vendor/a-vona/modules/a-cache/src/service/cacheMemBase_.ts`
114
+ - `vona/src/suite-vendor/a-vona/modules/a-cache/src/service/cacheRedisBase_.ts`
115
+ - `vona/src/suite-vendor/a-vona/modules/a-summer/src/service/summerCacheBase_.ts`
116
+
117
+ ### 2. Bean facade or bridge nodes
118
+
119
+ These classes remain intentionally visible on the bean-scene shorthand surface, but still behave as inherited bridge nodes rather than independent runtime ownership centers.
120
+
121
+ Representative example:
122
+
123
+ - `vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts`
124
+
125
+ ### 3. Compatibility or variant nodes
126
+
127
+ These classes extend an existing bean hierarchy and should keep runtime ownership aligned with the parent chain.
128
+
129
+ Representative example:
130
+
131
+ - `vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql3.ts`
132
+
133
+ ## When not to use `@Virtual()`
134
+
135
+ Do **not** use `@Virtual()` for these cases.
136
+
137
+ ### 1. Independent business services
138
+
139
+ If a class is the real business owner of its own runtime boundary, it should usually keep its own `moduleBelong` and should not be virtual.
140
+
141
+ ### 2. Misplaced bean-scene classes
142
+
143
+ Do not keep a class in `src/bean` and try to hide it with `@Virtual()`.
144
+
145
+ If it should not be a global shorthand bean, move it instead:
146
+
147
+ - pure helper or subclass-only base -> `src/lib`
148
+ - runtime-anchor base -> `src/service`, often `src/service/*_.ts`
149
+
150
+ ### 3. Pure helpers or superclass convenience classes
151
+
152
+ If a class does not need container-managed behavior, it usually belongs in `src/lib` and should not use `@Virtual()`.
153
+
154
+ ## Decision table
155
+
156
+ | Scenario | Use `@Virtual()` | Recommended placement | Reason |
157
+ | --- | --- | --- | --- |
158
+ | independent business service | No | `src/service` | it should own its own runtime resource boundary |
159
+ | runtime-anchor base with container behavior | Yes | `src/service` or `src/service/*_.ts` | it is container-managed but belongs logically to the parent bean system |
160
+ | bean-scene facade that intentionally stays on shorthand surface | Yes, if it is a bridge node | `src/bean` | it participates in shorthand lookup but is not a new ownership center |
161
+ | compatibility / dialect / variant node built on a parent bean | Yes | same scene as the concrete variant type | runtime ownership should inherit from the parent chain |
162
+ | pure helper or superclass convenience class | No | `src/lib` | no bean ownership semantics are needed |
163
+ | class kept in `src/bean` only to expose shortcut lookup | Usually no | re-evaluate placement | `@Virtual()` is not a shorthand filter |
164
+ | misplaced bean-scene class that should not be globally visible | No | move to `src/lib` or `src/service` | fix placement, not metadata |
165
+
166
+ ## Worked examples
167
+
168
+ ### Example: runtime-anchor dialect base
169
+
170
+ `databaseDialectBase_.ts` is virtual because it remains container-managed and is used as the runtime base for dialect resolution, but it is not meant to become a separate public shorthand ownership center.
171
+
172
+ ### Example: bean-scene bridge node
173
+
174
+ `bean.model.ts` is still in bean-scene because it intentionally participates in the global shorthand surface, but `@Virtual()` preserves its bridge-node semantics.
175
+
176
+ ### Example: derived dialect variant
177
+
178
+ `databaseDialect.mysql3.ts` combines `$Class.extend(...)` and `@Virtual()` because those two features solve different problems:
179
+
180
+ - `$Class.extend(...)` expresses a framework-managed derived-class relationship
181
+ - `@Virtual()` preserves inherited runtime ownership semantics
182
+
183
+ ## Quick checklist
184
+
185
+ Ask these questions in order:
186
+
187
+ 1. Does the class still need container-managed behavior?
188
+ - if no, do not use `@Virtual()`
189
+ 2. Is it a runtime extension of a parent bean system rather than a new business ownership center?
190
+ - if yes, `@Virtual()` may be appropriate
191
+ 3. Are you using `@Virtual()` only to hide the class from shorthand or metadata surfaces?
192
+ - if yes, do not use it; fix placement instead
193
+ 4. Will inherited `moduleBelong` produce the correct `scope` / `config` / `model` / `entity` behavior at runtime?
194
+ - if no, do not use `@Virtual()`
195
+
196
+ ## Related guidance
197
+
198
+ Read these pages together:
199
+
200
+ - [Class Placement Rule](/ai/class-placement-rule)
201
+ - [Global Bean Lookup](/ai/global-bean-lookup)
202
+ - [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
203
+
204
+ For maintainer-level rationale, also read:
205
+
206
+ - `.docs-internal/architecture/virtual-decorator-runtime-semantics.md`
@@ -1,8 +1,8 @@
1
1
  # Backend (Vona)
2
2
 
3
- This page is the backend hub for contributors who are documenting, designing, or extending backend work in the Cabloy repository.
3
+ This page is the backend hub for Cabloy users, contributors, and AI vibe coding workflows that need the backend side of the framework.
4
4
 
5
- Vona is the backend half of the Cabloy fullstack architecture.
5
+ Vona is the backend half of Cabloy’s one-framework-system fullstack architecture.
6
6
 
7
7
  ## What Vona is responsible for
8
8
 
@@ -24,7 +24,7 @@ By default, the log directory changes by runtime environment.
24
24
  Representative defaults are:
25
25
 
26
26
  - test/development → `{project path}/.app/logs`
27
- - production → `{home}/vona/{project name}/logs`
27
+ - production → `{home}/.vona/{project name}/logs`
28
28
 
29
29
  This can be configured through app config or environment variables such as `LOGGER_DIR`.
30
30
 
@@ -86,10 +86,10 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
86
86
 
87
87
  That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
88
88
 
89
- - **Cabloy Basic**: public reference repo with DaisyUI + TailwindCSS oriented frontend modules
90
- - **Cabloy Start**: sibling private repo with Vuetify-oriented frontend modules and different value-add composition
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 a Vuetify-oriented UI layer plus edition-specific SSR site baselines and project assets
91
91
 
92
- In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, and examples.
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
 
94
94
  ## Backend configuration reminder
95
95
 
@@ -1,6 +1,6 @@
1
1
  # Cabloy Basic
2
2
 
3
- Cabloy Basic is the public monorepo you are reading right now.
3
+ Cabloy Basic is the public framework/reference edition you are reading right now.
4
4
 
5
5
  ## Repository marker
6
6
 
@@ -12,14 +12,15 @@ This marker is the quickest safe signal for docs, skills, and rules that need to
12
12
 
13
13
  ## Typical role
14
14
 
15
- Use Cabloy Basic as the public reference for:
15
+ Use Cabloy Basic as the public reference edition for:
16
16
 
17
17
  - shared architecture explanations
18
18
  - root scripts and monorepo entrypoints
19
19
  - Vona and Zova source browsing
20
20
  - public CLI-backed workflows
21
21
  - public user-facing documentation
22
+ - projects created with `npm create cabloy`
22
23
 
23
24
  ## Frontend bias
24
25
 
25
- In the current source and docs, Cabloy Basic examples commonly align with a DaisyUI + TailwindCSS-oriented frontend story. That does not mean Zova is limited to that UI stack, but it does mean docs and AI outputs should not accidentally project Vuetify-specific assumptions into Cabloy Basic unless the current source explicitly requires it.
26
+ In the current source and docs, Cabloy Basic examples commonly align with a shared frontend engineering layer built on Zova, Vue, Vite, and Quasar tooling, plus a Basic-specific UI layer built with DaisyUI + Tailwind CSS. That does not mean Zova is limited to that UI stack, but it does mean docs and AI outputs should not accidentally project Vuetify-specific assumptions into Cabloy Basic unless the current source explicitly requires it.
@@ -1,6 +1,6 @@
1
1
  # Cabloy Start
2
2
 
3
- Cabloy Start is a sibling private repository that shares the Cabloy fullstack direction while intentionally differing from Cabloy Basic.
3
+ Cabloy Start is the private commercial edition. It is a sibling private repository that shares the Cabloy fullstack direction while intentionally differing from Cabloy Basic.
4
4
 
5
5
  ## Repository marker
6
6
 
@@ -14,10 +14,41 @@ Use that marker before choosing examples, UI assumptions, or automation behavior
14
14
 
15
15
  Use Cabloy Start as the edition-aware target when work depends on:
16
16
 
17
+ - direct use of the licensed private repository source
17
18
  - Vuetify-specific frontend workflows
18
19
  - Cabloy Start flavor names in frontend scripts
19
- - modules that exist in the private Start repository but not in Basic
20
- - private value-add project composition
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
+
24
+ ## Get access and initialize
25
+
26
+ Cabloy Start is the private commercial edition. It does not use the default `npm create cabloy` project route.
27
+
28
+ To use Cabloy Start:
29
+
30
+ 1. purchase a license and obtain repository access
31
+ 2. clone the private repository source directly
32
+ 3. run the edition initialization flow in the cloned project
33
+
34
+ Access surfaces:
35
+
36
+ - Purchase page: `https://cabloy.com/module/cabloy-start`
37
+ - Repository: `https://github.com/cabloy/cabloy-start`
38
+
39
+ Clone the repository:
40
+
41
+ ```bash
42
+ git clone git@github.com:cabloy/cabloy-start.git
43
+ ```
44
+
45
+ After cloning, run:
46
+
47
+ ```bash
48
+ npm run init
49
+ ```
50
+
51
+ This initializes the project and installs dependencies.
21
52
 
22
53
  ## Relationship to this docs site
23
54