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,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cabloy-backend-scaffold
|
|
3
|
+
description: Use this skill whenever the user wants the Vona backend path in this Cabloy repo: scaffold or extend modules, beans, controllers, services, models, entities, DTOs, CRUD resources, migrations, indexes, validation, OpenAPI-facing backend files, or backend tests. Trigger for questions about which npm run vona generator or CRUD command to use and what backend follow-up is required after generation, especially when the user mentions create:bean, CRUD, meta.version, field indexes, DTOs, or tests. Prefer it for backend-first requests, even if they may later require frontend contract regeneration. Do not use it for frontend-first Zova work or stale generated consumer diagnosis.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cabloy Backend Scaffold
|
|
7
|
+
|
|
8
|
+
Use this skill when the user wants to add or extend a Vona backend feature thread.
|
|
9
|
+
|
|
10
|
+
## Goals
|
|
11
|
+
|
|
12
|
+
1. detect whether the active repository is Cabloy Basic or Cabloy Start
|
|
13
|
+
2. stay backend-first unless the request clearly becomes a larger fullstack workflow
|
|
14
|
+
3. prefer Vona CLI generation and CRUD tools over manual scaffolding
|
|
15
|
+
4. always perform a backend follow-up review so migration, field indexes, DTO/OpenAPI contracts, and tests are not forgotten
|
|
16
|
+
5. add a frontend-contract reminder only when the backend change likely affects OpenAPI consumers or generated SDK flows
|
|
17
|
+
6. finish with verification guidance that matches the scope of the change
|
|
18
|
+
|
|
19
|
+
## Step 1: Detect repo and task scope
|
|
20
|
+
|
|
21
|
+
Check the repository root for these marker files:
|
|
22
|
+
|
|
23
|
+
- `__CABLOY_BASIC__`
|
|
24
|
+
- `__CABLOY_START__`
|
|
25
|
+
|
|
26
|
+
Interpretation:
|
|
27
|
+
|
|
28
|
+
- `__CABLOY_BASIC__` present → this is Cabloy Basic
|
|
29
|
+
- `__CABLOY_START__` present → this is Cabloy Start
|
|
30
|
+
- neither present → inspect nearby scripts and ask before making edition-specific assumptions
|
|
31
|
+
|
|
32
|
+
Then classify the request:
|
|
33
|
+
|
|
34
|
+
- **backend-only** if the task is about Vona modules, beans, models, entities, DTOs, CRUD, migration, tests, or backend contracts
|
|
35
|
+
- **fullstack** only if the task clearly requires frontend SDK regeneration, frontend page/component work, or a broader cross-stack contract loop
|
|
36
|
+
|
|
37
|
+
Default to backend-first. Only escalate mentally to a broader fullstack workflow when the backend change obviously crosses the contract boundary.
|
|
38
|
+
|
|
39
|
+
If the task is really a broad cross-stack workflow, consider whether the root `cabloy-workflow` skill is the better primary router.
|
|
40
|
+
|
|
41
|
+
## Step 2: Start from Vona CLI and repo entrypoints
|
|
42
|
+
|
|
43
|
+
Inspect these surfaces before proposing implementation:
|
|
44
|
+
|
|
45
|
+
- the repository or workspace `package.json` that owns the scripts
|
|
46
|
+
- `npm run vona`
|
|
47
|
+
- Vona command families such as `create:*`, `init:*`, `tools:*`, and `bin:*`
|
|
48
|
+
- `cabloy-docs/backend/` for the relevant backend thread
|
|
49
|
+
|
|
50
|
+
For deeper reference material, read:
|
|
51
|
+
|
|
52
|
+
- `references/backend-thread-map.md`
|
|
53
|
+
- `references/follow-up-checklist.md`
|
|
54
|
+
|
|
55
|
+
## Step 3: Choose the correct scaffolding path
|
|
56
|
+
|
|
57
|
+
### Path A: create one backend bean or module piece
|
|
58
|
+
|
|
59
|
+
Use `create:*` when the user needs one structural piece such as:
|
|
60
|
+
|
|
61
|
+
- module
|
|
62
|
+
- bean
|
|
63
|
+
- controller
|
|
64
|
+
- service
|
|
65
|
+
- model
|
|
66
|
+
- entity
|
|
67
|
+
- dto
|
|
68
|
+
- test
|
|
69
|
+
|
|
70
|
+
Typical examples:
|
|
71
|
+
|
|
72
|
+
- `npm run vona :create:module ...`
|
|
73
|
+
- `npm run vona :create:bean controller ...`
|
|
74
|
+
- `npm run vona :create:bean dto ...`
|
|
75
|
+
- `npm run vona :create:test ...`
|
|
76
|
+
|
|
77
|
+
### Path B: create a full CRUD thread
|
|
78
|
+
|
|
79
|
+
Use `tools:*` when the user needs a whole backend thread rather than one isolated file.
|
|
80
|
+
|
|
81
|
+
Typical example:
|
|
82
|
+
|
|
83
|
+
- `npm run vona :tools:crud ...`
|
|
84
|
+
|
|
85
|
+
Choose this path when the user asks for a CRUD feature, an admin-style backend resource thread, or a connected set of controller/service/model/entity/dto/test files.
|
|
86
|
+
|
|
87
|
+
### Path C: initialize supporting module resources
|
|
88
|
+
|
|
89
|
+
Use `init:*` when the task is really about module support files rather than business logic itself.
|
|
90
|
+
|
|
91
|
+
Typical areas include:
|
|
92
|
+
|
|
93
|
+
- config
|
|
94
|
+
- locale
|
|
95
|
+
- constant
|
|
96
|
+
- asset
|
|
97
|
+
- types
|
|
98
|
+
|
|
99
|
+
## Step 4: Inspect the generated backend thread
|
|
100
|
+
|
|
101
|
+
After generation, inspect what the CLI created and keep it as the baseline.
|
|
102
|
+
|
|
103
|
+
Typical backend thread pieces include:
|
|
104
|
+
|
|
105
|
+
- controller
|
|
106
|
+
- service
|
|
107
|
+
- model
|
|
108
|
+
- entity
|
|
109
|
+
- dto
|
|
110
|
+
- migration/meta files
|
|
111
|
+
- locale files
|
|
112
|
+
- tests
|
|
113
|
+
|
|
114
|
+
Do not throw away the generated structure and rewrite it from scratch unless the generator clearly does not match the task.
|
|
115
|
+
|
|
116
|
+
## Step 5: Apply backend follow-up logic deliberately
|
|
117
|
+
|
|
118
|
+
Backend scaffolding is rarely complete after file generation alone. Treat this follow-up review as mandatory.
|
|
119
|
+
|
|
120
|
+
Check which of these concerns apply:
|
|
121
|
+
|
|
122
|
+
### Contract and validation
|
|
123
|
+
|
|
124
|
+
Check whether the feature needs:
|
|
125
|
+
|
|
126
|
+
- request validation
|
|
127
|
+
- DTO design
|
|
128
|
+
- OpenAPI metadata
|
|
129
|
+
- inferred DTO generation
|
|
130
|
+
|
|
131
|
+
### Persistence and schema lifecycle
|
|
132
|
+
|
|
133
|
+
Check whether the feature needs:
|
|
134
|
+
|
|
135
|
+
- migration/version updates
|
|
136
|
+
- `meta.version`
|
|
137
|
+
- field indexes
|
|
138
|
+
- relation definitions
|
|
139
|
+
- datasource or cache considerations
|
|
140
|
+
|
|
141
|
+
### Verification
|
|
142
|
+
|
|
143
|
+
Check whether the feature needs:
|
|
144
|
+
|
|
145
|
+
- unit tests
|
|
146
|
+
- `db:reset` or migration verification
|
|
147
|
+
- controller action testing
|
|
148
|
+
- broader `test` / `tsc` / `build` checks
|
|
149
|
+
|
|
150
|
+
### Optional frontend-contract reminder
|
|
151
|
+
|
|
152
|
+
Stay backend-first, but if the backend change likely affects frontend contract consumers, add a reminder such as:
|
|
153
|
+
|
|
154
|
+
- OpenAPI output may have changed
|
|
155
|
+
- frontend SDK or schema-driven layers may need regeneration
|
|
156
|
+
- the active edition and frontend flavor may matter for the regeneration path
|
|
157
|
+
|
|
158
|
+
Do not turn the skill into a full frontend workflow. Only surface the reminder when the contract boundary is clearly involved.
|
|
159
|
+
|
|
160
|
+
## Step 6: Use docs to avoid missing layers
|
|
161
|
+
|
|
162
|
+
Use the docs to decide what the generated backend thread still needs.
|
|
163
|
+
|
|
164
|
+
Especially relevant pages include:
|
|
165
|
+
|
|
166
|
+
- `cabloy-docs/backend/controller-guide.md`
|
|
167
|
+
- `cabloy-docs/backend/service-guide.md`
|
|
168
|
+
- `cabloy-docs/backend/model-guide.md`
|
|
169
|
+
- `cabloy-docs/backend/entity-guide.md`
|
|
170
|
+
- `cabloy-docs/backend/dto-guide.md`
|
|
171
|
+
- `cabloy-docs/backend/crud-workflow.md`
|
|
172
|
+
- `cabloy-docs/backend/migration-and-changes.md`
|
|
173
|
+
- `cabloy-docs/backend/field-indexes.md`
|
|
174
|
+
- `cabloy-docs/backend/unit-testing.md`
|
|
175
|
+
- `cabloy-docs/backend/validation-guide.md`
|
|
176
|
+
- `cabloy-docs/backend/openapi-guide.md`
|
|
177
|
+
- `cabloy-docs/backend/dto-infer-generation.md`
|
|
178
|
+
|
|
179
|
+
## Step 7: Verification guidance
|
|
180
|
+
|
|
181
|
+
Always end with a verification path that matches the scope of the backend change.
|
|
182
|
+
|
|
183
|
+
Typical shared checks include:
|
|
184
|
+
|
|
185
|
+
- `npm run test`
|
|
186
|
+
- `npm run tsc`
|
|
187
|
+
- `npm run build`
|
|
188
|
+
|
|
189
|
+
Narrower checks may include:
|
|
190
|
+
|
|
191
|
+
- module test updates
|
|
192
|
+
- route/controller action verification
|
|
193
|
+
- migration reset flow
|
|
194
|
+
- CRUD workflow test coverage
|
|
195
|
+
|
|
196
|
+
## Response pattern
|
|
197
|
+
|
|
198
|
+
When helpful, structure the response around these points:
|
|
199
|
+
|
|
200
|
+
1. detected edition
|
|
201
|
+
2. backend-first or clearly fullstack-sensitive classification
|
|
202
|
+
3. recommended Vona CLI path
|
|
203
|
+
4. required backend follow-up layers to check
|
|
204
|
+
5. optional frontend-contract reminder if applicable
|
|
205
|
+
6. verification steps
|
|
206
|
+
|
|
207
|
+
Keep the response practical. The value of this skill is turning Cabloy backend requests into the right generation + refinement + verification workflow, not writing more prose than necessary.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "cabloy-backend-scaffold",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 11,
|
|
6
|
+
"prompt": "I want to add an invoice backend feature in Cabloy. Please do not give me a generic architecture essay — tell me exactly whether I should start with create:bean commands or the CRUD generator, and what backend layers are mandatory to review after generation.",
|
|
7
|
+
"expected_output": "Must explicitly choose the CRUD generator or the precise Vona generator path first, must state that backend follow-up review is mandatory, and must mention at least migration/version plus DTO/OpenAPI or tests.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 12,
|
|
12
|
+
"prompt": "I already changed a Vona DTO and controller response for an admin endpoint. I am not asking for frontend implementation help yet. Give me backend-first closure guidance and only mention frontend if it is truly just a contract reminder.",
|
|
13
|
+
"expected_output": "Must remain backend-first, must not turn into a full frontend workflow, must include backend contract checks, and any frontend mention must be clearly framed as a limited reminder only.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 13,
|
|
18
|
+
"prompt": "I need to add order settlement in Cabloy Start. I care about the Vona backend thread first. Please tell me the exact generation path and the non-optional backend follow-up checklist after scaffolding.",
|
|
19
|
+
"expected_output": "Must detect Start-sensitivity, still lead with the Vona backend generation path, and explicitly frame migration/index/DTO/OpenAPI/tests as non-optional backend review items.",
|
|
20
|
+
"files": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 14,
|
|
24
|
+
"prompt": "I changed a model relation and some entity fields in Cabloy Basic. Before you tell me anything else, I want the Cabloy backend done-checklist, not a broad explanation of ORM theory.",
|
|
25
|
+
"expected_output": "Must give a concrete backend completion checklist, must include relation-aware follow-up and metadata or migration review, and must stay practical rather than drifting into generic ORM explanation.",
|
|
26
|
+
"files": []
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Backend Thread Map
|
|
2
|
+
|
|
3
|
+
Use this reference when a backend request needs to be turned into the right Vona thread.
|
|
4
|
+
|
|
5
|
+
## Common request -> likely thread
|
|
6
|
+
|
|
7
|
+
### “Add a controller action”
|
|
8
|
+
|
|
9
|
+
Usually means:
|
|
10
|
+
|
|
11
|
+
- controller update
|
|
12
|
+
- service update
|
|
13
|
+
- DTO and validation check
|
|
14
|
+
- OpenAPI contract check
|
|
15
|
+
- test update
|
|
16
|
+
|
|
17
|
+
### “Add a new backend resource”
|
|
18
|
+
|
|
19
|
+
Usually means:
|
|
20
|
+
|
|
21
|
+
- controller
|
|
22
|
+
- service
|
|
23
|
+
- model
|
|
24
|
+
- entity
|
|
25
|
+
- dto
|
|
26
|
+
- migration/version
|
|
27
|
+
- test
|
|
28
|
+
|
|
29
|
+
Consider whether `npm run vona :tools:crud ...` is a better fit than piecemeal creation.
|
|
30
|
+
|
|
31
|
+
### “Add a model or entity change”
|
|
32
|
+
|
|
33
|
+
Usually means:
|
|
34
|
+
|
|
35
|
+
- model/entity update
|
|
36
|
+
- migration/version update
|
|
37
|
+
- possibly field indexes
|
|
38
|
+
- possibly DTO/OpenAPI changes
|
|
39
|
+
- possibly cache or relation review
|
|
40
|
+
|
|
41
|
+
### “Just add a DTO”
|
|
42
|
+
|
|
43
|
+
Usually means:
|
|
44
|
+
|
|
45
|
+
- DTO creation or inference decision
|
|
46
|
+
- validation rule alignment
|
|
47
|
+
- OpenAPI contract alignment
|
|
48
|
+
- controller/service usage updates
|
|
49
|
+
|
|
50
|
+
## Generation-first rule
|
|
51
|
+
|
|
52
|
+
If a Vona generator exists for the thread, use it first and refine second.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Follow-up Checklist
|
|
2
|
+
|
|
3
|
+
After generating or extending a backend thread, check which follow-up layers apply.
|
|
4
|
+
|
|
5
|
+
## Structural follow-up
|
|
6
|
+
|
|
7
|
+
- controller path and action shape
|
|
8
|
+
- service ownership of business logic
|
|
9
|
+
- model/entity pairing
|
|
10
|
+
- DTO design
|
|
11
|
+
|
|
12
|
+
## Contract follow-up
|
|
13
|
+
|
|
14
|
+
- validation rules
|
|
15
|
+
- OpenAPI metadata
|
|
16
|
+
- inferred DTO opportunities
|
|
17
|
+
- frontend contract impact
|
|
18
|
+
|
|
19
|
+
## Persistence follow-up
|
|
20
|
+
|
|
21
|
+
- migration/version changes
|
|
22
|
+
- `meta.version`
|
|
23
|
+
- field indexes
|
|
24
|
+
- relations
|
|
25
|
+
- datasource choice
|
|
26
|
+
- cache behavior
|
|
27
|
+
- transaction behavior
|
|
28
|
+
|
|
29
|
+
## Verification follow-up
|
|
30
|
+
|
|
31
|
+
- unit tests
|
|
32
|
+
- `db:reset` or migration verification
|
|
33
|
+
- `npm run test`
|
|
34
|
+
- `npm run tsc`
|
|
35
|
+
- `npm run build`
|
|
36
|
+
|
|
37
|
+
## Escalation rule
|
|
38
|
+
|
|
39
|
+
If the request clearly affects frontend SDK, schema, or page logic too, hand off mentally to a fullstack workflow instead of pretending it is backend-only.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cabloy-contract-loop
|
|
3
|
+
description: Use this skill whenever a Cabloy task crosses the Vona-to-Zova contract boundary: backend DTO, controller, validation, entity, inferred DTO, or OpenAPI changes that should drive SDK, schema, api, model, or rest-output regeneration, or stale generated frontend consumers that may be out of sync with backend truth. Trigger for requests about stale home-api output, OpenAPI regeneration, whether to regenerate instead of hand-patching types, or how to verify the Cabloy Basic or Cabloy Start contract loop end to end. Prefer it when the main problem is backend/frontend sync or diagnosis, not initial backend scaffolding or frontend page/component scaffolding.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cabloy Contract Loop
|
|
7
|
+
|
|
8
|
+
Use this skill when a backend contract change needs to be reflected in frontend consumers, or when frontend consumers appear stale and you need to diagnose whether the backend contract loop is the real source of drift.
|
|
9
|
+
|
|
10
|
+
## Goals
|
|
11
|
+
|
|
12
|
+
1. detect whether the active repository is Cabloy Basic or Cabloy Start
|
|
13
|
+
2. classify whether the task truly crosses the backend/frontend contract boundary
|
|
14
|
+
3. support both forward contract changes and reverse stale-consumer detection
|
|
15
|
+
4. keep the workflow contract-first instead of hand-patching generated frontend types or services
|
|
16
|
+
5. prefer CLI-first regeneration paths on both Vona and Zova sides
|
|
17
|
+
6. finish with end-to-end verification guidance that checks both contract production and consumption
|
|
18
|
+
|
|
19
|
+
## Step 1: Detect repo and contract scope
|
|
20
|
+
|
|
21
|
+
Check the repository root for these marker files:
|
|
22
|
+
|
|
23
|
+
- `__CABLOY_BASIC__`
|
|
24
|
+
- `__CABLOY_START__`
|
|
25
|
+
|
|
26
|
+
Interpretation:
|
|
27
|
+
|
|
28
|
+
- `__CABLOY_BASIC__` present → this is Cabloy Basic
|
|
29
|
+
- `__CABLOY_START__` present → this is Cabloy Start
|
|
30
|
+
- neither present → inspect nearby scripts and ask before making edition-specific assumptions
|
|
31
|
+
|
|
32
|
+
Then classify whether the task is really a contract-loop task.
|
|
33
|
+
|
|
34
|
+
Use this skill in two common entry modes.
|
|
35
|
+
|
|
36
|
+
### Mode A: forward contract change
|
|
37
|
+
|
|
38
|
+
The user already changed or plans to change backend contract surfaces such as:
|
|
39
|
+
|
|
40
|
+
- controller request or response shape
|
|
41
|
+
- DTO shape
|
|
42
|
+
- entity field shape that feeds API-facing contracts
|
|
43
|
+
- validation rules
|
|
44
|
+
- OpenAPI metadata
|
|
45
|
+
- inferred DTO or ORM DTO output that affects API consumers
|
|
46
|
+
|
|
47
|
+
### Mode B: reverse stale-consumer detection
|
|
48
|
+
|
|
49
|
+
The user reports symptoms on the frontend side such as:
|
|
50
|
+
|
|
51
|
+
- stale SDK types
|
|
52
|
+
- stale schema-driven UI behavior
|
|
53
|
+
- API/model consumers no longer matching backend reality
|
|
54
|
+
- hand-patched frontend types that seem to drift from backend truth
|
|
55
|
+
|
|
56
|
+
In this mode, first diagnose whether the frontend is stale because the backend contract changed and the regeneration loop was skipped.
|
|
57
|
+
|
|
58
|
+
If the task is only backend scaffolding or only frontend scaffolding, the more specialized scaffold skills may be the better primary choice.
|
|
59
|
+
|
|
60
|
+
## Step 2: Start from the contract source of truth
|
|
61
|
+
|
|
62
|
+
Inspect these surfaces before proposing workflow:
|
|
63
|
+
|
|
64
|
+
- the repository or workspace `package.json` that owns the scripts
|
|
65
|
+
- backend contract-defining code in Vona
|
|
66
|
+
- `npm run zova`
|
|
67
|
+
- frontend generation or consumption path in Zova
|
|
68
|
+
- relevant docs in `cabloy-docs/fullstack/`, `cabloy-docs/backend/`, and `cabloy-docs/frontend/`
|
|
69
|
+
|
|
70
|
+
For deeper reference material, read:
|
|
71
|
+
|
|
72
|
+
- `references/contract-loop-map.md`
|
|
73
|
+
- `references/verification-checklist.md`
|
|
74
|
+
|
|
75
|
+
## Step 3: Identify the contract source of truth deliberately
|
|
76
|
+
|
|
77
|
+
In Cabloy, the backend is often the source of truth for the contract. Treat that as the default unless the codebase clearly shows a generated or schema-owned frontend artifact that should be regenerated from backend output.
|
|
78
|
+
|
|
79
|
+
### If this is a forward change
|
|
80
|
+
|
|
81
|
+
Start with the backend side and update the contract deliberately.
|
|
82
|
+
|
|
83
|
+
Typical backend layers to inspect or change include:
|
|
84
|
+
|
|
85
|
+
- controller action signatures and annotations
|
|
86
|
+
- DTO classes
|
|
87
|
+
- entity field metadata
|
|
88
|
+
- validation rules and `v` helpers
|
|
89
|
+
- inferred DTO generation paths
|
|
90
|
+
- OpenAPI configuration or metadata annotations
|
|
91
|
+
|
|
92
|
+
The key rule is:
|
|
93
|
+
|
|
94
|
+
- do **not** patch frontend consumers first if the backend contract is the real source of truth
|
|
95
|
+
|
|
96
|
+
### If this is reverse stale-consumer detection
|
|
97
|
+
|
|
98
|
+
Do not assume the frontend is the right place to fix the problem.
|
|
99
|
+
|
|
100
|
+
Instead:
|
|
101
|
+
|
|
102
|
+
1. inspect what frontend artifact looks stale
|
|
103
|
+
2. identify whether that artifact is generated, schema-driven, or hand-authored
|
|
104
|
+
3. inspect the backend contract source that should feed it
|
|
105
|
+
4. only then decide whether the fix is regeneration, backend correction, or a genuine frontend bug
|
|
106
|
+
|
|
107
|
+
## Step 4: Verify backend contract output before touching frontend consumers
|
|
108
|
+
|
|
109
|
+
Before regenerating frontend artifacts, confirm the backend-side contract is actually correct.
|
|
110
|
+
|
|
111
|
+
That may include:
|
|
112
|
+
|
|
113
|
+
- reviewing controller return contracts
|
|
114
|
+
- confirming DTO and validation alignment
|
|
115
|
+
- checking Swagger/OpenAPI output
|
|
116
|
+
- confirming that the changed endpoint or schema now reflects the intended contract
|
|
117
|
+
|
|
118
|
+
If the backend contract output is wrong, frontend regeneration will only spread the mistake.
|
|
119
|
+
|
|
120
|
+
## Step 5: Choose the right frontend regeneration path
|
|
121
|
+
|
|
122
|
+
Once the backend contract is correct, decide how the frontend should consume it.
|
|
123
|
+
|
|
124
|
+
### Path A: OpenAPI / SDK regeneration
|
|
125
|
+
|
|
126
|
+
Use this when the frontend consumes generated API contracts.
|
|
127
|
+
|
|
128
|
+
Typical Zova commands include:
|
|
129
|
+
|
|
130
|
+
- `npm run zova :openapi:config ...`
|
|
131
|
+
- `npm run zova :openapi:generate ...`
|
|
132
|
+
|
|
133
|
+
### Path B: REST/type generation by flavor
|
|
134
|
+
|
|
135
|
+
Use the edition-specific Zova REST/type build path when the workflow depends on the built flavor outputs.
|
|
136
|
+
|
|
137
|
+
Typical examples in Cabloy Basic include:
|
|
138
|
+
|
|
139
|
+
- `cd zova && npm run build:rest:cabloyBasicAdmin`
|
|
140
|
+
- `cd zova && npm run build:rest:cabloyBasicWeb`
|
|
141
|
+
|
|
142
|
+
For Cabloy Start, verify the exact Start-specific flavor names and paths in the Start repo.
|
|
143
|
+
|
|
144
|
+
### Path C: Downstream frontend alignment
|
|
145
|
+
|
|
146
|
+
After generation, inspect whether the frontend still needs follow-up in:
|
|
147
|
+
|
|
148
|
+
- API services
|
|
149
|
+
- model-managed remote state
|
|
150
|
+
- schema-driven UI
|
|
151
|
+
- page or component assumptions
|
|
152
|
+
|
|
153
|
+
## Step 6: Keep edition-aware differences explicit
|
|
154
|
+
|
|
155
|
+
The collaboration model is shared across Basic and Start, but the operational details may differ.
|
|
156
|
+
|
|
157
|
+
Especially verify:
|
|
158
|
+
|
|
159
|
+
- active repo marker
|
|
160
|
+
- affected frontend flavor
|
|
161
|
+
- whether the change affects Admin, Web, or both
|
|
162
|
+
- whether the generated output path is edition-specific
|
|
163
|
+
|
|
164
|
+
Do not silently reuse Basic-specific examples in Start workflows.
|
|
165
|
+
|
|
166
|
+
## Step 7: End-to-end verification
|
|
167
|
+
|
|
168
|
+
A fullstack contract loop is not done until both sides are checked.
|
|
169
|
+
|
|
170
|
+
### Backend-side verification
|
|
171
|
+
|
|
172
|
+
Typical checks may include:
|
|
173
|
+
|
|
174
|
+
- controller-level tests
|
|
175
|
+
- OpenAPI inspection
|
|
176
|
+
- `npm run test`
|
|
177
|
+
- `npm run tsc`
|
|
178
|
+
- `npm run build`
|
|
179
|
+
|
|
180
|
+
### Frontend-side verification
|
|
181
|
+
|
|
182
|
+
Typical checks may include:
|
|
183
|
+
|
|
184
|
+
- SDK or metadata regeneration success
|
|
185
|
+
- `npm run tsc:zova`
|
|
186
|
+
- `npm run build:zova`
|
|
187
|
+
- flavor-specific or route-specific checks
|
|
188
|
+
- schema-driven consumer alignment
|
|
189
|
+
|
|
190
|
+
## Step 8: Response pattern
|
|
191
|
+
|
|
192
|
+
When helpful, structure the response around these points:
|
|
193
|
+
|
|
194
|
+
1. detected edition
|
|
195
|
+
2. why this is a contract-loop task
|
|
196
|
+
3. backend source-of-truth layer to change first
|
|
197
|
+
4. frontend regeneration path to run second
|
|
198
|
+
5. edition-specific operational notes
|
|
199
|
+
6. end-to-end verification steps
|
|
200
|
+
|
|
201
|
+
Keep the response practical. The value of this skill is to prevent contract drift between Vona and Zova by guiding the user through the right backend-first, regeneration-second, verification-third workflow.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "cabloy-contract-loop",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I changed a Vona DTO and controller response for an admin API in Cabloy Basic. What is the correct fullstack contract loop to get the frontend back in sync?",
|
|
7
|
+
"expected_output": "Treats the task as a contract-loop workflow, changes the backend contract first, verifies OpenAPI output, then recommends the correct frontend regeneration path and verification.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "Our frontend SDK types look stale after a backend entity and validation change. I do not want hand-patched frontend types. Tell me the Cabloy way to fix the contract loop.",
|
|
13
|
+
"expected_output": "Rejects hand-patching as the primary fix, identifies backend contract source-of-truth, recommends regeneration, and includes both backend and frontend verification.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "We are working in Cabloy Start and changed an API shape that affects the admin frontend. What should Claude do so the backend and frontend contracts stay aligned?",
|
|
19
|
+
"expected_output": "Detects Start sensitivity, keeps the backend-first contract path clear, then gives Start-aware frontend regeneration and verification guidance.",
|
|
20
|
+
"files": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 4,
|
|
24
|
+
"prompt": "The frontend model and generated SDK in Cabloy Basic look stale after a backend response change, but I am not sure whether the real bug is in backend OpenAPI output or in skipped frontend regeneration. Diagnose the contract loop the Cabloy way.",
|
|
25
|
+
"expected_output": "Handles reverse stale-consumer detection, checks backend source-of-truth first, avoids hand-patching frontend types as the primary fix, and proposes regeneration or backend correction based on the contract path.",
|
|
26
|
+
"files": []
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Contract Loop Map
|
|
2
|
+
|
|
3
|
+
Use this reference when a task crosses the backend/frontend contract boundary.
|
|
4
|
+
|
|
5
|
+
## Typical triggers
|
|
6
|
+
|
|
7
|
+
### Backend contract changed
|
|
8
|
+
|
|
9
|
+
Common examples:
|
|
10
|
+
|
|
11
|
+
- DTO shape changed
|
|
12
|
+
- controller request/response changed
|
|
13
|
+
- validation changed
|
|
14
|
+
- `@Api.field` or OpenAPI metadata changed
|
|
15
|
+
- inferred DTO output changed
|
|
16
|
+
|
|
17
|
+
Likely next step:
|
|
18
|
+
|
|
19
|
+
- verify backend OpenAPI output
|
|
20
|
+
- regenerate the frontend consumer path
|
|
21
|
+
|
|
22
|
+
### Frontend consumer drift
|
|
23
|
+
|
|
24
|
+
Common examples:
|
|
25
|
+
|
|
26
|
+
- generated SDK no longer matches backend
|
|
27
|
+
- schema-driven UI expects old shape
|
|
28
|
+
- model or API service types are stale
|
|
29
|
+
|
|
30
|
+
Likely next step:
|
|
31
|
+
|
|
32
|
+
- confirm whether backend contract really changed
|
|
33
|
+
- regenerate instead of hand-patching
|
|
34
|
+
|
|
35
|
+
## Shared rule
|
|
36
|
+
|
|
37
|
+
The sequence is usually:
|
|
38
|
+
|
|
39
|
+
1. change backend contract
|
|
40
|
+
2. verify backend contract output
|
|
41
|
+
3. regenerate frontend artifacts
|
|
42
|
+
4. inspect frontend consumers
|
|
43
|
+
5. verify end to end
|
|
44
|
+
|
|
45
|
+
## Anti-pattern
|
|
46
|
+
|
|
47
|
+
Do not patch frontend generated artifacts first when the backend contract is the real source of truth.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Verification Checklist
|
|
2
|
+
|
|
3
|
+
After a contract-loop change, check both sides.
|
|
4
|
+
|
|
5
|
+
## Backend verification
|
|
6
|
+
|
|
7
|
+
- controller action contract is correct
|
|
8
|
+
- DTO and validation align
|
|
9
|
+
- OpenAPI output reflects the intended shape
|
|
10
|
+
- backend tests pass
|
|
11
|
+
- `npm run test`
|
|
12
|
+
- `npm run tsc`
|
|
13
|
+
- `npm run build`
|
|
14
|
+
|
|
15
|
+
## Frontend verification
|
|
16
|
+
|
|
17
|
+
- regeneration commands completed successfully
|
|
18
|
+
- generated SDK/schema outputs are updated
|
|
19
|
+
- API/model/page/component consumers still typecheck
|
|
20
|
+
- `npm run tsc:zova`
|
|
21
|
+
- `npm run build:zova`
|
|
22
|
+
- relevant flavor-specific or route-specific checks
|
|
23
|
+
|
|
24
|
+
## Edition verification
|
|
25
|
+
|
|
26
|
+
- Basic or Start marker confirmed
|
|
27
|
+
- affected flavor confirmed
|
|
28
|
+
- generation path matches the active edition
|
|
29
|
+
|
|
30
|
+
## Done rule
|
|
31
|
+
|
|
32
|
+
A contract-loop task is not done when only the backend compiles or only the frontend builds. It is done when the contract source and the generated consumer path agree.
|