cabloy 5.1.146 → 5.1.148
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/.cabloy-version +1 -1
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +16 -16
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +3 -3
- package/.claude/skills/cabloy-contract-loop/SKILL.md +5 -5
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +1 -1
- package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +1 -1
- package/.claude/skills/cabloy-domain-planning/SKILL.md +3 -3
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +26 -26
- package/.claude/skills/cabloy-master-detail/SKILL.md +2 -2
- package/.claude/skills/cabloy-module-removal/SKILL.md +2 -2
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +1 -1
- package/.claude/skills/cabloy-workflow/SKILL.md +10 -10
- package/.claude/skills/cabloy-workflow/evals/evals.json +3 -3
- package/.claude/skills/cabloy-worktree-environment/SKILL.md +5 -8
- package/.claude/skills/cabloy-worktree-environment/evals/evals.json +1 -1
- package/.claude/skills/cabloy-zova-source-reading/SKILL.md +23 -23
- package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +1 -1
- package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +3 -3
- package/.github/workflows/docs-pages.yml +5 -5
- package/CHANGELOG.md +12 -0
- package/CLAUDE.md +12 -8
- package/README.md +2 -1
- package/package.json +7 -7
- package/{cabloy-docs → repo-docs}/.vitepress/config.mjs +1 -1
- package/{cabloy-docs → repo-docs}/ai/docs-skills-rules-mapping.md +4 -4
- package/{cabloy-docs → repo-docs}/ai/future-skill-roadmap.md +5 -5
- package/{cabloy-docs → repo-docs}/ai/introduction.md +3 -3
- package/{cabloy-docs → repo-docs}/ai/playbook-module-removal.md +2 -2
- package/{cabloy-docs → repo-docs}/ai/repo-guidance.md +3 -3
- package/{cabloy-docs → repo-docs}/ai/rules-and-config.md +1 -1
- package/{cabloy-docs → repo-docs}/ai/virtual-decorator-guidance.md +1 -1
- package/{cabloy-docs → repo-docs}/backend/introduction.md +1 -1
- package/{cabloy-docs → repo-docs}/backend/metrics-guide.md +2 -2
- package/{cabloy-docs → repo-docs}/frontend/router-tabs-introduction.md +2 -2
- package/{cabloy-docs → repo-docs}/frontend/scripts.md +14 -14
- package/{cabloy-docs → repo-docs}/fullstack/parallel-worktree-environment.md +4 -4
- package/{cabloy-docs → repo-docs}/fullstack/quickstart.md +12 -12
- package/{cabloy-docs → repo-docs}/package.json +2 -2
- package/{cabloy-docs → repo-docs}/reference/package-map.md +2 -2
- package/{cabloy-docs → repo-docs}/reference/repo-scripts.md +25 -27
- package/{e2e → repo-e2e}/config/playwright.config.ts +2 -2
- package/{e2e → repo-e2e}/scripts/e2e.ts +2 -2
- package/{observability → repo-observability}/README.md +1 -1
- package/scripts/init.ts +7 -7
- package/scripts/upgrade.ts +12 -34
- package/vona/packages-cli/cli/README.md +1 -1
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli-set-api/README.md +1 -1
- package/vona/packages-cli/cli-set-api/package.json +1 -1
- package/zova/packages-cli/cli/README.md +1 -1
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/README.md +1 -1
- package/zova/packages-cli/cli-set-front/package.json +1 -1
- package/zova/pnpm-lock.yaml +15 -15
- /package/{cabloy-docs → repo-docs}/.vitepress/public/CNAME +0 -0
- /package/{cabloy-docs → repo-docs}/.vitepress/theme/custom.css +0 -0
- /package/{cabloy-docs → repo-docs}/.vitepress/theme/edition-badges.md +0 -0
- /package/{cabloy-docs → repo-docs}/.vitepress/theme/index.js +0 -0
- /package/{cabloy-docs → repo-docs}/ai/class-placement-rule.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/cli-for-agents.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/cli-to-skill-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/edition-consistency-checklist.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/edition-detection.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/global-bean-lookup.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/playbook-backend-module.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/playbook-contract-regeneration.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/playbook-frontend-page.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/playbook-metadata-refresh.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/playbook-technical-blog-authoring.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/skills.md +0 -0
- /package/{cabloy-docs → repo-docs}/ai/verification.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/aop-overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/auth-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-contract-emission-output-inspection.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-contract-emission-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-contract-emission-specimen.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-essentials.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-resource-module-contract-chain.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-source-reading-debug-checklist.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-source-reading-roadmap.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/backend-source-reading-verify-playbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/bean-scene-authoring.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/broadcast-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/cache-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/captcha-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/cli.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/config-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/controller-aop-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/controller-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/crud-workflow.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/dto-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/dto-infer-generation.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/dynamic-datasource-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/election-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/entity-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/error-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/event-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/external-aop-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/field-indexes.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/file-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/foundation.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/i18n-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/image-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/internal-aop-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/jwt-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/logger-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/mail-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/markdown-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/master-detail-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/master-detail-workflow.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/menu-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/migration-and-changes.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/model-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/module-dependencies.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/multi-database-datasource.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/multi-instance-and-instance-resolution.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/openapi-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/orm-aggregate-group-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/orm-configuration-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/orm-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/orm-mutation-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/orm-select-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/queue-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/quickstart.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/rate-limit-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/redis-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/redlock-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/relations-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/runtime-and-flavors.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/schedule-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/scripts.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/serialization-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/service-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/sharding-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/startup-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/status-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/telemetry-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/transaction-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/unit-testing.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/upload-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/user-access-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/validation-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/vona-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/websocket-call-flow.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/websocket-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/websocket-protocol-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/websocket-usage-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/backend/worker-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/ai-react-nextjs-enterprise-architecture-cabloy/cover-en-v1.png +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/ai-react-nextjs-enterprise-architecture-cabloy/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/cabloy-fullstack-resource-addressing/cover-en-v1.png +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/cabloy-fullstack-resource-addressing/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/nextjs-integrated-fullstack-cabloy-contract-loop/cover-en-v1.png +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/nextjs-integrated-fullstack-cabloy-contract-loop/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/vue-object-oriented-zova-beginner-mental-model/cover-en-v1.png +0 -0
- /package/{cabloy-docs → repo-docs}/blogs/vue-object-oriented-zova-beginner-mental-model/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/editions/cabloy-basic.md +0 -0
- /package/{cabloy-docs → repo-docs}/editions/cabloy-start.md +0 -0
- /package/{cabloy-docs → repo-docs}/editions/choosing-between-basic-and-start.md +0 -0
- /package/{cabloy-docs → repo-docs}/editions/detection.md +0 -0
- /package/{cabloy-docs → repo-docs}/editions/overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/a-model-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/a-openapi-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/a-router-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/api-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/api-schema-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/app-startup-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/bean-scene-authoring.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/behavior-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/cli.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/command-scene-authoring.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/component-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/component-props-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/component-v-model-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/css-in-js-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/design-principles.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/environment-config-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/fetch-interceptor-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/file-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/filter-query-select-data-flow-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/form-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/form-layout-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/form-scene-to-page-meta-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/foundation.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/frontend-source-reading-roadmap.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generated-contract-consumption-debug-checklist.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generated-contract-consumption-entry-branch.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generated-contract-consumption-list-branch.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generated-contract-consumption-specimen.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generated-contract-consumption-verify-playbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/generic-component-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/icon-engine-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/image-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/introduction.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ioc-and-beans.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/markdown-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/mock-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-architecture.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-resource-best-practices.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-resource-cookbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-resource-internals-deep-dive.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-resource-owner-pattern.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-resource-usage-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/model-state-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/module-scope.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/modules-and-suites.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/navigation-guards-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/openapi-sdk-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/page-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/page-meta-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/page-params-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/page-query-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/page-route-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/permission-formscene-action-visibility-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/quickstart.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/reading-zova-for-vue-developers.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/resource-entry-page-deep-dive.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/resource-list-page-deep-dive.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/rest-resource-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/rest-resource-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/root-behaviors-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/route-alias-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-stack-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-admin-web-comparison.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-layout-integration.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-mechanism.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-route-meta-cookbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-tabs-vs-stack.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/router-view-hosts-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/schema-driven-field-effects-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/sdk-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/server-data.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-architecture-overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-build-deploy-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-client-only.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-env.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-init-data.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-review-checklist.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-seo-meta.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/ssr-troubleshooting-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/state-architecture-for-vue-developers.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/system-startup-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/table-action-visibility-permission-flow-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/table-cell-cookbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/table-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/table-resource-crud-cookbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/theme-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/use-state-data-best-practices.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zod-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-app-guide.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-form-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-form-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-reactivity-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-router-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-table-controller-render-supplement.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-table-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-table-under-the-hood.md +0 -0
- /package/{cabloy-docs → repo-docs}/frontend/zova-vs-vue3-comparison.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/a-pay-payment-suite.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/admin-resource-and-web-self-service.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/backend-metadata-to-frontend-table-actions.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/cli.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/comparison-with-other-frameworks.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/contract-loop-playbook.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/deploy-cloudflare-docker.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/edition-collaboration-differences.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/file-workflow.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/framework-performance.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/frontend-metadata-to-backend.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/image-workflow.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/introduction.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/openapi-to-sdk.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/payment-sandbox-configuration.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/suites-and-modules.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-1-first-module.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-2-first-crud.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-3-frontend-metadata-sharing.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-4-custom-level-renderers.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-5-backend-contract-sharing.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorial-6-one-contract-four-uses.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/tutorials-overview.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/vona-zova-integration.md +0 -0
- /package/{cabloy-docs → repo-docs}/fullstack/vscode-extensions.md +0 -0
- /package/{cabloy-docs → repo-docs}/index.md +0 -0
- /package/{cabloy-docs → repo-docs}/pnpm-lock.yaml +0 -0
- /package/{cabloy-docs → repo-docs}/pnpm-workspace.yaml +0 -0
- /package/{cabloy-docs → repo-docs}/reference/backend-directory-structure.md +0 -0
- /package/{cabloy-docs → repo-docs}/reference/bean-scene-boilerplates.md +0 -0
- /package/{cabloy-docs → repo-docs}/reference/cli-reference.md +0 -0
- /package/{cabloy-docs → repo-docs}/reference/frontend-directory-structure.md +0 -0
- /package/{cabloy-docs → repo-docs}/reference/glossary.md +0 -0
- /package/{cabloy-docs → repo-docs}/reference/introduction.md +0 -0
- /package/{e2e → repo-e2e}/scripts/runE2e.ts +0 -0
- /package/{e2e → repo-e2e}/scripts/runE2eArgs.test.ts +0 -0
- /package/{e2e → repo-e2e}/scripts/runE2eArgs.ts +0 -0
- /package/{e2e → repo-e2e}/scripts/startE2eVona.ts +0 -0
- /package/{e2e → repo-e2e}/specs/a-commerce.spec.ts +0 -0
- /package/{e2e → repo-e2e}/specs/cabloy-basic.spec.ts +0 -0
- /package/{e2e → repo-e2e}/specs/home-user-account.spec.ts +0 -0
- /package/{e2e → repo-e2e}/specs/markdown.spec.ts +0 -0
- /package/{observability → repo-observability}/collector/otel-collector.yaml +0 -0
- /package/{observability → repo-observability}/docker-compose.metrics.yml +0 -0
- /package/{observability → repo-observability}/grafana/provisioning/datasources/prometheus.yaml +0 -0
- /package/{observability → repo-observability}/prometheus/prometheus.yaml +0 -0
package/CLAUDE.md
CHANGED
|
@@ -17,8 +17,11 @@ Always detect the active edition before making UI-sensitive assumptions, choosin
|
|
|
17
17
|
- `package.json` is the primary shared workflow entrypoint.
|
|
18
18
|
- `vona/` contains the backend framework, backend modules, and the Vona CLI.
|
|
19
19
|
- `zova/` contains the frontend framework, frontend modules, and the Zova CLI.
|
|
20
|
-
- `
|
|
21
|
-
-
|
|
20
|
+
- `repo-docs/` contains the unified public documentation.
|
|
21
|
+
- `repo-docs-internal/` contains internal engineering notes and ADRs.
|
|
22
|
+
- `repo-specs/` contains product and business specifications, delivery plans, and suite-local ADRs.
|
|
23
|
+
- `repo-e2e/` contains the end-to-end test project.
|
|
24
|
+
- `repo-observability/` contains local observability infrastructure.
|
|
22
25
|
- `.claude/` contains Claude commands, skills, and settings.
|
|
23
26
|
|
|
24
27
|
## Preferred workflow
|
|
@@ -35,8 +38,9 @@ Before inventing a custom implementation path:
|
|
|
35
38
|
|
|
36
39
|
## Documentation boundary
|
|
37
40
|
|
|
38
|
-
- Put user-facing and agent-facing guidance in `
|
|
39
|
-
- Put maintainer rationale, architecture notes, and ADRs in
|
|
41
|
+
- Put user-facing and agent-facing guidance in `repo-docs/`.
|
|
42
|
+
- Put maintainer rationale, architecture notes, and engineering ADRs in `repo-docs-internal/`.
|
|
43
|
+
- Put product and business specifications, delivery plans, acceptance records, and suite-local ADRs in `repo-specs/`.
|
|
40
44
|
- Do not mix internal rationale into public how-to pages unless a trimmed user-facing explanation is genuinely needed.
|
|
41
45
|
|
|
42
46
|
## AI development rules
|
|
@@ -56,19 +60,19 @@ Before inventing a custom implementation path:
|
|
|
56
60
|
- Treat legacy docs as input material, not as unquestioned truth. When docs conflict with source code, prefer current source code.
|
|
57
61
|
- For frontend work, assume Cabloy Basic and Cabloy Start share a frontend engineering layer but may diverge in UI layer, frontend flavors, suite/module availability, SSR site baselines, project assets, and generated outputs.
|
|
58
62
|
- For Zova frontend analysis, do not default to generic Vue reinterpretation first. Read the code through Zova’s controller / bean / IoC architecture before mapping it to Vue concepts.
|
|
59
|
-
- For Zova source-reading or Vue-vs-Zova explanation tasks, start from the frontend reading guides and source-reading map in `
|
|
63
|
+
- For Zova source-reading or Vue-vs-Zova explanation tasks, start from the frontend reading guides and source-reading map in `repo-docs/frontend/` before doing framework-neutral reinterpretation.
|
|
60
64
|
- In Zova application modules under `zova/src/module/**`, `zova/src/module-vendor/**`, `zova/src/suite/**/modules/**`, and `zova/src/suite-vendor/**/modules/**`, use emitted runtime suffixes for relative imports and exports: `.js` for `.ts` targets and `.jsx` for `.tsx` targets, including type-only imports and module tests. Preserve the deliberate `.ts`/`.tsx` convention in `zova/packages-utils/**` and `zova/packages-zova/**`; do not generalize this rule to Vona, CLI/templates, dependencies, generated output, or build artifacts.
|
|
61
65
|
- In Zova page routes, any route with dynamic `params` must define `route.name`; do not rely on unnamed path-keyed routes for typed `$params`. Static routes should omit `route.name` unless a documented named-route requirement exists; use `$router.getPagePath(...)` for canonical static URL generation rather than adding a name or alias for convenience. Ordinary business routes without `locale` params should omit app-config aliases unless a documented system, compatibility, or user-facing URL exception requires one. Choose `ssrProfile` from the page's rendering contract: Web remains `public` by default, while `session` is an explicit choice for cookie-backed state, protected admission, personalized first paint, or private SSR data; the absence of a locale parameter alone does not select a profile. `requiresAuth` is independent, so anonymous routes must explicitly use `requiresAuth: false`. Regenerate page metadata after route changes.
|
|
62
66
|
- For frontend async state that affects rendering or interaction across consumers, prefer model-owned `$useStateData(...)` over controller-managed fetch/cache state.
|
|
63
67
|
- Default to establishing such query state during render. Use `disableSuspenseOnInit: true` only for relatively stable query-backed state when you want to skip the init-time `query.suspense()` kick; it does not prevent query creation, fetches, or hydration-time rendering. If strict readiness is needed later, wait explicitly at the interaction boundary.
|
|
64
68
|
- In SSR, keep server HTML and the client's hydration-time initial render equivalent. When server rendering intentionally omits private, cookie-unavailable, or browser-only state, keep the same neutral shell or placeholder through hydration and defer its query/load/render branch to an explicit post-hydration, admission, mounted, or interaction boundary.
|
|
65
69
|
- Keep repo-wide AI rules in `CLAUDE.md` short and durable; put branching Zova analysis workflows in `.claude/skills/`.
|
|
66
|
-
- Do not modify shared environment identity or ports merely to bypass a busy resource. For intentional parallel worktree setup, follow `
|
|
70
|
+
- Do not modify shared environment identity or ports merely to bypass a busy resource. For intentional parallel worktree setup, follow `repo-docs/fullstack/parallel-worktree-environment.md`; otherwise wait for the shared resource or ask the user. Create or change worktree-local environment overrides only through the explicitly invoked `cabloy-worktree-environment` skill and its confirmation phase, and only in `vona/env/.env.local` and `zova/env/.env.local`; never modify flavor-, mode-, app-mode-, or runtime-specific `.env.*.local` files. The skill derives the standard `APP_NAME`, `SERVER_LISTEN_PORT`, `DEV_SERVER_PORT`, `DEV_SERVER_HMR_PORT`, and API-derived `API_BASE_URL` tuple only from Git worktree metadata and fixed port baselines; never read or expose `.env*` content while recommending values. Admin and Web are alternative commands using this shared tuple and must not run concurrently in one worktree; use another linked worktree for concurrent use. Detect the active edition before choosing scripts, and never run `npm run init` as an automatic follow-up.
|
|
67
71
|
- For SSR theme-sensitive frontend work, detect the active edition marker and UI library before making assumptions. Cabloy Basic currently means DaisyUI + Tailwind CSS assumptions; Cabloy Start currently means Vuetify assumptions.
|
|
68
72
|
- In Web SSR without cookie-backed theme resolution, do not treat server reads of `$theme.dark`, `$theme.darkMode`, or `$token` as final browser truth. Keep theme-sensitive SSR branching hydration-tolerant or defer final theme-sensitive decisions to the client.
|
|
69
73
|
- Do not assume Cabloy Basic and Cabloy Start use the same adapter-level SSR theme handoff. Verify the active theme handler and client hydration path before changing SSR theme behavior.
|
|
70
74
|
- Reuse existing repo terminology: Cabloy, Vona, Zova, suite, module, bean, SSR, SPA, Web, Admin.
|
|
71
|
-
- For backend base-class placement, use the A / B1 / B2 rule from `
|
|
75
|
+
- For backend base-class placement, use the A / B1 / B2 rule from `repo-docs/ai/class-placement-rule.md`.
|
|
72
76
|
- Pure helper bases belong in `src/lib`; subclass-only bases should be evaluated case by case and often belong in `src/lib`.
|
|
73
77
|
- Runtime-anchor bases that still require container-managed or selector/class-token behavior but should not be global beans should prefer `src/service` with `@Service()`.
|
|
74
78
|
- Service-scene runtime-anchor bases that should not register in `IBeanRecordGeneral` should prefer the `src/service/*_.ts` form.
|
|
@@ -77,7 +81,7 @@ Before inventing a custom implementation path:
|
|
|
77
81
|
- When adding a persisted field to an existing backend resource, ask the user whether `vonaModule.fileVersion` should be incremented before changing `meta.version.ts` or the module schema path. If yes, add a new migration version and bump `fileVersion`. If no, keep the current `fileVersion` and fold the schema change into the current version path. Do not assume the versioning strategy without confirmation.
|
|
78
82
|
- In shared-database multitenancy, do not use `table.unique(...)` for business uniqueness. Keep ordinary indexes for lookup performance and enforce tenant-scoped uniqueness in the business layer.
|
|
79
83
|
- In Vona, a tenant corresponds to an instance. Ordinary resource-model CRUD is automatically scoped to the active instance; treat records absent from that scope as absent, and do not use raw cross-instance probes merely to choose between `403` and not-found behavior. Model future multi-merchant boundaries explicitly inside an instance.
|
|
80
|
-
- Model cross-Model query-cache dependencies as one directed, acyclic `modelsClear` / `modelsClearedBy` graph, and verify source mutations refresh warmed dependent queries; read
|
|
84
|
+
- Model cross-Model query-cache dependencies as one directed, acyclic `modelsClear` / `modelsClearedBy` graph, and verify source mutations refresh warmed dependent queries; read `repo-docs-internal/architecture/vona-cross-model-query-cache-dependencies.md` before designing a nontrivial graph.
|
|
81
85
|
- For `@Api.field(...)` and related schemaLike composition, framework guards now preserve previously attached OpenAPI metadata across schema rebuilds, but structure-shaping schemaLike is still order-sensitive. Treat `v.object(...)`, `v.array(...)`, `v.optional()`, `v.nullable()`, `v.default(...)`, and preprocess/transform wrappers as structure-shaping; keep the final structure-defining schemaLike last and verify emitted schema/OpenAPI output after such edits.
|
|
82
86
|
- `@Core.transaction(...)` defaults to `REQUIRED`: it starts a transaction only when none exists and otherwise joins the current datasource transaction without upgrading its isolation. Prefer it over manual `inTransaction` wrappers for atomic service methods; use `REQUIRES_NEW` only when an independently committed boundary is explicitly required.
|
|
83
87
|
- For replay-safe transient failures, use `@Core.retryable(...)` with an explicit `errorCodes` allowlist. It retries the downstream AOP suffix, so place it closest to the method when it must wrap and retry a `@Core.transaction(...)` boundary; use `ownerOnly: true` for dual-role leaves that must not retry inside a caller-owned transaction; do not retry external side effects or infer retryability from isolation level.
|
package/README.md
CHANGED
|
@@ -178,7 +178,8 @@ Contribution guidelines:
|
|
|
178
178
|
|
|
179
179
|
- prefer CLI-backed workflows with `npm run vona` and `npm run zova`
|
|
180
180
|
- put user-facing and agent-facing guidance in [docs.cabloy.com](https://docs.cabloy.com)
|
|
181
|
-
- put maintainer rationale, architecture notes, and ADRs in [
|
|
181
|
+
- put maintainer rationale, architecture notes, and engineering ADRs in [repo-docs-internal/](https://github.com/cabloy/cabloy/tree/main/repo-docs-internal)
|
|
182
|
+
- put product and business specifications, delivery plans, and suite-local ADRs in [repo-specs/](https://github.com/cabloy/cabloy/tree/main/repo-specs)
|
|
182
183
|
- verify framework changes with the narrowest meaningful checks first, then shared root scripts when broader confidence is needed
|
|
183
184
|
|
|
184
185
|
To report bugs or propose changes, use [GitHub Issues](https://github.com/cabloy/cabloy/issues) or open a pull request in [github.com/cabloy/cabloy](https://github.com/cabloy/cabloy).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cabloy",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.148",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "A Node.js fullstack framework",
|
|
6
6
|
"keywords": [
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"start": "cd vona && npm run start",
|
|
47
47
|
"start:one": "cd vona && npm run start:one",
|
|
48
48
|
"test": "cd vona && npm run test",
|
|
49
|
-
"test:e2e": "node e2e/scripts/runE2e.ts --clean",
|
|
50
|
-
"test:e2e:fast": "node e2e/scripts/runE2e.ts --fast",
|
|
49
|
+
"test:e2e": "node repo-e2e/scripts/runE2e.ts --clean",
|
|
50
|
+
"test:e2e:fast": "node repo-e2e/scripts/runE2e.ts --fast",
|
|
51
51
|
"db:reset": "cd vona && npm run db:reset",
|
|
52
52
|
"tsc": "npm run tsc:zova && pnpm --dir vona run tsc",
|
|
53
53
|
"tsc:zova": "pnpm --dir zova run tsc",
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
"format:fix": "oxfmt --write",
|
|
58
58
|
"lint": "oxlint --disable-nested-config",
|
|
59
59
|
"lint:fix": "oxlint --disable-nested-config --fix",
|
|
60
|
-
"docs:dev": "pnpm --dir
|
|
61
|
-
"docs:build": "pnpm --dir
|
|
62
|
-
"docs:preview": "pnpm --dir
|
|
63
|
-
"docs:fix": "textlint --fix ./
|
|
60
|
+
"docs:dev": "pnpm --dir repo-docs docs:dev",
|
|
61
|
+
"docs:build": "pnpm --dir repo-docs docs:build",
|
|
62
|
+
"docs:preview": "pnpm --dir repo-docs docs:preview",
|
|
63
|
+
"docs:fix": "textlint --fix ./repo-docs/**/*.md",
|
|
64
64
|
"release-patch": "node scripts/release.ts patch",
|
|
65
65
|
"release-minor": "node scripts/release.ts minor",
|
|
66
66
|
"release-major": "node scripts/release.ts major",
|
|
@@ -626,7 +626,7 @@ export default defineConfig({
|
|
|
626
626
|
provider: 'local',
|
|
627
627
|
},
|
|
628
628
|
editLink: {
|
|
629
|
-
pattern: 'https://github.com/cabloy/cabloy/edit/main/
|
|
629
|
+
pattern: 'https://github.com/cabloy/cabloy/edit/main/repo-docs/:path',
|
|
630
630
|
},
|
|
631
631
|
footer: {
|
|
632
632
|
message: 'Released under the MIT License.',
|
|
@@ -22,7 +22,7 @@ The goal is to give each layer a distinct job.
|
|
|
22
22
|
|
|
23
23
|
Location:
|
|
24
24
|
|
|
25
|
-
- `
|
|
25
|
+
- `repo-docs/`
|
|
26
26
|
|
|
27
27
|
Use public docs for:
|
|
28
28
|
|
|
@@ -42,7 +42,7 @@ Public docs answer questions like:
|
|
|
42
42
|
|
|
43
43
|
Location:
|
|
44
44
|
|
|
45
|
-
-
|
|
45
|
+
- `repo-docs-internal/`
|
|
46
46
|
|
|
47
47
|
Use internal docs for:
|
|
48
48
|
|
|
@@ -128,7 +128,7 @@ Use this quick rule:
|
|
|
128
128
|
### Example: “How should a backend base class be placed?”
|
|
129
129
|
|
|
130
130
|
- public operational explanation → [Class Placement Rule](/ai/class-placement-rule)
|
|
131
|
-
- maintainer rationale and invariants →
|
|
131
|
+
- maintainer rationale and invariants → `repo-docs-internal/architecture/class-placement-a-b1-b2.md`
|
|
132
132
|
- default repo-wide behavior → `CLAUDE.md`
|
|
133
133
|
- procedural decision workflow → `cabloy-workflow` skill
|
|
134
134
|
|
|
@@ -153,7 +153,7 @@ Use this quick rule:
|
|
|
153
153
|
### Example: “How should AI remove an existing module cleanly?”
|
|
154
154
|
|
|
155
155
|
- public operational explanation → [Playbook: Module Removal](/ai/playbook-module-removal)
|
|
156
|
-
- maintainer rationale and pitfalls →
|
|
156
|
+
- maintainer rationale and pitfalls → `repo-docs-internal/architecture/module-removal-workflow.md`
|
|
157
157
|
- avoid putting the full workflow in `CLAUDE.md` because the task needs branching, cleanup order, generated-runtime recovery, and verification
|
|
158
158
|
- procedural decision workflow → `cabloy-module-removal` skill
|
|
159
159
|
|
|
@@ -42,7 +42,7 @@ Primary dependencies:
|
|
|
42
42
|
|
|
43
43
|
- Vona `create:*`
|
|
44
44
|
- Vona `tools:*`
|
|
45
|
-
- backend docs in `
|
|
45
|
+
- backend docs in `repo-docs/backend/`
|
|
46
46
|
|
|
47
47
|
### 2. Frontend scaffold skill
|
|
48
48
|
|
|
@@ -56,7 +56,7 @@ Primary dependencies:
|
|
|
56
56
|
|
|
57
57
|
- Zova `create:*`
|
|
58
58
|
- Zova `refactor:*`
|
|
59
|
-
- frontend docs in `
|
|
59
|
+
- frontend docs in `repo-docs/frontend/`
|
|
60
60
|
|
|
61
61
|
### 3. Fullstack contract loop skill
|
|
62
62
|
|
|
@@ -85,7 +85,7 @@ Primary dependencies:
|
|
|
85
85
|
|
|
86
86
|
- Vona entity / migration / DTO workflow knowledge
|
|
87
87
|
- Zova metadata/build flows when renderer follow-up is involved
|
|
88
|
-
- the backend resource field workflow note in
|
|
88
|
+
- the backend resource field workflow note in `repo-docs-internal/`
|
|
89
89
|
|
|
90
90
|
### 5. Metadata refresh skill
|
|
91
91
|
|
|
@@ -146,9 +146,9 @@ The purpose of the roadmap is not to create many skills.
|
|
|
146
146
|
|
|
147
147
|
The purpose is to create a small number of high-leverage skills that directly reuse the knowledge system now being built in:
|
|
148
148
|
|
|
149
|
-
- `
|
|
149
|
+
- `repo-docs/`
|
|
150
150
|
- `CLAUDE.md`
|
|
151
|
-
-
|
|
151
|
+
- `repo-docs-internal/`
|
|
152
152
|
- `.claude/skills/`
|
|
153
153
|
- the Vona and Zova CLIs
|
|
154
154
|
|
|
@@ -29,20 +29,20 @@ For contributor and automation workflows in this repository, prefer this order:
|
|
|
29
29
|
|
|
30
30
|
1. inspect the active edition and repo markers before making UI-sensitive or workflow-sensitive assumptions
|
|
31
31
|
2. inspect root scripts, Vona CLI, and Zova CLI before inventing manual scaffolding or custom workflow steps
|
|
32
|
-
3. use public docs for durable user-facing guidance and
|
|
32
|
+
3. use public docs for durable user-facing guidance and `repo-docs-internal/` for maintainer rationale
|
|
33
33
|
4. encode repeatable behavior in Claude rules, commands, or skills instead of relying on unstated habits
|
|
34
34
|
|
|
35
35
|
## The knowledge layers
|
|
36
36
|
|
|
37
37
|
### Public docs
|
|
38
38
|
|
|
39
|
-
Use `
|
|
39
|
+
Use `repo-docs/` for user-facing and agent-facing guidance that should remain durable and source-aligned.
|
|
40
40
|
|
|
41
41
|
For normal project usage, prefer the user-facing entry docs such as [Fullstack Quickstart](/fullstack/quickstart). This AI section focuses on repository workflows and AI vibe coding.
|
|
42
42
|
|
|
43
43
|
### Internal engineering docs
|
|
44
44
|
|
|
45
|
-
Use
|
|
45
|
+
Use `repo-docs-internal/` for architecture notes, ADRs, and maintainership rationale that should not be mixed into public how-to documentation.
|
|
46
46
|
|
|
47
47
|
### Claude rules and commands
|
|
48
48
|
|
|
@@ -38,7 +38,7 @@ Typical locations include:
|
|
|
38
38
|
- generated registries and lockfiles
|
|
39
39
|
- tests that still target the module
|
|
40
40
|
|
|
41
|
-
If the user asked for a public scrub, also inspect `
|
|
41
|
+
If the user asked for a public scrub, also inspect `repo-docs/`. Otherwise, treat docs cleanup as a separate scope decision.
|
|
42
42
|
|
|
43
43
|
## Step 3: Remove source and direct references first
|
|
44
44
|
|
|
@@ -144,7 +144,7 @@ Make this an explicit scope decision:
|
|
|
144
144
|
- code/runtime removal only
|
|
145
145
|
- code/runtime removal plus docs/examples scrub
|
|
146
146
|
|
|
147
|
-
If docs cleanup is in scope, update `
|
|
147
|
+
If docs cleanup is in scope, update `repo-docs/` as a separate pass after runtime cleanup is stable.
|
|
148
148
|
|
|
149
149
|
## AI rule of thumb
|
|
150
150
|
|
|
@@ -8,7 +8,7 @@ Check the root repository signals first:
|
|
|
8
8
|
|
|
9
9
|
- `package.json`
|
|
10
10
|
- edition marker files such as `__CABLOY_BASIC__` or `__CABLOY_START__`
|
|
11
|
-
-
|
|
11
|
+
- `repo-docs-internal/README.md`
|
|
12
12
|
- root `.claude/` assets
|
|
13
13
|
|
|
14
14
|
These files tell the agent which repo it is in, which scripts are canonical, and where public versus internal documentation belongs.
|
|
@@ -29,8 +29,8 @@ This is more reliable than copying old file structures from examples without und
|
|
|
29
29
|
|
|
30
30
|
## 3. Use docs and internal notes for different purposes
|
|
31
31
|
|
|
32
|
-
- use `
|
|
33
|
-
- use
|
|
32
|
+
- use `repo-docs/` to explain how people and agents should work
|
|
33
|
+
- use `repo-docs-internal/` to explain why maintainers designed the repo a certain way
|
|
34
34
|
|
|
35
35
|
## 4. Treat edition detection as mandatory for UI-sensitive work
|
|
36
36
|
|
|
@@ -26,4 +26,4 @@ Use Claude settings for permissions and execution environment, not as the primar
|
|
|
26
26
|
|
|
27
27
|
## Documentation boundary
|
|
28
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
|
|
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 `repo-docs-internal/`.
|
|
@@ -19,7 +19,7 @@ For contributor and automation workflows in this repository, prefer this order:
|
|
|
19
19
|
1. inspect the root `package.json` and `npm run vona` entrypoint
|
|
20
20
|
2. inspect Vona CLI command families such as `create:*`, `init:*`, `tools:*`, and `bin:*`
|
|
21
21
|
3. inspect the current module or suite layout before creating new files manually
|
|
22
|
-
4. use public docs for user-facing guidance and
|
|
22
|
+
4. use public docs for user-facing guidance and `repo-docs-internal/` for maintainer rationale
|
|
23
23
|
|
|
24
24
|
## Backend reading paths
|
|
25
25
|
|
|
@@ -66,10 +66,10 @@ The Basic Admin **Metrics** page is available only to `systemAdmin`. It shows a
|
|
|
66
66
|
|
|
67
67
|
## Local example
|
|
68
68
|
|
|
69
|
-
A loopback-only local stack is available under the repository's `observability/README.md`:
|
|
69
|
+
A loopback-only local stack is available under the repository's `repo-observability/README.md`:
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
|
-
docker compose -f observability/docker-compose.metrics.yml up
|
|
72
|
+
docker compose -f repo-observability/docker-compose.metrics.yml up
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Use it for local validation only. Production networking, TLS/mTLS, secret injection, retention, dashboards, and alert routing are operator-owned.
|
|
@@ -110,7 +110,7 @@ Recommended order:
|
|
|
110
110
|
|
|
111
111
|
1. [Router Tabs Mechanism](/frontend/router-tabs-mechanism)
|
|
112
112
|
2. [Router Tabs Admin and Web Comparison](/frontend/router-tabs-admin-web-comparison)
|
|
113
|
-
3.
|
|
113
|
+
3. `repo-docs-internal/architecture/router-tabs-design-boundaries.md`
|
|
114
114
|
|
|
115
115
|
## Scope boundary
|
|
116
116
|
|
|
@@ -118,7 +118,7 @@ The public router-tabs docs explain the shared frontend mechanism and how to use
|
|
|
118
118
|
|
|
119
119
|
For internal design boundaries, maintenance invariants, and refactor safety rules, see:
|
|
120
120
|
|
|
121
|
-
-
|
|
121
|
+
- `repo-docs-internal/architecture/router-tabs-design-boundaries.md`
|
|
122
122
|
|
|
123
123
|
## See also
|
|
124
124
|
|
|
@@ -61,7 +61,7 @@ npm run build:zova:admin
|
|
|
61
61
|
# Both default Basic sites, then a managed local run
|
|
62
62
|
npm run build:zova
|
|
63
63
|
npm run deps:vona
|
|
64
|
-
npm run test:e2e cabloy-basic account
|
|
64
|
+
npm run test:e2e cabloy-basic home-user-account
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
The managed clean command resets Vona-managed test data and the local Redis namespace, starts one development Vona worker, and runs the selected specs. Browser commands consume already-built artifacts; they do not rebuild them.
|
|
@@ -73,10 +73,10 @@ npm run test:e2e clean local run with database reset
|
|
|
73
73
|
npm run test:e2e:fast fast run without automatic reset
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
Place flat spec basenames directly after the npm script name. Use npm's `--` delimiter before Playwright options. With no names, every spec in `e2e/specs` runs. Native `--grep` and `--grep-invert` remain available, and repeatable `--tag` values require all listed tags:
|
|
76
|
+
Place flat spec basenames directly after the npm script name. Use npm's `--` delimiter before Playwright options. With no names, every spec in `repo-e2e/specs` runs. Native `--grep` and `--grep-invert` remain available, and repeatable `--tag` values require all listed tags:
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
npm run test:e2e cabloy-basic account -- --grep @flow
|
|
79
|
+
npm run test:e2e cabloy-basic home-user-account -- --grep @flow
|
|
80
80
|
npm run test:e2e:fast a-commerce -- --tag @web --tag @smoke
|
|
81
81
|
```
|
|
82
82
|
|
|
@@ -98,31 +98,31 @@ Cabloy Start does not expose the Basic Commerce wrapper family.
|
|
|
98
98
|
|
|
99
99
|
## Start SSR browser acceptance
|
|
100
100
|
|
|
101
|
-
The Start Web and Admin browser baseline also exercises Vona SSR dispatch at port
|
|
101
|
+
The Start Web and Admin browser baseline also exercises Vona SSR dispatch at the effective local server port. Prepare current SSR and REST artifacts, then use the managed local command:
|
|
102
102
|
|
|
103
103
|
```bash
|
|
104
104
|
npm run build:zova
|
|
105
105
|
npm run deps:vona
|
|
106
|
-
npm run test:e2e
|
|
106
|
+
npm run test:e2e
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
Start uses the same unified E2E command pair as Basic:
|
|
110
110
|
|
|
111
111
|
```text
|
|
112
|
-
test:e2e
|
|
113
|
-
test:e2e:
|
|
114
|
-
test:e2e:start:admin all @admin surface scenarios
|
|
115
|
-
test:e2e:start:clean managed clean local suite run
|
|
112
|
+
npm run test:e2e managed clean local suite run
|
|
113
|
+
npm run test:e2e:fast fast rerun without an automatic reset
|
|
116
114
|
```
|
|
117
115
|
|
|
118
|
-
Start scenarios
|
|
116
|
+
Select flat spec basenames and filter scenarios or surfaces with runner tags and native Playwright arguments. Current Start scenarios use tags including `@web`, `@admin`, `@smoke`, `@layout`, `@cabloy-admin`, `@account`, `@ssr`, and `@flow`:
|
|
119
117
|
|
|
120
118
|
```bash
|
|
121
|
-
npm run test:e2e
|
|
122
|
-
npm run test:e2e:start -- --
|
|
119
|
+
npm run test:e2e cabloy-start
|
|
120
|
+
npm run test:e2e:fast cabloy-start -- --tag @web
|
|
121
|
+
npm run test:e2e:fast cabloy-admin -- --tag @admin --tag @cabloy-admin
|
|
122
|
+
npm run test:e2e:fast cabloy-start -- --grep ATP-START-FLOW-01
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
For a separately managed Start target, set `
|
|
125
|
+
For a separately managed Start target, set `E2E_BASE_URL` and use `test:e2e:fast`. The target owner is responsible for data, cache, artifact freshness, and process lifecycle.
|
|
126
126
|
|
|
127
127
|
## Zova script model
|
|
128
128
|
|
|
@@ -75,10 +75,10 @@ For privacy, the skill writes only to absent or empty permitted broad local file
|
|
|
75
75
|
|
|
76
76
|
Use commands from the active repository root.
|
|
77
77
|
|
|
78
|
-
| Edition | Marker | Frontend command | Managed clean E2E
|
|
79
|
-
| ------------ | ------------------ | -------------------------------------------------- |
|
|
80
|
-
| Cabloy Basic | `__CABLOY_BASIC__` | `npm run dev:zova:admin` or `npm run dev:zova:web` | `npm run test:e2e`
|
|
81
|
-
| Cabloy Start | `__CABLOY_START__` | `npm run dev:zova:admin` or `npm run dev:zova:web` | `npm run test:e2e
|
|
78
|
+
| Edition | Marker | Frontend command | Managed clean E2E |
|
|
79
|
+
| ------------ | ------------------ | -------------------------------------------------- | ------------------ |
|
|
80
|
+
| Cabloy Basic | `__CABLOY_BASIC__` | `npm run dev:zova:admin` or `npm run dev:zova:web` | `npm run test:e2e` |
|
|
81
|
+
| Cabloy Start | `__CABLOY_START__` | `npm run dev:zova:admin` or `npm run dev:zova:web` | `npm run test:e2e` |
|
|
82
82
|
|
|
83
83
|
Run one frontend command, not both, in each worktree. Both managed clean E2E workflows read Vona's effective local `SERVER_LISTEN_PORT`, then reset, start, and target that local runtime.
|
|
84
84
|
|
|
@@ -112,36 +112,36 @@ npm run upgrade
|
|
|
112
112
|
In Cabloy Basic, upgrade synchronizes the framework-owned SSR browser E2E baseline, the two root E2E scripts, and the `@playwright/test` development dependency. The framework owns these paths:
|
|
113
113
|
|
|
114
114
|
```text
|
|
115
|
-
e2e/config/
|
|
116
|
-
e2e/scripts/
|
|
117
|
-
e2e/specs/cabloy-basic.spec.ts
|
|
118
|
-
e2e/specs/account.spec.ts
|
|
119
|
-
e2e/specs/a-commerce.spec.ts
|
|
115
|
+
repo-e2e/config/
|
|
116
|
+
repo-e2e/scripts/
|
|
117
|
+
repo-e2e/specs/cabloy-basic.spec.ts
|
|
118
|
+
repo-e2e/specs/home-user-account.spec.ts
|
|
119
|
+
repo-e2e/specs/a-commerce.spec.ts
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Keep additional project-owned browser specs under other filenames in `e2e/specs`. The current baseline is a fresh-project contract; unsupported legacy layouts are not repaired by the upgrader.
|
|
122
|
+
Keep additional project-owned browser specs under other filenames in `repo-e2e/specs`. The current baseline is a fresh-project contract; unsupported legacy layouts are not repaired by the upgrader.
|
|
123
123
|
|
|
124
124
|
### Cabloy Start repository baseline
|
|
125
125
|
|
|
126
126
|
Cabloy Start is checked out from the licensed private repository rather than created through `npm create cabloy`. Its E2E baseline is maintained in that repository:
|
|
127
127
|
|
|
128
128
|
```text
|
|
129
|
-
e2e/config/
|
|
130
|
-
e2e/scripts/
|
|
131
|
-
e2e/specs/
|
|
129
|
+
repo-e2e/config/
|
|
130
|
+
repo-e2e/scripts/
|
|
131
|
+
repo-e2e/specs/
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
The public Cabloy upgrade flow does not synchronize or repair those Start E2E files,
|
|
134
|
+
The public Cabloy upgrade flow does not synchronize or repair those private Start E2E files, its root E2E scripts, or `@playwright/test`. Keep project-owned browser scenarios in the flat `repo-e2e/specs/` directory under distinct filenames, for example `repo-e2e/specs/my-project.spec.ts`.
|
|
135
135
|
|
|
136
136
|
Prepare and run the managed Start baseline locally with:
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
139
|
npm run build:zova
|
|
140
140
|
npm run deps:vona
|
|
141
|
-
npm run test:e2e
|
|
141
|
+
npm run test:e2e
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
The managed command
|
|
144
|
+
The managed command checks the effective local server port and owns the local reset and Vona worker lifecycle. For a separately managed target, set `E2E_BASE_URL` and use `npm run test:e2e:fast`; this mode does not reset, build, start, or stop the target. Select surfaces with `--tag @web` or `--tag @admin`, and exact scenarios with native `--grep` arguments. Install Chromium once when needed with `npx playwright install chromium`. See [Repo Scripts](/reference/repo-scripts#ssr-browser-checks) for the complete command variants.
|
|
145
145
|
|
|
146
146
|
## 7. Next steps for framework-aware development
|
|
147
147
|
|
|
@@ -6,9 +6,9 @@ This monorepo is organized around a small set of stable top-level areas.
|
|
|
6
6
|
|
|
7
7
|
- `package.json` — shared scripts and release entrypoints
|
|
8
8
|
- `lerna.json` — package topology
|
|
9
|
-
-
|
|
9
|
+
- `repo-docs-internal/` — internal engineering docs
|
|
10
10
|
- `.claude/` — Claude commands, skills, and local settings
|
|
11
|
-
- `
|
|
11
|
+
- `repo-docs/` — unified public docs
|
|
12
12
|
|
|
13
13
|
## Backend side
|
|
14
14
|
|
|
@@ -63,10 +63,8 @@ Cabloy Start exposes the equivalent Start repository surface:
|
|
|
63
63
|
- `npm run start:one`
|
|
64
64
|
- `npm run test`
|
|
65
65
|
- `npm run db:reset`
|
|
66
|
-
- `npm run test:e2e
|
|
67
|
-
- `npm run test:e2e:
|
|
68
|
-
- `npm run test:e2e:start:admin`
|
|
69
|
-
- `npm run test:e2e:start:clean`
|
|
66
|
+
- `npm run test:e2e`
|
|
67
|
+
- `npm run test:e2e:fast`
|
|
70
68
|
- `npm run tsc`
|
|
71
69
|
|
|
72
70
|
Cabloy Start does not expose Basic Commerce or root documentation wrappers.
|
|
@@ -80,26 +78,26 @@ Run `npm run upgrade:dry-run` before `npm run upgrade` to inspect framework file
|
|
|
80
78
|
Basic upgrade owns these browser baseline paths:
|
|
81
79
|
|
|
82
80
|
```text
|
|
83
|
-
e2e/config/
|
|
84
|
-
e2e/scripts/
|
|
85
|
-
e2e/specs/cabloy-basic.spec.ts
|
|
86
|
-
e2e/specs/account.spec.ts
|
|
87
|
-
e2e/specs/a-commerce.spec.ts
|
|
81
|
+
repo-e2e/config/
|
|
82
|
+
repo-e2e/scripts/
|
|
83
|
+
repo-e2e/specs/cabloy-basic.spec.ts
|
|
84
|
+
repo-e2e/specs/home-user-account.spec.ts
|
|
85
|
+
repo-e2e/specs/a-commerce.spec.ts
|
|
88
86
|
```
|
|
89
87
|
|
|
90
|
-
It also reconciles the two framework E2E scripts and the `@playwright/test` development dependency. Keep additional project browser specs under other filenames in `e2e/specs`; the upgrader updates only the listed framework files. The current fresh baseline is required and is not repaired for unsupported legacy project layouts.
|
|
88
|
+
It also reconciles the two framework E2E scripts and the `@playwright/test` development dependency. Keep additional project browser specs under other filenames in `repo-e2e/specs`; the upgrader updates only the listed framework files. The current fresh baseline is required and is not repaired for unsupported legacy project layouts.
|
|
91
89
|
|
|
92
90
|
### Cabloy Start private repository
|
|
93
91
|
|
|
94
92
|
The Start E2E baseline is maintained in the private repository:
|
|
95
93
|
|
|
96
94
|
```text
|
|
97
|
-
e2e/config/
|
|
98
|
-
e2e/scripts/
|
|
99
|
-
e2e/specs/
|
|
95
|
+
repo-e2e/config/
|
|
96
|
+
repo-e2e/scripts/
|
|
97
|
+
repo-e2e/specs/
|
|
100
98
|
```
|
|
101
99
|
|
|
102
|
-
The public-package upgrade flow does not source or reconcile the Start baseline, its
|
|
100
|
+
The public-package upgrade flow does not source or reconcile the private Start baseline, its root E2E scripts, or `@playwright/test`. Keep project browser tests in the flat `repo-e2e/specs/` directory under distinct filenames, for example `repo-e2e/specs/my-project.spec.ts`.
|
|
103
101
|
|
|
104
102
|
## SSR browser checks
|
|
105
103
|
|
|
@@ -108,12 +106,12 @@ The unified runner has two modes:
|
|
|
108
106
|
- `npm run test:e2e`: clean local run; checks the managed port, resets the database, starts one development Vona worker, and runs Playwright.
|
|
109
107
|
- `npm run test:e2e:fast`: skips the reset for quick reruns and may target either the local managed server or an externally managed `E2E_BASE_URL`.
|
|
110
108
|
|
|
111
|
-
Place spec basenames directly after the npm script name; use npm's `--` delimiter only before Playwright options. Multiple spec names are allowed. With no names, every spec in `e2e/specs` is discovered:
|
|
109
|
+
Place spec basenames directly after the npm script name; use npm's `--` delimiter only before Playwright options. Multiple spec names are allowed. With no names, every spec in `repo-e2e/specs` is discovered:
|
|
112
110
|
|
|
113
111
|
```bash
|
|
114
|
-
npm run test:e2e cabloy-basic account
|
|
112
|
+
npm run test:e2e cabloy-basic home-user-account
|
|
115
113
|
npm run test:e2e a-commerce
|
|
116
|
-
npm run test:e2e:fast account
|
|
114
|
+
npm run test:e2e:fast home-user-account
|
|
117
115
|
npm run test:e2e:fast a-commerce -- --grep ATP-SSR
|
|
118
116
|
npm run test:e2e:fast a-commerce -- --grep-invert @admin
|
|
119
117
|
```
|
|
@@ -122,7 +120,7 @@ Tags remain independent from filenames. Repeat `--tag` to require all tags, whil
|
|
|
122
120
|
|
|
123
121
|
```bash
|
|
124
122
|
npm run test:e2e:fast a-commerce -- --tag @web --tag @smoke
|
|
125
|
-
npm run test:e2e:fast account -- --grep @flow --tag @web
|
|
123
|
+
npm run test:e2e:fast home-user-account -- --grep @flow --tag @web
|
|
126
124
|
```
|
|
127
125
|
|
|
128
126
|
The existing tags include `@web`, `@admin`, `@smoke`, `@flow`, `@ssr`, `@theme`, and the business tags used by Commerce such as `@cart`, `@payment`, `@shipment`, and `@refund`. No suite tag is required. Clean runs are local-only and reject `E2E_BASE_URL`; fast runs against an external target do not reset, start, stop, or rebuild that target.
|
|
@@ -134,7 +132,7 @@ The Basic baseline exercises Web at `/` and Admin at `/admin` through Vona's SSR
|
|
|
134
132
|
```bash
|
|
135
133
|
npm run build:zova
|
|
136
134
|
npm run deps:vona
|
|
137
|
-
npm run test:e2e cabloy-basic account
|
|
135
|
+
npm run test:e2e cabloy-basic home-user-account
|
|
138
136
|
```
|
|
139
137
|
|
|
140
138
|
Commerce browser acceptance exercises Customer Web at `/commerce` and Operator Admin routing at `/commerce-admin`. Prepare its paired artifacts explicitly:
|
|
@@ -158,24 +156,24 @@ The Start suite exercises Web at `/` and Admin at `/admin` through Vona's SSR di
|
|
|
158
156
|
```bash
|
|
159
157
|
npm run build:zova
|
|
160
158
|
npm run deps:vona
|
|
161
|
-
npm run test:e2e
|
|
159
|
+
npm run test:e2e
|
|
162
160
|
```
|
|
163
161
|
|
|
164
162
|
```bash
|
|
165
163
|
# Exact acceptance scenario
|
|
166
|
-
npm run test:e2e:start -- --grep ATP-START-FLOW-01
|
|
164
|
+
npm run test:e2e:fast cabloy-start -- --grep ATP-START-FLOW-01
|
|
167
165
|
|
|
168
166
|
# Category or surface selection
|
|
169
|
-
npm run test:e2e:start
|
|
170
|
-
npm run test:e2e:
|
|
167
|
+
npm run test:e2e:fast cabloy-start -- --tag @smoke
|
|
168
|
+
npm run test:e2e:fast cabloy-admin -- --tag @admin --tag @cabloy-admin
|
|
171
169
|
```
|
|
172
170
|
|
|
173
|
-
For an externally managed Start target, set `
|
|
171
|
+
For an externally managed Start target, set `E2E_BASE_URL` and use `npm run test:e2e:fast`. The target owner is responsible for data, cache, artifact freshness, and process lifecycle:
|
|
174
172
|
|
|
175
173
|
```bash
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
174
|
+
E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:fast
|
|
175
|
+
E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:fast cabloy-admin -- --tag @admin
|
|
176
|
+
E2E_BASE_URL=http://127.0.0.1:7102 npm run test:e2e:fast cabloy-start -- --tag @web
|
|
179
177
|
```
|
|
180
178
|
|
|
181
179
|
Browser commands consume existing SSR and REST artifacts; they never rebuild them. Install Chromium once when needed with `npx playwright install chromium`.
|
|
@@ -6,7 +6,7 @@ const externalBaseURL = process.env.E2E_BASE_URL;
|
|
|
6
6
|
const baseURL = externalBaseURL || E2E_LOCAL_BASE_URL;
|
|
7
7
|
|
|
8
8
|
export default defineConfig({
|
|
9
|
-
testDir: `${E2E_ROOT_DIR}/e2e/specs`,
|
|
9
|
+
testDir: `${E2E_ROOT_DIR}/repo-e2e/specs`,
|
|
10
10
|
fullyParallel: false,
|
|
11
11
|
workers: 1,
|
|
12
12
|
forbidOnly: !!process.env.CI,
|
|
@@ -19,7 +19,7 @@ export default defineConfig({
|
|
|
19
19
|
webServer: externalBaseURL
|
|
20
20
|
? undefined
|
|
21
21
|
: {
|
|
22
|
-
command: 'node e2e/scripts/startE2eVona.ts',
|
|
22
|
+
command: 'node repo-e2e/scripts/startE2eVona.ts',
|
|
23
23
|
cwd: E2E_ROOT_DIR,
|
|
24
24
|
url: `${baseURL}/`,
|
|
25
25
|
timeout: 180_000,
|
|
@@ -16,5 +16,5 @@ if (!Number.isInteger(e2ePort) || e2ePort <= 0 || e2ePort > 65535) {
|
|
|
16
16
|
|
|
17
17
|
export const E2E_PORT = e2ePort;
|
|
18
18
|
export const E2E_LOCAL_BASE_URL = `http://127.0.0.1:${E2E_PORT}`;
|
|
19
|
-
export const E2E_CONFIG_FILE = resolve(E2E_ROOT_DIR, 'e2e', 'config', 'playwright.config.ts');
|
|
20
|
-
export const E2E_SPECS_DIR = resolve(E2E_ROOT_DIR, 'e2e', 'specs');
|
|
19
|
+
export const E2E_CONFIG_FILE = resolve(E2E_ROOT_DIR, 'repo-e2e', 'config', 'playwright.config.ts');
|
|
20
|
+
export const E2E_SPECS_DIR = resolve(E2E_ROOT_DIR, 'repo-e2e', 'specs');
|