cabloy 5.1.50 → 5.1.52
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-backend-scaffold/SKILL.md +207 -0
- package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
- package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
- package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
- package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
- package/.claude/skills/cabloy-workflow/SKILL.md +292 -0
- package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
- package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +30 -0
- package/.github/workflows/docs-pages.yml +56 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +54 -0
- package/CLAUDE.md +59 -0
- package/README.md +152 -0
- package/cabloy-docs/.vitepress/config.mjs +255 -0
- package/cabloy-docs/.vitepress/public/CNAME +1 -0
- package/cabloy-docs/.vitepress/theme/custom.css +64 -0
- package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
- package/cabloy-docs/.vitepress/theme/index.js +5 -0
- package/cabloy-docs/ai/class-placement-rule.md +139 -0
- package/cabloy-docs/ai/cli-for-agents.md +56 -0
- package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +168 -0
- package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
- package/cabloy-docs/ai/edition-detection.md +30 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
- package/cabloy-docs/ai/global-bean-lookup.md +158 -0
- package/cabloy-docs/ai/introduction.md +62 -0
- package/cabloy-docs/ai/playbook-backend-module.md +111 -0
- package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
- package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
- package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
- package/cabloy-docs/ai/repo-guidance.md +58 -0
- package/cabloy-docs/ai/rules-and-config.md +29 -0
- package/cabloy-docs/ai/skills.md +37 -0
- package/cabloy-docs/ai/verification.md +31 -0
- package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
- package/cabloy-docs/backend/aop-overview.md +128 -0
- package/cabloy-docs/backend/auth-guide.md +151 -0
- package/cabloy-docs/backend/backend-essentials.md +128 -0
- package/cabloy-docs/backend/broadcast-guide.md +138 -0
- package/cabloy-docs/backend/cache-guide.md +70 -0
- package/cabloy-docs/backend/captcha-guide.md +162 -0
- package/cabloy-docs/backend/cli.md +173 -0
- package/cabloy-docs/backend/config-guide.md +249 -0
- package/cabloy-docs/backend/controller-aop-guide.md +270 -0
- package/cabloy-docs/backend/controller-guide.md +347 -0
- package/cabloy-docs/backend/crud-workflow.md +118 -0
- package/cabloy-docs/backend/dto-guide.md +161 -0
- package/cabloy-docs/backend/dto-infer-generation.md +153 -0
- package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
- package/cabloy-docs/backend/election-guide.md +141 -0
- package/cabloy-docs/backend/entity-guide.md +150 -0
- package/cabloy-docs/backend/error-guide.md +108 -0
- package/cabloy-docs/backend/event-guide.md +183 -0
- package/cabloy-docs/backend/external-aop-guide.md +149 -0
- package/cabloy-docs/backend/field-indexes.md +79 -0
- package/cabloy-docs/backend/foundation.md +281 -0
- package/cabloy-docs/backend/i18n-guide.md +211 -0
- package/cabloy-docs/backend/internal-aop-guide.md +181 -0
- package/cabloy-docs/backend/introduction.md +95 -0
- package/cabloy-docs/backend/jwt-guide.md +276 -0
- package/cabloy-docs/backend/logger-guide.md +223 -0
- package/cabloy-docs/backend/mail-guide.md +189 -0
- package/cabloy-docs/backend/menu-guide.md +80 -0
- package/cabloy-docs/backend/migration-and-changes.md +192 -0
- package/cabloy-docs/backend/model-guide.md +274 -0
- package/cabloy-docs/backend/multi-database-datasource.md +171 -0
- package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
- package/cabloy-docs/backend/openapi-guide.md +118 -0
- package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
- package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
- package/cabloy-docs/backend/orm-guide.md +109 -0
- package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
- package/cabloy-docs/backend/orm-select-guide.md +243 -0
- package/cabloy-docs/backend/queue-guide.md +271 -0
- package/cabloy-docs/backend/quickstart.md +141 -0
- package/cabloy-docs/backend/redis-guide.md +70 -0
- package/cabloy-docs/backend/redlock-guide.md +60 -0
- package/cabloy-docs/backend/relations-guide.md +250 -0
- package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
- package/cabloy-docs/backend/schedule-guide.md +81 -0
- package/cabloy-docs/backend/scripts.md +116 -0
- package/cabloy-docs/backend/serialization-guide.md +192 -0
- package/cabloy-docs/backend/service-guide.md +166 -0
- package/cabloy-docs/backend/sharding-guide.md +49 -0
- package/cabloy-docs/backend/startup-guide.md +326 -0
- package/cabloy-docs/backend/transaction-guide.md +82 -0
- package/cabloy-docs/backend/unit-testing.md +209 -0
- package/cabloy-docs/backend/upload-guide.md +160 -0
- package/cabloy-docs/backend/user-access-guide.md +157 -0
- package/cabloy-docs/backend/validation-guide.md +80 -0
- package/cabloy-docs/backend/worker-guide.md +59 -0
- package/cabloy-docs/editions/cabloy-basic.md +26 -0
- package/cabloy-docs/editions/cabloy-start.md +55 -0
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
- package/cabloy-docs/editions/detection.md +31 -0
- package/cabloy-docs/editions/overview.md +107 -0
- package/cabloy-docs/frontend/api-guide.md +93 -0
- package/cabloy-docs/frontend/api-schema-guide.md +43 -0
- package/cabloy-docs/frontend/app-startup-guide.md +185 -0
- package/cabloy-docs/frontend/cli.md +78 -0
- package/cabloy-docs/frontend/component-guide.md +105 -0
- package/cabloy-docs/frontend/component-props-guide.md +97 -0
- package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
- package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
- package/cabloy-docs/frontend/design-principles.md +55 -0
- package/cabloy-docs/frontend/environment-config-guide.md +250 -0
- package/cabloy-docs/frontend/foundation.md +58 -0
- package/cabloy-docs/frontend/generic-component-guide.md +35 -0
- package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
- package/cabloy-docs/frontend/introduction.md +33 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
- package/cabloy-docs/frontend/mock-guide.md +109 -0
- package/cabloy-docs/frontend/model-architecture.md +87 -0
- package/cabloy-docs/frontend/model-state-guide.md +70 -0
- package/cabloy-docs/frontend/module-scope.md +168 -0
- package/cabloy-docs/frontend/modules-and-suites.md +179 -0
- package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
- package/cabloy-docs/frontend/page-guide.md +223 -0
- package/cabloy-docs/frontend/page-params-guide.md +87 -0
- package/cabloy-docs/frontend/page-query-guide.md +96 -0
- package/cabloy-docs/frontend/page-route-guide.md +147 -0
- package/cabloy-docs/frontend/quickstart.md +202 -0
- package/cabloy-docs/frontend/route-alias-guide.md +61 -0
- package/cabloy-docs/frontend/scripts.md +86 -0
- package/cabloy-docs/frontend/sdk-guide.md +45 -0
- package/cabloy-docs/frontend/server-data.md +74 -0
- package/cabloy-docs/frontend/ssr-client-only.md +40 -0
- package/cabloy-docs/frontend/ssr-env.md +51 -0
- package/cabloy-docs/frontend/ssr-init-data.md +46 -0
- package/cabloy-docs/frontend/ssr-overview.md +48 -0
- package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
- package/cabloy-docs/frontend/system-startup-guide.md +186 -0
- package/cabloy-docs/frontend/theme-guide.md +154 -0
- package/cabloy-docs/frontend/zod-guide.md +161 -0
- 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 +62 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
- package/cabloy-docs/fullstack/introduction.md +81 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
- package/cabloy-docs/fullstack/quickstart.md +89 -0
- package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
- package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
- package/cabloy-docs/index.md +72 -0
- package/cabloy-docs/package.json +16 -0
- package/cabloy-docs/pnpm-lock.yaml +1607 -0
- package/cabloy-docs/reference/backend-directory-structure.md +88 -0
- package/cabloy-docs/reference/cli-reference.md +49 -0
- package/cabloy-docs/reference/glossary.md +38 -0
- package/cabloy-docs/reference/package-map.md +105 -0
- package/cabloy-docs/reference/repo-scripts.md +36 -0
- package/package.json +4 -1
- package/scripts/init.ts +12 -0
- package/scripts/upgrade.ts +31 -3
- package/vona/README.md +4 -4
- package/vona/README.zh-CN.md +4 -4
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +383 -38
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
- 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/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
- package/vona/src/suite-vendor/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
- package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/README.md +5 -5
- package/zova/README.zh-CN.md +4 -4
- 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-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/pnpm-lock.yaml +1596 -1679
- 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/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-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 +7 -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-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +6 -6
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--vp-c-brand-1: #2563eb;
|
|
3
|
+
--vp-c-brand-2: #1d4ed8;
|
|
4
|
+
--vp-c-brand-3: #1e40af;
|
|
5
|
+
--vp-sidebar-width: 320px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.VPHomeHero .container .name,
|
|
9
|
+
.VPHomeHero .container .text,
|
|
10
|
+
.VPHomeHero .container .tagline {
|
|
11
|
+
max-width: 900px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.vp-doc :not(pre, h1, h2, h3, h4, h5, h6) > code {
|
|
15
|
+
font-size: var(--vp-code-font-size);
|
|
16
|
+
color: var(--vp-code-color);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.cabloy-badges {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-wrap: wrap;
|
|
22
|
+
gap: 0.5rem;
|
|
23
|
+
margin: 1rem 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cabloy-badge {
|
|
27
|
+
display: inline-flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
border-radius: 999px;
|
|
30
|
+
padding: 0.25rem 0.75rem;
|
|
31
|
+
font-size: 0.85rem;
|
|
32
|
+
font-weight: 600;
|
|
33
|
+
line-height: 1.25rem;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.cabloy-badge--common {
|
|
37
|
+
background: color-mix(in srgb, var(--vp-c-brand-1) 12%, white);
|
|
38
|
+
color: var(--vp-c-brand-3);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.dark .cabloy-badge--common {
|
|
42
|
+
background: color-mix(in srgb, var(--vp-c-brand-1) 20%, black);
|
|
43
|
+
color: #bfdbfe;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.cabloy-badge--basic {
|
|
47
|
+
background: #ecfeff;
|
|
48
|
+
color: #155e75;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.dark .cabloy-badge--basic {
|
|
52
|
+
background: #083344;
|
|
53
|
+
color: #a5f3fc;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.cabloy-badge--start {
|
|
57
|
+
background: #fff7ed;
|
|
58
|
+
color: #9a3412;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.dark .cabloy-badge--start {
|
|
62
|
+
background: #431407;
|
|
63
|
+
color: #fdba74;
|
|
64
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Class Placement Rule
|
|
2
|
+
|
|
3
|
+
Use this rule when deciding where a backend base class should live.
|
|
4
|
+
|
|
5
|
+
The goal is to keep pure helpers out of the bean registry, keep runtime-anchor classes container-managed, and keep the global bean shorthand surface intentional.
|
|
6
|
+
|
|
7
|
+
## The short rule
|
|
8
|
+
|
|
9
|
+
- **A**: pure helper base -> `src/lib`
|
|
10
|
+
- **B1**: subclass-only base -> evaluate case by case, often `src/lib`
|
|
11
|
+
- **B2**: runtime-anchor base that still needs container-managed or selector/class-token behavior but should not be a global bean -> prefer `src/service` with `@Service()`
|
|
12
|
+
|
|
13
|
+
## What the categories mean
|
|
14
|
+
|
|
15
|
+
### A: pure helper base
|
|
16
|
+
|
|
17
|
+
Use A when the class is only a reusable implementation helper.
|
|
18
|
+
|
|
19
|
+
Typical signals:
|
|
20
|
+
|
|
21
|
+
- no bean lifecycle requirement
|
|
22
|
+
- no class-token lookup requirement
|
|
23
|
+
- no selector-based resolution requirement
|
|
24
|
+
- no need for bean-managed context or injection
|
|
25
|
+
|
|
26
|
+
Recommended placement:
|
|
27
|
+
|
|
28
|
+
- `src/lib`
|
|
29
|
+
|
|
30
|
+
### B1: subclass-only base
|
|
31
|
+
|
|
32
|
+
Use B1 when the class mainly exists as a superclass for concrete subclasses.
|
|
33
|
+
|
|
34
|
+
Typical signals:
|
|
35
|
+
|
|
36
|
+
- concrete behavior is usually reached through subclasses
|
|
37
|
+
- the superclass may not need its own durable runtime identity
|
|
38
|
+
- registration may be historical rather than essential
|
|
39
|
+
|
|
40
|
+
Recommended placement:
|
|
41
|
+
|
|
42
|
+
- evaluate case by case
|
|
43
|
+
- often `src/lib`
|
|
44
|
+
|
|
45
|
+
### B2: runtime-anchor base
|
|
46
|
+
|
|
47
|
+
Use B2 when the class still participates in runtime bean resolution, even if it should not be treated as a public global bean.
|
|
48
|
+
|
|
49
|
+
Typical signals:
|
|
50
|
+
|
|
51
|
+
- used as a class token
|
|
52
|
+
- used in `_getBean(...)` or `_getBeanSelector(...)`
|
|
53
|
+
- participates in selector-aware resolution or instance caching
|
|
54
|
+
- depends on bean lifecycle or other container-managed behavior
|
|
55
|
+
- already uses `@Virtual()` for an intentional business meaning that should survive the move
|
|
56
|
+
|
|
57
|
+
Recommended placement:
|
|
58
|
+
|
|
59
|
+
- `src/service` with `@Service()`
|
|
60
|
+
- if the original class was virtual, keep `@Virtual()` after the move
|
|
61
|
+
|
|
62
|
+
## Service underscore files
|
|
63
|
+
|
|
64
|
+
For service-scene classes, a trailing underscore in the file name is not only a naming style.
|
|
65
|
+
|
|
66
|
+
Prefer the `src/service/*_.ts` form when a class should remain container-managed but should **not** participate in the general full-name registration surface.
|
|
67
|
+
|
|
68
|
+
This usually fits classes that are:
|
|
69
|
+
|
|
70
|
+
- runtime-anchor bases
|
|
71
|
+
- selector or class-token anchors
|
|
72
|
+
- virtual bases with real runtime meaning
|
|
73
|
+
- not intended to be exposed as general full-name beans
|
|
74
|
+
|
|
75
|
+
Prefer a normal `src/service/*.ts` file when the service-scene class itself should remain part of the general full-name surface.
|
|
76
|
+
|
|
77
|
+
Examples:
|
|
78
|
+
|
|
79
|
+
- `cacheMemBase_.ts`
|
|
80
|
+
- `cacheRedisBase_.ts`
|
|
81
|
+
- `summerCacheBase_.ts`
|
|
82
|
+
|
|
83
|
+
Do not choose the underscore form only because a class is abstract or uses `@Virtual()`. The deciding factor is the runtime role and registration surface.
|
|
84
|
+
|
|
85
|
+
## Bean-scene and global shorthand
|
|
86
|
+
|
|
87
|
+
For backend classes, `src/bean` defines the global shorthand surface.
|
|
88
|
+
|
|
89
|
+
A bean-scene class should be expected to participate in `IBeanRecordGlobal`, even when it uses `@Virtual()` for a real business meaning.
|
|
90
|
+
|
|
91
|
+
Do not use `@Virtual()` as a reason to suppress a bean-scene class from `IBeanRecordGlobal`.
|
|
92
|
+
|
|
93
|
+
If a class should not appear on the global shorthand surface, fix placement instead:
|
|
94
|
+
|
|
95
|
+
- move pure helper or subclass-only bases to `src/lib`
|
|
96
|
+
- move runtime-anchor bases to `src/service`, often `src/service/*_.ts`
|
|
97
|
+
|
|
98
|
+
Do not keep non-global classes in `src/bean` and compensate with metadata-generation exceptions or manual type patches.
|
|
99
|
+
|
|
100
|
+
## Fast classification checklist
|
|
101
|
+
|
|
102
|
+
Ask these questions in order:
|
|
103
|
+
|
|
104
|
+
1. Does the class still need container-managed behavior?
|
|
105
|
+
- if no, it is usually A or B1
|
|
106
|
+
2. Is it mainly a runtime anchor rather than a public global bean?
|
|
107
|
+
- if yes, it is usually B2
|
|
108
|
+
3. Is it mostly a superclass convenience whose logic runs through concrete subclasses?
|
|
109
|
+
- if yes, it is usually B1
|
|
110
|
+
|
|
111
|
+
## Why B2 uses service-scene
|
|
112
|
+
|
|
113
|
+
B2 is about runtime semantics, not business naming.
|
|
114
|
+
|
|
115
|
+
The point is not that the class suddenly becomes a business-oriented service. The point is that it still needs container-managed behavior while no longer belonging on the global bean shorthand surface.
|
|
116
|
+
|
|
117
|
+
That is why `src/service` with `@Service()` is usually the better fit than moving it directly to `src/lib`.
|
|
118
|
+
|
|
119
|
+
If the original class already used `@Virtual()`, preserve `@Virtual()` after the move. Virtuality and service-scene placement describe different concerns and should not be conflated.
|
|
120
|
+
|
|
121
|
+
## Validated B2 examples
|
|
122
|
+
|
|
123
|
+
The cache and summer runtime-anchor bases validated this rule in practice.
|
|
124
|
+
|
|
125
|
+
That validation also confirmed an important constraint:
|
|
126
|
+
|
|
127
|
+
- if a B2 base already used `@Virtual()`, keep `@Virtual()` after moving it to `src/service`
|
|
128
|
+
|
|
129
|
+
The next separate step after placement validation is naming consistency for the public base-class surface.
|
|
130
|
+
|
|
131
|
+
## Related guidance
|
|
132
|
+
|
|
133
|
+
Read these pages together:
|
|
134
|
+
|
|
135
|
+
- [Backend Foundation](/backend/foundation)
|
|
136
|
+
- [Service Guide](/backend/service-guide)
|
|
137
|
+
- [Global Bean Lookup](/ai/global-bean-lookup)
|
|
138
|
+
- [Virtual Decorator Guidance](/ai/virtual-decorator-guidance)
|
|
139
|
+
- [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# CLI for Agents
|
|
2
|
+
|
|
3
|
+
The Vona and Zova CLIs are the highest-leverage automation surface in this repository.
|
|
4
|
+
|
|
5
|
+
## Why CLI-first matters
|
|
6
|
+
|
|
7
|
+
Using the CLI reduces both token use and framework drift.
|
|
8
|
+
|
|
9
|
+
Instead of asking the model to infer every generated file or naming convention, the skill or agent can:
|
|
10
|
+
|
|
11
|
+
1. discover the relevant command family
|
|
12
|
+
2. execute the command
|
|
13
|
+
3. inspect the output
|
|
14
|
+
4. apply only the smallest necessary follow-up edits
|
|
15
|
+
|
|
16
|
+
## Existing command families
|
|
17
|
+
|
|
18
|
+
### Vona
|
|
19
|
+
|
|
20
|
+
Vona already exposes command families such as:
|
|
21
|
+
|
|
22
|
+
- `bin:*`
|
|
23
|
+
- `create:*`
|
|
24
|
+
- `init:*`
|
|
25
|
+
- `tools:*`
|
|
26
|
+
|
|
27
|
+
Typical use cases:
|
|
28
|
+
|
|
29
|
+
- create suite/module/bean/test resources
|
|
30
|
+
- initialize config, locale, constants, assets, or types
|
|
31
|
+
- generate CRUD-related artifacts
|
|
32
|
+
- refresh metadata and dependency wiring
|
|
33
|
+
- run build, dev, test, typecheck, play, or database reset flows
|
|
34
|
+
|
|
35
|
+
### Zova
|
|
36
|
+
|
|
37
|
+
Zova already exposes command families such as:
|
|
38
|
+
|
|
39
|
+
- `bin:*`
|
|
40
|
+
- `create:*`
|
|
41
|
+
- `init:*`
|
|
42
|
+
- `refactor:*`
|
|
43
|
+
- `tools:*`
|
|
44
|
+
- `openapi:*`
|
|
45
|
+
|
|
46
|
+
Typical use cases:
|
|
47
|
+
|
|
48
|
+
- create suite/module/page/component/mock/bean resources
|
|
49
|
+
- initialize app/system assets and typing helpers
|
|
50
|
+
- run focused refactors for page and component patterns
|
|
51
|
+
- generate OpenAPI-related outputs
|
|
52
|
+
- refresh metadata and dependency wiring
|
|
53
|
+
|
|
54
|
+
## Edition-aware CLI usage
|
|
55
|
+
|
|
56
|
+
The command families are shared, but examples and generated targets may differ between Cabloy Basic and Cabloy Start because the editions can diverge in UI layer, frontend flavors, suites/modules, SSR site baselines, and project assets. Detect the edition before recommending a frontend-specific example.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# CLI to Skill Map
|
|
2
|
+
|
|
3
|
+
This page explains how Cabloy skills should map onto Vona and Zova CLI capabilities.
|
|
4
|
+
|
|
5
|
+
## Why this mapping matters
|
|
6
|
+
|
|
7
|
+
The CLI is the most efficient automation surface in the repo.
|
|
8
|
+
|
|
9
|
+
Skills should normally orchestrate CLI capabilities rather than replacing them.
|
|
10
|
+
|
|
11
|
+
That is how Cabloy reduces token use and keeps AI output aligned with framework conventions.
|
|
12
|
+
|
|
13
|
+
## The general rule
|
|
14
|
+
|
|
15
|
+
When a task matches an existing generator, refactor, metadata, or execution command:
|
|
16
|
+
|
|
17
|
+
1. detect the active edition
|
|
18
|
+
2. identify the relevant framework side
|
|
19
|
+
3. choose the correct CLI family
|
|
20
|
+
4. run or recommend the CLI command
|
|
21
|
+
5. inspect output
|
|
22
|
+
6. apply minimal follow-up edits
|
|
23
|
+
7. verify
|
|
24
|
+
|
|
25
|
+
## Vona CLI families and likely skill roles
|
|
26
|
+
|
|
27
|
+
### `create:*`
|
|
28
|
+
|
|
29
|
+
Typical use cases:
|
|
30
|
+
|
|
31
|
+
- suite/module/bean/test generation
|
|
32
|
+
- controller/service/model/entity/dto creation
|
|
33
|
+
|
|
34
|
+
Typical skill role:
|
|
35
|
+
|
|
36
|
+
- choose the right bean or module workflow
|
|
37
|
+
- branch on context
|
|
38
|
+
- then delegate creation to Vona CLI
|
|
39
|
+
|
|
40
|
+
### `init:*`
|
|
41
|
+
|
|
42
|
+
Typical use cases:
|
|
43
|
+
|
|
44
|
+
- config / locale / constant / asset / types initialization
|
|
45
|
+
|
|
46
|
+
Typical skill role:
|
|
47
|
+
|
|
48
|
+
- decide whether the task belongs to module setup or later feature work
|
|
49
|
+
- then delegate initialization to Vona CLI
|
|
50
|
+
|
|
51
|
+
### `tools:*`
|
|
52
|
+
|
|
53
|
+
Typical use cases:
|
|
54
|
+
|
|
55
|
+
- CRUD generation
|
|
56
|
+
- metadata and dependency refresh
|
|
57
|
+
|
|
58
|
+
Typical skill role:
|
|
59
|
+
|
|
60
|
+
- recognize when a task is “scaffold a thread” rather than “hand-build layers”
|
|
61
|
+
- choose the right generator
|
|
62
|
+
- then inspect and refine output
|
|
63
|
+
|
|
64
|
+
### `bin:*`
|
|
65
|
+
|
|
66
|
+
Typical use cases:
|
|
67
|
+
|
|
68
|
+
- dev / test / tsc / play / db-reset / build
|
|
69
|
+
|
|
70
|
+
Typical skill role:
|
|
71
|
+
|
|
72
|
+
- pick the right verification or execution path after changes
|
|
73
|
+
|
|
74
|
+
## Zova CLI families and likely skill roles
|
|
75
|
+
|
|
76
|
+
### `create:*`
|
|
77
|
+
|
|
78
|
+
Typical use cases:
|
|
79
|
+
|
|
80
|
+
- page / component / module / mock / bean generation
|
|
81
|
+
|
|
82
|
+
Typical skill role:
|
|
83
|
+
|
|
84
|
+
- detect whether the task is page/component/API/model-oriented
|
|
85
|
+
- then delegate generation to Zova CLI
|
|
86
|
+
|
|
87
|
+
### `refactor:*`
|
|
88
|
+
|
|
89
|
+
Typical use cases:
|
|
90
|
+
|
|
91
|
+
- page query
|
|
92
|
+
- page params
|
|
93
|
+
- component props
|
|
94
|
+
- generic component
|
|
95
|
+
- v-model
|
|
96
|
+
|
|
97
|
+
Typical skill role:
|
|
98
|
+
|
|
99
|
+
- recognize when a task is “add a framework feature to an existing page/component”
|
|
100
|
+
- then delegate the structural transform to Zova CLI
|
|
101
|
+
|
|
102
|
+
### `openapi:*`
|
|
103
|
+
|
|
104
|
+
Typical use cases:
|
|
105
|
+
|
|
106
|
+
- config generation
|
|
107
|
+
- SDK generation
|
|
108
|
+
|
|
109
|
+
Typical skill role:
|
|
110
|
+
|
|
111
|
+
- connect backend contract changes to frontend regeneration
|
|
112
|
+
- then delegate to Zova OpenAPI commands
|
|
113
|
+
|
|
114
|
+
### `tools:*`
|
|
115
|
+
|
|
116
|
+
Typical use cases:
|
|
117
|
+
|
|
118
|
+
- metadata regeneration
|
|
119
|
+
- dependency refresh
|
|
120
|
+
|
|
121
|
+
Typical skill role:
|
|
122
|
+
|
|
123
|
+
- notice when route/component/icon changes require metadata regeneration
|
|
124
|
+
|
|
125
|
+
## Example mappings
|
|
126
|
+
|
|
127
|
+
### Example: “Create a student CRUD backend thread”
|
|
128
|
+
|
|
129
|
+
- skill decides this is a backend CRUD task
|
|
130
|
+
- skill chooses Vona `tools:*`
|
|
131
|
+
- likely CLI path: `npm run vona :tools:crud ...`
|
|
132
|
+
- skill then verifies the generated layers and suggests follow-up edits
|
|
133
|
+
|
|
134
|
+
### Example: “Add page params to an existing Zova page”
|
|
135
|
+
|
|
136
|
+
- skill decides this is a frontend page refactor task
|
|
137
|
+
- skill chooses Zova `refactor:*`
|
|
138
|
+
- likely CLI path: `npm run zova :refactor:pageParams ...`
|
|
139
|
+
- skill then reminds the user to regenerate metadata and verify route behavior
|
|
140
|
+
|
|
141
|
+
### Example: “Backend contract changed, frontend needs refresh”
|
|
142
|
+
|
|
143
|
+
- skill decides this is a fullstack contract loop task
|
|
144
|
+
- skill uses docs + edition detection
|
|
145
|
+
- likely CLI path: Zova `openapi:*` or REST build flows
|
|
146
|
+
- skill then verifies the right edition-specific flavor path
|
|
147
|
+
|
|
148
|
+
## Anti-patterns
|
|
149
|
+
|
|
150
|
+
Avoid these mistakes in skills:
|
|
151
|
+
|
|
152
|
+
- hand-writing all generated files when a CLI command exists
|
|
153
|
+
- editing page/component/model structure manually before checking `refactor:*`
|
|
154
|
+
- ignoring metadata regeneration after route/component/icon changes
|
|
155
|
+
- using Basic-specific examples in Start without edition detection
|
|
156
|
+
|
|
157
|
+
## Current root skill example
|
|
158
|
+
|
|
159
|
+
The root-level skill:
|
|
160
|
+
|
|
161
|
+
- `.claude/skills/cabloy-workflow/SKILL.md`
|
|
162
|
+
|
|
163
|
+
already follows this philosophy: detect edition, classify layer, prefer CLI, then verify.
|
|
164
|
+
|
|
165
|
+
Future skills should follow the same mapping pattern.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Docs, Skills, Rules, and CLI Mapping
|
|
2
|
+
|
|
3
|
+
This page is for docs, skills, and workflow authors who need to decide where Cabloy AI guidance should live.
|
|
4
|
+
|
|
5
|
+
This page explains how the Cabloy AI knowledge system is divided across public docs, skills, rules, and CLI capabilities.
|
|
6
|
+
|
|
7
|
+
## Why this mapping matters
|
|
8
|
+
|
|
9
|
+
Without a clear mapping, AI systems and contributors repeat the same mistakes:
|
|
10
|
+
|
|
11
|
+
- knowledge is stored in the wrong place
|
|
12
|
+
- CLI capabilities are documented but not reused in skills
|
|
13
|
+
- skills explain things that should live in docs
|
|
14
|
+
- rules become too large because they try to teach everything
|
|
15
|
+
- the same guidance drifts across multiple files
|
|
16
|
+
|
|
17
|
+
The goal is to give each layer a distinct job.
|
|
18
|
+
|
|
19
|
+
## The four main layers
|
|
20
|
+
|
|
21
|
+
### 1. Public docs
|
|
22
|
+
|
|
23
|
+
Location:
|
|
24
|
+
|
|
25
|
+
- `cabloy-docs/`
|
|
26
|
+
|
|
27
|
+
Use public docs for:
|
|
28
|
+
|
|
29
|
+
- durable user-facing guidance
|
|
30
|
+
- durable agent-facing workflow guidance
|
|
31
|
+
- architecture explanations that people and agents should both understand
|
|
32
|
+
- edition-aware usage notes that need to be reviewed in prose
|
|
33
|
+
|
|
34
|
+
Public docs answer questions like:
|
|
35
|
+
|
|
36
|
+
- how does the fullstack collaboration loop work?
|
|
37
|
+
- how should Vona ORM and OpenAPI be understood?
|
|
38
|
+
- how does Zova page or model architecture work?
|
|
39
|
+
- what is different between Cabloy Basic and Cabloy Start?
|
|
40
|
+
|
|
41
|
+
### 2. Internal engineering docs
|
|
42
|
+
|
|
43
|
+
Location:
|
|
44
|
+
|
|
45
|
+
- `.docs-internal/`
|
|
46
|
+
|
|
47
|
+
Use internal docs for:
|
|
48
|
+
|
|
49
|
+
- ADRs
|
|
50
|
+
- architecture rationale
|
|
51
|
+
- maintenance boundaries
|
|
52
|
+
- “why this design exists” notes that do not belong in public user docs
|
|
53
|
+
|
|
54
|
+
Internal docs answer questions like:
|
|
55
|
+
|
|
56
|
+
- why were docs and internal notes separated?
|
|
57
|
+
- why is AI enablement structured this way?
|
|
58
|
+
- what invariants should future contributors preserve?
|
|
59
|
+
|
|
60
|
+
### 3. Rules and commands
|
|
61
|
+
|
|
62
|
+
Locations:
|
|
63
|
+
|
|
64
|
+
- `CLAUDE.md`
|
|
65
|
+
- `.claude/commands/`
|
|
66
|
+
|
|
67
|
+
Use rules for:
|
|
68
|
+
|
|
69
|
+
- concise repo-wide operational guidance
|
|
70
|
+
- default behavior Claude should follow in this repo
|
|
71
|
+
- short durable constraints such as edition detection and CLI-first preference
|
|
72
|
+
|
|
73
|
+
Use commands for:
|
|
74
|
+
|
|
75
|
+
- named recurring operator workflows
|
|
76
|
+
- shorter, explicit actions such as release or future migration helpers
|
|
77
|
+
|
|
78
|
+
These layers answer questions like:
|
|
79
|
+
|
|
80
|
+
- what should Claude check first in this repo?
|
|
81
|
+
- when should CLI be preferred over manual scaffolding?
|
|
82
|
+
- what recurring workflow deserves a named command?
|
|
83
|
+
|
|
84
|
+
### 4. Skills
|
|
85
|
+
|
|
86
|
+
Location:
|
|
87
|
+
|
|
88
|
+
- `.claude/skills/`
|
|
89
|
+
|
|
90
|
+
Use skills for:
|
|
91
|
+
|
|
92
|
+
- procedural decision trees
|
|
93
|
+
- reusable workflows with branching logic
|
|
94
|
+
- tasks that benefit from bundled references, evals, or future deterministic helpers
|
|
95
|
+
- repo-specific orchestration over CLI and source inspection
|
|
96
|
+
|
|
97
|
+
Skills answer questions like:
|
|
98
|
+
|
|
99
|
+
- how should Claude choose the right Cabloy workflow?
|
|
100
|
+
- when should it branch between Basic and Start?
|
|
101
|
+
- what is the right verification path after generation or refactor work?
|
|
102
|
+
|
|
103
|
+
## Decision rule for authors: where should a new piece of knowledge go?
|
|
104
|
+
|
|
105
|
+
Use this quick rule:
|
|
106
|
+
|
|
107
|
+
- if people and agents both need to read and understand it, put it in **public docs**
|
|
108
|
+
- if it is maintainer rationale or long-lived design history, put it in **internal docs**
|
|
109
|
+
- if it is short repo-wide behavioral guidance, put it in **CLAUDE.md**
|
|
110
|
+
- if it is a named repeatable operator action, put it in a **command**
|
|
111
|
+
- if it is a reusable procedural workflow with branching, put it in a **skill**
|
|
112
|
+
|
|
113
|
+
## Example mappings
|
|
114
|
+
|
|
115
|
+
### Example: “Always detect Basic vs Start before giving UI-sensitive advice”
|
|
116
|
+
|
|
117
|
+
- public explanation → [AI Edition Detection](/ai/edition-detection)
|
|
118
|
+
- consistency review surface → [Edition Consistency Checklist](/ai/edition-consistency-checklist)
|
|
119
|
+
- repo-wide behavior rule → `CLAUDE.md`
|
|
120
|
+
- procedural enforcement → `cabloy-workflow` skill
|
|
121
|
+
|
|
122
|
+
### Example: “Use Zova CLI refactors before hand-editing page params/query/component props”
|
|
123
|
+
|
|
124
|
+
- conceptual explanation → public docs in frontend and AI sections
|
|
125
|
+
- default agent behavior → `CLAUDE.md`
|
|
126
|
+
- step-by-step orchestration → `cabloy-workflow` skill or future specialized skills
|
|
127
|
+
|
|
128
|
+
### Example: “How should a backend base class be placed?”
|
|
129
|
+
|
|
130
|
+
- public operational explanation → [Class Placement Rule](/ai/class-placement-rule)
|
|
131
|
+
- maintainer rationale and invariants → `.docs-internal/architecture/class-placement-a-b1-b2.md`
|
|
132
|
+
- default repo-wide behavior → `CLAUDE.md`
|
|
133
|
+
- procedural decision workflow → `cabloy-workflow` skill
|
|
134
|
+
|
|
135
|
+
### Example: “How should AI look up a backend global bean?”
|
|
136
|
+
|
|
137
|
+
- public lookup explanation → [Global Bean Lookup](/ai/global-bean-lookup)
|
|
138
|
+
- default repo-wide behavior → `CLAUDE.md`
|
|
139
|
+
- procedural lookup sequence → `cabloy-workflow` skill
|
|
140
|
+
|
|
141
|
+
### Example: “How backend OpenAPI becomes frontend SDK”
|
|
142
|
+
|
|
143
|
+
- full explanation → [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
144
|
+
- workflow steering → skill and rules can point to the docs and choose the right CLI path
|
|
145
|
+
|
|
146
|
+
## Anti-patterns to avoid
|
|
147
|
+
|
|
148
|
+
Avoid these mistakes:
|
|
149
|
+
|
|
150
|
+
- putting large conceptual explanations in `CLAUDE.md`
|
|
151
|
+
- using a skill as the only place where an important architectural rule is explained
|
|
152
|
+
- duplicating the same workflow prose across docs and skills without giving each a distinct role
|
|
153
|
+
- creating a command for something that actually needs a branching decision tree
|
|
154
|
+
- creating a skill that re-implements an existing CLI generator manually
|
|
155
|
+
|
|
156
|
+
## Why this matters for AI workflows
|
|
157
|
+
|
|
158
|
+
This mapping reduces token waste and drift.
|
|
159
|
+
|
|
160
|
+
If each layer does the right job:
|
|
161
|
+
|
|
162
|
+
- docs hold durable explanations
|
|
163
|
+
- rules hold short repo behavior
|
|
164
|
+
- commands hold named actions
|
|
165
|
+
- skills orchestrate real workflows
|
|
166
|
+
- CLI executes framework-native generation and refactor behavior
|
|
167
|
+
|
|
168
|
+
That is the AI-development model Cabloy is optimizing for.
|