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.
- package/.claude/skills/cabloy-contract-loop/SKILL.md +1 -1
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +11 -1
- package/.claude/skills/cabloy-workflow/SKILL.md +8 -4
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +3 -2
- package/.github/workflows/docs-pages.yml +2 -0
- package/CHANGELOG.md +42 -0
- package/CLAUDE.md +7 -4
- package/README.md +36 -21
- package/cabloy-docs/.vitepress/config.mjs +171 -44
- package/cabloy-docs/ai/class-placement-rule.md +1 -0
- package/cabloy-docs/ai/cli-for-agents.md +1 -1
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +1 -0
- package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
- package/cabloy-docs/ai/edition-detection.md +3 -3
- package/cabloy-docs/ai/global-bean-lookup.md +1 -0
- package/cabloy-docs/ai/introduction.md +47 -3
- package/cabloy-docs/ai/repo-guidance.md +2 -2
- package/cabloy-docs/ai/rules-and-config.md +1 -1
- package/cabloy-docs/ai/skills.md +2 -0
- package/cabloy-docs/ai/verification.md +1 -0
- package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
- package/cabloy-docs/backend/introduction.md +2 -2
- package/cabloy-docs/backend/logger-guide.md +1 -1
- package/cabloy-docs/backend/quickstart.md +3 -3
- package/cabloy-docs/editions/cabloy-basic.md +4 -3
- package/cabloy-docs/editions/cabloy-start.md +34 -3
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
- package/cabloy-docs/editions/overview.md +114 -20
- package/cabloy-docs/frontend/css-in-js-guide.md +1 -1
- package/cabloy-docs/frontend/environment-config-guide.md +28 -0
- package/cabloy-docs/frontend/foundation.md +3 -2
- package/cabloy-docs/frontend/introduction.md +73 -4
- package/cabloy-docs/frontend/navigation-guards-guide.md +1 -1
- package/cabloy-docs/frontend/quickstart.md +4 -2
- package/cabloy-docs/frontend/scripts.md +2 -2
- package/cabloy-docs/frontend/ssr-env.md +23 -0
- package/cabloy-docs/frontend/theme-guide.md +140 -7
- package/cabloy-docs/fullstack/cli.md +118 -0
- package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +3 -2
- package/cabloy-docs/fullstack/introduction.md +84 -34
- package/cabloy-docs/fullstack/quickstart.md +7 -4
- package/cabloy-docs/fullstack/vona-zova-integration.md +2 -2
- package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
- package/cabloy-docs/index.md +39 -40
- package/cabloy-docs/reference/frontend-directory-structure.md +125 -0
- package/cabloy-docs/reference/glossary.md +2 -2
- package/cabloy-docs/reference/introduction.md +47 -0
- package/cabloy-docs/reference/package-map.md +2 -0
- package/cabloy-docs/reference/repo-scripts.md +5 -3
- package/package.json +1 -1
- package/vona/README.md +1 -1
- package/vona/pnpm-lock.yaml +383 -38
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/zova/README.md +1 -1
- package/zova/package.original.json +4 -4
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +2 -2
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/toolsMetadata/generateConfig.ts +2 -12
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +2 -2
- package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
- package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
- package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
- package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
- package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
- package/zova/packages-zova/zova-core/src/core/sys/config.ts +1 -1
- package/zova/pnpm-lock.yaml +1607 -1690
- package/zova/src/front/config/config/config.ts +1 -1
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
- package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -0
- package/zova/src/suite/a-home/modules/home-base/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
- package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +1 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
- package/zova/src/suite/a-home/modules/home-login/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-captcha/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-form/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-page/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/.metadata/locales.ts +0 -15
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/.metadata/locales.ts +0 -15
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +8 -2
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
- package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +6 -3
- package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-zod/src/.metadata/locales.ts +0 -15
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/cabloy-docs/ai/skills.md
CHANGED
|
@@ -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
|
|
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
|
|
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}
|
|
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
|
|
90
|
-
- **Cabloy Start**:
|
|
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
|
|
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 +
|
|
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
|
-
-
|
|
20
|
-
- private
|
|
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
|
|