cabloy 5.1.60 → 5.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/contract-loop-gate.ts +296 -0
- package/.claude/settings.json +16 -0
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +89 -16
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +102 -14
- package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +4 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -14
- package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +13 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
- package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +7 -0
- package/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
- package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
- package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -0
- package/CHANGELOG.md +64 -0
- package/CLAUDE.md +11 -0
- package/cabloy-docs/.vitepress/config.mjs +197 -5
- package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +22 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +12 -7
- package/cabloy-docs/ai/introduction.md +1 -0
- package/cabloy-docs/ai/playbook-backend-module.md +6 -0
- package/cabloy-docs/ai/playbook-module-removal.md +164 -0
- package/cabloy-docs/ai/skills.md +12 -0
- package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
- package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
- package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
- package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
- package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
- package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
- package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
- package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
- package/cabloy-docs/backend/broadcast-guide.md +3 -3
- package/cabloy-docs/backend/cli.md +20 -11
- package/cabloy-docs/backend/config-guide.md +4 -4
- package/cabloy-docs/backend/controller-aop-guide.md +10 -10
- package/cabloy-docs/backend/controller-guide.md +12 -2
- package/cabloy-docs/backend/crud-workflow.md +7 -3
- package/cabloy-docs/backend/dto-guide.md +18 -2
- package/cabloy-docs/backend/dto-infer-generation.md +201 -25
- package/cabloy-docs/backend/election-guide.md +2 -2
- package/cabloy-docs/backend/entity-guide.md +30 -3
- package/cabloy-docs/backend/error-guide.md +3 -3
- package/cabloy-docs/backend/event-guide.md +4 -4
- package/cabloy-docs/backend/external-aop-guide.md +2 -2
- package/cabloy-docs/backend/field-indexes.md +9 -3
- package/cabloy-docs/backend/foundation.md +8 -8
- package/cabloy-docs/backend/i18n-guide.md +6 -6
- package/cabloy-docs/backend/internal-aop-guide.md +2 -2
- package/cabloy-docs/backend/introduction.md +15 -0
- package/cabloy-docs/backend/migration-and-changes.md +3 -3
- package/cabloy-docs/backend/model-guide.md +16 -6
- package/cabloy-docs/backend/openapi-guide.md +3 -0
- package/cabloy-docs/backend/queue-guide.md +3 -3
- package/cabloy-docs/backend/redlock-guide.md +2 -2
- package/cabloy-docs/backend/schedule-guide.md +2 -2
- package/cabloy-docs/backend/scripts.md +8 -0
- package/cabloy-docs/backend/serialization-guide.md +12 -2
- package/cabloy-docs/backend/service-guide.md +18 -9
- package/cabloy-docs/backend/startup-guide.md +5 -5
- package/cabloy-docs/backend/status-guide.md +271 -0
- package/cabloy-docs/backend/unit-testing.md +3 -3
- package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
- package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
- package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
- package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
- package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
- package/cabloy-docs/frontend/a-router-guide.md +307 -0
- package/cabloy-docs/frontend/api-guide.md +6 -4
- package/cabloy-docs/frontend/api-schema-guide.md +1 -0
- package/cabloy-docs/frontend/app-startup-guide.md +7 -4
- package/cabloy-docs/frontend/bean-scene-authoring.md +3 -1
- package/cabloy-docs/frontend/behavior-guide.md +16 -16
- package/cabloy-docs/frontend/cli.md +14 -2
- package/cabloy-docs/frontend/command-scene-authoring.md +504 -0
- package/cabloy-docs/frontend/component-guide.md +5 -5
- package/cabloy-docs/frontend/component-props-guide.md +1 -1
- package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
- package/cabloy-docs/frontend/design-principles.md +6 -0
- package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
- package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
- package/cabloy-docs/frontend/form-guide.md +786 -0
- package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
- package/cabloy-docs/frontend/foundation.md +33 -0
- package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
- package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
- package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
- package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
- package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
- package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
- package/cabloy-docs/frontend/generic-component-guide.md +1 -1
- package/cabloy-docs/frontend/introduction.md +38 -5
- package/cabloy-docs/frontend/ioc-and-beans.md +6 -0
- package/cabloy-docs/frontend/mock-guide.md +1 -0
- package/cabloy-docs/frontend/model-architecture.md +288 -39
- package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
- package/cabloy-docs/frontend/model-resource-cookbook.md +508 -0
- package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +402 -0
- package/cabloy-docs/frontend/model-resource-usage-guide.md +334 -0
- package/cabloy-docs/frontend/model-state-guide.md +371 -15
- package/cabloy-docs/frontend/module-scope.md +8 -8
- package/cabloy-docs/frontend/modules-and-suites.md +2 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +17 -6
- package/cabloy-docs/frontend/page-guide.md +15 -9
- package/cabloy-docs/frontend/page-meta-guide.md +466 -0
- package/cabloy-docs/frontend/page-params-guide.md +3 -3
- package/cabloy-docs/frontend/page-query-guide.md +2 -2
- package/cabloy-docs/frontend/page-route-guide.md +6 -0
- package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
- package/cabloy-docs/frontend/quickstart.md +18 -2
- package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
- package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
- package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
- package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
- package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
- package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
- package/cabloy-docs/frontend/route-alias-guide.md +6 -0
- package/cabloy-docs/frontend/router-stack-guide.md +229 -0
- package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
- package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
- package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
- package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
- package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
- package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
- package/cabloy-docs/frontend/server-data.md +4 -1
- package/cabloy-docs/frontend/system-startup-guide.md +2 -2
- package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
- package/cabloy-docs/frontend/table-cell-cookbook.md +568 -0
- package/cabloy-docs/frontend/table-guide.md +373 -0
- package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
- package/cabloy-docs/frontend/zova-app-guide.md +251 -0
- package/cabloy-docs/frontend/zova-form-source-reading-map.md +293 -0
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +421 -0
- package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
- package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
- package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
- package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +308 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
- package/cabloy-docs/fullstack/contract-loop-playbook.md +356 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +199 -23
- package/cabloy-docs/fullstack/introduction.md +15 -1
- package/cabloy-docs/fullstack/openapi-to-sdk.md +135 -11
- package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
- package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
- package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
- package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +6 -2
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +60 -23
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +14 -7
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +6 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +17 -4
- package/cabloy-docs/reference/bean-scene-boilerplates.md +15 -13
- package/cabloy-docs/reference/package-map.md +4 -3
- package/package.json +2 -1
- package/scripts/init.ts +2 -18
- package/scripts/initTestData.ts +25 -0
- package/scripts/upgrade.ts +17 -2
- package/vona/pnpm-lock.yaml +48 -194
- package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
- package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
- package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
- package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
- package/vona/src/suite/a-training/package.json +12 -0
- package/vona/src/suite/a-training/tsconfig.base.json +4 -0
- package/vona/src/suite/a-training/tsconfig.json +10 -0
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -1
- package/zova/packages-cli/cli-set-front/package.json +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +34 -4
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +416 -690
- package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/package.json +52 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
- package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +51 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
- package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
- package/zova/src/suite/a-training/package.json +12 -0
- package/zova/src/suite/a-training/tsconfig.base.json +4 -0
- package/zova/src/suite/a-training/tsconfig.json +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Use this reference when a contract-loop task adds or refactors a custom API that still belongs to an existing resource.
|
|
4
4
|
|
|
5
|
+
This is a downstream consumer-alignment pattern for the forward chain. It applies after contract regeneration, not instead of contract generation.
|
|
6
|
+
|
|
5
7
|
Typical examples:
|
|
6
8
|
|
|
7
9
|
- `summary/:id`
|
|
@@ -39,6 +41,8 @@ Use this shape instead:
|
|
|
39
41
|
2. add reusable resource-owned helpers for custom query and mutation state
|
|
40
42
|
3. keep module-local models only as thin semantic facades when the task still benefits from a business-local API surface
|
|
41
43
|
|
|
44
|
+
This is the forward-chain downstream rule in practice: regenerate the contract first, then keep the frontend follow-up thin and resource-owner-aware.
|
|
45
|
+
|
|
42
46
|
A good semantic facade may still expose methods such as:
|
|
43
47
|
|
|
44
48
|
- `summary(id)`
|
|
@@ -1,31 +1,47 @@
|
|
|
1
1
|
# Verification Checklist
|
|
2
2
|
|
|
3
|
-
After a contract-loop change,
|
|
3
|
+
After a contract-loop change, verify the branch that actually applies.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Edition verification
|
|
6
6
|
|
|
7
|
+
- Basic or Start marker confirmed
|
|
8
|
+
- affected flavor confirmed
|
|
9
|
+
- generation path matches the active edition
|
|
10
|
+
|
|
11
|
+
## Forward chain verification
|
|
12
|
+
|
|
13
|
+
- backend contract source is correct
|
|
7
14
|
- controller action contract is correct
|
|
8
15
|
- DTO and validation align
|
|
9
16
|
- OpenAPI output reflects the intended shape
|
|
10
|
-
-
|
|
11
|
-
-
|
|
17
|
+
- module ownership is constrained
|
|
18
|
+
- regeneration commands completed successfully
|
|
19
|
+
- generated SDK or schema outputs are updated
|
|
20
|
+
- thin model facades and downstream consumers still align with the regenerated contract
|
|
12
21
|
- `npm run tsc`
|
|
13
22
|
- `npm run build`
|
|
14
23
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
24
|
+
## Reverse chain verification
|
|
25
|
+
|
|
26
|
+
- frontend-owned source is correct
|
|
27
|
+
- metadata generation completed when applicable
|
|
28
|
+
- the relevant flavor build completed successfully
|
|
29
|
+
- `deps:vona` completed
|
|
30
|
+
- backend consumers can resolve the refreshed frontend-generated handoff
|
|
31
|
+
- prefer visible proof under `zova/src/**/.metadata/**` when it is available
|
|
32
|
+
- this repo does not rely on a contract-loop pre-commit gate; the active safeguard is the Claude hook layer
|
|
33
|
+
- if the change was a high-confidence Zova reverse-source edit through the Claude hook path, confirm whether the hook already auto-ran `npm run build:zova:admin` and `npm run deps:vona`
|
|
34
|
+
- if the change was consumer-side, low-confidence, outside the Claude hook path, or in another edition branch, run the reverse sync flow manually instead of assuming it already happened
|
|
35
|
+
- if the real handoff only appears in `.zova-rest`, treat the safeguard as conservative reminder/auto-sync assistance rather than strict proof
|
|
20
36
|
- `npm run tsc:zova`
|
|
21
|
-
- `npm run build:zova`
|
|
22
37
|
- relevant flavor-specific or route-specific checks
|
|
23
38
|
|
|
24
|
-
##
|
|
39
|
+
## Consumer drift verification
|
|
25
40
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
41
|
+
- source truth already looks correct
|
|
42
|
+
- generated output already looks correct
|
|
43
|
+
- the next consumer layer is the place that still looks stale
|
|
44
|
+
- do not patch source or generated artifacts again until the stale consumer path is identified
|
|
29
45
|
|
|
30
46
|
## Recovery rule for stale local file consumers
|
|
31
47
|
|
|
@@ -33,6 +49,8 @@ If all of these are true:
|
|
|
33
49
|
|
|
34
50
|
- generated `.zova-rest` or related generated consumer artifacts already contain the expected new keys or types
|
|
35
51
|
- the normal regeneration or sync flow already ran
|
|
52
|
+
- when relevant, the affected Zova flavor build already ran
|
|
53
|
+
- `deps:vona` already ran
|
|
36
54
|
- Vona still behaves as if old consumer types are installed
|
|
37
55
|
|
|
38
56
|
Then suspect a stale or unhealthy local installation state in `vona/node_modules`.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cabloy-domain-planning
|
|
3
|
+
description: Use this skill whenever the user wants to plan a new business domain in this Cabloy repo, such as CRM, OA, training, ERP, or a similar long-lived domain. Trigger when the request is about deciding suite-first structure, proposing or validating providerId, suite, and module names, comparing naming options, confirming names before scaffolding, or keeping a custom naming path open. Prefer it before backend or frontend scaffolding when the main question is domain naming and structure rather than immediate file generation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cabloy Domain Planning
|
|
7
|
+
|
|
8
|
+
Use this skill when the user is still deciding how to name and structure a new business domain.
|
|
9
|
+
|
|
10
|
+
## Goals
|
|
11
|
+
|
|
12
|
+
1. detect whether the active repository is Cabloy Basic or Cabloy Start
|
|
13
|
+
2. classify the request as domain planning rather than immediate scaffolding
|
|
14
|
+
3. default to suite-first planning for real business domains
|
|
15
|
+
4. propose valid `providerId`, suite, and module names before any generation happens
|
|
16
|
+
5. require explicit confirmation before handing off to scaffold commands
|
|
17
|
+
6. always keep a custom naming path available for the user
|
|
18
|
+
7. finish with the CLI-first next step and matching verification guidance
|
|
19
|
+
|
|
20
|
+
## Step 1: Detect edition first
|
|
21
|
+
|
|
22
|
+
Check the repository root for these marker files:
|
|
23
|
+
|
|
24
|
+
- `__CABLOY_BASIC__`
|
|
25
|
+
- `__CABLOY_START__`
|
|
26
|
+
|
|
27
|
+
Interpretation:
|
|
28
|
+
|
|
29
|
+
- `__CABLOY_BASIC__` present → this is Cabloy Basic
|
|
30
|
+
- `__CABLOY_START__` present → this is Cabloy Start
|
|
31
|
+
- neither present → inspect nearby scripts and ask before making edition-specific assumptions
|
|
32
|
+
|
|
33
|
+
This matters most when examples, frontend flavors, or suite/module availability may differ between editions.
|
|
34
|
+
|
|
35
|
+
## Step 2: Confirm that this is a planning request
|
|
36
|
+
|
|
37
|
+
Use this skill when the user is asking things such as:
|
|
38
|
+
|
|
39
|
+
- how to plan a new CRM, OA, training, ERP, or similar business area
|
|
40
|
+
- whether the work should start as a suite or only a module
|
|
41
|
+
- how to choose `providerId`, `suiteName`, or first module names
|
|
42
|
+
- whether a proposed name is valid
|
|
43
|
+
- which naming option should be preferred before scaffolding
|
|
44
|
+
|
|
45
|
+
Do not use this skill once naming is already confirmed and the request is clearly about backend or frontend scaffolding. In that case, route to the appropriate scaffold skill.
|
|
46
|
+
|
|
47
|
+
## Step 3: Default to suite-first planning
|
|
48
|
+
|
|
49
|
+
For real business work, prefer the suite-first path described in:
|
|
50
|
+
|
|
51
|
+
- `cabloy-docs/fullstack/suites-and-modules.md`
|
|
52
|
+
|
|
53
|
+
Use this practical rule:
|
|
54
|
+
|
|
55
|
+
- prefer a **suite** for the business domain boundary
|
|
56
|
+
- prefer **modules** for the capabilities inside that domain
|
|
57
|
+
- treat a standalone module as the exception for very small, disposable, or tutorial-only work
|
|
58
|
+
|
|
59
|
+
Do not jump into `:create:module` first when the real question is still the domain boundary.
|
|
60
|
+
|
|
61
|
+
## Step 4: Collect or infer the planning inputs
|
|
62
|
+
|
|
63
|
+
Before proposing names, determine these inputs:
|
|
64
|
+
|
|
65
|
+
1. the business domain term
|
|
66
|
+
- examples: crm, oa, training
|
|
67
|
+
2. whether the user already has a required namespace or provider prefix
|
|
68
|
+
- examples: `demo`, `biz`, `mycorp`
|
|
69
|
+
3. whether the work is backend-only, frontend-only, or fullstack
|
|
70
|
+
4. whether the user wants a conservative functional naming style or a custom/branded naming style
|
|
71
|
+
|
|
72
|
+
If the user already provides names, validate them instead of replacing them silently.
|
|
73
|
+
|
|
74
|
+
## Step 5: Validate the naming rules
|
|
75
|
+
|
|
76
|
+
Reuse the durable naming rules from:
|
|
77
|
+
|
|
78
|
+
- `cabloy-docs/fullstack/suites-and-modules.md`
|
|
79
|
+
- `cabloy-docs/frontend/modules-and-suites.md`
|
|
80
|
+
|
|
81
|
+
### Suite short name rule
|
|
82
|
+
|
|
83
|
+
A suite short name follows:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
{providerId}-{suiteName}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
In this repository:
|
|
90
|
+
|
|
91
|
+
- `suiteName` must use lowercase English letters only
|
|
92
|
+
- `suiteName` must not contain another `-`
|
|
93
|
+
|
|
94
|
+
So a name such as `crm-core` is not valid as the `suiteName` segment.
|
|
95
|
+
|
|
96
|
+
When a proposed name is invalid:
|
|
97
|
+
|
|
98
|
+
- explain whether the invalid part is `providerId`, `suiteName`, or the combined short name
|
|
99
|
+
- do not collapse those layers into one vague error
|
|
100
|
+
- provide the nearest valid alternatives when possible
|
|
101
|
+
|
|
102
|
+
For example:
|
|
103
|
+
|
|
104
|
+
- `crm-core` is invalid as a `suiteName`
|
|
105
|
+
- `crm-core` can still be a valid suite short name if it is interpreted as:
|
|
106
|
+
- `providerId = crm`
|
|
107
|
+
- `suiteName = core`
|
|
108
|
+
|
|
109
|
+
### Module planning rule
|
|
110
|
+
|
|
111
|
+
Module names should represent capability ownership inside the suite.
|
|
112
|
+
|
|
113
|
+
Prefer names that:
|
|
114
|
+
|
|
115
|
+
- map cleanly to a business capability
|
|
116
|
+
- remain natural when they become resource owners, controller names, API paths, or menu/page anchors
|
|
117
|
+
- avoid technical placeholder words such as `base`, `core`, or `common` unless the module is truly a shared technical layer
|
|
118
|
+
|
|
119
|
+
If more detail is needed, prefer expressing it in the module name rather than by making the suite name longer.
|
|
120
|
+
|
|
121
|
+
## Step 6: Propose names in a compact planning table
|
|
122
|
+
|
|
123
|
+
When the user has not finalized naming, propose:
|
|
124
|
+
|
|
125
|
+
1. one **recommended** option
|
|
126
|
+
2. one or two **alternatives** if there is a meaningful trade-off
|
|
127
|
+
3. one **custom naming** path
|
|
128
|
+
|
|
129
|
+
The proposal should be compact and practical. Include:
|
|
130
|
+
|
|
131
|
+
- `providerId`
|
|
132
|
+
- suite short name
|
|
133
|
+
- Vona suite full name
|
|
134
|
+
- Zova suite full name
|
|
135
|
+
- 3-6 likely first module names
|
|
136
|
+
- which module should be scaffolded first
|
|
137
|
+
|
|
138
|
+
Use examples such as:
|
|
139
|
+
|
|
140
|
+
- suite: `demo-training`
|
|
141
|
+
- modules: `training-student`, `training-course`, `training-record`
|
|
142
|
+
|
|
143
|
+
When helpful, explain why the recommendation is better than obvious alternatives.
|
|
144
|
+
|
|
145
|
+
## Step 7: Require confirmation before scaffolding
|
|
146
|
+
|
|
147
|
+
Before suggesting any scaffold execution, explicitly confirm:
|
|
148
|
+
|
|
149
|
+
- `providerId`
|
|
150
|
+
- suite short name
|
|
151
|
+
- first module names
|
|
152
|
+
- whether the user wants backend-only, frontend-only, or fullstack scaffolding
|
|
153
|
+
|
|
154
|
+
Do not treat silence as confirmation.
|
|
155
|
+
|
|
156
|
+
Always leave a custom path available, for example:
|
|
157
|
+
|
|
158
|
+
- “If you want a different `providerId`, suite short name, or first module set, give the custom names and I will validate them against the repo rules.”
|
|
159
|
+
|
|
160
|
+
## Step 8: Hand off to CLI-first scaffolding only after confirmation
|
|
161
|
+
|
|
162
|
+
Once naming is confirmed, route to the real generators rather than hand-authoring structure.
|
|
163
|
+
|
|
164
|
+
Typical commands are:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm run vona :create:suite <suiteShortName>
|
|
168
|
+
npm run zova :create:suite <suiteShortName>
|
|
169
|
+
npm run vona :create:module <moduleName> -- --suite=<suiteShortName>
|
|
170
|
+
npm run zova :create:module <moduleName> -- --suite=<suiteShortName>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Then route to:
|
|
174
|
+
|
|
175
|
+
- `cabloy-backend-scaffold` for backend generation and follow-up
|
|
176
|
+
- `cabloy-frontend-scaffold` for frontend generation and follow-up
|
|
177
|
+
- `cabloy-workflow` if the task becomes a broader cross-stack routing problem
|
|
178
|
+
|
|
179
|
+
## Step 9: Verification
|
|
180
|
+
|
|
181
|
+
Always finish with a verification path that matches the scope.
|
|
182
|
+
|
|
183
|
+
Before generation, verify:
|
|
184
|
+
|
|
185
|
+
- the proposed suite name follows the naming rule
|
|
186
|
+
- the proposed module names are natural business capability owners
|
|
187
|
+
- the command family still exists through `npm run vona` / `npm run zova`
|
|
188
|
+
|
|
189
|
+
After generation, verify with the narrowest useful checks first:
|
|
190
|
+
|
|
191
|
+
- `npm run vona :`
|
|
192
|
+
- `npm run zova :`
|
|
193
|
+
- `npm run deps:vona`
|
|
194
|
+
- `npm run deps:zova`
|
|
195
|
+
- `npm run tsc`
|
|
196
|
+
|
|
197
|
+
For docs or AI-asset changes that accompany this workflow, also verify that referenced public docs and skill descriptions still tell a consistent story.
|
|
198
|
+
|
|
199
|
+
## Response pattern
|
|
200
|
+
|
|
201
|
+
When helpful, structure the response around these points:
|
|
202
|
+
|
|
203
|
+
1. detected edition
|
|
204
|
+
2. suite-first recommendation
|
|
205
|
+
3. recommended naming table
|
|
206
|
+
4. alternatives and trade-offs
|
|
207
|
+
5. custom naming path
|
|
208
|
+
6. confirmation gate before scaffolding
|
|
209
|
+
7. next CLI commands after confirmation
|
|
210
|
+
8. verification steps
|
|
211
|
+
|
|
212
|
+
Keep the response practical. The value of this skill is to turn vague new-domain requests into a confirmed, valid, and CLI-ready naming plan before any scaffolding starts.
|
|
@@ -36,6 +36,8 @@ Then classify the request:
|
|
|
36
36
|
|
|
37
37
|
Default to frontend-first. Only escalate mentally to a broader fullstack workflow when the frontend task obviously crosses the contract boundary.
|
|
38
38
|
|
|
39
|
+
If the user is still deciding a new business-domain boundary or suite/module naming, use the root `cabloy-domain-planning` skill before scaffolding.
|
|
40
|
+
|
|
39
41
|
If the task is really a broad cross-stack workflow, consider whether the root `cabloy-workflow` skill is the better primary router.
|
|
40
42
|
|
|
41
43
|
## Step 2: Start from Zova CLI and repo entrypoints
|
|
@@ -134,6 +136,16 @@ Check whether the feature needs:
|
|
|
134
136
|
- SSR init-data updates
|
|
135
137
|
- OpenAPI SDK regeneration
|
|
136
138
|
- schema-driven UI or `$apiSchema` review
|
|
139
|
+
- reverse fullstack handoff when newly added frontend resources will later be consumed by backend metadata or backend tooling
|
|
140
|
+
|
|
141
|
+
If the frontend change introduces resources such as a custom form-field renderer, table-cell renderer, or other generated metadata that backend `ZovaRender.field(...)` / `ZovaRender.cell(...)` will consume, do not treat the task as frontend-only cleanup.
|
|
142
|
+
|
|
143
|
+
In that case, surface this operational sequence:
|
|
144
|
+
|
|
145
|
+
1. refresh metadata when needed
|
|
146
|
+
2. build the affected flavor output
|
|
147
|
+
3. run `deps:vona`
|
|
148
|
+
4. if backend-side shared types still look stale, escalate to the contract-loop recovery path instead of continuing source-level debugging
|
|
137
149
|
|
|
138
150
|
### Component and interaction follow-up
|
|
139
151
|
|
|
@@ -173,6 +185,7 @@ Stay frontend-first, but if the frontend task clearly depends on backend contrac
|
|
|
173
185
|
- backend OpenAPI output may need refresh or inspection
|
|
174
186
|
- backend DTO/controller response shape may be the real source of truth
|
|
175
187
|
- frontend SDK or schema-driven layers should be regenerated from contract output rather than hand-patched
|
|
188
|
+
- newly added frontend resources that backend metadata will consume may require a reverse handoff through frontend build output and `deps:vona`
|
|
176
189
|
|
|
177
190
|
Do not turn the skill into a backend workflow. Only surface the reminder when the contract boundary is clearly involved.
|
|
178
191
|
|
|
@@ -15,6 +15,8 @@ After generating or extending a frontend thread, check which follow-up layers ap
|
|
|
15
15
|
- SSR init-data needs
|
|
16
16
|
- OpenAPI SDK or schema-driven layer impact
|
|
17
17
|
- backend contract reminder if frontend depends on generated backend contract output
|
|
18
|
+
- if backend metadata will consume newly added frontend render resources, run the relevant Zova build and then `deps:vona`
|
|
19
|
+
- if generated `.zova-rest` output is updated but backend still sees stale shared types, rebuild `vona/node_modules` and reinstall
|
|
18
20
|
|
|
19
21
|
## Interaction and UI follow-up
|
|
20
22
|
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cabloy-module-removal
|
|
3
|
+
description: Use this skill whenever the user wants to remove or delete an existing Cabloy module, retire a demo module, or cleanly take a backend, frontend, or fullstack module out of the monorepo. Trigger for requests such as remove module, delete module, retire module, remove demo module, or remove fullstack module, including equivalent requests in other languages. Prefer it when the task is about deletion order, generated-runtime cleanup, and verification rather than scaffolding or contract evolution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cabloy Module Removal
|
|
7
|
+
|
|
8
|
+
Use this skill when the user wants to remove an existing module from the Cabloy monorepo.
|
|
9
|
+
|
|
10
|
+
Read the public [Module Removal Playbook](../../../cabloy-docs/ai/playbook-module-removal.md) for the canonical user/agent-facing workflow. This skill is the thinner orchestration layer: it should classify the removal path, choose the right cleanup branch, and point back to the playbook for the shared operational sequence.
|
|
11
|
+
|
|
12
|
+
## Goals
|
|
13
|
+
|
|
14
|
+
1. detect whether the active repository is Cabloy Basic or Cabloy Start
|
|
15
|
+
2. classify the removal scope as backend-only, frontend-only, or fullstack
|
|
16
|
+
3. keep the workflow source-first instead of debugging generated artifacts too early
|
|
17
|
+
4. make the stale-generated-runtime recovery branch explicit when needed
|
|
18
|
+
5. finish with verification guidance that proves the module is gone from the runtime/code graph
|
|
19
|
+
|
|
20
|
+
## Step 1: Detect repo and classify the removal branch
|
|
21
|
+
|
|
22
|
+
Check the repository root for these marker files:
|
|
23
|
+
|
|
24
|
+
- `__CABLOY_BASIC__`
|
|
25
|
+
- `__CABLOY_START__`
|
|
26
|
+
|
|
27
|
+
Interpretation:
|
|
28
|
+
|
|
29
|
+
- `__CABLOY_BASIC__` present → this is Cabloy Basic
|
|
30
|
+
- `__CABLOY_START__` present → this is Cabloy Start
|
|
31
|
+
- neither present → inspect nearby scripts and ask before making edition-specific assumptions
|
|
32
|
+
|
|
33
|
+
Then classify the request into one of three branches:
|
|
34
|
+
|
|
35
|
+
### Branch A: backend-only removal
|
|
36
|
+
|
|
37
|
+
Use this branch when the user is removing only Vona-side code such as:
|
|
38
|
+
|
|
39
|
+
- `vona/src/module/<module>`
|
|
40
|
+
- backend package references
|
|
41
|
+
- backend tests or metadata tied only to Vona
|
|
42
|
+
|
|
43
|
+
### Branch B: frontend-only removal
|
|
44
|
+
|
|
45
|
+
Use this branch when the user is removing only Zova-side code such as:
|
|
46
|
+
|
|
47
|
+
- `zova/src/module/<module>`
|
|
48
|
+
- frontend package references
|
|
49
|
+
- Zova-only API/model/component assets
|
|
50
|
+
|
|
51
|
+
### Branch C: fullstack removal
|
|
52
|
+
|
|
53
|
+
Use this branch when the module exists on both sides or the request affects both Vona and Zova.
|
|
54
|
+
|
|
55
|
+
This is the default branch for demo modules and shared business threads.
|
|
56
|
+
|
|
57
|
+
## Step 2: Inventory real source and direct references first
|
|
58
|
+
|
|
59
|
+
Before proposing or making cleanup steps, inspect the real module surfaces first:
|
|
60
|
+
|
|
61
|
+
- backend and frontend module roots
|
|
62
|
+
- `vona/package.json`
|
|
63
|
+
- `zova/package.json`
|
|
64
|
+
- generated registries or lockfiles that may need refresh
|
|
65
|
+
- tests tied to the module
|
|
66
|
+
- optional docs/examples only if the user explicitly wants a public scrub
|
|
67
|
+
|
|
68
|
+
Start from the shared root scripts first:
|
|
69
|
+
|
|
70
|
+
- `package.json`
|
|
71
|
+
- `npm run vona`
|
|
72
|
+
- `npm run zova`
|
|
73
|
+
|
|
74
|
+
Do not assume a module lives only in one path family until the actual repo layout has been inspected.
|
|
75
|
+
|
|
76
|
+
## Step 3: Keep the normal execution order source-first
|
|
77
|
+
|
|
78
|
+
Point the user or the main workflow to this order:
|
|
79
|
+
|
|
80
|
+
1. remove backend source if in scope
|
|
81
|
+
2. remove frontend source if in scope
|
|
82
|
+
3. remove direct workspace dependency references
|
|
83
|
+
4. run the repo-owned regeneration flow
|
|
84
|
+
5. verify no references remain
|
|
85
|
+
|
|
86
|
+
Important rule:
|
|
87
|
+
|
|
88
|
+
- do not start by hand-editing generated caches or type surfaces while the real source and dependency references still exist
|
|
89
|
+
|
|
90
|
+
Use the playbook for the full operational sequence and representative commands.
|
|
91
|
+
|
|
92
|
+
## Step 4: Use generated-runtime cleanup only as a recovery branch
|
|
93
|
+
|
|
94
|
+
When a module has already been removed from source and direct dependency references, but stale generated types or runtime entries still remain, treat generated runtime directories as disposable working state rather than source-of-truth files.
|
|
95
|
+
|
|
96
|
+
Primary recovery targets for this workflow are:
|
|
97
|
+
|
|
98
|
+
- `vona/.vona`
|
|
99
|
+
- `zova/.zova`
|
|
100
|
+
|
|
101
|
+
These directories are auto-generated by the Vona and Zova CLI flows and may survive when a service or build process does not stop cleanly.
|
|
102
|
+
|
|
103
|
+
This is a recovery branch, not the default first step.
|
|
104
|
+
|
|
105
|
+
After cleanup, rerun the normal build/deps/typecheck flow from the playbook.
|
|
106
|
+
|
|
107
|
+
## Step 5: Finish with branch-aware verification
|
|
108
|
+
|
|
109
|
+
Use the verification path that matches the branch:
|
|
110
|
+
|
|
111
|
+
- backend-only → backend deps/typecheck/tests as needed
|
|
112
|
+
- frontend-only → relevant Zova build/deps/typecheck path
|
|
113
|
+
- fullstack → fullstack regeneration order plus typecheck and targeted tests
|
|
114
|
+
|
|
115
|
+
Verification should prove:
|
|
116
|
+
|
|
117
|
+
- no direct workspace dependency entries remain
|
|
118
|
+
- no stale generated registrations remain
|
|
119
|
+
- no typecheck failures still point at the removed module
|
|
120
|
+
- no important runtime or test surfaces still import the removed module
|
|
121
|
+
|
|
122
|
+
## Step 6: Treat docs cleanup as a separate scope decision
|
|
123
|
+
|
|
124
|
+
Do not assume module deletion automatically means public docs cleanup.
|
|
125
|
+
|
|
126
|
+
Ask or confirm whether the task is:
|
|
127
|
+
|
|
128
|
+
- code/runtime removal only
|
|
129
|
+
- code/runtime removal plus docs/examples scrub
|
|
130
|
+
|
|
131
|
+
If docs cleanup is in scope, update `cabloy-docs/` separately from the runtime cleanup and keep maintainer rationale in `.docs-internal/`.
|
|
132
|
+
|
|
133
|
+
## Response pattern
|
|
134
|
+
|
|
135
|
+
When using this skill, structure the response around these points when helpful:
|
|
136
|
+
|
|
137
|
+
1. detected edition
|
|
138
|
+
2. detected removal scope
|
|
139
|
+
3. real module surfaces involved
|
|
140
|
+
4. recommended cleanup/regeneration branch
|
|
141
|
+
5. stale-generated-runtime recovery branch if needed
|
|
142
|
+
6. verification steps
|
|
143
|
+
|
|
144
|
+
Keep the response practical. The value of this skill is to choose the right removal branch quickly and keep generated working state in the correct role.
|
|
@@ -164,6 +164,12 @@ Then check whether DTOs are already inferred through patterns such as:
|
|
|
164
164
|
|
|
165
165
|
If the DTOs are inferred from the entity/model chain, let the entity change propagate. Do not hand-edit DTO field lists unless the source clearly requires it.
|
|
166
166
|
|
|
167
|
+
Important serialization reminder:
|
|
168
|
+
|
|
169
|
+
- if the returned field behavior depends on `v.serializerTransform(...)`, `v.serializerExclude()`, `v.serializerReplace(...)`, `v.serializerGetter(...)`, or `v.serializerCustom(...)`, do not assume those transforms run by default
|
|
170
|
+
- for performance reasons, Vona response serialization is opt-in per API action
|
|
171
|
+
- verify that the target controller action explicitly uses `@Core.serializer()` before concluding that serializer metadata is broken
|
|
172
|
+
|
|
167
173
|
## Step 6: Apply the renderer branch deliberately
|
|
168
174
|
|
|
169
175
|
### Default rule: prefer shared renderer reuse
|
|
@@ -251,6 +257,7 @@ Typical checks include:
|
|
|
251
257
|
- `npm run tsc`
|
|
252
258
|
- `npm run build`
|
|
253
259
|
- narrow resource test runs
|
|
260
|
+
- when returned-field masking or exclusion uses `v.serializer*`, verify the action-level `@Core.serializer()` path with an API test, not only static field metadata inspection
|
|
254
261
|
- renderer/build/deps synchronization when custom frontend renderers are involved
|
|
255
262
|
|
|
256
263
|
## Response pattern
|