@shanyucoder/flowgrid 0.1.0
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/README.md +194 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationContext.cs +56 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationGen.csproj +16 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/NameUtil.cs +18 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Program.cs +265 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/application_service.cs.scriban +27 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/handoff.md.scriban +15 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/infrastructure_mock.cs.scriban +20 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/presenter.cs.scriban +41 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/service_test.cs.scriban +17 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/YamlMap.cs +49 -0
- package/adapters/dotnet-integration/registries/dotnet-integration.codegen.registry.json +8 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/LineContext.cs +43 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/LineGen.csproj +16 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/NameUtil.cs +12 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Program.cs +201 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/TemplateRenderer.cs +22 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/handoff.md.scriban +15 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service.cs.scriban +21 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service_interface.cs.scriban +20 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model.cs.scriban +28 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model_test.cs.scriban +22 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/YamlMap.cs +49 -0
- package/adapters/dotnet-line/registries/dotnet-line.codegen.registry.json +8 -0
- package/adapters/fastapi/codegen/runners/fast_gen/__init__.py +1 -0
- package/adapters/fastapi/codegen/runners/fast_gen/__main__.py +3 -0
- package/adapters/fastapi/codegen/runners/fast_gen/cli.py +175 -0
- package/adapters/fastapi/codegen/runners/fast_gen/plan.py +285 -0
- package/adapters/fastapi/codegen/runners/fast_gen/read_spec.py +34 -0
- package/adapters/fastapi/codegen/runners/fast_gen/registry.py +9 -0
- package/adapters/fastapi/codegen/runners/fast_gen/wire.py +28 -0
- package/adapters/fastapi/codegen/runners/fast_gen/write_files.py +232 -0
- package/adapters/fastapi/codegen/runners/generate +5 -0
- package/adapters/fastapi/codegen/runners/validate-registry.mjs +54 -0
- package/adapters/fastapi/codegen/templates/presenter.py.j2 +11 -0
- package/adapters/fastapi/codegen/templates/router.py.j2 +69 -0
- package/adapters/fastapi/codegen/templates/schemas_request.py.j2 +26 -0
- package/adapters/fastapi/codegen/templates/schemas_response.py.j2 +7 -0
- package/adapters/fastapi/codegen/templates/service_create.py.j2 +10 -0
- package/adapters/fastapi/codegen/templates/service_delete.py.j2 +10 -0
- package/adapters/fastapi/codegen/templates/service_search.py.j2 +9 -0
- package/adapters/fastapi/codegen/templates/service_update.py.j2 +11 -0
- package/adapters/fastapi/codegen/templates/store.py.j2 +1 -0
- package/adapters/fastapi/codegen/templates/test_router.py.j2 +13 -0
- package/adapters/fastapi/registries/codegen.registry.json +47 -0
- package/adapters/fastapi/registries/common.registry.json +23 -0
- package/adapters/fastapi/registries/unit-test.registry.json +12 -0
- package/adapters/fastapi/unitgen/runners/fast_unit_gen/__init__.py +1 -0
- package/adapters/fastapi/unitgen/runners/fast_unit_gen/cli.py +188 -0
- package/adapters/fastapi/unitgen/runners/generate +5 -0
- package/adapters/fastapi/unitgen/runners/validate-registry.mjs +48 -0
- package/adapters/fastapi/unitgen/templates/test_service.py.j2 +12 -0
- package/adapters/laravel/codegen/runners/README.md +45 -0
- package/adapters/laravel/codegen/runners/generate.mjs +296 -0
- package/adapters/laravel/codegen/runners/lib/codegen-registry.mjs +60 -0
- package/adapters/laravel/codegen/runners/lib/detect-existing.mjs +84 -0
- package/adapters/laravel/codegen/runners/lib/exec-artisan.mjs +86 -0
- package/adapters/laravel/codegen/runners/lib/parse-tags.mjs +49 -0
- package/adapters/laravel/codegen/runners/lib/plan.mjs +122 -0
- package/adapters/laravel/codegen/runners/lib/read-spec.mjs +30 -0
- package/adapters/laravel/codegen/runners/lib/resolve-commands.mjs +234 -0
- package/adapters/laravel/codegen/runners/lib/stub-services.mjs +91 -0
- package/adapters/laravel/codegen/runners/lib/tag-plan.mjs +155 -0
- package/adapters/laravel/codegen/runners/lib/validate.mjs +77 -0
- package/adapters/laravel/codegen/runners/lib/workspace-analysis.mjs +202 -0
- package/adapters/laravel/codegen/runners/lib/write-handoff.mjs +149 -0
- package/adapters/laravel/codegen/runners/lib/write-manifest.mjs +81 -0
- package/adapters/laravel/codegen/runners/validate-registry.mjs +52 -0
- package/adapters/laravel/php/README.md +26 -0
- package/adapters/laravel/php/bin/unit-gen.php +307 -0
- package/adapters/laravel/php/bin/validate-registry.php +61 -0
- package/adapters/laravel/php/composer.json +16 -0
- package/adapters/laravel/php/src/ArtisanRunner.php +56 -0
- package/adapters/laravel/php/src/Autoload.php +15 -0
- package/adapters/laravel/php/src/CodegenManifest.php +28 -0
- package/adapters/laravel/php/src/ParseTags.php +62 -0
- package/adapters/laravel/php/src/ProjectResolver.php +100 -0
- package/adapters/laravel/php/src/SpecExtract.php +193 -0
- package/adapters/laravel/php/src/SpecReader.php +57 -0
- package/adapters/laravel/php/src/TemplateRenderer.php +134 -0
- package/adapters/laravel/php/src/UnitPlanner.php +396 -0
- package/adapters/laravel/php/src/UnitRegistry.php +100 -0
- package/adapters/laravel/php/src/WhenEval.php +111 -0
- package/adapters/laravel/php/src/WorkspaceInspector.php +240 -0
- package/adapters/laravel/php/src/WriteFiles.php +194 -0
- package/adapters/laravel/php/templates/actions/relationship-sync.behavior.test.php.stub +50 -0
- package/adapters/laravel/php/templates/controllers/controller-invoke.test.php.stub +34 -0
- package/adapters/laravel/php/templates/queries/chain-scope.behavior.test.php.stub +34 -0
- package/adapters/laravel/php/templates/requests/default-per-page.behavior.test.php.stub +19 -0
- package/adapters/laravel/php/templates/requests/request-enriched.test.php.stub +66 -0
- package/adapters/laravel/php/templates/requests/rules-keys.behavior.test.php.stub +19 -0
- package/adapters/laravel/php/templates/resources/nested-relations.behavior.test.php.stub +25 -0
- package/adapters/laravel/php/templates/resources/openapi-shape.behavior.test.php.stub +28 -0
- package/adapters/laravel/php/templates/support/ModuleTestSupport.php.stub +32 -0
- package/adapters/laravel/registries/codegen.registry.json +190 -0
- package/adapters/laravel/registries/unit-test.registry.json +179 -0
- package/adapters/laravel/shared/project.mjs +62 -0
- package/adapters/nestjs/README.md +16 -0
- package/adapters/nestjs/nest-unitgen/runners/README.md +17 -0
- package/adapters/nestjs/nest-unitgen/runners/generate.mjs +113 -0
- package/adapters/nestjs/nest-unitgen/runners/lib/render.mjs +14 -0
- package/adapters/nestjs/nest-unitgen/runners/lib/write-files.mjs +40 -0
- package/adapters/nestjs/nest-unitgen/runners/validate-registry.mjs +35 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/create.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/delete.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/update.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/handlers/search.handler.spec.ts.hbs +33 -0
- package/adapters/nestjs/nest-unitgen/templates/resource/entity.resource.spec.ts.hbs +22 -0
- package/adapters/nestjs/nestgen/runners/README.md +30 -0
- package/adapters/nestjs/nestgen/runners/generate.mjs +87 -0
- package/adapters/nestjs/nestgen/runners/lib/orm-fields.mjs +253 -0
- package/adapters/nestjs/nestgen/runners/lib/plan.mjs +124 -0
- package/adapters/nestjs/nestgen/runners/lib/read-spec.mjs +52 -0
- package/adapters/nestjs/nestgen/runners/lib/render.mjs +52 -0
- package/adapters/nestjs/nestgen/runners/lib/workspace-analysis.mjs +80 -0
- package/adapters/nestjs/nestgen/runners/lib/write-files.mjs +49 -0
- package/adapters/nestjs/nestgen/runners/validate-registry.mjs +36 -0
- package/adapters/nestjs/nestgen/templates/commands/create.command.ts.hbs +3 -0
- package/adapters/nestjs/nestgen/templates/commands/create.handler.ts.hbs +34 -0
- package/adapters/nestjs/nestgen/templates/commands/delete.command.ts.hbs +3 -0
- package/adapters/nestjs/nestgen/templates/commands/delete.handler.ts.hbs +33 -0
- package/adapters/nestjs/nestgen/templates/commands/update.command.ts.hbs +6 -0
- package/adapters/nestjs/nestgen/templates/commands/update.handler.ts.hbs +34 -0
- package/adapters/nestjs/nestgen/templates/entity.controller.ts.hbs +51 -0
- package/adapters/nestjs/nestgen/templates/entity.resource.ts.hbs +45 -0
- package/adapters/nestjs/nestgen/templates/module.module.ts.hbs +38 -0
- package/adapters/nestjs/nestgen/templates/orm/prisma.entity.ts.hbs +10 -0
- package/adapters/nestjs/nestgen/templates/orm/prisma.model.prisma.hbs +9 -0
- package/adapters/nestjs/nestgen/templates/orm/typeorm.entity.ts.hbs +20 -0
- package/adapters/nestjs/nestgen/templates/queries/search.handler.ts.hbs +36 -0
- package/adapters/nestjs/nestgen/templates/queries/search.query.ts.hbs +3 -0
- package/adapters/nestjs/registries/nest-codegen.registry.json +41 -0
- package/adapters/nestjs/registries/nest-unit-test.registry.json +31 -0
- package/adapters/nextjs/codegen/runners/README.md +68 -0
- package/adapters/nextjs/codegen/runners/generate.mjs +236 -0
- package/adapters/nextjs/codegen/runners/lib/component-resolve.mjs +79 -0
- package/adapters/nextjs/codegen/runners/lib/design-registry.mjs +333 -0
- package/adapters/nextjs/codegen/runners/lib/naming.mjs +236 -0
- package/adapters/nextjs/codegen/runners/lib/page-lifecycle.mjs +258 -0
- package/adapters/nextjs/codegen/runners/lib/plan.mjs +399 -0
- package/adapters/nextjs/codegen/runners/lib/read-spec.mjs +7 -0
- package/adapters/nextjs/codegen/runners/lib/render.mjs +47 -0
- package/adapters/nextjs/codegen/runners/lib/resolve-hub-id.mjs +288 -0
- package/adapters/nextjs/codegen/runners/lib/slots.mjs +121 -0
- package/adapters/nextjs/codegen/runners/lib/web-paths.mjs +64 -0
- package/adapters/nextjs/codegen/runners/lib/write-files.mjs +106 -0
- package/adapters/nextjs/codegen/runners/validate-registry.mjs +99 -0
- package/adapters/nextjs/codegen/templates/common/confirm-dialog.hbs +81 -0
- package/adapters/nextjs/codegen/templates/common/delete-flow.hbs +106 -0
- package/adapters/nextjs/codegen/templates/create/form.tsx.hbs +45 -0
- package/adapters/nextjs/codegen/templates/create/mock.ts.hbs +15 -0
- package/adapters/nextjs/codegen/templates/create/page.tsx.hbs +12 -0
- package/adapters/nextjs/codegen/templates/create/service.ts.hbs +25 -0
- package/adapters/nextjs/codegen/templates/create/useForm.ts.hbs +59 -0
- package/adapters/nextjs/codegen/templates/create/validation.ts.hbs +16 -0
- package/adapters/nextjs/codegen/templates/list/mock.ts.hbs +25 -0
- package/adapters/nextjs/codegen/templates/list/page.custom.tsx.hbs +65 -0
- package/adapters/nextjs/codegen/templates/list/page.tsx.hbs +37 -0
- package/adapters/nextjs/codegen/templates/list/service.ts.hbs +37 -0
- package/adapters/nextjs/codegen/templates/list/useList.ts.hbs +93 -0
- package/adapters/nextjs/codegen/templates/list/useListColumns.ts.hbs +27 -0
- package/adapters/nextjs/codegen/templates/list/useListExport.ts.hbs +31 -0
- package/adapters/nextjs/codegen/templates/list/useListFilters.ts.hbs +50 -0
- package/adapters/nextjs/codegen/templates/store/store.ts.hbs +28 -0
- package/adapters/nextjs/contractgen/runners/README.md +47 -0
- package/adapters/nextjs/contractgen/runners/generate.mjs +108 -0
- package/adapters/nextjs/contractgen/runners/lib/field-zod.mjs +83 -0
- package/adapters/nextjs/contractgen/runners/lib/naming.mjs +46 -0
- package/adapters/nextjs/contractgen/runners/lib/plan.mjs +147 -0
- package/adapters/nextjs/contractgen/runners/lib/render.mjs +57 -0
- package/adapters/nextjs/contractgen/runners/lib/write-files.mjs +54 -0
- package/adapters/nextjs/contractgen/runners/validate-registry.mjs +54 -0
- package/adapters/nextjs/contractgen/templates/index.ts.hbs +8 -0
- package/adapters/nextjs/contractgen/templates/read.schema.ts.hbs +22 -0
- package/adapters/nextjs/contractgen/templates/relationships.meta.ts.hbs +23 -0
- package/adapters/nextjs/contractgen/templates/types.ts.hbs +15 -0
- package/adapters/nextjs/contractgen/templates/write.schema.ts.hbs +11 -0
- package/adapters/nextjs/registries/contract-field.registry.json +22 -0
- package/adapters/nextjs/unitgen/runners/README.md +12 -0
- package/adapters/nextjs/unitgen/runners/generate.mjs +201 -0
- package/adapters/nextjs/unitgen/runners/lib/parse-tags.mjs +67 -0
- package/adapters/nextjs/unitgen/runners/lib/plan.mjs +563 -0
- package/adapters/nextjs/unitgen/runners/lib/read-codegen.mjs +42 -0
- package/adapters/nextjs/unitgen/runners/lib/render.mjs +32 -0
- package/adapters/nextjs/unitgen/runners/lib/resolve-model.mjs +28 -0
- package/adapters/nextjs/unitgen/runners/lib/unit-registry.mjs +52 -0
- package/adapters/nextjs/unitgen/runners/lib/write-files.mjs +103 -0
- package/adapters/nextjs/unitgen/runners/lib/write-spec-tags.mjs +37 -0
- package/adapters/nextjs/unitgen/runners/validate-registry.mjs +74 -0
- package/adapters/nextjs/unitgen/templates/hooks/use-form.test.ts.hbs +51 -0
- package/adapters/nextjs/unitgen/templates/hooks/use-list.test.ts.hbs +63 -0
- package/adapters/nextjs/unitgen/templates/models/schema.test.ts.hbs +24 -0
- package/adapters/nextjs/unitgen/templates/services/service.create.test.ts.hbs +28 -0
- package/adapters/nextjs/unitgen/templates/services/service.export.test.ts.hbs +20 -0
- package/adapters/nextjs/unitgen/templates/services/service.search.test.ts.hbs +25 -0
- package/adapters/nextjs/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
- package/adapters/nextjs/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
- package/adapters/nuxt4/codegen/runners/README.md +83 -0
- package/adapters/nuxt4/codegen/runners/generate.mjs +236 -0
- package/adapters/nuxt4/codegen/runners/lib/component-resolve.mjs +66 -0
- package/adapters/nuxt4/codegen/runners/lib/design-registry.mjs +332 -0
- package/adapters/nuxt4/codegen/runners/lib/naming.mjs +246 -0
- package/adapters/nuxt4/codegen/runners/lib/page-lifecycle.mjs +254 -0
- package/adapters/nuxt4/codegen/runners/lib/plan.mjs +370 -0
- package/adapters/nuxt4/codegen/runners/lib/read-spec.mjs +7 -0
- package/adapters/nuxt4/codegen/runners/lib/render.mjs +47 -0
- package/adapters/nuxt4/codegen/runners/lib/resolve-hub-id.mjs +288 -0
- package/adapters/nuxt4/codegen/runners/lib/slots.mjs +121 -0
- package/adapters/nuxt4/codegen/runners/lib/write-files.mjs +106 -0
- package/adapters/nuxt4/codegen/runners/validate-registry.mjs +121 -0
- package/adapters/nuxt4/codegen/templates/create/form.vue.hbs +26 -0
- package/adapters/nuxt4/codegen/templates/create/mock.ts.hbs +11 -0
- package/adapters/nuxt4/codegen/templates/create/model.schema.ts.hbs +14 -0
- package/adapters/nuxt4/codegen/templates/create/model.types.ts.hbs +9 -0
- package/adapters/nuxt4/codegen/templates/create/page.vue.hbs +11 -0
- package/adapters/nuxt4/codegen/templates/create/service.ts.hbs +25 -0
- package/adapters/nuxt4/codegen/templates/create/useForm.ts.hbs +29 -0
- package/adapters/nuxt4/codegen/templates/create/validation.ts.hbs +12 -0
- package/adapters/nuxt4/codegen/templates/list/mock.ts.hbs +27 -0
- package/adapters/nuxt4/codegen/templates/list/model.index.ts.hbs +2 -0
- package/adapters/nuxt4/codegen/templates/list/model.schema.ts.hbs +16 -0
- package/adapters/nuxt4/codegen/templates/list/model.types.ts.hbs +9 -0
- package/adapters/nuxt4/codegen/templates/list/page.custom.vue.hbs +105 -0
- package/adapters/nuxt4/codegen/templates/list/page.vue.hbs +55 -0
- package/adapters/nuxt4/codegen/templates/list/service.ts.hbs +37 -0
- package/adapters/nuxt4/codegen/templates/list/useList.ts.hbs +82 -0
- package/adapters/nuxt4/codegen/templates/list/useListColumns.ts.hbs +21 -0
- package/adapters/nuxt4/codegen/templates/list/useListExport.ts.hbs +26 -0
- package/adapters/nuxt4/codegen/templates/list/useListFilters.ts.hbs +45 -0
- package/adapters/nuxt4/codegen/templates/partials/component-stub.vue.hbs +44 -0
- package/adapters/nuxt4/codegen/templates/store/store.ts.hbs +30 -0
- package/adapters/nuxt4/unitgen/runners/README.md +12 -0
- package/adapters/nuxt4/unitgen/runners/generate.mjs +201 -0
- package/adapters/nuxt4/unitgen/runners/lib/parse-tags.mjs +49 -0
- package/adapters/nuxt4/unitgen/runners/lib/plan.mjs +567 -0
- package/adapters/nuxt4/unitgen/runners/lib/read-codegen.mjs +42 -0
- package/adapters/nuxt4/unitgen/runners/lib/render.mjs +32 -0
- package/adapters/nuxt4/unitgen/runners/lib/unit-registry.mjs +52 -0
- package/adapters/nuxt4/unitgen/runners/lib/write-files.mjs +103 -0
- package/adapters/nuxt4/unitgen/runners/lib/write-spec-tags.mjs +37 -0
- package/adapters/nuxt4/unitgen/runners/validate-registry.mjs +74 -0
- package/adapters/nuxt4/unitgen/templates/composables/use-form.test.ts.hbs +56 -0
- package/adapters/nuxt4/unitgen/templates/composables/use-list.test.ts.hbs +59 -0
- package/adapters/nuxt4/unitgen/templates/models/schema.test.ts.hbs +24 -0
- package/adapters/nuxt4/unitgen/templates/services/service.create.test.ts.hbs +28 -0
- package/adapters/nuxt4/unitgen/templates/services/service.export.test.ts.hbs +20 -0
- package/adapters/nuxt4/unitgen/templates/services/service.search.test.ts.hbs +25 -0
- package/adapters/nuxt4/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
- package/adapters/nuxt4/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
- package/adapters/shared/common-gen.mjs +599 -0
- package/adapters/shared/common-ui.catalog.json +224 -0
- package/adapters/shared/css-adapters/shadcn.mjs +56 -0
- package/adapters/shared/css-adapters/winforms.mjs +46 -0
- package/adapters/shared/css-gen.mjs +87 -0
- package/adapters/shared/fe-layout-profiles.mjs +74 -0
- package/adapters/shared/fe-ui-inventory.mjs +62 -0
- package/adapters/shared/i18n-merge.mjs +56 -0
- package/adapters/shared/read-fe-ir.mjs +64 -0
- package/adapters/shared/resolve-cli.mjs +16 -0
- package/adapters/shared/resolve-hub-id.mjs +381 -0
- package/adapters/shared/surface-common.mjs +41 -0
- package/bin/flowgrid-mcp.mjs +29 -0
- package/bin/flowgrid.mjs +915 -0
- package/bin/lib/agent-mcp.mjs +70 -0
- package/bin/lib/agent-profiles.mjs +127 -0
- package/bin/lib/audit-run.mjs +96 -0
- package/bin/lib/cli-update.mjs +254 -0
- package/bin/lib/doctor.mjs +163 -0
- package/bin/lib/harness-overlay.mjs +80 -0
- package/bin/lib/harness-sync.mjs +427 -0
- package/bin/lib/init-scaffold.mjs +158 -0
- package/bin/lib/npm-registry.mjs +45 -0
- package/bin/lib/project-gitignore.mjs +39 -0
- package/dist/codegen/adapters/run-be.d.ts +13 -0
- package/dist/codegen/adapters/run-be.js +190 -0
- package/dist/codegen/adapters/run-be.js.map +1 -0
- package/dist/codegen/adapters/run.d.ts +44 -0
- package/dist/codegen/adapters/run.js +146 -0
- package/dist/codegen/adapters/run.js.map +1 -0
- package/dist/codegen/config/project-root.d.ts +13 -0
- package/dist/codegen/config/project-root.js +64 -0
- package/dist/codegen/config/project-root.js.map +1 -0
- package/dist/codegen/mcp/tools.d.ts +2 -0
- package/dist/codegen/mcp/tools.js +138 -0
- package/dist/codegen/mcp/tools.js.map +1 -0
- package/dist/codegen/registries/common.d.ts +28 -0
- package/dist/codegen/registries/common.js +54 -0
- package/dist/codegen/registries/common.js.map +1 -0
- package/dist/dna/config/project-root.d.ts +12 -0
- package/dist/dna/config/project-root.js +41 -0
- package/dist/dna/config/project-root.js.map +1 -0
- package/dist/dna/profile/detect.d.ts +14 -0
- package/dist/dna/profile/detect.js +159 -0
- package/dist/dna/profile/detect.js.map +1 -0
- package/dist/dna/profile/manifest.d.ts +17 -0
- package/dist/dna/profile/manifest.js +10 -0
- package/dist/dna/profile/manifest.js.map +1 -0
- package/dist/docs/cli/engines.d.ts +13 -0
- package/dist/docs/cli/engines.js +53 -0
- package/dist/docs/cli/engines.js.map +1 -0
- package/dist/docs/config/docs-root.d.ts +8 -0
- package/dist/docs/config/docs-root.js +66 -0
- package/dist/docs/config/docs-root.js.map +1 -0
- package/dist/docs/mcp/tools.d.ts +2 -0
- package/dist/docs/mcp/tools.js +351 -0
- package/dist/docs/mcp/tools.js.map +1 -0
- package/dist/docs/scan/ids.d.ts +29 -0
- package/dist/docs/scan/ids.js +237 -0
- package/dist/docs/scan/ids.js.map +1 -0
- package/dist/docs/scan/links.d.ts +10 -0
- package/dist/docs/scan/links.js +98 -0
- package/dist/docs/scan/links.js.map +1 -0
- package/dist/docs/scan/route.d.ts +8 -0
- package/dist/docs/scan/route.js +114 -0
- package/dist/docs/scan/route.js.map +1 -0
- package/dist/graph/analyze/analyze-bullets.d.ts +17 -0
- package/dist/graph/analyze/analyze-bullets.js +137 -0
- package/dist/graph/analyze/analyze-bullets.js.map +1 -0
- package/dist/graph/analyze/analyze-spec.d.ts +12 -0
- package/dist/graph/analyze/analyze-spec.js +249 -0
- package/dist/graph/analyze/analyze-spec.js.map +1 -0
- package/dist/graph/analyze/api-routes.d.ts +66 -0
- package/dist/graph/analyze/api-routes.js +370 -0
- package/dist/graph/analyze/api-routes.js.map +1 -0
- package/dist/graph/analyze/context-orphan.d.ts +12 -0
- package/dist/graph/analyze/context-orphan.js +229 -0
- package/dist/graph/analyze/context-orphan.js.map +1 -0
- package/dist/graph/analyze/grill-check.d.ts +31 -0
- package/dist/graph/analyze/grill-check.js +92 -0
- package/dist/graph/analyze/grill-check.js.map +1 -0
- package/dist/graph/analyze/parity-check.d.ts +25 -0
- package/dist/graph/analyze/parity-check.js +406 -0
- package/dist/graph/analyze/parity-check.js.map +1 -0
- package/dist/graph/analyze/product-paths.d.ts +13 -0
- package/dist/graph/analyze/product-paths.js +29 -0
- package/dist/graph/analyze/product-paths.js.map +1 -0
- package/dist/graph/analyze/surface-paths.d.ts +13 -0
- package/dist/graph/analyze/surface-paths.js +29 -0
- package/dist/graph/analyze/surface-paths.js.map +1 -0
- package/dist/graph/config/load-config.d.ts +30 -0
- package/dist/graph/config/load-config.js +112 -0
- package/dist/graph/config/load-config.js.map +1 -0
- package/dist/graph/config/platform-repos.d.ts +36 -0
- package/dist/graph/config/platform-repos.js +124 -0
- package/dist/graph/config/platform-repos.js.map +1 -0
- package/dist/graph/config/resolve-paths.d.ts +45 -0
- package/dist/graph/config/resolve-paths.js +121 -0
- package/dist/graph/config/resolve-paths.js.map +1 -0
- package/dist/graph/db/index-store.d.ts +67 -0
- package/dist/graph/db/index-store.js +179 -0
- package/dist/graph/db/index-store.js.map +1 -0
- package/dist/graph/gen/run-command.d.ts +40 -0
- package/dist/graph/gen/run-command.js +110 -0
- package/dist/graph/gen/run-command.js.map +1 -0
- package/dist/graph/lexicon/infer-lane.d.ts +11 -0
- package/dist/graph/lexicon/infer-lane.js +28 -0
- package/dist/graph/lexicon/infer-lane.js.map +1 -0
- package/dist/graph/lexicon/load-lexicon.d.ts +60 -0
- package/dist/graph/lexicon/load-lexicon.js +492 -0
- package/dist/graph/lexicon/load-lexicon.js.map +1 -0
- package/dist/graph/mcp/tools.d.ts +9 -0
- package/dist/graph/mcp/tools.js +326 -0
- package/dist/graph/mcp/tools.js.map +1 -0
- package/dist/graph/registry/load-registries.d.ts +27 -0
- package/dist/graph/registry/load-registries.js +111 -0
- package/dist/graph/registry/load-registries.js.map +1 -0
- package/dist/graph/types.d.ts +208 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/test/config/project-root.d.ts +5 -0
- package/dist/test/config/project-root.js +29 -0
- package/dist/test/config/project-root.js.map +1 -0
- package/dist/test/engines/run.d.ts +10 -0
- package/dist/test/engines/run.js +16 -0
- package/dist/test/engines/run.js.map +1 -0
- package/dist/test/mcp/tools.d.ts +2 -0
- package/dist/test/mcp/tools.js +43 -0
- package/dist/test/mcp/tools.js.map +1 -0
- package/dist/test/optional/fallback-evidence.d.ts +34 -0
- package/dist/test/optional/fallback-evidence.js +103 -0
- package/dist/test/optional/fallback-evidence.js.map +1 -0
- package/engines/cases/README.md +12 -0
- package/engines/cases/check-coverage.mjs +103 -0
- package/engines/cases/check-plans.mjs +31 -0
- package/engines/cases/gate.mjs +215 -0
- package/engines/cases/lib/audit-tc-traceability.mjs +139 -0
- package/engines/cases/lib/list-case-yaml.mjs +27 -0
- package/engines/cases/lib/parse-bundle-traceability.mjs +77 -0
- package/engines/cases/lib/render-github-catalog.mjs +141 -0
- package/engines/cases/lib/resolve-bundle-from-screen.mjs +73 -0
- package/engines/cases/lib/screen-facet-coverage.mjs +42 -0
- package/engines/cases/lib/validate-tc-schema.mjs +61 -0
- package/engines/cases/publish.mjs +4 -0
- package/engines/cases/render-cases.mjs +182 -0
- package/engines/cases/vitepress/config.ts +171 -0
- package/engines/cases/vitepress/theme/custom.css +418 -0
- package/engines/cases/vitepress/theme/index.ts +46 -0
- package/engines/codegen/adapters/shadcn.mjs +58 -0
- package/engines/codegen/adapters/winforms.mjs +46 -0
- package/engines/codegen/tokens.mjs +64 -0
- package/engines/docs/lib/load-dev-base-url.mjs +38 -0
- package/engines/docs/lib/markdown-table.mjs +65 -0
- package/engines/docs/lib/render-bundle-markdown.mjs +95 -0
- package/engines/docs/lib/render-design-tables.mjs +695 -0
- package/engines/docs/lib/render-github-catalog.mjs +194 -0
- package/engines/docs/lib/render-qa-list.mjs +57 -0
- package/engines/docs/lib/render-spec-markdown.mjs +19 -0
- package/engines/docs/lib/render-template.mjs +76 -0
- package/engines/docs/lib/route-page-probe.mjs +54 -0
- package/engines/docs/publish.mjs +4 -0
- package/engines/docs/render-docs.mjs +195 -0
- package/engines/docs/vitepress/config.ts +442 -0
- package/engines/docs/vitepress/surfaces-nav.mjs +171 -0
- package/engines/docs/vitepress/theme/custom.css +418 -0
- package/engines/docs/vitepress/theme/index.ts +46 -0
- package/engines/openapi/build-openapi-ui.mjs +72 -0
- package/engines/openapi/build-swagger-ui.mjs +72 -0
- package/engines/openapi/check-backend-spec.mjs +66 -0
- package/engines/openapi/gen-openapi.mjs +337 -0
- package/engines/openapi/render-backend-spec.mjs +170 -0
- package/engines/openapi/render-openapi.mjs +155 -0
- package/engines/shared/flowgrid-tests-docs.mjs +32 -0
- package/engines/spec/extract-i18n.mjs +74 -0
- package/engines/spec/legacy-dynamics-validate.mjs +67 -0
- package/engines/spec/lib/audit-api-gaps.mjs +198 -0
- package/engines/spec/lib/audit-bundle-gaps.mjs +582 -0
- package/engines/spec/lib/audit-e2e-coverage.mjs +381 -0
- package/engines/spec/lib/audit-fe-be-alignment.mjs +183 -0
- package/engines/spec/lib/audit-flow-gaps.mjs +151 -0
- package/engines/spec/lib/audit-legacy-gaps.mjs +73 -0
- package/engines/spec/lib/audit-scenario-coverage.mjs +175 -0
- package/engines/spec/lib/audit-testcase-bundle-cross.mjs +145 -0
- package/engines/spec/lib/audit-testcase-gaps.mjs +79 -0
- package/engines/spec/lib/audit-testcase-plan-gaps.mjs +131 -0
- package/engines/spec/lib/audit-testcase-tc.mjs +182 -0
- package/engines/spec/lib/audit-ux-affordance.mjs +269 -0
- package/engines/spec/lib/bundle-ir.mjs +360 -0
- package/engines/spec/lib/bundle-schema.mjs +199 -0
- package/engines/spec/lib/collect-screen-api-intents.mjs +69 -0
- package/engines/spec/lib/hydrate-design-api.mjs +58 -0
- package/engines/spec/lib/open-qa.mjs +66 -0
- package/engines/spec/lib/project-business-layout.mjs +214 -0
- package/engines/spec/lib/testcase-matrix-facets.mjs +9 -0
- package/engines/spec/merge-bundle.mjs +27 -0
- package/engines/spec/normalize-bundle-gen.mjs +69 -0
- package/engines/spec/split-all.mjs +78 -0
- package/engines/spec/split-bundle.mjs +45 -0
- package/engines/template-builder/runner.mjs +96 -0
- package/engines/template-builder/scanner.mjs +138 -0
- package/engines/testcase/_staging-from-portal/README-STAGING.md +13 -0
- package/engines/testcase/_staging-from-portal/runners/README.md +15 -0
- package/engines/testcase/_staging-from-portal/runners/generate.mjs +123 -0
- package/engines/testcase/_staging-from-portal/runners/lib/e2e-registry.mjs +77 -0
- package/engines/testcase/_staging-from-portal/runners/lib/plan.mjs +97 -0
- package/engines/testcase/_staging-from-portal/runners/lib/read-testcase.mjs +166 -0
- package/engines/testcase/_staging-from-portal/runners/lib/render.mjs +18 -0
- package/engines/testcase/_staging-from-portal/runners/lib/semantic-plan.mjs +178 -0
- package/engines/testcase/_staging-from-portal/runners/lib/write-files.mjs +42 -0
- package/engines/testcase/_staging-from-portal/runners/validate-registry.mjs +75 -0
- package/engines/testcase/_staging-from-portal/templates/page.ts.hbs +52 -0
- package/engines/testcase/_staging-from-portal/templates/partials/README.md +5 -0
- package/engines/testcase/_staging-from-portal/templates/spec.ts.hbs +214 -0
- package/engines/testcase/runners/README.md +27 -0
- package/engines/testcase/runners/generate-api.mjs +121 -0
- package/engines/testcase/runners/generate.mjs +161 -0
- package/engines/testcase/runners/lib/api-plan.mjs +64 -0
- package/engines/testcase/runners/lib/e2e-registry.mjs +77 -0
- package/engines/testcase/runners/lib/plan.mjs +123 -0
- package/engines/testcase/runners/lib/read-spec.mjs +37 -0
- package/engines/testcase/runners/lib/read-testcase.mjs +179 -0
- package/engines/testcase/runners/lib/render.mjs +18 -0
- package/engines/testcase/runners/lib/resolve-hub-id.mjs +324 -0
- package/engines/testcase/runners/lib/semantic-plan.mjs +178 -0
- package/engines/testcase/runners/lib/write-files.mjs +145 -0
- package/engines/testcase/runners/validate-registry.mjs +75 -0
- package/engines/testcase/templates/api.spec.ts.hbs +40 -0
- package/engines/testcase/templates/page.ts.hbs +69 -0
- package/engines/testcase/templates/partials/README.md +5 -0
- package/engines/testcase/templates/spec.ts.hbs +231 -0
- package/harness/agents/claude/rules/claude-flowgrid.mdc +9 -0
- package/harness/agents/cursor/rules/cursor-flowgrid.mdc +9 -0
- package/harness/agents/gemini_antigravity/rules/antigravity-mcp.mdc +10 -0
- package/harness/agents/kiro/rules/kiro-flowgrid.mdc +9 -0
- package/harness/be/adapters/dotnet-integration/skills/framework-rules-be/SKILL.md +21 -0
- package/harness/be/adapters/fastapi/skills/framework-rules-be/SKILL.md +27 -0
- package/harness/be/adapters/laravel/skills/framework-rules-be/SKILL.md +27 -0
- package/harness/be/extracts/artifactgraph-hooks-be.md +21 -0
- package/harness/be/extracts/risk-classes.md +69 -0
- package/harness/be/skills/api/SKILL.md +116 -0
- package/harness/be/skills/api-unit/SKILL.md +76 -0
- package/harness/be/skills/grill-api/SKILL.md +69 -0
- package/harness/be/skills/grill-api-unit/SKILL.md +57 -0
- package/harness/common/extracts/artifact-graph.md +23 -0
- package/harness/common/extracts/artifactgraph-hooks-core.md +17 -0
- package/harness/common/extracts/artifactgraph-phase-hooks.md +106 -0
- package/harness/common/extracts/core/agent-discipline.md +8 -0
- package/harness/common/extracts/docs-mark-detect.md +48 -0
- package/harness/common/extracts/docs-mark.md +62 -0
- package/harness/common/extracts/extract-registry.json +29 -0
- package/harness/common/extracts/ux-common-patterns.md +172 -0
- package/harness/common/rules/artifactgraph.mdc +26 -0
- package/harness/common/rules/cross-repo-index.mdc +47 -0
- package/harness/common/rules/flowgrid-ux-common.mdc +39 -0
- package/harness/common/rules/platform-code-size.mdc +24 -0
- package/harness/common/rules/team-flow-harness-state.mdc +12 -0
- package/harness/common/skills/business-impact-review/SKILL.md +106 -0
- package/harness/common/skills/configure-repo-maps/SKILL.md +58 -0
- package/harness/common/skills/docs-mark/SKILL.md +67 -0
- package/harness/common/skills/legacy/SKILL.md +29 -0
- package/harness/common/skills/ui-proposal/SKILL.md +28 -0
- package/harness/docs/extracts/agent-execution-protocol.md +31 -0
- package/harness/docs/extracts/architecture-core.md +71 -0
- package/harness/docs/extracts/artifactgraph-hooks-docs.md +15 -0
- package/harness/docs/extracts/artifactgraph-parity.md +10 -0
- package/harness/docs/extracts/business-process-trace.md +66 -0
- package/harness/docs/extracts/codegen/readiness.md +8 -0
- package/harness/docs/extracts/common-scope.md +65 -0
- package/harness/docs/extracts/docs-phase-hooks.md +22 -0
- package/harness/docs/extracts/extract-registry.docs.json +45 -0
- package/harness/docs/extracts/extract-registry.flowgrid-process.json +12 -0
- package/harness/docs/extracts/grill/validation.md +9 -0
- package/harness/docs/extracts/grill-docs-reconcile.md +5 -0
- package/harness/docs/extracts/qa-inbox.md +36 -0
- package/harness/docs/extracts/risk-classes.md +69 -0
- package/harness/docs/extracts/spec-core.md +5 -0
- package/harness/docs/extracts/spec-requirement.md +5 -0
- package/harness/docs/extracts/tpl-adr.md +23 -0
- package/harness/docs/extracts/tpl-arc42-chapter.md +29 -0
- package/harness/docs/extracts/tpl-cross-cutting.md +24 -0
- package/harness/docs/extracts/tpl-deployment.md +23 -0
- package/harness/docs/extracts/tpl-module.md +33 -0
- package/harness/docs/extracts/update-spec-delta.md +5 -0
- package/harness/docs/rules/agent-compliance.mdc +26 -0
- package/harness/docs/rules/docs-hub.mdc +54 -0
- package/harness/docs/rules/flowgrid-process.mdc +25 -0
- package/harness/docs/rules/team-flow-grill.mdc +31 -0
- package/harness/docs/rules/team-flow-harness-state.mdc +16 -0
- package/harness/docs/rules/team-flow-spec.mdc +36 -0
- package/harness/docs/schemas/flowgrid-docs/backend-api.schema.json +175 -0
- package/harness/docs/schemas/flowgrid-docs/missing-optional-event.schema.json +39 -0
- package/harness/docs/schemas/flowgrid-docs/spec.schema.json +643 -0
- package/harness/docs/schemas/flowgrid-docs/testcase.schema.json +29 -0
- package/harness/docs/schemas/flowgrid-process/missing-optional-event.schema.json +39 -0
- package/harness/docs/skills/adopt/SKILL.md +140 -0
- package/harness/docs/skills/api/SKILL.md +40 -0
- package/harness/docs/skills/api-integration/SKILL.md +110 -0
- package/harness/docs/skills/api-spec/SKILL.md +136 -0
- package/harness/docs/skills/api-update/SKILL.md +82 -0
- package/harness/docs/skills/architecture/SKILL.md +57 -0
- package/harness/docs/skills/architecture-grill/SKILL.md +29 -0
- package/harness/docs/skills/background-logic/SKILL.md +100 -0
- package/harness/docs/skills/build-templates/SKILL.md +47 -0
- package/harness/docs/skills/business-process/SKILL.md +109 -0
- package/harness/docs/skills/call-external/SKILL.md +32 -0
- package/harness/docs/skills/common/SKILL.md +46 -0
- package/harness/docs/skills/common-spec/SKILL.md +55 -0
- package/harness/docs/skills/cross-cutting/SKILL.md +33 -0
- package/harness/docs/skills/cross-entity-service/SKILL.md +32 -0
- package/harness/docs/skills/cross-service/SKILL.md +37 -0
- package/harness/docs/skills/db-erd/SKILL.md +29 -0
- package/harness/docs/skills/decision/SKILL.md +30 -0
- package/harness/docs/skills/deployment/SKILL.md +34 -0
- package/harness/docs/skills/docs-hub/SKILL.md +65 -0
- package/harness/docs/skills/grill/SKILL.md +46 -0
- package/harness/docs/skills/grill-api/SKILL.md +26 -0
- package/harness/docs/skills/grill-api-spec/SKILL.md +57 -0
- package/harness/docs/skills/grill-bqa/SKILL.md +119 -0
- package/harness/docs/skills/grill-common-spec/SKILL.md +43 -0
- package/harness/docs/skills/grill-dev/SKILL.md +172 -0
- package/harness/docs/skills/grill-docs/SKILL.md +79 -0
- package/harness/docs/skills/grill-integration-spec/SKILL.md +51 -0
- package/harness/docs/skills/module/SKILL.md +58 -0
- package/harness/docs/skills/openapi/SKILL.md +37 -0
- package/harness/docs/skills/overview/SKILL.md +42 -0
- package/harness/docs/skills/qa-resolve/SKILL.md +91 -0
- package/harness/docs/skills/spec/SKILL.md +240 -0
- package/harness/docs/skills/surfaces/SKILL.md +52 -0
- package/harness/docs/skills/update-spec/SKILL.md +83 -0
- package/harness/fe/adapters/dotnet-line/skills/framework-rules/SKILL.md +27 -0
- package/harness/fe/adapters/nextjs/skills/framework-rules/SKILL.md +29 -0
- package/harness/fe/adapters/nuxt4/skills/framework-rules/SKILL.md +33 -0
- package/harness/fe/extracts/artifactgraph-hooks-fe.md +15 -0
- package/harness/fe/extracts/risk-classes.md +69 -0
- package/harness/fe/rules/cross-repo-index-routing.mdc +24 -0
- package/harness/fe/rules/flowgrid-test-optional-accelerators.mdc +21 -0
- package/harness/fe/rules/platform-code-size.mdc +43 -0
- package/harness/fe/rules/platform-design-vocabulary.mdc +33 -0
- package/harness/fe/rules/team-flow-prototype.mdc +32 -0
- package/harness/fe/rules/team-flow-unit.mdc +27 -0
- package/harness/fe/skills/build-template-code/SKILL.md +42 -0
- package/harness/fe/skills/gen-common/SKILL.md +93 -0
- package/harness/fe/skills/grill-prototype/SKILL.md +41 -0
- package/harness/fe/skills/grill-test/SKILL.md +32 -0
- package/harness/fe/skills/grill-unit/SKILL.md +31 -0
- package/harness/fe/skills/model/SKILL.md +48 -0
- package/harness/fe/skills/prototype/SKILL.md +100 -0
- package/harness/fe/skills/test/SKILL.md +37 -0
- package/harness/fe/skills/unit/SKILL.md +55 -0
- package/harness/fe/skills/wire/SKILL.md +60 -0
- package/harness/shared/AGENTS.md +169 -0
- package/harness/shared/SSOT_AGENT_PROTOCOL.md +167 -0
- package/harness/shared/rules/flowgrid-code-optional-integrations.mdc +53 -0
- package/harness/shared/schemas/flowgrid-code/missing-optional-event.schema.json +62 -0
- package/harness/tests/extracts/artifactgraph-hooks-test.md +13 -0
- package/harness/tests/extracts/plans/readiness.md +14 -0
- package/harness/tests/rules/cross-repo-index-routing.mdc +24 -0
- package/harness/tests/rules/flowgrid-test-optional-accelerators.mdc +21 -0
- package/harness/tests/rules/plans-docs-first.mdc +13 -0
- package/harness/tests/skills/grill-testcase/SKILL.md +55 -0
- package/harness/tests/skills/scenario/SKILL.md +64 -0
- package/harness/tests/skills/test-api/SKILL.md +65 -0
- package/harness/tests/skills/testcase/SKILL.md +98 -0
- package/harness/tests/templates/SC.example.md +86 -0
- package/harness/tests/templates/TC.example-api.yaml +45 -0
- package/harness/tests/templates/TC.example.yaml +127 -0
- package/lexicon/registry-tags.en.txt +173 -0
- package/lexicon/testcase-taxonomy.en.txt +117 -0
- package/package.json +98 -0
- package/schemas/missing-optional-event.schema.json +37 -0
- package/schemas/testcase.schema.json +239 -0
- package/scripts/prepare-install.mjs +25 -0
- package/stacks/docs.json +21 -0
- package/stacks/dotnet-integration.json +66 -0
- package/stacks/dotnet-line.json +64 -0
- package/stacks/fastapi.json +98 -0
- package/stacks/generic.json +11 -0
- package/stacks/laravel.json +92 -0
- package/stacks/nextjs-nest.json +93 -0
- package/stacks/nextjs.json +132 -0
- package/stacks/nuxt4-nest.json +123 -0
- package/stacks/nuxt4.json +148 -0
- package/templates/project-skeleton/architecture/01-introduction/index.md +33 -0
- package/templates/project-skeleton/architecture/02-constraints/index.md +34 -0
- package/templates/project-skeleton/architecture/03-business-process/FLOW-login.md +101 -0
- package/templates/project-skeleton/architecture/03-business-process/FLOW-template.md +149 -0
- package/templates/project-skeleton/architecture/04-solution-strategy/index.md +26 -0
- package/templates/project-skeleton/architecture/07-deployment/index.md +26 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/configuration.md +18 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/index.md +27 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/observability.md +18 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/security.md +18 -0
- package/templates/project-skeleton/architecture/09-decisions/ADR-001-arc42-toc.md +31 -0
- package/templates/project-skeleton/architecture/09-decisions/index.md +13 -0
- package/templates/project-skeleton/architecture/10-quality/index.md +27 -0
- package/templates/project-skeleton/architecture/11-risks/index.md +25 -0
- package/templates/project-skeleton/architecture/12-glossary/index.md +31 -0
- package/templates/project-skeleton/architecture/index.md +1 -0
- package/templates/project-skeleton/architecture/model/workspace.dsl +71 -0
- package/templates/project-skeleton/index.md +2 -0
- package/templates/project-skeleton/overview/.gitkeep +1 -0
- package/templates/project-skeleton/overview/index.md +2 -0
- package/templates/project-skeleton/qa/README.md +11 -0
- package/templates/project-skeleton/qa/open/.gitkeep +0 -0
- package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/health.api.yaml +12 -0
- package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/index.md +12 -0
- package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/empty.ui.yaml +14 -0
- package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/index.md +11 -0
- package/templates/project-skeleton/surfaces/common/data-model/derived-data.md +26 -0
- package/templates/project-skeleton/surfaces/common/data-model/index.md +16 -0
- package/templates/project-skeleton/surfaces/common/index.md +32 -0
- package/templates/project-skeleton/surfaces/common/md/breadcrumb-flow/common-breadcrumb-flow.md +72 -0
- package/templates/project-skeleton/surfaces/common/md/buttons/common-buttons.md +160 -0
- package/templates/project-skeleton/surfaces/common/md/confirm-dialog/common-confirm-dialog.md +98 -0
- package/templates/project-skeleton/surfaces/common/md/data-table/common-data-table.md +91 -0
- package/templates/project-skeleton/surfaces/common/md/delete-flow/common-delete-flow.md +68 -0
- package/templates/project-skeleton/surfaces/common/md/feedback/common-feedback.md +140 -0
- package/templates/project-skeleton/surfaces/common/md/flat-design/common-flat-design.md +78 -0
- package/templates/project-skeleton/surfaces/common/md/form-validation/common-form-validation.md +74 -0
- package/templates/project-skeleton/surfaces/common/md/import-csv/common-import-csv.md +89 -0
- package/templates/project-skeleton/surfaces/common/md/list-page/common-list-page.md +102 -0
- package/templates/project-skeleton/surfaces/common/md/list-toolbar/common-list-toolbar.md +81 -0
- package/templates/project-skeleton/surfaces/common/md/navigation/common-navigation.md +70 -0
- package/templates/project-skeleton/surfaces/common/md/pagination/common-pagination.md +86 -0
- package/templates/project-skeleton/surfaces/common/md/search-filter/common-search-filter.md +96 -0
- package/templates/project-skeleton/surfaces/common/md/status-chip/common-status-chip.md +93 -0
- package/templates/project-skeleton/surfaces/common/md/table-action-column/common-table-action-column.md +90 -0
- package/templates/project-skeleton/surfaces/common/patterns/breadcrumb-flow.md +83 -0
- package/templates/project-skeleton/surfaces/common/patterns/delete-flow.md +30 -0
- package/templates/project-skeleton/surfaces/common/patterns/ui-spec.md +15 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/common-breadcrumb-flow.bundle.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/spec.yaml +31 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/common-buttons.bundle.yaml +147 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/spec.yaml +118 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/common-confirm-dialog.bundle.yaml +89 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/spec.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/common-data-table.bundle.yaml +85 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/spec.yaml +56 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/common-delete-flow.bundle.yaml +59 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/spec.yaml +30 -0
- package/templates/project-skeleton/surfaces/common/yaml/design-system.bundle.yaml +29 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/common-feedback.bundle.yaml +126 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/spec.yaml +97 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/common-flat-design.bundle.yaml +77 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/spec.yaml +48 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/common-form-validation.bundle.yaml +66 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/spec.yaml +37 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/common-import-csv.bundle.yaml +74 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/spec.yaml +45 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/common-list-page.bundle.yaml +90 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/legacy.yaml +14 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/spec.yaml +58 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/common-list-toolbar.bundle.yaml +86 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/legacy.yaml +12 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/spec.yaml +56 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/common-navigation.bundle.yaml +68 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/spec.yaml +39 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/common-pagination.bundle.yaml +84 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/legacy.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/spec.yaml +53 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/common-search-filter.bundle.yaml +88 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/spec.yaml +59 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/common-status-chip.bundle.yaml +89 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/spec.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/common-table-action-column.bundle.yaml +81 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/spec.yaml +52 -0
- package/templates/project-skeleton/surfaces/index.md +1 -0
- package/templates/schemas/backend-api.schema.json +174 -0
- package/templates/schemas/legacy-repos.schema.json +24 -0
- package/templates/schemas/platform-repos.schema.json +29 -0
- package/templates/schemas/spec.schema.json +718 -0
- package/templates/schemas/testcase.schema.json +28 -0
- package/templates/shared/AUTHORING-COMMON.md +109 -0
- package/templates/shared/api-contract-test.yaml +33 -0
- package/templates/shared/backend-api-integration.yaml +152 -0
- package/templates/shared/backend-api.bundle.yaml +177 -0
- package/templates/shared/backend-api.yaml +188 -0
- package/templates/shared/breadcrumb-flow.ejs +45 -0
- package/templates/shared/bundle-authoring.md +288 -0
- package/templates/shared/clients-line.yaml +18 -0
- package/templates/shared/default-layout.ejs +234 -0
- package/templates/shared/design-spec.yaml +85 -0
- package/templates/shared/entity-delta.example.yaml +45 -0
- package/templates/shared/feature.bundle.yaml +575 -0
- package/templates/shared/integration-adapter.bundle.yaml +77 -0
- package/templates/shared/integration-spec.yaml +37 -0
- package/templates/shared/ir-design.yaml +34 -0
- package/templates/shared/ir-legacy.yaml +12 -0
- package/templates/shared/ir-spec.yaml +18 -0
- package/templates/shared/line-client.bundle.yaml +65 -0
- package/templates/shared/mock-data.yaml +22 -0
- package/templates/shared/openapi.yaml +144 -0
- package/templates/shared/patterns/.gitkeep +0 -0
- package/templates/shared/patterns/admin-crud.pattern.yaml +37 -0
- package/templates/shared/qa-item.yaml +15 -0
- package/templates/shared/spec.yaml +162 -0
- package/templates/shared/testcase.yaml +2 -0
- package/templates/tests-skeleton/cases/README.md +5 -0
- package/templates/tests-skeleton/catalog/locale.yaml +7 -0
- package/templates/tests-skeleton/index.md +7 -0
- package/templates/tests-skeleton/scenarios/README.md +3 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ArtifactGraph — frontend hooks
|
|
2
|
+
|
|
3
|
+
- Resolve known shells, widgets, common components, and UI patterns from the
|
|
4
|
+
current FE repo's local index only.
|
|
5
|
+
- Run FE dry generation before write generation when both keys exist.
|
|
6
|
+
- **Code size discipline:** Enforce `platform-code-size.mdc` (~200 lines/file, ~20 lines/func). Automatically split pages/composables/components during bộ code generation.
|
|
7
|
+
- Full product registry/IR remains in docs. bộ code reads it through the
|
|
8
|
+
member-selected `FLOWGRID_DOCS_ROOT`; ArtifactGraph does not follow that
|
|
9
|
+
pointer.
|
|
10
|
+
- Architecture ID / C4 lookups go to bộ docs (`FLOWGRID_DOCS_ROOT`). Symbol /
|
|
11
|
+
call-graph lookups go to the target repo's `codegraph-<key>` MCP — Platform
|
|
12
|
+
DNA owns that auto-wire, not ArtifactGraph.
|
|
13
|
+
- Promote canonical registry changes in docs; keep only FE-local
|
|
14
|
+
allowlists/templates in the FE repo.
|
|
15
|
+
- Leave `/prototype`, `/wire`, `/unit`, and `/test` phase skills product-owned.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Risk classes checklist
|
|
2
|
+
|
|
3
|
+
Use with [SKILL.md](SKILL.md). Tick each class against the vertical + horizontal maps.
|
|
4
|
+
|
|
5
|
+
## AuthZ / IDOR
|
|
6
|
+
|
|
7
|
+
- [ ] Resource by id checked against current tenant (`storeId` / `hotel_id` from trusted source)
|
|
8
|
+
- [ ] Body/query `store_id` cannot switch store context for another hotel
|
|
9
|
+
- [ ] Admin/batch skip of ownership is intentional and not reachable from store UI JWT
|
|
10
|
+
- [ ] Report/filter/list-by-ids rejects foreign ids (404), not only empty data
|
|
11
|
+
|
|
12
|
+
## Request bag / contract
|
|
13
|
+
|
|
14
|
+
- [ ] ID lists use **named keys** (`ids`, `arrId`, `survey_ids`, `scenarioList`) — not bare `[1,2]` → `0=1`
|
|
15
|
+
- [ ] `$request->all()` / `query()` not treated as “array of business ids”
|
|
16
|
+
- [ ] Middleware `merge` fields (`store_id`, `storeId`, …) stripped or unused when parsing id lists
|
|
17
|
+
- [ ] Allowlist vs denylist clear for context keys vs business keys
|
|
18
|
+
|
|
19
|
+
**Context denylist (typical after ScenarioAuthentication):**
|
|
20
|
+
`store_id`, `storeId`, `service_id`, `serviceId`, `m_service_id`, `isAdmin`, `apiKey`, pagination/date noise if normalizing “all numbers”.
|
|
21
|
+
|
|
22
|
+
**ID allowlist (prefer):**
|
|
23
|
+
`ids`, `arrId`, `survey_ids`, `scenario_ids`, `scenarioList`
|
|
24
|
+
|
|
25
|
+
## Trust boundary / proxy
|
|
26
|
+
|
|
27
|
+
- [ ] Upstream 404 stays 404 (or explicit not-found JSON), not 200 + empty Resource
|
|
28
|
+
- [ ] FE `throwError` / `createError` aligned with real HTTP status
|
|
29
|
+
- [ ] JWT/`attributes` preferred over client-supplied tenant ids
|
|
30
|
+
|
|
31
|
+
## Over-broad parse
|
|
32
|
+
|
|
33
|
+
- [ ] No “every positive int in the array is an id” unless array is already allowlisted
|
|
34
|
+
- [ ] CSV/string explode paths do not swallow unrelated query params
|
|
35
|
+
|
|
36
|
+
## Null / empty
|
|
37
|
+
|
|
38
|
+
- [ ] Missing model → 404 vs empty collection semantics documented
|
|
39
|
+
- [ ] `whereIn([], …)` / empty id list behavior safe (no accidental match-all)
|
|
40
|
+
- [ ] Optional relations null-safe before property access
|
|
41
|
+
|
|
42
|
+
## Error collapsing
|
|
43
|
+
|
|
44
|
+
- [ ] Distinct failures keep distinct outcomes (authZ 404 ≠ relation-exists ≠ server error)
|
|
45
|
+
- [ ] Controller does not always return one business message when helper returns `true` for multiple reasons
|
|
46
|
+
|
|
47
|
+
## Hardcode / magic
|
|
48
|
+
|
|
49
|
+
- [ ] No production hardcode of hotel/store/survey/scenario ids
|
|
50
|
+
- [ ] Magic status/codes named or constanted when added
|
|
51
|
+
|
|
52
|
+
## Async / Jobs / Events
|
|
53
|
+
|
|
54
|
+
- [ ] Job payload carries needed tenant/service context (or reloads safely)
|
|
55
|
+
- [ ] Job path does not assume HTTP middleware ran (`merge`, `attributes->storeId`)
|
|
56
|
+
- [ ] Retries are idempotent for writes/deletes
|
|
57
|
+
- [ ] Failed pre-check cannot leave partial side effects
|
|
58
|
+
- [ ] `dispatch` callers listed in horizontal table
|
|
59
|
+
|
|
60
|
+
## Business rules
|
|
61
|
+
|
|
62
|
+
- [ ] Relation/existence gates: false positive and false negative both considered
|
|
63
|
+
- [ ] Delete/update constraints still correct after ownership changes
|
|
64
|
+
- [ ] Soft-deleted rows excluded/included as product intends
|
|
65
|
+
|
|
66
|
+
## Data / transactions
|
|
67
|
+
|
|
68
|
+
- [ ] Multi-step delete/update atomic where required
|
|
69
|
+
- [ ] Soft delete vs force delete consistency with “exists” checks
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Route cross-repo evidence to the owning per-repo index
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cross-repo index routing
|
|
7
|
+
|
|
8
|
+
- Architecture IDs and Functions/W-* paths belong to bộ docs through `FLOWGRID_DOCS_ROOT`.
|
|
9
|
+
Never use CodeGraph as the architecture index.
|
|
10
|
+
- Test plans use `FLOWGRID_TESTS_DOC`; docs evidence uses
|
|
11
|
+
`FLOWGRID_DOCS_ROOT`; IR/registry/generation follows its owning pointer such as
|
|
12
|
+
`FLOWGRID_DOCS_ROOT`.
|
|
13
|
+
- For symbols or call graphs in repo X, call the Platform DNA-wired
|
|
14
|
+
`codegraph-<repo-key>` MCP whose `--project-root` is checkout X. Never query
|
|
15
|
+
the index of the currently open repo for another repo.
|
|
16
|
+
- Cross-index MCP entries come from Platform DNA using
|
|
17
|
+
`platform-repos.local.json` / `legacy-repos.local.json`. Do not ask members to
|
|
18
|
+
hand-edit `.cursor/mcp.json`, and never commit machine-local roots.
|
|
19
|
+
- Only use a checkout-specific CodeGraph server when that checkout exists and
|
|
20
|
+
already has `.codegraph/`. If it is not indexed, report:
|
|
21
|
+
`cd <root> && codegraph init`.
|
|
22
|
+
- Never initialize or scan a workspace parent. Keep one CodeGraph index per
|
|
23
|
+
repo. ArtifactGraph remains local to the current repo and is never a shared
|
|
24
|
+
docs or cross-repo index.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: bộ test optional accelerator fallback and event contract
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bộ test optional accelerators
|
|
7
|
+
|
|
8
|
+
ArtifactGraph accelerates coverage and search but is never required. When it is
|
|
9
|
+
missing or fails, continue with deterministic local coverage/search. Assign one
|
|
10
|
+
stable `runId` per run and emit exactly one `flowgrid.missing-optional` event per
|
|
11
|
+
`runId` + optional pair, after fallback completes; deduplicate all retries.
|
|
12
|
+
|
|
13
|
+
ArtifactGraph is local-only: in this repo it indexes this repo's own data
|
|
14
|
+
(taxonomy/coverage hints) and never follows `FLOWGRID_DOCS_ROOT` or
|
|
15
|
+
`FLOWGRID_TESTS_DOC`. Canonical docs/tests-hub evidence always flows through
|
|
16
|
+
those bộ test pointers, never through ArtifactGraph.
|
|
17
|
+
|
|
18
|
+
Events must conform to
|
|
19
|
+
`.cursor/schemas/flowgrid-test/missing-optional-event.schema.json`. Metrics count only
|
|
20
|
+
successful file reads and exact raw bytes read into context as `fileReads` and
|
|
21
|
+
`contextBytes`. Never estimate tokens, reads, bytes, or savings.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Platform — 200 lines/file hard cap, ~20 lines/function; split when exceeded
|
|
3
|
+
globs: "{app,src,pages,components,composables,hooks,services,stores,models,validations,tests}/**/*.{vue,ts,tsx}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Code Size
|
|
8
|
+
|
|
9
|
+
## Limits
|
|
10
|
+
|
|
11
|
+
| Metric | Hard cap | Stretch max | Exempt |
|
|
12
|
+
|--------|----------|-------------|--------|
|
|
13
|
+
| Lines / file | 200 | 220–250 (edge case, <10% files) | `*.mock.ts` |
|
|
14
|
+
| Lines / function | ~20 | — | — |
|
|
15
|
+
|
|
16
|
+
Mock files (`*.mock.ts`) are exempt from both line limits and unit test coverage
|
|
17
|
+
requirements — they are temporary and will be removed when wiring real APIs.
|
|
18
|
+
|
|
19
|
+
## Proactive Component Splitting
|
|
20
|
+
|
|
21
|
+
Do not wait until a file reaches 200 lines. Proactive component splitting MUST be decided during Spec review:
|
|
22
|
+
|
|
23
|
+
- **Single Main Block** (e.g. 1 Table list): Use the standard page template without splitting.
|
|
24
|
+
- **Multiple Blocks (≥2 blocks)** (e.g. 1 Card + 1 Tab, or 2 Tables): Scaffold a separate component for each block; the Page file acts solely as an orchestrating layout. Tag each block with `#needs-component: WidgetName`.
|
|
25
|
+
- **Form Component Interlock**: Whenever a **Form** appears in the Spec (whether on a dedicated Create/Edit page or nested inside a Modal/Tab):
|
|
26
|
+
- **[MANDATORY]** Extract the Form into a fully self-contained component (UI component, logic hook/composable, Zod schema, and Service client).
|
|
27
|
+
- The component must be fully portable and reusable across contexts.
|
|
28
|
+
- The Page file acts strictly as a host container.
|
|
29
|
+
|
|
30
|
+
Split in the same PR when exceeded line limits.
|
|
31
|
+
|
|
32
|
+
## Next.js ↔ Nuxt4 split convention
|
|
33
|
+
|
|
34
|
+
| Concern | Nuxt4 composable | Next.js hook |
|
|
35
|
+
|---------|-----------------|--------------|
|
|
36
|
+
| List data + pagination | `composables/xxx/useXxxList.ts` | `hooks/xxx/useXxxList.ts` |
|
|
37
|
+
| Column definitions | `composables/xxx/useXxxColumns.ts` | `hooks/xxx/useXxxColumns.ts` |
|
|
38
|
+
| Filter config + search/reset | `composables/xxx/useXxxFilters.ts` | `hooks/xxx/useXxxFilters.ts` |
|
|
39
|
+
| Export logic | `composables/xxx/useXxxExport.ts` | `hooks/xxx/useXxxExport.ts` |
|
|
40
|
+
| Form submit | `composables/xxx/useXxxForm.ts` | `hooks/xxx/useXxxForm.ts` |
|
|
41
|
+
|
|
42
|
+
No padding files with blank lines. Detailed component-split conventions are
|
|
43
|
+
product-owned because Nuxt and Next layouts differ.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Registry-backed FE vocabulary for generated and handoff code
|
|
3
|
+
globs: "{app,src,pages,components,composables,hooks,services,models,validations,registries}/**/*.{vue,ts,tsx,json}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Design vocabulary
|
|
8
|
+
|
|
9
|
+
SSOT: `registries/design.registry.json` · validate with `flowgrid registry`.
|
|
10
|
+
|
|
11
|
+
## Hashtags (grill → `tags:`)
|
|
12
|
+
|
|
13
|
+
| Prefix | Example |
|
|
14
|
+
|--------|---------|
|
|
15
|
+
| `#shell:` | Registry-defined page/list shell |
|
|
16
|
+
| `#pattern:` | `CRUD` |
|
|
17
|
+
| `#ui:` | shadcn primitive |
|
|
18
|
+
| `#widget:` | form field |
|
|
19
|
+
| `#render:` | `text`, `chip` |
|
|
20
|
+
| `#style:` | `compact`, `flat` |
|
|
21
|
+
| `#needs-ui:` | planned widget — prototype implements |
|
|
22
|
+
| `#split-hook:` | `columns`, `filters`, `export`, `form-sections` — hint codegen to split |
|
|
23
|
+
|
|
24
|
+
Shell names and custom-template behavior are adapter/product registry data. Do
|
|
25
|
+
not assume a Nuxt `.vue` shell in a Next.js target or vice versa.
|
|
26
|
+
|
|
27
|
+
## Grill
|
|
28
|
+
|
|
29
|
+
1. BA bullet → `lookupAlias()` in registry
|
|
30
|
+
2. Low confidence → ask member
|
|
31
|
+
3. `npm run codegen:dry -- --id …` must pass.
|
|
32
|
+
|
|
33
|
+
Do not invent component names outside the selected adapter registry.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: /prototype, /grill-prototype — UI prototype with mock API boundary
|
|
3
|
+
globs: "{pages,components,composables,mocks,src/app,src/components,src/hooks}/**/*.{vue,ts,tsx}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Team Flow — Prototype
|
|
8
|
+
|
|
9
|
+
Active: `/prototype` · `/grill-prototype` — **một** command / session.
|
|
10
|
+
|
|
11
|
+
| Command | Skill |
|
|
12
|
+
|---------|-------|
|
|
13
|
+
| `/prototype` | `.cursor/skills/prototype/SKILL.md` |
|
|
14
|
+
| `/grill-prototype` | `.cursor/skills/grill-prototype/SKILL.md` |
|
|
15
|
+
|
|
16
|
+
Prerequisite: member-configured `FLOWGRID_DOCS_ROOT` points to the grilled
|
|
17
|
+
docs registry hub → `npm run codegen:dry -- --id …` OK. Never infer a sibling docs
|
|
18
|
+
checkout; local ArtifactGraph is not the docs bridge. Architecture IDs →
|
|
19
|
+
bộ docs (`FLOWGRID_DOCS_ROOT`); never CodeGraph for C4/architecture.
|
|
20
|
+
|
|
21
|
+
## Thứ tự
|
|
22
|
+
|
|
23
|
+
0. `/gen-common --surface=…` rồi `/gen-common --module=CMP-…` nếu hub có `common/` — gen molecule/shell dùng chung trước.
|
|
24
|
+
1. Quét `#needs-component` / custom-render tags — chỉ tạo component còn thiếu.
|
|
25
|
+
2. `npm run codegen -- --id W-…` (hoặc MCP `gen`) — đọc `…/code/{W-…}/generated/HANDOFF.md`.
|
|
26
|
+
3. Vá slot · auth bypass · gap; **không** sửa YAML business trên hub khi prototype.
|
|
27
|
+
|
|
28
|
+
- Source: grill-approved hub `ir/design.yaml`
|
|
29
|
+
- Real UI; mock chỉ API boundary
|
|
30
|
+
- **Không** backend thật — `/wire` thay mock
|
|
31
|
+
- `data-testid` sớm (`E2E-TESTIDS.md` trên hub)
|
|
32
|
+
- **Không** viết lại scaffold đã gen
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Unit Test — dev lane Vitest (/unit → /grill-unit)
|
|
3
|
+
globs: "{src,composables,hooks,services,models,validations,utils,stores,tests/unit}/**/*.{ts,tsx,vue}"
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /unit · /grill-unit — Dev lane
|
|
8
|
+
|
|
9
|
+
Skills: `.cursor/skills/unit/SKILL.md` · `.cursor/skills/grill-unit/SKILL.md`
|
|
10
|
+
Extract: `.cursor/extracts/portal-unit-workflow.md`, `portal-unit-test-tags.md`, `verify-gate.md`
|
|
11
|
+
|
|
12
|
+
Canonical IR via `FLOWGRID_DOCS_ROOT`; architecture → bộ docs; cross-repo
|
|
13
|
+
symbols → Platform DNA-wired `codegraph-<key>`; ArtifactGraph local-only.
|
|
14
|
+
|
|
15
|
+
## `/unit`
|
|
16
|
+
|
|
17
|
+
- Manifest-first: `unit.manifest.json` + `UNIT-HANDOFF.md`
|
|
18
|
+
- Gọi `npm run codegen:unit` khi thiếu smoke; xử lý `needsUnit[]` / `#needs-unit-test:*`
|
|
19
|
+
- Tách file test thiếu theo registry (1 source logic → 1 test file)
|
|
20
|
+
- Logic only — **không** mount page/component; mock the selected adapter's
|
|
21
|
+
transport and framework globals at the unit boundary.
|
|
22
|
+
- Done: `needsUnit` clear, vitest scoped green → **`/grill-unit`**
|
|
23
|
+
|
|
24
|
+
## `/grill-unit`
|
|
25
|
+
|
|
26
|
+
- Sau `/unit` — coverage scoped + map `reqIds`; **không** gọi `portal:unit-gen`
|
|
27
|
+
- Thiếu file test → báo quay `/unit`
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-template-code
|
|
3
|
+
description: /build-template-code — Scaffolds custom codegen templates and registries based on platform-dna configuration.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /build-template-code — Custom Template Scaffolding
|
|
8
|
+
|
|
9
|
+
## Context - Action - Constraint (CAC)
|
|
10
|
+
|
|
11
|
+
### Context
|
|
12
|
+
Member wants to automatically generate or update frontend/backend codegen templates for a repository using `platform-dna` presets and source models.
|
|
13
|
+
|
|
14
|
+
### Action
|
|
15
|
+
```bash
|
|
16
|
+
# Dry-run inspection
|
|
17
|
+
flowgrid build-template-code --dry-run
|
|
18
|
+
|
|
19
|
+
# Scaffolding templates and registry entries from Golden Sample
|
|
20
|
+
flowgrid build-template-code --sample=src/pages/users/UserList.vue
|
|
21
|
+
|
|
22
|
+
# Force overwrite existing custom templates
|
|
23
|
+
flowgrid build-template-code --force
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
#### CLI Parameters
|
|
27
|
+
- `--dry-run`: Preview files to be scaffolded/written without system mutation.
|
|
28
|
+
- `--force`: Overwrite existing templates and registries.
|
|
29
|
+
- `--merge`: Merge new registry entries into `registries/design.registry.json` (default).
|
|
30
|
+
- `--output <dir>`: Target directory for generated templates (default: `adapters/<framework>/codegen/templates/custom`).
|
|
31
|
+
|
|
32
|
+
#### Internal Pipeline
|
|
33
|
+
1. **Scan Project**: `src/template-builder/scanProject.ts` reads `platform-dna` to identify source components/controllers.
|
|
34
|
+
2. **Model Extraction**: Use AST/regex parsers to extract class names, routes, props, and build intermediate JSON models.
|
|
35
|
+
3. **Template Generation**: `generateTemplate.ts` produces `.hbs` (FE) and `.scriban` (BE) files from extracted models.
|
|
36
|
+
4. **Registry Update**: `writeRegistry.ts` creates or merges `custom.registry.json`.
|
|
37
|
+
5. **Report**: Emit summary list of generated templates and registry entries.
|
|
38
|
+
|
|
39
|
+
### Constraints
|
|
40
|
+
- **[MANDATORY]** Validate `platform-dna` configuration prior to execution.
|
|
41
|
+
- **[STRICTLY FORBIDDEN]** Do NOT overwrite modified custom templates without the `--force` flag.
|
|
42
|
+
- **[MANDATORY]** Ensure generated template tags match the host framework's UI and routing patterns.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gen-common
|
|
3
|
+
description: >-
|
|
4
|
+
/gen-common — generate shared UI from bộ docs common specs before
|
|
5
|
+
/prototype. Covers surface common (surfaces/<surface>/common) and
|
|
6
|
+
module common (surfaces/<surface>/CMP-*/common). Use when
|
|
7
|
+
bootstrapping DataListPage, MoStatusChip, or CMP-level shared widgets.
|
|
8
|
+
disable-model-invocation: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /gen-common — Shared UI before /prototype
|
|
12
|
+
|
|
13
|
+
**Owner:** bộ code (`--type=fe`) · Adapters: `nuxt4` | `nextjs`
|
|
14
|
+
Not synced for `dotnet-line`.
|
|
15
|
+
|
|
16
|
+
Skill is **`/gen-common`**, not `/common` — `common` is the docs folder name (and there are three of them).
|
|
17
|
+
|
|
18
|
+
| Scope | Docs path | Flag |
|
|
19
|
+
|-------|-----------|------|
|
|
20
|
+
| Platform | `surfaces/common` | `--surface=common` |
|
|
21
|
+
| Surface | `surfaces/<surface>/common` | `--surface=admin-web` |
|
|
22
|
+
| Module | `surfaces/<surface>/<CMP-*>/common` | `--module=CMP-ADM-009` |
|
|
23
|
+
|
|
24
|
+
Run **surface** first, then **module**, then `/prototype` for screens.
|
|
25
|
+
|
|
26
|
+
## IR
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
…/common/yaml/<slug>/ir/design.yaml # tech — Read entire file
|
|
30
|
+
…/common/yaml/<slug>/ir/spec.yaml # prose only — do not gen from this
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Read the **entire** `ir/design.yaml`. Missing design → STOP, hand off to docs `/common-spec` + `flowgrid split` (do not invent yaml). Prose-only `common/processes` (FLOW) is not `/gen-common` input. Thin design is OK for tokens; do not page-gen common IRs.
|
|
34
|
+
|
|
35
|
+
**Docs hub is read-only.** Never Write common bundles/`ir/*` on the docs hub.
|
|
36
|
+
|
|
37
|
+
Do **not** run `flowgrid gen --id common-list-page`. Page gen skips all three common trees.
|
|
38
|
+
|
|
39
|
+
## Docs Root Resolution
|
|
40
|
+
|
|
41
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
42
|
+
pointer for locating common IR (`ir/design.yaml`).
|
|
43
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
44
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
45
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
46
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
47
|
+
|
|
48
|
+
## Workflow
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm run codegen:common:dry -- --surface=admin-web --json
|
|
52
|
+
npm run codegen:common -- --surface=admin-web
|
|
53
|
+
npm run codegen:common:dry -- --module=CMP-ADM-009 --json
|
|
54
|
+
npm run codegen:common -- --module=CMP-ADM-009
|
|
55
|
+
|
|
56
|
+
# Fallback:
|
|
57
|
+
flowgrid gen-common:dry --adapter=nextjs --docs-root=/path/to/docs -- --surface=admin-web --json
|
|
58
|
+
flowgrid gen-common --adapter=nextjs --docs-root=/path/to/docs -- --module=CMP-ADM-009
|
|
59
|
+
flowgrid gen-common:dry -- --id common-status-chip --surface=admin-web
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`common-gen` is an alias of `gen-common`.
|
|
63
|
+
|
|
64
|
+
1. Choose scope (`--surface` xor `--module`, or `--surface=… --all-modules`). Do not guess when several surfaces exist.
|
|
65
|
+
2. Dry `--json`. Kinds: `tokens` / `policy` / `molecule` / `shell` / `flow`.
|
|
66
|
+
3. Write stubs + upsert `registries/common.registry.json`. Keep existing files unless `--force`.
|
|
67
|
+
4. Implement `action: implement` from **`ir/design.yaml`** (tokens/policy as constraints). shadcn compose when `components.json` exists.
|
|
68
|
+
5. Surface emit → molecules/organisms. Module emit → `src/components/modules/<cmp-…>/` (namespaced, no overwrite of surface shells).
|
|
69
|
+
6. Re-run dry until emit entries are `implemented`.
|
|
70
|
+
7. `/prototype` for `CMP-*` screens.
|
|
71
|
+
|
|
72
|
+
## Kind handling
|
|
73
|
+
|
|
74
|
+
| Kind | Emit? | Agent |
|
|
75
|
+
|------|-------|--------|
|
|
76
|
+
| `tokens` / `policy` | no | Apply while implementing others |
|
|
77
|
+
| `molecule` | yes | Compose primitive → molecule |
|
|
78
|
+
| `shell` | yes | After `dependsOn` molecules |
|
|
79
|
+
| `flow` | sometimes | delete-flow wires ConfirmDialog; import-csv emits `MoImportCsv` |
|
|
80
|
+
| `skip` | no | Backend folders (`common-api`, `backend-core-services`) |
|
|
81
|
+
|
|
82
|
+
## Do not
|
|
83
|
+
|
|
84
|
+
- Page-gen common IRs or invent routes from them.
|
|
85
|
+
- Copy platform `surfaces/common` over a surface overlay that already exists.
|
|
86
|
+
- Emit module widgets onto surface paths (`DataListPage`, `MoStatusChip`).
|
|
87
|
+
- Rewrite unrelated feature screens here.
|
|
88
|
+
|
|
89
|
+
## Translation Rule
|
|
90
|
+
Luôn bọc text tĩnh bằng i18n helper native của framework.
|
|
91
|
+
- Đọc block `i18n` từ `ir/design.yaml`.
|
|
92
|
+
- Tự động sinh/cập nhật file ngôn ngữ tương ứng (`.json` cho FE/NodeJS, hoặc `.resx` cho Dotnet).
|
|
93
|
+
- KHÔNG viết gộp ngôn ngữ lên giao diện (ví dụ không dùng `login / đăng nhập`).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-prototype
|
|
3
|
+
description: /grill-prototype — FE grill gate before /prototype generation.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /grill-prototype
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code · optional local ArtifactGraph allowlist check before dry-gen.
|
|
10
|
+
|
|
11
|
+
## Target / ID Resolution Rule
|
|
12
|
+
|
|
13
|
+
- User prompt MAY specify a screen ID, function ID, or slug (e.g. `W-AD-AUTH-001`, `login`).
|
|
14
|
+
- **Read the entire `ir/design.yaml`** on the screen leaf (`…/CMP-*/<NN…>/ir/design.yaml`) before dry-gen. Do not skim keys from a feature bundle. Do **not** use `01-backend-spec.yaml` as FE input.
|
|
15
|
+
- Docs hub is **read-only**. Dry-gen failure (missing design / `codegen.profile`) → STOP; do not patch docs.
|
|
16
|
+
- After dry-gen, HANDOFF `#needs-component` is filled in `/prototype` using the FE shadcn skill when `components.json` exists (primitives via `shadcn add`, `Mo*` composed — see `/prototype`). Surface/module commons must already exist via `/gen-common`.
|
|
17
|
+
- Do NOT demand full surface/module filesystem paths from the user if an ID is given.
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
if local ArtifactGraph available: check the FE repo's allowlist for genDry
|
|
21
|
+
else: npm run codegen:dry -- --id …
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Docs Root Resolution
|
|
25
|
+
|
|
26
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
27
|
+
pointer for locating `ir/design.yaml`.
|
|
28
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
29
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
30
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
31
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
32
|
+
|
|
33
|
+
Canonical IR/registries come from `FLOWGRID_DOCS_ROOT`; ArtifactGraph does
|
|
34
|
+
not follow that pointer. Architecture IDs → bộ docs (`FLOWGRID_DOCS_ROOT`); symbols
|
|
35
|
+
in other repos → `codegraph-<key>` only.
|
|
36
|
+
|
|
37
|
+
Missing ArtifactGraph never blocks the grill. Complete the deterministic dry
|
|
38
|
+
generation fallback first, then follow
|
|
39
|
+
`.cursor/rules/flowgrid-code-optional-integrations.mdc` for once-per-run telemetry.
|
|
40
|
+
|
|
41
|
+
Do not execute flowgrid docs scripts from the FE repo.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-test
|
|
3
|
+
description: /grill-test — FE grill gate before Playwright generation.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /grill-test
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ test (`--type=fe`)
|
|
10
|
+
|
|
11
|
+
After `/test`. Plan YAML remains on the tests hub (`/grill-testcase`).
|
|
12
|
+
|
|
13
|
+
Route Functions/W-* evidence through bộ docs, plans/docs through
|
|
14
|
+
`FLOWGRID_TESTS_DOC` / `FLOWGRID_DOCS_ROOT`, and repo-X symbols through its
|
|
15
|
+
Platform DNA-wired `codegraph-<repo-key>` server. Never substitute the current
|
|
16
|
+
repo index for another checkout or initialize a workspace-parent graph.
|
|
17
|
+
|
|
18
|
+
## Accelerators (optional)
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
if local ArtifactGraph available: recommend/check testcase gen (this repo)
|
|
22
|
+
else: local deterministic search, then flowgrid testcase:gen:dry …
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
ArtifactGraph never follows `FLOWGRID_DOCS_ROOT` / `FLOWGRID_TESTS_DOC`; plan
|
|
26
|
+
YAML and docs evidence flow only through those bộ test pointers.
|
|
27
|
+
|
|
28
|
+
Use one stable `runId` per run. When ArtifactGraph is missing, finish the local
|
|
29
|
+
fallback before emitting exactly one `flowgrid.missing-optional` event for that
|
|
30
|
+
`runId` + `artifactgraph`; retries must not emit again. Conform to
|
|
31
|
+
`.cursor/schemas/flowgrid-test/missing-optional-event.schema.json` and include only
|
|
32
|
+
actual successful `fileReads` and exact raw `contextBytes`, never estimates.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-unit
|
|
3
|
+
description: /grill-unit — FE grill gate before /unit generation.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /grill-unit
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code · optional local ArtifactGraph allowlist check before unit dry-gen.
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
if local ArtifactGraph available: check the FE repo's allowlist for unitGenDry
|
|
13
|
+
else: npm run codegen:unit:dry -- --id …
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Docs Root Resolution
|
|
17
|
+
|
|
18
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
19
|
+
pointer for locating codegen manifests.
|
|
20
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
21
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
22
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
23
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
24
|
+
|
|
25
|
+
Canonical IR/registries come from `FLOWGRID_DOCS_ROOT`; ArtifactGraph does
|
|
26
|
+
not follow that pointer. Architecture IDs → bộ docs (`FLOWGRID_DOCS_ROOT`); symbols
|
|
27
|
+
in other repos → `codegraph-<key>` only.
|
|
28
|
+
|
|
29
|
+
Missing ArtifactGraph never blocks the grill. Complete the deterministic dry
|
|
30
|
+
generation fallback first, then follow
|
|
31
|
+
`.cursor/rules/flowgrid-code-optional-integrations.mdc` for once-per-run telemetry.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: model
|
|
3
|
+
description: /model — Zod models and TS types in models/ / validations/ (bộ code FE).
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /model — FE contract models
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code (`--type=fe`) · Adapters: `nuxt4` | `nextjs`
|
|
10
|
+
Not synced for `dotnet-line` (WinForms contracts live outside Zod `models/`).
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
Write/update **Zod schemas + TS types** under `models/` and `validations/` from
|
|
15
|
+
Docs hub (`FLOWGRID_DOCS_ROOT`): **Read the entire `ir/design.yaml`**. Do not cherry-pick `entities`/`api` keys from the bundle or from `ir/spec.yaml` prose.
|
|
16
|
+
|
|
17
|
+
| Load | Do not load |
|
|
18
|
+
|------|-------------|
|
|
19
|
+
| Entire feature `ir/design.yaml` | `ir/spec.yaml` prose, generated `*.md`, `*.bundle.yaml` |
|
|
20
|
+
| Target files under `models/`, `validations/` | Trace, full `bundle.legacy` unless gap |
|
|
21
|
+
| Progressive path resolve only if FE↔BE needed | Full `legacy-api-migration` dumps |
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
1. Resolve feature via `--id` / `--spec` through `FLOWGRID_DOCS_ROOT`
|
|
26
|
+
(never CodeGraph or ArtifactGraph for architecture/registry).
|
|
27
|
+
(same docs-root rules as `/prototype`; never sibling inference)
|
|
28
|
+
- If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
29
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
30
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
31
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
32
|
+
2. Align `models/` + `validations/` with entities/api in the IR
|
|
33
|
+
3. Do not rewrite unrelated UI or API server code here
|
|
34
|
+
|
|
35
|
+
## Handoff
|
|
36
|
+
|
|
37
|
+
→ `/wire` when forms/services need the updated schemas
|
|
38
|
+
→ `/api` (bộ code BE) when the backend contract must catch up
|
|
39
|
+
|
|
40
|
+
## Accelerators (optional)
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
if local ArtifactGraph available: local FE tag/allowlist hints only
|
|
44
|
+
else: scoped IR + registry evidence only
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Canonical IR/registry evidence always comes through the bộ code docs pointer,
|
|
48
|
+
not through ArtifactGraph.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prototype
|
|
3
|
+
description: /prototype — UI from FLOWGRID_DOCS_ROOT ir/design.yaml with mock API via bộ code.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /prototype — UI Prototype (Mock API Boundary)
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code (`--type=fe`) · Adapters: `nuxt4` | `nextjs` | `dotnet-line`
|
|
10
|
+
|
|
11
|
+
## Artifact & Target ID Resolution Rule
|
|
12
|
+
|
|
13
|
+
- User prompt MAY specify a screen ID, function ID, or slug (e.g. `W-AD-AUTH-001`, `login`).
|
|
14
|
+
- Agent MUST use `--id` or resolve `surfaces/<surface>/CMP-*/<NN…>/ir/design.yaml` via `FLOWGRID_DOCS_ROOT` or `flowgrid_docs_route` (same leaf as the bundle; API trio is sibling `api/<seq>/`, not this file).
|
|
15
|
+
- Prerequisite: `/gen-common` when `surfaces/<surface>/common` (or `CMP-*/common`) exists — generate shared molecules/shells **before** this skill.
|
|
16
|
+
- Do NOT demand full filesystem paths from the user if an ID is given.
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
surfaces/<surface>/CMP-*/<NN…>/ir/design.yaml
|
|
20
|
+
# e.g. …/CMP-ADM-009/01/01/01/ir/design.yaml
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Read the **entire** `ir/design.yaml` (script + agent inspection). Do not filter keys from `*.bundle.yaml`. **`ir/spec.yaml`** is business prose only.
|
|
24
|
+
|
|
25
|
+
**Docs hub is read-only for this skill.** Never Write/patch `*.bundle.yaml`, `ir/*`, or any file under `FLOWGRID_DOCS_ROOT`. Missing `ir/design.yaml`, empty `codegen.profile`, or `flowgrid gen` failure → **STOP**, quote the CLI error, hand off to docs-hub `/grill-dev` (or `/spec`). Do not invent SSOT to make gen pass. Login/forgot/reset must be `codegen.profile: auth` (not `create`) or gen writes `(dashboard)`.
|
|
26
|
+
|
|
27
|
+
Do not invent sibling docs-hub paths. Pass `FLOWGRID_DOCS_ROOT` or `--docs-root`.
|
|
28
|
+
|
|
29
|
+
## Docs Root Resolution
|
|
30
|
+
|
|
31
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
32
|
+
registry/IR pointer for locating `ir/design.yaml`.
|
|
33
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
34
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
35
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
36
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
37
|
+
|
|
38
|
+
## Route
|
|
39
|
+
|
|
40
|
+
Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); IR/registry/gen →
|
|
41
|
+
`FLOWGRID_DOCS_ROOT`; symbols/call-graph for repo X → Platform DNA-wired
|
|
42
|
+
`codegraph-<repo-key>`. Never workspace-parent graphs, sibling-path inference,
|
|
43
|
+
or member-edited MCP. Local ArtifactGraph is allowlist/tag hints for this repo
|
|
44
|
+
only.
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm run codegen:dry -- --id W-AD-AUTH-001
|
|
50
|
+
npm run codegen -- --id W-AD-AUTH-001
|
|
51
|
+
|
|
52
|
+
# Fallback direct CLI if wrappers missing:
|
|
53
|
+
flowgrid gen:dry --adapter=nuxt4 --docs-root=/path/to/docs-hub -- --id W-AD-AUTH-001
|
|
54
|
+
flowgrid gen --adapter=nuxt4 --docs-root=/path/to/docs-hub -- --id W-AD-AUTH-001
|
|
55
|
+
|
|
56
|
+
flowgrid gen:dry --adapter=nextjs -- --spec ir/design.yaml
|
|
57
|
+
flowgrid gen --adapter=nextjs -- --spec ir/design.yaml
|
|
58
|
+
flowgrid gen:dry --adapter=dotnet-line -- --spec ir/design.yaml
|
|
59
|
+
flowgrid gen --adapter=dotnet-line -- --spec ir/design.yaml
|
|
60
|
+
flowgrid registry --adapter=dotnet-line
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
You MUST run `/gen-common` for this surface (then `--module=CMP-…` if the module has `common/yaml`) when those trees exist, then run the codegen script (`npm run codegen` or `flowgrid gen`) FIRST to generate the skeleton from **design IR**, before filling gaps **in the FE repo only**.
|
|
64
|
+
|
|
65
|
+
## Shadcn/ui skill (FE repo only)
|
|
66
|
+
|
|
67
|
+
When the FE checkout has `components.json`, the member should have installed [shadcn/ui skills](https://ui.shadcn.com/docs/skills) (`pnpm dlx skills add shadcn/ui`). That skill owns **primitives, theming, `shadcn add/search/info`**. This skill owns **IR → gen → slots**.
|
|
68
|
+
|
|
69
|
+
For each HANDOFF / `#needs-component: Mo…` after gen:
|
|
70
|
+
|
|
71
|
+
1. Run or read `shadcn info --json` (framework, aliases, installed set, base `radix|aria`).
|
|
72
|
+
2. `shadcn search` / docs: if the gap is a missing **primitive**, `shadcn add` it — do **not** hand-roll Button/Dialog/Table.
|
|
73
|
+
3. Implement `Mo*` as **composition** of those primitives (FieldGroup for forms, semantic tokens). Match `components.json` aliases.
|
|
74
|
+
4. Re-run `flowgrid gen` so slots bind to the new file.
|
|
75
|
+
5. Dotnet-line / no `components.json`: skip this section; do not invent React/shadcn APIs.
|
|
76
|
+
|
|
77
|
+
Do not copy the shadcn skill into bộ docs. Do not author `#ui:` tags from memory if `shadcn search` can name the registry item.
|
|
78
|
+
|
|
79
|
+
`dotnet-line` requires the .NET 8 SDK (`FLOWGRID_DOTNET`, then `dotnet`) and
|
|
80
|
+
is limited to the pilot-specific `kiosk-check-in` profile. Its main pass also
|
|
81
|
+
emits generated test source.
|
|
82
|
+
|
|
83
|
+
## Accelerators (optional)
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
if local ArtifactGraph available: recommend/check the FE repo's allowlisted gen command
|
|
87
|
+
else: run flowgrid gen:dry / gen directly
|
|
88
|
+
|
|
89
|
+
Missing ArtifactGraph never blocks prototype generation. Complete the direct,
|
|
90
|
+
deterministic bộ code fallback first, then follow
|
|
91
|
+
`.cursor/rules/flowgrid-code-optional-integrations.mdc` for once-per-run telemetry.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Docs render / `spec:split` remain flowgrid / bộ docs handoffs.
|
|
95
|
+
|
|
96
|
+
## Translation Rule
|
|
97
|
+
Luôn bọc text tĩnh bằng i18n helper native của framework.
|
|
98
|
+
- Đọc block `i18n` từ `ir/design.yaml`.
|
|
99
|
+
- Tự động sinh/cập nhật file ngôn ngữ tương ứng (`.json` cho FE/NodeJS, hoặc `.resx` cho Dotnet).
|
|
100
|
+
- KHÔNG viết gộp ngôn ngữ lên giao diện (ví dụ không dùng `login / đăng nhập`).
|