cabloy 5.1.49 → 5.1.51
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 +288 -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 +29 -0
- package/.github/workflows/docs-pages.yml +54 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +59 -0
- package/README.md +137 -0
- package/cabloy-docs/.vitepress/config.mjs +222 -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 +138 -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 +167 -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 +157 -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 +35 -0
- package/cabloy-docs/ai/verification.md +30 -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 +25 -0
- package/cabloy-docs/editions/cabloy-start.md +24 -0
- package/cabloy-docs/editions/detection.md +31 -0
- package/cabloy-docs/editions/overview.md +44 -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 +57 -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 +32 -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 +201 -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/edition-collaboration-differences.md +61 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
- package/cabloy-docs/fullstack/introduction.md +69 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
- package/cabloy-docs/fullstack/quickstart.md +86 -0
- package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
- package/cabloy-docs/index.md +73 -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 +3 -3
- package/vona/README.zh-CN.md +4 -4
- package/vona/packages-vona/vona/package.json +1 -1
- 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/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 +4 -4
- package/zova/README.zh-CN.md +4 -4
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolTwo/controller.tsx +0 -2
- package/zova/src/suite/a-home/modules/home-base/src/config/locale/en-us.ts +1 -0
- package/zova/src/suite/a-home/modules/home-base/src/config/locale/zh-cn.ts +1 -0
- package/zova/src/suite/a-home/modules/home-base/src/page/errorNotFound/controller.tsx +8 -2
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +1 -1
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +1 -1
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.locale.tsx +2 -5
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.tabs.tsx +1 -4
- package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/bean/sys.router.ts +28 -6
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/monkeySys.ts +15 -3
- package/zova/src/suite-vendor/a-zova/modules/a-router/src/types/router.ts +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +4 -0
- package/zova/src/suite-vendor/a-zova/package.json +3 -3
- /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,157 @@
|
|
|
1
|
+
# Global Bean Lookup
|
|
2
|
+
|
|
3
|
+
Use this page when AI or contributors need to identify which backend shorthand a bean name refers to, or decide where to continue searching after a shorthand lookup fails.
|
|
4
|
+
|
|
5
|
+
## Why this lookup rule matters
|
|
6
|
+
|
|
7
|
+
Backend work often starts from code such as:
|
|
8
|
+
|
|
9
|
+
- `this.bean.database`
|
|
10
|
+
- `ctx.bean.model`
|
|
11
|
+
- `app.bean.xxx`
|
|
12
|
+
|
|
13
|
+
If an agent treats every bean-like class as part of one flat container, it wastes time and often inspects the wrong scene first.
|
|
14
|
+
|
|
15
|
+
The goal of this rule is to make global bean lookup fast and structurally correct:
|
|
16
|
+
|
|
17
|
+
- use `IBeanRecordGlobal` for global shorthand lookup
|
|
18
|
+
- use `IBeanRecordGeneral` for general full-name lookup
|
|
19
|
+
- use service-scene metadata and `src/service` for runtime-anchor and service lookup
|
|
20
|
+
- use class placement, not metadata exceptions, to keep these surfaces clean
|
|
21
|
+
|
|
22
|
+
## The three lookup surfaces
|
|
23
|
+
|
|
24
|
+
### 1. `IBeanRecordGlobal`
|
|
25
|
+
|
|
26
|
+
Use `IBeanRecordGlobal` for the **global shorthand authoring surface**.
|
|
27
|
+
|
|
28
|
+
This is the first static lookup surface when backend code references:
|
|
29
|
+
|
|
30
|
+
- `this.bean.xxx`
|
|
31
|
+
- `ctx.bean.xxx`
|
|
32
|
+
- `app.bean.xxx`
|
|
33
|
+
|
|
34
|
+
Typical source of truth:
|
|
35
|
+
|
|
36
|
+
- module `src/.metadata/index.ts`
|
|
37
|
+
- corresponding `src/bean` source file
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
|
|
41
|
+
- `database`
|
|
42
|
+
- `model`
|
|
43
|
+
|
|
44
|
+
### 2. `IBeanRecordGeneral`
|
|
45
|
+
|
|
46
|
+
Use `IBeanRecordGeneral` for the **general full-name bean surface**.
|
|
47
|
+
|
|
48
|
+
This is the right lookup surface when code references a bean by full name, such as:
|
|
49
|
+
|
|
50
|
+
- `bean._getBean('a-orm.service.database')`
|
|
51
|
+
- generated general bean registrations
|
|
52
|
+
- scene-qualified bean identities that are not global shorthand
|
|
53
|
+
|
|
54
|
+
Do not use `IBeanRecordGeneral` as the first lookup step for shorthand expressions like `this.bean.xxx`.
|
|
55
|
+
|
|
56
|
+
### 3. Service-scene and runtime-anchor lookup
|
|
57
|
+
|
|
58
|
+
Use `src/service`, service metadata, and class-token/selector call sites for classes that are not global shorthand but still rely on container-managed behavior.
|
|
59
|
+
|
|
60
|
+
This is the right path for:
|
|
61
|
+
|
|
62
|
+
- runtime-anchor bases
|
|
63
|
+
- selector-based services
|
|
64
|
+
- class-token lookup targets
|
|
65
|
+
- `src/service/*_.ts` classes that should not participate in `IBeanRecordGeneral`
|
|
66
|
+
|
|
67
|
+
Examples:
|
|
68
|
+
|
|
69
|
+
- `databaseDialectBase_.ts`
|
|
70
|
+
- cache/summer runtime-anchor bases in `src/service`
|
|
71
|
+
|
|
72
|
+
## The default lookup workflow
|
|
73
|
+
|
|
74
|
+
When backend code references `this.bean.xxx`, `ctx.bean.xxx`, or `app.bean.xxx`, prefer this sequence:
|
|
75
|
+
|
|
76
|
+
1. check `IBeanRecordGlobal` in the relevant module `src/.metadata/index.ts`
|
|
77
|
+
2. map the shorthand name to the generated bean type
|
|
78
|
+
3. jump from the generated type to the source file in `src/bean`
|
|
79
|
+
4. inspect neighboring bean-scene shorthand files only if needed for context
|
|
80
|
+
5. only if the shorthand is not found, re-evaluate whether the target is actually:
|
|
81
|
+
- a general full-name bean
|
|
82
|
+
- a service-scene runtime-anchor
|
|
83
|
+
- a lib/helper class
|
|
84
|
+
|
|
85
|
+
This keeps shorthand lookup fast and avoids jumping into `src/service` or `src/lib` too early.
|
|
86
|
+
|
|
87
|
+
## What to do when the shorthand is not found
|
|
88
|
+
|
|
89
|
+
If `IBeanRecordGlobal` does not contain the target name, do not assume the metadata is incomplete.
|
|
90
|
+
|
|
91
|
+
Re-check the problem category:
|
|
92
|
+
|
|
93
|
+
1. **Is the code actually using a full-name bean?**
|
|
94
|
+
- then inspect `IBeanRecordGeneral`
|
|
95
|
+
2. **Is the target really a service-scene runtime-anchor or selector target?**
|
|
96
|
+
- then inspect `src/service`, service metadata, and selector/class-token call sites
|
|
97
|
+
3. **Is the target only a helper or superclass chain?**
|
|
98
|
+
- then inspect `src/lib`
|
|
99
|
+
|
|
100
|
+
The absence of a name from `IBeanRecordGlobal` often means the target is not a global shorthand at all.
|
|
101
|
+
|
|
102
|
+
## Relationship to class placement
|
|
103
|
+
|
|
104
|
+
This lookup rule depends on correct backend class placement.
|
|
105
|
+
|
|
106
|
+
- `src/bean` defines the global shorthand surface
|
|
107
|
+
- classes that should not be global shorthand belong in `src/lib` or `src/service`
|
|
108
|
+
- `@Virtual()` does not remove a bean-scene class from `IBeanRecordGlobal`
|
|
109
|
+
|
|
110
|
+
That means lookup quality is improved structurally by placing classes correctly, not by adding more metadata exceptions.
|
|
111
|
+
|
|
112
|
+
For placement decisions, also read [Class Placement Rule](/ai/class-placement-rule).
|
|
113
|
+
|
|
114
|
+
## Practical examples
|
|
115
|
+
|
|
116
|
+
### Example: `this.bean.database`
|
|
117
|
+
|
|
118
|
+
1. inspect the owning module `src/.metadata/index.ts`
|
|
119
|
+
2. find `database` in `IBeanRecordGlobal`
|
|
120
|
+
3. map it to the generated bean type
|
|
121
|
+
4. jump to the corresponding `src/bean` source file
|
|
122
|
+
|
|
123
|
+
### Example: `ctx.bean.model`
|
|
124
|
+
|
|
125
|
+
1. inspect `IBeanRecordGlobal`
|
|
126
|
+
2. find `model`
|
|
127
|
+
3. jump to the bean-scene shorthand in `src/bean/bean.model.ts`
|
|
128
|
+
4. continue into `src/lib` only if deeper superclass logic is needed
|
|
129
|
+
|
|
130
|
+
### Example: database dialect runtime anchor
|
|
131
|
+
|
|
132
|
+
If the target is a dialect base or class-token runtime anchor and does not appear in `IBeanRecordGlobal`, that is expected.
|
|
133
|
+
|
|
134
|
+
Continue with:
|
|
135
|
+
|
|
136
|
+
- `src/service`
|
|
137
|
+
- service metadata
|
|
138
|
+
- class-token or selector call sites
|
|
139
|
+
|
|
140
|
+
## Anti-patterns to avoid
|
|
141
|
+
|
|
142
|
+
Avoid these mistakes:
|
|
143
|
+
|
|
144
|
+
- treating `IBeanRecordGlobal` as a full container inventory
|
|
145
|
+
- jumping to `src/service` first when the code clearly uses `this.bean.xxx`
|
|
146
|
+
- assuming a missing shorthand means metadata is broken before checking whether the target is actually global
|
|
147
|
+
- keeping non-global classes in `src/bean` and compensating with metadata patches
|
|
148
|
+
- using `@Virtual()` as a shorthand-registration filter
|
|
149
|
+
|
|
150
|
+
## Related guidance
|
|
151
|
+
|
|
152
|
+
Read these pages together:
|
|
153
|
+
|
|
154
|
+
- [Class Placement Rule](/ai/class-placement-rule)
|
|
155
|
+
- [Repo Guidance](/ai/repo-guidance)
|
|
156
|
+
- [Rules and Config](/ai/rules-and-config)
|
|
157
|
+
- [Verification](/ai/verification)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# AI Development Introduction
|
|
2
|
+
|
|
3
|
+
This page is the entrypoint for contributors who are designing, reviewing, or maintaining AI-assisted workflows in the Cabloy repository.
|
|
4
|
+
|
|
5
|
+
The Cabloy monorepo is a good fit for AI-assisted development because the source tree already contains most of the framework knowledge an agent needs:
|
|
6
|
+
|
|
7
|
+
- root scripts for shared workflows
|
|
8
|
+
- Vona CLI source and command groups
|
|
9
|
+
- Zova CLI source and command groups
|
|
10
|
+
- archived docs that still capture valuable concepts
|
|
11
|
+
- internal engineering docs for maintainers
|
|
12
|
+
- Claude commands and skills
|
|
13
|
+
|
|
14
|
+
## The main design goal
|
|
15
|
+
|
|
16
|
+
The goal is not to make AI guess Cabloy conventions more effectively.
|
|
17
|
+
|
|
18
|
+
The goal is to make AI **reuse the repo’s existing conventions directly**, especially through:
|
|
19
|
+
|
|
20
|
+
- CLI commands
|
|
21
|
+
- root scripts
|
|
22
|
+
- repo markers
|
|
23
|
+
- internal architecture notes
|
|
24
|
+
- shared public documentation
|
|
25
|
+
|
|
26
|
+
## The knowledge layers
|
|
27
|
+
|
|
28
|
+
### Public docs
|
|
29
|
+
|
|
30
|
+
Use `cabloy-docs/` for user-facing and agent-facing guidance that should remain durable and source-aligned.
|
|
31
|
+
|
|
32
|
+
For normal project usage, prefer the user-facing entry docs such as [Fullstack Quickstart](/fullstack/quickstart). This AI section focuses on repository workflows and AI-assisted development.
|
|
33
|
+
|
|
34
|
+
### Internal engineering docs
|
|
35
|
+
|
|
36
|
+
Use `.docs-internal/` for architecture notes, ADRs, and maintainership rationale that should not be mixed into public how-to documentation.
|
|
37
|
+
|
|
38
|
+
### Claude rules and commands
|
|
39
|
+
|
|
40
|
+
Use root `CLAUDE.md` and `.claude/commands/` for concise operational behavior and repeatable workflows.
|
|
41
|
+
|
|
42
|
+
### Skills
|
|
43
|
+
|
|
44
|
+
Use `.claude/skills/` for procedural workflows that benefit from reusable instructions, bundled references, or future deterministic scripts.
|
|
45
|
+
|
|
46
|
+
## Recommended AI lookup rules
|
|
47
|
+
|
|
48
|
+
For backend shorthand lookup, prefer these surfaces in order:
|
|
49
|
+
|
|
50
|
+
1. `IBeanRecordGlobal` for `this.bean.xxx`, `ctx.bean.xxx`, and `app.bean.xxx`
|
|
51
|
+
2. module `src/.metadata/index.ts` to map shorthand names to generated bean types
|
|
52
|
+
3. `src/bean` for the shorthand source file itself
|
|
53
|
+
4. only then re-evaluate whether the target is really a general full-name bean, a service-scene runtime-anchor, or a lib/helper class
|
|
54
|
+
|
|
55
|
+
For the full lookup workflow, read [Global Bean Lookup](/ai/global-bean-lookup).
|
|
56
|
+
|
|
57
|
+
## Common AI mistakes to avoid
|
|
58
|
+
|
|
59
|
+
- assuming Cabloy Basic and Cabloy Start are identical
|
|
60
|
+
- creating framework files manually when a CLI command already exists
|
|
61
|
+
- trusting stale legacy repo paths instead of current source
|
|
62
|
+
- mixing public documentation and internal rationale into one document set
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Playbook: Add a Backend Module
|
|
2
|
+
|
|
3
|
+
This playbook turns the Cabloy backend documentation into a repeatable AI-friendly workflow.
|
|
4
|
+
|
|
5
|
+
## When to use this playbook
|
|
6
|
+
|
|
7
|
+
Use this playbook when the goal is to add a new backend feature thread in Vona, such as:
|
|
8
|
+
|
|
9
|
+
- a new module
|
|
10
|
+
- a new controller/service/model/entity/dto thread
|
|
11
|
+
- a new CRUD-oriented backend feature
|
|
12
|
+
|
|
13
|
+
## Step 1: Detect the repo and scope
|
|
14
|
+
|
|
15
|
+
Before generating anything:
|
|
16
|
+
|
|
17
|
+
1. confirm the active repo marker
|
|
18
|
+
2. confirm whether the task is backend-only or fullstack
|
|
19
|
+
3. inspect the root `package.json`
|
|
20
|
+
4. inspect `npm run vona` command families
|
|
21
|
+
|
|
22
|
+
This avoids solving the wrong problem or choosing the wrong edition assumptions.
|
|
23
|
+
|
|
24
|
+
## Step 2: Prefer the Vona CLI first
|
|
25
|
+
|
|
26
|
+
Choose the smallest matching Vona command family.
|
|
27
|
+
|
|
28
|
+
Typical options include:
|
|
29
|
+
|
|
30
|
+
- `create:*` for module/bean/test scaffolding
|
|
31
|
+
- `tools:*` for CRUD generation
|
|
32
|
+
- `init:*` for config/locale/constant/type helpers
|
|
33
|
+
|
|
34
|
+
Example paths:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm run vona :create:module ...
|
|
38
|
+
npm run vona :create:bean ...
|
|
39
|
+
npm run vona :tools:crud ...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Do not start by hand-writing the whole thread if the generator already exists.
|
|
43
|
+
|
|
44
|
+
## Step 3: Inspect the generated thread
|
|
45
|
+
|
|
46
|
+
After generation, inspect the resulting backend layers:
|
|
47
|
+
|
|
48
|
+
- controller
|
|
49
|
+
- service
|
|
50
|
+
- model
|
|
51
|
+
- entity
|
|
52
|
+
- dto
|
|
53
|
+
- migration/meta files if applicable
|
|
54
|
+
- locale and test files if applicable
|
|
55
|
+
|
|
56
|
+
Use the generated structure as the baseline rather than replacing it.
|
|
57
|
+
|
|
58
|
+
## Step 4: Add contract and persistence details
|
|
59
|
+
|
|
60
|
+
Depending on the feature, extend the generated code with the right framework-level concerns:
|
|
61
|
+
|
|
62
|
+
- validation
|
|
63
|
+
- OpenAPI metadata
|
|
64
|
+
- DTO inference or explicit DTOs
|
|
65
|
+
- model relations
|
|
66
|
+
- migration and changes
|
|
67
|
+
- field indexes
|
|
68
|
+
|
|
69
|
+
Relevant docs:
|
|
70
|
+
|
|
71
|
+
- [Controller Guide](/backend/controller-guide)
|
|
72
|
+
- [Service Guide](/backend/service-guide)
|
|
73
|
+
- [Model Guide](/backend/model-guide)
|
|
74
|
+
- [Entity Guide](/backend/entity-guide)
|
|
75
|
+
- [DTO Guide](/backend/dto-guide)
|
|
76
|
+
- [Migration and Changes](/backend/migration-and-changes)
|
|
77
|
+
|
|
78
|
+
## Step 5: Verify the backend path
|
|
79
|
+
|
|
80
|
+
Choose verification based on scope.
|
|
81
|
+
|
|
82
|
+
Typical checks include:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm run test
|
|
86
|
+
npm run tsc
|
|
87
|
+
npm run build
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or narrower checks such as:
|
|
91
|
+
|
|
92
|
+
- module tests
|
|
93
|
+
- migration reset flow
|
|
94
|
+
- controller action testing
|
|
95
|
+
|
|
96
|
+
## AI rule of thumb
|
|
97
|
+
|
|
98
|
+
A good AI backend workflow in Cabloy is usually:
|
|
99
|
+
|
|
100
|
+
1. detect
|
|
101
|
+
2. choose CLI
|
|
102
|
+
3. generate
|
|
103
|
+
4. inspect
|
|
104
|
+
5. refine
|
|
105
|
+
6. verify
|
|
106
|
+
|
|
107
|
+
Not:
|
|
108
|
+
|
|
109
|
+
1. imagine the file structure
|
|
110
|
+
2. write everything manually
|
|
111
|
+
3. hope it matches framework conventions
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Playbook: Update a Backend Contract and Regenerate the Frontend
|
|
2
|
+
|
|
3
|
+
This playbook documents one of the highest-value fullstack AI workflows in Cabloy.
|
|
4
|
+
|
|
5
|
+
## When to use this playbook
|
|
6
|
+
|
|
7
|
+
Use this playbook when a backend API contract changes and the frontend should be brought back into sync.
|
|
8
|
+
|
|
9
|
+
Typical triggers include:
|
|
10
|
+
|
|
11
|
+
- DTO field changes
|
|
12
|
+
- controller parameter or response changes
|
|
13
|
+
- validation changes
|
|
14
|
+
- OpenAPI metadata changes
|
|
15
|
+
- relation or DTO inference changes that affect API shape
|
|
16
|
+
|
|
17
|
+
## Step 1: Update the backend contract at the correct layer
|
|
18
|
+
|
|
19
|
+
Inspect which backend layer actually owns the change:
|
|
20
|
+
|
|
21
|
+
- controller
|
|
22
|
+
- dto
|
|
23
|
+
- entity
|
|
24
|
+
- validation rule
|
|
25
|
+
- inferred DTO path
|
|
26
|
+
- OpenAPI configuration
|
|
27
|
+
|
|
28
|
+
Relevant docs:
|
|
29
|
+
|
|
30
|
+
- [Validation Guide](/backend/validation-guide)
|
|
31
|
+
- [OpenAPI Guide](/backend/openapi-guide)
|
|
32
|
+
- [DTO Guide](/backend/dto-guide)
|
|
33
|
+
- [DTO Infer and Generation](/backend/dto-infer-generation)
|
|
34
|
+
|
|
35
|
+
## Step 2: Verify the backend contract output
|
|
36
|
+
|
|
37
|
+
Before touching the frontend, verify that the backend-side contract change is really reflected in the generated OpenAPI output.
|
|
38
|
+
|
|
39
|
+
That may include:
|
|
40
|
+
|
|
41
|
+
- rebuilding or running the backend
|
|
42
|
+
- checking Swagger / OpenAPI JSON
|
|
43
|
+
- confirming the contract shape matches intent
|
|
44
|
+
|
|
45
|
+
## Step 3: Detect the edition and frontend target
|
|
46
|
+
|
|
47
|
+
Before regenerating frontend artifacts:
|
|
48
|
+
|
|
49
|
+
1. detect Basic vs Start
|
|
50
|
+
2. verify the relevant frontend flavor
|
|
51
|
+
3. confirm whether the change affects Admin, Web, or both
|
|
52
|
+
|
|
53
|
+
## Step 4: Regenerate the frontend-side contract artifacts
|
|
54
|
+
|
|
55
|
+
Use the Zova OpenAPI and REST-generation path rather than manually updating request code first.
|
|
56
|
+
|
|
57
|
+
Representative commands may include:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm run zova :openapi:generate ...
|
|
61
|
+
cd zova && npm run build:rest:cabloyBasicAdmin
|
|
62
|
+
cd zova && npm run build:rest:cabloyBasicWeb
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For Start, use the Start-specific flavor paths from that repo.
|
|
66
|
+
|
|
67
|
+
## Step 5: Inspect affected frontend layers
|
|
68
|
+
|
|
69
|
+
After regeneration, inspect which frontend layers need follow-up changes:
|
|
70
|
+
|
|
71
|
+
- API services
|
|
72
|
+
- generated SDK
|
|
73
|
+
- model-managed data access
|
|
74
|
+
- schema-driven UI
|
|
75
|
+
- page or component assumptions
|
|
76
|
+
|
|
77
|
+
## Step 6: Verify the end-to-end loop
|
|
78
|
+
|
|
79
|
+
Use a verification path that checks both sides:
|
|
80
|
+
|
|
81
|
+
- backend contract correctness
|
|
82
|
+
- regenerated frontend artifacts
|
|
83
|
+
- typecheck/build for the affected frontend edition or flavor
|
|
84
|
+
|
|
85
|
+
## AI rule of thumb
|
|
86
|
+
|
|
87
|
+
A good fullstack contract update workflow is usually:
|
|
88
|
+
|
|
89
|
+
1. change backend contract
|
|
90
|
+
2. verify OpenAPI output
|
|
91
|
+
3. detect edition and target flavor
|
|
92
|
+
4. regenerate frontend contract artifacts
|
|
93
|
+
5. inspect downstream breakage
|
|
94
|
+
6. verify end to end
|
|
95
|
+
|
|
96
|
+
Not:
|
|
97
|
+
|
|
98
|
+
1. change backend DTO
|
|
99
|
+
2. hand-edit a few frontend request types
|
|
100
|
+
3. leave the contract loop out of sync
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Playbook: Add a Frontend Page
|
|
2
|
+
|
|
3
|
+
This playbook turns the Zova frontend docs into a repeatable AI-friendly workflow.
|
|
4
|
+
|
|
5
|
+
## When to use this playbook
|
|
6
|
+
|
|
7
|
+
Use this playbook when the goal is to add or extend a frontend page, especially when the work may involve:
|
|
8
|
+
|
|
9
|
+
- page creation
|
|
10
|
+
- route and params/query setup
|
|
11
|
+
- component integration
|
|
12
|
+
- model or API integration
|
|
13
|
+
- edition-sensitive UI assumptions
|
|
14
|
+
|
|
15
|
+
## Step 1: Detect the edition first
|
|
16
|
+
|
|
17
|
+
Before generating or editing anything:
|
|
18
|
+
|
|
19
|
+
1. check `__CABLOY_BASIC__` or `__CABLOY_START__`
|
|
20
|
+
2. confirm the active frontend flavor assumptions
|
|
21
|
+
3. inspect root `package.json` and `npm run zova`
|
|
22
|
+
|
|
23
|
+
This matters because frontend examples can differ between Basic and Start.
|
|
24
|
+
|
|
25
|
+
## Step 2: Use the page generator first
|
|
26
|
+
|
|
27
|
+
Start from the Zova generator instead of creating the page structure manually.
|
|
28
|
+
|
|
29
|
+
Representative command:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm run zova :create:page ...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Step 3: Add page capabilities with refactor commands
|
|
36
|
+
|
|
37
|
+
If the page needs additional framework features, prefer the dedicated refactor commands.
|
|
38
|
+
|
|
39
|
+
Representative examples:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run zova :refactor:pageQuery ...
|
|
43
|
+
npm run zova :refactor:pageParams ...
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
That is better than manually recreating the framework structure because the refactor commands preserve Zova conventions.
|
|
47
|
+
|
|
48
|
+
## Step 4: Connect data and components the Zova way
|
|
49
|
+
|
|
50
|
+
Depending on the page, extend it through the right abstraction layer:
|
|
51
|
+
|
|
52
|
+
- API service
|
|
53
|
+
- model-managed remote state
|
|
54
|
+
- component wrappers
|
|
55
|
+
- SSR init data
|
|
56
|
+
- navigation guards or route metadata
|
|
57
|
+
|
|
58
|
+
Relevant docs:
|
|
59
|
+
|
|
60
|
+
- [Page Guide](/frontend/page-guide)
|
|
61
|
+
- [Page Query Guide](/frontend/page-query-guide)
|
|
62
|
+
- [Page Params Guide](/frontend/page-params-guide)
|
|
63
|
+
- [API Guide](/frontend/api-guide)
|
|
64
|
+
- [Model State Guide](/frontend/model-state-guide)
|
|
65
|
+
- [SSR Init Data](/frontend/ssr-init-data)
|
|
66
|
+
|
|
67
|
+
## Step 5: Regenerate metadata when needed
|
|
68
|
+
|
|
69
|
+
If the page changes affect route structure or typed metadata, regenerate the relevant metadata through the Zova tool path.
|
|
70
|
+
|
|
71
|
+
Representative command family:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run zova :tools:metadata ...
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Step 6: Verify the active edition workflow
|
|
78
|
+
|
|
79
|
+
Use the right verification path for the active repo and flavor.
|
|
80
|
+
|
|
81
|
+
Typical checks include:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm run tsc
|
|
85
|
+
npm run build:zova
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
And if needed, the relevant `zova/` flavor-specific build or REST generation paths.
|
|
89
|
+
|
|
90
|
+
## AI rule of thumb
|
|
91
|
+
|
|
92
|
+
A good AI frontend-page workflow in Cabloy is usually:
|
|
93
|
+
|
|
94
|
+
1. detect edition
|
|
95
|
+
2. choose generator or refactor command
|
|
96
|
+
3. generate or transform
|
|
97
|
+
4. connect API/model/SSR pieces
|
|
98
|
+
5. regenerate metadata if needed
|
|
99
|
+
6. verify
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Playbook: Metadata Refresh Workflow
|
|
2
|
+
|
|
3
|
+
This playbook documents when and how Cabloy contributors and AI systems should refresh generated metadata.
|
|
4
|
+
|
|
5
|
+
## Why this workflow matters
|
|
6
|
+
|
|
7
|
+
In Cabloy, some framework behavior depends on generated metadata rather than only handwritten source files.
|
|
8
|
+
|
|
9
|
+
That means certain structural changes are incomplete until metadata is regenerated.
|
|
10
|
+
|
|
11
|
+
## Common triggers
|
|
12
|
+
|
|
13
|
+
Typical triggers include:
|
|
14
|
+
|
|
15
|
+
- route changes
|
|
16
|
+
- page params/query structure changes
|
|
17
|
+
- component wrapper-related changes
|
|
18
|
+
- icon additions or module-level icon changes
|
|
19
|
+
- relation or type-surface changes that affect typed framework artifacts
|
|
20
|
+
|
|
21
|
+
## Step 1: Recognize that the change is structural
|
|
22
|
+
|
|
23
|
+
Before editing more code, ask whether the change affects framework-generated structure rather than only business logic.
|
|
24
|
+
|
|
25
|
+
This is the key AI checkpoint.
|
|
26
|
+
|
|
27
|
+
## Step 2: Choose the right metadata generation path
|
|
28
|
+
|
|
29
|
+
For frontend-side metadata work, the common path is the Zova tools family.
|
|
30
|
+
|
|
31
|
+
Representative command family:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm run zova :tools:metadata ...
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
For icon changes or other generation-sensitive areas, the metadata refresh may be part of the same broader workflow.
|
|
38
|
+
|
|
39
|
+
## Step 3: Detect edition before verifying downstream effects
|
|
40
|
+
|
|
41
|
+
If the generated metadata influences frontend build or runtime behavior, detect whether the active repo is Basic or Start before choosing verification examples.
|
|
42
|
+
|
|
43
|
+
## Step 4: Re-run the dependent workflow
|
|
44
|
+
|
|
45
|
+
After metadata regeneration, re-run the relevant dependent flow, such as:
|
|
46
|
+
|
|
47
|
+
- typecheck
|
|
48
|
+
- page route verification
|
|
49
|
+
- component usage verification
|
|
50
|
+
- icon usage verification
|
|
51
|
+
- frontend build or REST generation
|
|
52
|
+
|
|
53
|
+
## Step 5: Treat metadata generation as part of the change, not cleanup
|
|
54
|
+
|
|
55
|
+
Metadata regeneration should not be treated as an optional final polish step.
|
|
56
|
+
|
|
57
|
+
In Cabloy it is often part of the actual correctness path.
|
|
58
|
+
|
|
59
|
+
## AI rule of thumb
|
|
60
|
+
|
|
61
|
+
If a change alters framework structure, ask immediately:
|
|
62
|
+
|
|
63
|
+
- does metadata need regeneration?
|
|
64
|
+
- which command family owns that regeneration?
|
|
65
|
+
- what downstream build or typecheck should confirm it worked?
|
|
66
|
+
|
|
67
|
+
That prevents a large class of false-positive “done” states.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Repo Guidance for Agents
|
|
2
|
+
|
|
3
|
+
When an AI agent works in Cabloy, it should navigate the repo with deliberate layers of trust.
|
|
4
|
+
|
|
5
|
+
## 1. Start from the root
|
|
6
|
+
|
|
7
|
+
Check the root repository signals first:
|
|
8
|
+
|
|
9
|
+
- `package.json`
|
|
10
|
+
- edition marker files such as `__CABLOY_BASIC__` or `__CABLOY_START__`
|
|
11
|
+
- `.docs-internal/README.md`
|
|
12
|
+
- root `.claude/` assets
|
|
13
|
+
|
|
14
|
+
These files tell the agent which repo it is in, which scripts are canonical, and where public versus internal documentation belongs.
|
|
15
|
+
|
|
16
|
+
## 2. Prefer framework entrypoints over scattered examples
|
|
17
|
+
|
|
18
|
+
For backend workflows:
|
|
19
|
+
|
|
20
|
+
- start from `npm run vona`
|
|
21
|
+
- inspect Vona CLI command families
|
|
22
|
+
|
|
23
|
+
For frontend workflows:
|
|
24
|
+
|
|
25
|
+
- start from `npm run zova`
|
|
26
|
+
- inspect Zova CLI command families
|
|
27
|
+
|
|
28
|
+
This is more reliable than copying old file structures from examples without understanding the command surface that created them.
|
|
29
|
+
|
|
30
|
+
## 3. Use docs and internal notes for different purposes
|
|
31
|
+
|
|
32
|
+
- use `cabloy-docs/` to explain how people and agents should work
|
|
33
|
+
- use `.docs-internal/` to explain why maintainers designed the repo a certain way
|
|
34
|
+
|
|
35
|
+
## 4. Treat edition detection as mandatory for UI-sensitive work
|
|
36
|
+
|
|
37
|
+
Edition detection is especially important when the work touches:
|
|
38
|
+
|
|
39
|
+
- page creation
|
|
40
|
+
- component generation
|
|
41
|
+
- UI library usage
|
|
42
|
+
- frontend flavor scripts
|
|
43
|
+
- edition-specific modules or assets
|
|
44
|
+
|
|
45
|
+
## 5. Use the right lookup surface before searching broadly
|
|
46
|
+
|
|
47
|
+
For backend lookup work, choose the surface before choosing the files:
|
|
48
|
+
|
|
49
|
+
- if code references `this.bean.xxx`, `ctx.bean.xxx`, or `app.bean.xxx`, start from `IBeanRecordGlobal` and module `src/.metadata/index.ts`
|
|
50
|
+
- if code references a full bean name, inspect `IBeanRecordGeneral`
|
|
51
|
+
- if the target is a runtime-anchor or selector/class-token service, inspect `src/service` and service metadata
|
|
52
|
+
- if the target is only a helper or superclass chain, inspect `src/lib`
|
|
53
|
+
|
|
54
|
+
This reduces wasted search and keeps bean lookup aligned with class placement.
|
|
55
|
+
|
|
56
|
+
## 6. Verify before claiming success
|
|
57
|
+
|
|
58
|
+
Whenever a workflow recommendation is made, verify it against current scripts or command definitions before presenting it as guidance.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Rules and Config
|
|
2
|
+
|
|
3
|
+
Cabloy’s AI behavior should be organized into a few clear layers instead of one oversized instruction file.
|
|
4
|
+
|
|
5
|
+
## Root `CLAUDE.md`
|
|
6
|
+
|
|
7
|
+
Use the root `CLAUDE.md` for concise, durable operational guidance such as:
|
|
8
|
+
|
|
9
|
+
- how the monorepo is organized
|
|
10
|
+
- where public docs live
|
|
11
|
+
- where internal docs live
|
|
12
|
+
- which command entrypoints are preferred
|
|
13
|
+
- why edition detection is mandatory before UI-sensitive guidance
|
|
14
|
+
|
|
15
|
+
## `.claude/commands/`
|
|
16
|
+
|
|
17
|
+
Use commands for reusable operator workflows that are naturally invoked as a named action, such as release or future docs migration helpers.
|
|
18
|
+
|
|
19
|
+
## `.claude/skills/`
|
|
20
|
+
|
|
21
|
+
Use skills for workflows that need more procedural context, bundled references, or iterative selection logic.
|
|
22
|
+
|
|
23
|
+
## `settings.json` and `settings.local.json`
|
|
24
|
+
|
|
25
|
+
Use Claude settings for permissions and execution environment, not as the primary place to explain framework concepts.
|
|
26
|
+
|
|
27
|
+
## Documentation boundary
|
|
28
|
+
|
|
29
|
+
If a rule is important for people and agents to understand, it probably belongs in public docs too. If it explains internal rationale rather than user-facing workflow, it belongs in `.docs-internal/`.
|