@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,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,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Plans docs-first — rule SSOT in docs hub; no TC→docs sync
|
|
3
|
+
globs: cases/**/*,scenarios/**/*,suites/**/*
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Plans — docs-first
|
|
8
|
+
|
|
9
|
+
- **Rule / acceptance SSOT = docs hub.** Tests hub chỉ `refs.rule` (id + link). Không copy nội dung rule vào YAML để “sửa cho tiện”.
|
|
10
|
+
- Grill thấy **scope hở / rule mơ hồ** → handoff docs (`/update-spec`, grill-docs). **Không** vá bằng testcase.
|
|
11
|
+
- Chỉ thêm/sửa `TC-*` khi docs đã rõ và thiếu **bao phủ** (`coverage`).
|
|
12
|
+
- YAML = máy (gen Playwright). MD = member đọc đối chiếu docs.
|
|
13
|
+
- Chi tiết: `landscape/NOTE-testing-architecture.md`.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-testcase
|
|
3
|
+
description: /grill-testcase — audit E2E plan YAML/MD on the tests hub.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> [!CRITICAL] MANDATORY PRE-FLIGHT
|
|
8
|
+
> **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
|
|
9
|
+
|
|
10
|
+
# /grill-testcase
|
|
11
|
+
|
|
12
|
+
**Owner:** bộ test (`--type=tests`)
|
|
13
|
+
|
|
14
|
+
Audit plans only. Spec holes hand off to docs-hub `/update-spec` or `/grill-bqa` (bộ docs), never invent acceptance. **[MANDATORY]** When handing off, you MUST output a comprehensive gap report in the Chat Thread formatted as a complete, ready-to-use prompt starting with `/docs-hub` (e.g., `/docs-hub /update-spec [details...]`). This prompt must detail exactly what business rules or coverage are missing, enabling the user to copy-paste it directly to run the docs-hub skill.
|
|
15
|
+
|
|
16
|
+
Route Functions/W-* evidence through bộ docs and symbol/call-graph evidence
|
|
17
|
+
for repo X through its Platform DNA-wired `codegraph-<repo-key>` server. Use
|
|
18
|
+
`FLOWGRID_DOCS_ROOT` / `FLOWGRID_TESTS_DOC` for pointer evidence; never build or
|
|
19
|
+
query a workspace-parent graph.
|
|
20
|
+
|
|
21
|
+
## Target / ID Resolution Rule
|
|
22
|
+
|
|
23
|
+
- User prompt MAY specify a screen ID, module ID, or short slug (e.g. `W-AD-AUTH-001`, `CMP-ADM-000`, `login`).
|
|
24
|
+
- **[MANDATORY]** Agent MUST use `flowgrid_docs_route` or `flowgrid_docs_get_element` (or glob search under `FLOWGRID_DOCS_ROOT` / `surfaces/...`) to resolve target paths.
|
|
25
|
+
- **[MANDATORY]** Read the entire function **`*.bundle.yaml`** (sibling of `ir/`). Cross-reference plans against bundle `userStories`, `acceptanceCriteria`, `spec.ui`, and `design.*` — not split IR files.
|
|
26
|
+
- If scenarios/acceptance are thin or missing → hand off docs-hub `/update-spec` or `/spec` (paste-ready prompt). Do not patch bundle from tests hub.
|
|
27
|
+
- **[STRICTLY FORBIDDEN]** Do NOT read generated `*.md`.
|
|
28
|
+
- If auditing **SC-***, the YAML/MD path MUST mirror the docs `FLOW-*.md` (cluster/module/surface `common/processes/` or `architecture/03-business-process/`). Flag `scenarios/auth/…` or `common/` leftovers.
|
|
29
|
+
|
|
30
|
+
## Audit Rules
|
|
31
|
+
|
|
32
|
+
- **[MANDATORY]** Run **`flowgrid cases:gate --strict --docs-root $FLOWGRID_DOCS_ROOT`** before sign-off (replaces ad-hoc check + audit only).
|
|
33
|
+
- **[MANDATORY]** Per-file spot check: `flowgrid audit testcase <TC.yaml> --bundle <resolved.bundle.yaml>` when fixing one file.
|
|
34
|
+
- Cross-flow SC: `flowgrid audit scenario <SC.md> --tests-docs <FLOWGRID_TESTS_DOC>`
|
|
35
|
+
- **Audit Coverage against Scenarios & testMatrix:** **[MANDATORY]** Cross-reference test cases with `userStories.scenarios`, validation inventory, and `design.actions` in the **bundle** (consume `bundleCrossGaps` from audit JSON).
|
|
36
|
+
- Ensure that every scenario defined in the design has corresponding test cases and that all `acceptance` criteria are verified.
|
|
37
|
+
- **[MANDATORY]** Verify that the test case contains a comprehensive `testMatrix` covering: `positive_boundary`, `negative_length/format`, `negative_duplicate`, `concurrency_double_submit`, and `network_interruption`. Flag plans that only test the happy path as incomplete coverage.
|
|
38
|
+
- **Check Business Descriptions:** **[MANDATORY]** When auditing plans, ensure that `description` or `story` fields are present, detailed, and align with the element `meaning` / `purpose`. Flag plans that have sparse 1-liners or lack clear business context and expected outcomes. Advise the user or authoring agent to provide richer business logic.
|
|
39
|
+
- **Check YAML Syntax Integrity:** **[MANDATORY]** Ensure YAML files do not contain raw JavaScript expressions embedded as values (e.g., `"a".repeat(256)`) without being properly wrapped in single quotes. If you spot JS expressions that would cause a YAML parser to crash (`Unexpected scalar at node end`), flag them immediately.
|
|
40
|
+
|
|
41
|
+
## Accelerators (optional)
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
if local ArtifactGraph available: taxonomy/coverage/gap slice from this tests hub
|
|
45
|
+
else: local deterministic coverage/search over targeted plan/docs evidence
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
ArtifactGraph indexes this tests hub only; spec-hole handoffs go to docs-hub
|
|
49
|
+
`/update-spec` (bộ docs), not through ArtifactGraph.
|
|
50
|
+
|
|
51
|
+
Use one stable `runId` per run. When ArtifactGraph is missing, finish the local
|
|
52
|
+
fallback before emitting exactly one `flowgrid.missing-optional` event for that
|
|
53
|
+
`runId` + `artifactgraph`; retries must not emit again. Conform to
|
|
54
|
+
`.cursor/schemas/flowgrid-test/missing-optional-event.schema.json` and include only
|
|
55
|
+
actual successful `fileReads` and exact raw `contextBytes`, never estimates.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scenario
|
|
3
|
+
description: /scenario — author cross-flow E2E scenario YAML/MD on the tests hub.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> [!CRITICAL] MANDATORY PRE-FLIGHT
|
|
8
|
+
> **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
|
|
9
|
+
|
|
10
|
+
# /scenario
|
|
11
|
+
|
|
12
|
+
**Owner:** bộ test (`--type=tests`)
|
|
13
|
+
|
|
14
|
+
Author cross-flow scenarios (SC) on the current tests hub. Design rules stay on the docs hub.
|
|
15
|
+
|
|
16
|
+
Scenarios test a **business process** (`FLOW-*`) that spans multiple screens (`W-*`) or modules. They mirror the docs FLOW file **after** bộ docs LCA `common/` placement (not a flat `common/` tree).
|
|
17
|
+
|
|
18
|
+
## Output Rules
|
|
19
|
+
|
|
20
|
+
- **Rich Business Descriptions:** **[MANDATORY]** When generating YAML scenarios, you MUST provide a detailed `description` (or `story`) field. Do not leave them empty or write sparse 1-liners.
|
|
21
|
+
- Explain the **Business Context**: Why does this cross-flow exist? What is the real-world process?
|
|
22
|
+
- Outline the **Expected Outcome**: Detail what the end-to-end user journey should achieve.
|
|
23
|
+
- Include metadata like `priority`, `status`, `module`, and `tags` if available.
|
|
24
|
+
- **[MANDATORY]** Frontmatter MUST list every `W-*` touched by the journey: `screens: [W-…, W-…]` (keep legacy `screen:` for primary screen if needed).
|
|
25
|
+
- **[MANDATORY]** After authoring, run `flowgrid audit scenario <SC file> --tests-docs <hub>` (or `FLOWGRID_TESTS_DOC`); fix `SC_SCREEN_NO_TC` gaps with `cases/**/TC-*.yaml` or `coverage_deferred` + `QA-*` per screen.
|
|
26
|
+
- **Valid YAML Syntax:** **[MANDATORY]** Do NOT write raw JavaScript expressions directly into YAML values. If you need a long string, wrap the exact code expression entirely in single quotes (e.g., `value: '"a".repeat(256)'`).
|
|
27
|
+
- **Concise Naming Convention:** **[MANDATORY]** The `id` must be short (e.g., `SC-CHK-01`). The `title` MUST be extremely short and concise (limit 15-20 characters, e.g., `Guest Checkout`, `Refund Flow`). Put long explanations into `description`, not `title` or `id`.
|
|
28
|
+
|
|
29
|
+
## Target / ID Resolution Rule
|
|
30
|
+
|
|
31
|
+
- **[MANDATORY]** Agent MUST locate the **`FLOW-*.md`** file on the docs hub (`FLOWGRID_DOCS_ROOT`) via `flowgrid_docs_route` / `flowgrid_docs_get_element` / glob. Filenames are `FLOW-…md`, not `flow-*`.
|
|
32
|
+
- Search in this order (same LCA as bộ docs `common-scope.md`):
|
|
33
|
+
1. `surfaces/<surface>/<CMP-id>/<NN>/common/processes/FLOW-*.md` (cluster)
|
|
34
|
+
2. `surfaces/<surface>/<CMP-id>/common/processes/FLOW-*.md` (module)
|
|
35
|
+
3. `surfaces/<surface>/common/processes/FLOW-*.md` (surface)
|
|
36
|
+
4. `surfaces/common/processes/FLOW-*.md` (cross-surface product common)
|
|
37
|
+
5. `architecture/03-business-process/FLOW-*.md` (org catalog only)
|
|
38
|
+
- **Strict:** Only author a scenario if that `FLOW-*.md` exists. Missing FLOW or thin business rules → hand off to docs-hub `/business-process` or `/update-spec`, do not invent SC. **[MANDATORY]** When handing off, you MUST output a comprehensive gap report (formatted as a complete, ready-to-use prompt starting with `/docs-hub`) detailing exactly what flows or business rules are missing, so the user can copy-paste it directly to run the docs-hub skill.
|
|
39
|
+
- **[STRICTLY FORBIDDEN]** Do not treat `common/yaml/` or `common/patterns/` as scenario sources.
|
|
40
|
+
|
|
41
|
+
## Directory Mirroring Rule (Docs SSOT)
|
|
42
|
+
|
|
43
|
+
Mirror the FLOW file path onto the tests hub. Strip **only** these prefixes:
|
|
44
|
+
|
|
45
|
+
| Docs FLOW path | Tests hub |
|
|
46
|
+
|----------------|-----------|
|
|
47
|
+
| `surfaces/<rest>/common/processes/FLOW-checkout.md` | `scenarios/<rest>/common/processes/FLOW-checkout/SC-*.yaml` |
|
|
48
|
+
| `architecture/03-business-process/FLOW-checkout.md` | `scenarios/architecture/03-business-process/FLOW-checkout/SC-*.yaml` |
|
|
49
|
+
|
|
50
|
+
Examples:
|
|
51
|
+
|
|
52
|
+
- Docs `surfaces/admin/CMP-ADM-002/02/common/processes/FLOW-checkout.md` → `scenarios/admin/CMP-ADM-002/02/common/processes/FLOW-checkout/SC-*.yaml`
|
|
53
|
+
- Docs `surfaces/admin/CMP-ADM-002/common/processes/FLOW-onboard.md` → `scenarios/admin/CMP-ADM-002/common/processes/FLOW-onboard/SC-*.yaml`
|
|
54
|
+
|
|
55
|
+
Do **not** flatten to `scenarios/auth/…`. Do **not** use `common/` (legacy). Keep numeric cluster folders (`02/`) in the tests path.
|
|
56
|
+
|
|
57
|
+
## Accelerators (optional)
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
if local ArtifactGraph available: taxonomy/coverage/gap hints from this tests hub
|
|
61
|
+
else: local deterministic coverage/search from scoped plan + docs evidence
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
ArtifactGraph on the tests hub uses `--type=common,test` and indexes this repo only. Docs-hub FLOW/design evidence comes through explicit docs references, never through ArtifactGraph.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-api
|
|
3
|
+
description: /test-api — author api-e2e TC YAML + Playwright request specs (partner/webhook hooks).
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> [!CRITICAL] MANDATORY PRE-FLIGHT
|
|
8
|
+
> **[MANDATORY]** Re-read this `SKILL.md` via file-read tool.
|
|
9
|
+
> **[MANDATORY]** Integration contract SSOT on docs-hub: `surfaces/integrations/`, `01-backend-spec` — skills `/api-integration`, `/grill-integration-spec`.
|
|
10
|
+
|
|
11
|
+
# /test-api — API hook E2E (tests-docs + codegen)
|
|
12
|
+
|
|
13
|
+
**Owner:** tests-docs hub (`genType: api-e2e`). **Not** UI Page Object lane — use `/testcase` + `testcase:gen` for portal E2E.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- Webhook inbound/outbound, partner Open API, export hooks **without** portal steps in the same TC file.
|
|
20
|
+
- Cross-flow **SC-*** that spans UI + API: author **two** TC files (UI `genType: e2e` + API `genType: api-e2e`) under the same scenario.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Author TC YAML
|
|
25
|
+
|
|
26
|
+
- **[MANDATORY]** `schemaVersion: 2`, `genType: api-e2e`, `refs.screen` matching `API-*`.
|
|
27
|
+
- **[MANDATORY]** `api.baseUrlEnv` (CI env) + `api.baseURL` fallback; optional `api.defaultHeaders`.
|
|
28
|
+
- **[MANDATORY]** `apiSteps[]`: `method`, `path`, `expectStatus`, optional `body`, `headers`, `expectJson`, `expectBodyContains`.
|
|
29
|
+
- **[MANDATORY]** Human `steps[]` + `testMatrix` (same gate as UI TC).
|
|
30
|
+
- Mirror path: `cases/.../integrations/.../TC-*.yaml` aligned with docs integration leaf.
|
|
31
|
+
|
|
32
|
+
Template: `harness/tests/templates/TC.example-api.yaml`.
|
|
33
|
+
|
|
34
|
+
Audit: `flowgrid audit testcase <TC.yaml> --bundle <integration.bundle.yaml>` when bundle exists on docs hub.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Generate Playwright (request)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
flowgrid testcase:gen:api --testcase cases/.../TC-PARTNER-EXPORT.yaml
|
|
42
|
+
flowgrid testcase:gen:api:dry --id TC-PARTNER-EXPORT
|
|
43
|
+
flowgrid testcase:gen:api --all # every genType api-e2e in hub
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Env: `FLOWGRID_TESTS_DOC`, `FLOWGRID_API_TEST_BASE_URL` (or custom `api.baseUrlEnv`).
|
|
47
|
+
|
|
48
|
+
Output (e2e-root): `tests/api-e2e/<module>/<TC-id>.api.spec.ts` — run with Playwright project that includes `tests/api-e2e/**`.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## After gen
|
|
53
|
+
|
|
54
|
+
- Fix auth (HMAC, rotating tokens) in generated spec or TC `headers` — do not commit secrets; use env in CI.
|
|
55
|
+
- Hybrid UI → API: run UI spec first (or fixture API) then API spec; share `orderId` via `process.env` / `test.info().attach` / storageState as team convention.
|
|
56
|
+
- Postman/Newman collections remain optional; link via TC tag `contract-postman` (no FlowGrid gen yet).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Related
|
|
61
|
+
|
|
62
|
+
- Author plan: `/testcase` (UI), `/scenario` (SC-*)
|
|
63
|
+
- Grill hub: `/grill-testcase`
|
|
64
|
+
- Docs SSOT: `/api-integration`, `/grill-integration-spec`
|
|
65
|
+
- UI E2E after skeleton: `/test` + `testcase:gen`
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testcase
|
|
3
|
+
description: /testcase — author E2E plan YAML/MD on the tests hub (not Playwright).
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
> [!CRITICAL] MANDATORY PRE-FLIGHT
|
|
8
|
+
> **[MANDATORY]** Re-read this entire `SKILL.md` via file-read tool. STRICTLY FORBIDDEN to rely on memory.
|
|
9
|
+
> **[MANDATORY]** Read the entire function **`*.bundle.yaml`** (sibling of `ir/` on docs hub) BEFORE authoring any test case. Do not split-read `ir/spec.yaml` + `ir/design.yaml` for coverage traceability.
|
|
10
|
+
|
|
11
|
+
# /testcase — E2E Test Case Authoring (Tests Hub)
|
|
12
|
+
|
|
13
|
+
**Owner:** bộ test (`--type=tests`). Design rules stay on docs hub. Playwright generation is FE `/test`.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Rule: Audit Interlock & Workload Threshold (Law 2)
|
|
18
|
+
|
|
19
|
+
- **[MANDATORY]** Always run static audit first: `flowgrid audit testcase <cases/.../TC-*.yaml> --bundle <function.bundle.yaml>` (bundle path = same leaf you read for SSOT).
|
|
20
|
+
- **[MANDATORY]** Every new TC file MUST declare **`schemaVersion: 2`** and pass `flowgrid cases:check` (JSON Schema) plus audit (matrix facets).
|
|
21
|
+
- ✅ Consume JSON gap report to fix coverage gaps.
|
|
22
|
+
- **Threshold Interlock (Law 2):**
|
|
23
|
+
- **Small Scope (≤5 missing testcases/gaps):** Resolve inline in chat thread.
|
|
24
|
+
- **Large Scope (≥10 missing testcases/gaps):** **[MANDATORY HARD STOP IN CHAT]**. Generate an implementation plan / Plan Mode document partitioned into sequential Phases (3–5 testcases per phase) with disk offloading at boundaries.
|
|
25
|
+
- ❌ Do not skip audit and proceed to authoring directly.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Rule: Bundle SSOT (read)
|
|
30
|
+
|
|
31
|
+
- **[MANDATORY]** Resolve the function leaf via `flowgrid_docs_route` / glob → read **`…/<slug>.bundle.yaml`** (exactly one bundle per function folder).
|
|
32
|
+
- **[MANDATORY]** Trace coverage from bundle: `userStories` (top-level), `acceptanceCriteria`, `spec.ui`, `design.sections`, `design.actions`, `design.stateMatrix`.
|
|
33
|
+
- **[MANDATORY]** If bundle missing or `userStories.scenarios` / `acceptanceCriteria` empty → **STOP**; hand off `/docs-hub /update-spec` or `/spec` (paste-ready gap prompt). Do NOT invent tests.
|
|
34
|
+
- **[MANDATORY]** If `flowgrid check` / split:check fails on that bundle → hand off docs-hub to reconcile bundle ↔ `ir/*` before testcase grill.
|
|
35
|
+
- **[STRICTLY FORBIDDEN]** Write docs hub (`ir/*`, `*.bundle.yaml`). Do NOT use generated `*.md` as SSOT.
|
|
36
|
+
|
|
37
|
+
**Codegen / Playwright** still consume **`ir/design.yaml`** on FE repo after split; bundle is the **authoring** SSOT for test design.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Rule: ID Resolution
|
|
42
|
+
|
|
43
|
+
- **[MANDATORY]** Use `flowgrid_docs_route` or `flowgrid_docs_get_element` (or glob under `FLOWGRID_DOCS_ROOT` / `surfaces/…`) to resolve target paths from ID or slug.
|
|
44
|
+
- **[STRICTLY FORBIDDEN]** Do NOT demand full filesystem path from user when ID or slug is given.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Rule: Directory Mirroring (Docs SSOT)
|
|
49
|
+
|
|
50
|
+
- **[MANDATORY]** Mirror function folder: `cases/<relative-path>/TC-*.yaml`.
|
|
51
|
+
- ✅ `surfaces/admin/CMP-ADM-002/02/01/login/` → `cases/admin/CMP-ADM-002/02/01/login/TC-*.yaml`
|
|
52
|
+
- ❌ `cases/admin/auth/W-…` — invented path not matching docs structure.
|
|
53
|
+
- Cross-flow plans → `/scenario` (mirror `common/processes/FLOW-*` or `architecture/03-business-process/FLOW-*`).
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Rule: Test Case Content Requirements & Equivalence Partitioning (testMatrix)
|
|
58
|
+
|
|
59
|
+
- **[MANDATORY]** Root field **`schemaVersion: 2`** on every `TC-*.yaml` (release gate SSOT).
|
|
60
|
+
- **[MANDATORY]** Populate **`traceability`** (`bundleScreen`, `bundleScenarios[]` slugs, `acceptanceRefs[]` as `AC-01`…, `actionRefs[]` as `btn_*`) from bundle before grill sign-off — required for `cases:gate --strict`.
|
|
61
|
+
- **[MANDATORY]** Map cases to `userStories.scenarios`, field `validation`, and `design.actions` from the **bundle** (whole file).
|
|
62
|
+
- **[MANDATORY]** Every test case file MUST declare a structured `testMatrix` covering:
|
|
63
|
+
1. `positive_boundary`: Minimum / maximum valid lengths and ranges.
|
|
64
|
+
2. `negative_length` / `negative_format`: Under min, over max, and regex pattern violations with expected localized error messages.
|
|
65
|
+
3. `negative_duplicate`: Server-side remote uniqueness violation (expected 409).
|
|
66
|
+
4. `concurrency_double_submit`: Immediate button disablement and idempotency check.
|
|
67
|
+
5. `network_interruption` / `exception`: Offline banner and form state preservation.
|
|
68
|
+
- **[MANDATORY]** Consult `meaning` + `purpose` fields of UI elements when writing step descriptions and test data.
|
|
69
|
+
- **[MANDATORY]** `description` / `story` field MUST be rich — explain business context, real-world scenario, expected outcome from user perspective.
|
|
70
|
+
- ✅ Multi-sentence description covering why case exists + what user should experience.
|
|
71
|
+
- ❌ Single-liner `"Test login form"`.
|
|
72
|
+
- **[MANDATORY]** `id`: short (e.g. `TC-AUTH-01`). `title`: max 15-20 characters (e.g. `Valid Login`, `Empty Email`). All long explanations belong in `description`.
|
|
73
|
+
- **[MANDATORY]** Include: `priority`, `status`, `module`, `tags`, verification of `userStories.acceptance` criteria.
|
|
74
|
+
- **[MANDATORY]** YAML test data must be valid YAML — no raw JavaScript expressions (e.g. `"a".repeat(256)` → write the actual repeated string or wrap in single quotes).
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Rule: Route Cross-Repo Evidence
|
|
79
|
+
|
|
80
|
+
- **[MANDATORY]** Route evidence by owner:
|
|
81
|
+
- Functions/`W-*` → bộ docs
|
|
82
|
+
- Plan/docs → `FLOWGRID_TESTS_DOC` / `FLOWGRID_DOCS_ROOT`
|
|
83
|
+
- Symbols for repo X → `codegraph-<repo-key>` (Platform DNA-wired server)
|
|
84
|
+
- **[STRICTLY FORBIDDEN]** Never query one workspace-wide graph. Never hand-edit MCP config.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Verification Checklist
|
|
89
|
+
|
|
90
|
+
- [ ] Audit script run; all coverage gaps resolved or gap report generated for docs hub.
|
|
91
|
+
- [ ] Function `*.bundle.yaml` read in full (not partial slices).
|
|
92
|
+
- [ ] All `userStories.scenarios` covered by corresponding test cases.
|
|
93
|
+
- [ ] Equivalence Partitioning & Boundary Value Analysis `testMatrix` declared (min/max boundary, regex failure, duplicate 409, double-submit lock, offline preservation).
|
|
94
|
+
- [ ] Scenario markdown (`SC-*.md`) formatted with IEEE 29119 Boundary Analysis Table & Gherkin BDD.
|
|
95
|
+
- [ ] `meaning` + `purpose` used for step descriptions.
|
|
96
|
+
- [ ] `id` short; `title` ≤20 chars; `description` is rich and business-meaningful.
|
|
97
|
+
- [ ] YAML syntax valid — no JS expressions in test data values.
|
|
98
|
+
- [ ] Directory structure mirrors docs SSOT path exactly.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: SC-EXAMPLE
|
|
3
|
+
module: CMP-01-auth
|
|
4
|
+
surface: admin
|
|
5
|
+
screen: W-AD-AUTH-001
|
|
6
|
+
screens:
|
|
7
|
+
- W-AD-AUTH-001
|
|
8
|
+
rules:
|
|
9
|
+
- RUL-00-example
|
|
10
|
+
coverage_plan:
|
|
11
|
+
- happy
|
|
12
|
+
- boundary
|
|
13
|
+
- validation
|
|
14
|
+
- concurrency
|
|
15
|
+
- security
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# SC-EXAMPLE — Xác Thực & Khởi Tạo Hồ Sơ Khách Hàng
|
|
19
|
+
|
|
20
|
+
Scenario thuộc **CMP-01-auth** · Tính năng năng lực **CAP-AUTH-001**.
|
|
21
|
+
Quy tắc chi tiết và schema cơ sở dữ liệu tham chiếu tại **Docs Hub** (cite ID: `spec.yaml`).
|
|
22
|
+
|
|
23
|
+
| Thuộc tính | Giá trị |
|
|
24
|
+
|---|---|
|
|
25
|
+
| **Scenario ID** | `SC-EXAMPLE` |
|
|
26
|
+
| **Module** | `CMP-01-auth` |
|
|
27
|
+
| **Bề mặt (Surface)** | `admin` |
|
|
28
|
+
| **Màn hình (Screen)** | `W-AD-AUTH-001` (`/admin/records/create`) |
|
|
29
|
+
| **Mức độ ưu tiên** | `High` |
|
|
30
|
+
|
|
31
|
+
## 1. Bối Cảnh Nghiệp Vụ & Phân Tích Rủi Ro (Business Context & Risk Analysis)
|
|
32
|
+
|
|
33
|
+
Màn hình khởi tạo hồ sơ là cửa ngõ dữ liệu tài chính của khách hàng. Nếu bỏ sót kiểm tra trùng mã hoặc không xử lý chặn click đúp (double-submit), hệ thống sẽ tạo các bản ghi rác gây xung đột số liệu doanh thu và vi phạm tính toàn vẹn dữ liệu kế toán.
|
|
34
|
+
|
|
35
|
+
## 2. Hành Vi Chuẩn BDD (Behavior: Given / When / Then)
|
|
36
|
+
|
|
37
|
+
- **Given (Tiền điều kiện):** Người dùng đăng nhập thành công với vai trò Quản trị viên (`ADMIN`), tài khoản có quyền `records.create`, và chưa tồn tại bản ghi nào có mã `REC-2026-001` trong cơ sở dữ liệu.
|
|
38
|
+
- **When (Thao tác):** Người dùng nhập đầy đủ các trường thông tin hợp lệ (mã hồ sơ, tên hồ sơ, chọn gói dịch vụ) và nhấn nút "Lưu & Xác Nhận".
|
|
39
|
+
- **Then (Hậu điều kiện):** Hệ thống khóa nút để tránh gửi trùng lặp, gửi request kèm header `X-Idempotency-Key`, tạo mới bản ghi thành công trong bảng `records`, hiển thị Toast thông báo màu xanh và điều hướng sang màn hình chi tiết `W-ADM-DETAIL-01`.
|
|
40
|
+
|
|
41
|
+
## 3. Ma Trận Test Phân Hoạch Tương Đương & Phân Tích Giá Trị Biên (Equivalence Partitioning & Boundary Test Matrix - IEEE 29119)
|
|
42
|
+
|
|
43
|
+
| Mã Case (Case ID) | Khía Cạnh Kiểm Thử (Facet) | Dữ Liệu Đầu Vào (Input Data) | Kết Quả Mong Đợi (Expected Outcome) | HTTP Status & UI State | Tự Động Hóa (Automation Case) |
|
|
44
|
+
|---|---|---|---|---|---|
|
|
45
|
+
| **TC-VAL-01** | `positive_boundary` (Biên tối thiểu) | `code: "REC01"` (5 chars), `name: "Hồ sơ A"` | Form hợp lệ, gửi dữ liệu thành công | `HTTP 200` · Toast Success xanh | `TC-EXAMPLE-VALID` |
|
|
46
|
+
| **TC-VAL-02** | `positive_boundary` (Biên tối đa) | `code: "REC-2026-MAXIMUM-001"` (20 chars) | Form hợp lệ, gửi dữ liệu thành công | `HTTP 200` · Toast Success xanh | `TC-EXAMPLE-VALID` |
|
|
47
|
+
| **TC-VAL-03** | `negative_length` (Dưới độ dài min) | `code: "REC"` (3 chars) | Chặn submit, báo lỗi inline dưới ô nhập | `Client Error` · "Độ dài từ 5 đến 20 ký tự" | `TC-EXAMPLE-INVALID` |
|
|
48
|
+
| **TC-VAL-04** | `negative_format` (Sai regex ký tự) | `code: "rec_code_@!"` (chữ thường, ký tự lạ) | Chặn submit, báo lỗi inline dưới ô nhập | `Client Error` · "Chỉ gồm chữ in hoa, số và gạch" | `TC-EXAMPLE-INVALID` |
|
|
49
|
+
| **TC-VAL-05** | `negative_duplicate` (Trùng lặp DB) | `code: "REC-EXISTING-001"` (đã có trong DB) | Server từ chối, highlight viền đỏ ô mã | `HTTP 409` · Toast Cảnh báo trùng lặp | `TC-EXAMPLE-DUPLICATE` |
|
|
50
|
+
| **TC-ACT-06** | `concurrency_double_submit` | Click nút "Lưu" liên tục 2 lần trong 100ms | Nút khóa disabled tức thì, chỉ 1 request gửi đi | `UI Locked` · Không tạo 2 bản ghi trùng | `TC-EXAMPLE-CONCURRENCY` |
|
|
51
|
+
| **TC-SYS-07** | `network_interruption` (Mất mạng) | Ngắt kết nối mạng ngay khi gửi request | Hiện banner cảnh báo mất kết nối, giữ nguyên dữ liệu form | `Network Banner` · Form state preserved | `TC-EXAMPLE-OFFLINE` |
|
|
52
|
+
|
|
53
|
+
## 4. Bao Phủ Rủi Ro & Khía Cạnh Chất Lượng (Quality Dimensions Coverage)
|
|
54
|
+
|
|
55
|
+
| Khía Cạnh (Dimension) | Mức Độ Bao Phủ | Ghi Chú Đảm Bảo Chất Lượng |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| **Happy Path & Workflow** | 100% | Toàn bộ luồng khởi tạo đến xem chi tiết hoàn tất |
|
|
58
|
+
| **Boundary Value Analysis** | 100% | Kiểm thử đầy đủ tại ngưỡng min-1, min, max, max+1 |
|
|
59
|
+
| **Data Integrity & Concurrency** | 100% | Kiểm tra unique mã hồ sơ qua async DB & chặn double-click |
|
|
60
|
+
| **Security & RBAC** | 100% | Kiểm soát phân quyền nút bấm theo ma trận trạng thái |
|
|
61
|
+
| **Fault Tolerance & Resilience** | 100% | Xử lý mất mạng giữ dữ liệu, xử lý timeout không resubmit trùng |
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
stateDiagram-v2
|
|
65
|
+
[*] --> NhapLieu: Mở form tạo mới (DRAFT)
|
|
66
|
+
NhapLieu --> KiemTraHopLe: Nhấn "Lưu & Xác Nhận"
|
|
67
|
+
KiemTraHopLe --> BaoLoiInline: Dữ liệu sai biên / format / thiếu trường
|
|
68
|
+
BaoLoiInline --> NhapLieu: Người dùng sửa lỗi
|
|
69
|
+
KiemTraHopLe --> KhoaGiaoDien: Hợp lệ (Lock double-submit)
|
|
70
|
+
KhoaGiaoDien --> GuiApiServer: Dispatch POST + X-Idempotency-Key
|
|
71
|
+
GuiApiServer --> TrungLap409: Mã hồ sơ đã tồn tại
|
|
72
|
+
TrungLap409 --> NhapLieu: Highlight ô mã & hiển thị cảnh báo
|
|
73
|
+
GuiApiServer --> ThanhCong200: Tạo mới thành công
|
|
74
|
+
ThanhCong200 --> ChuyenTrangChiTiet: Toast xanh + redirect W-ADM-DETAIL-01
|
|
75
|
+
ChuyenTrangChiTiet --> [*]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## 5. Danh Sách Test Cases Chi Tiết (Test Cases Mapping)
|
|
79
|
+
|
|
80
|
+
| Mã Case (ID) | Khía Cạnh | Mức Độ Ưu Tiên | Thư Mục Test Hub |
|
|
81
|
+
|---|---|---|---|
|
|
82
|
+
| `TC-EXAMPLE-VALID` | happy, boundary | Critical | `cases/admin/CMP-01-auth/01/create/` |
|
|
83
|
+
| `TC-EXAMPLE-INVALID` | validation, boundary | High | `cases/admin/CMP-01-auth/01/create/` |
|
|
84
|
+
| `TC-EXAMPLE-DUPLICATE` | concurrency, remote_unique | High | `cases/admin/CMP-01-auth/01/create/` |
|
|
85
|
+
| `TC-EXAMPLE-CONCURRENCY` | interaction, double_submit | High | `cases/admin/CMP-01-auth/01/create/` |
|
|
86
|
+
| `TC-EXAMPLE-OFFLINE` | reliability, offline_resilience | Medium | `cases/admin/CMP-01-auth/01/create/` |
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
schemaVersion: 2
|
|
2
|
+
id: TC-EXAMPLE-PARTNER-EXPORT
|
|
3
|
+
title: Partner export hook
|
|
4
|
+
summary: Ví dụ — đối tác đọc export API sau khi đơn đã sẵn sàng.
|
|
5
|
+
story: |
|
|
6
|
+
Given đơn ORD-EXAMPLE-001 đã được portal xử lý
|
|
7
|
+
When đối tác gọi GET export
|
|
8
|
+
Then payload trả về trạng thái ready
|
|
9
|
+
genType: api-e2e
|
|
10
|
+
feature: partner-example
|
|
11
|
+
coverage: [happy, authorization]
|
|
12
|
+
refs:
|
|
13
|
+
screen: API-EXAMPLE-EXPORT-001
|
|
14
|
+
scenario: SC-EXAMPLE
|
|
15
|
+
module: CMP-INT-EXAMPLE
|
|
16
|
+
api: integration.partner.export
|
|
17
|
+
api:
|
|
18
|
+
baseUrlEnv: FLOWGRID_API_TEST_BASE_URL
|
|
19
|
+
baseURL: http://localhost:3000
|
|
20
|
+
defaultHeaders:
|
|
21
|
+
Accept: application/json
|
|
22
|
+
apiSteps:
|
|
23
|
+
- id: partner-export
|
|
24
|
+
method: GET
|
|
25
|
+
path: /api/v1/integrations/example/export/ORD-EXAMPLE-001
|
|
26
|
+
headers:
|
|
27
|
+
Authorization: Bearer ${PARTNER_TOKEN}
|
|
28
|
+
expectStatus: 200
|
|
29
|
+
expectJson:
|
|
30
|
+
orderId: ORD-EXAMPLE-001
|
|
31
|
+
status: ready
|
|
32
|
+
testMatrix:
|
|
33
|
+
- facet: positive_boundary
|
|
34
|
+
description: Export trả 200 và status ready
|
|
35
|
+
expected:
|
|
36
|
+
status: 200
|
|
37
|
+
steps:
|
|
38
|
+
- Partner gọi GET export với token hợp lệ
|
|
39
|
+
- Hệ thống trả JSON orderId và status
|
|
40
|
+
tags: [integration, partner-api, webhook]
|
|
41
|
+
automation: automated
|
|
42
|
+
dimensions:
|
|
43
|
+
business: [workflow]
|
|
44
|
+
technical: [api]
|
|
45
|
+
quality: [security]
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
schemaVersion: 2
|
|
2
|
+
id: TC-EXAMPLE-VALID
|
|
3
|
+
title: Example flow with valid input should succeed
|
|
4
|
+
summary: Ví dụ — luồng hợp lệ đi đến trạng thái thành công.
|
|
5
|
+
story: |
|
|
6
|
+
Given điều kiện đầu vào hợp lệ và người dùng có quyền
|
|
7
|
+
When thực hiện thao tác nhập liệu và nhấn lưu
|
|
8
|
+
Then hệ thống tạo mới thành công và chuyển trạng thái
|
|
9
|
+
refs:
|
|
10
|
+
module: CMP-01-auth
|
|
11
|
+
surface: admin
|
|
12
|
+
scenario: SC-EXAMPLE
|
|
13
|
+
example: EX-EXAMPLE-01
|
|
14
|
+
screen: W-AD-AUTH-001
|
|
15
|
+
coverage: [happy, boundary, validation, concurrency, exception]
|
|
16
|
+
priority: high
|
|
17
|
+
automation: automated
|
|
18
|
+
tags: [smoke, e2e, ui, unit]
|
|
19
|
+
dimensions:
|
|
20
|
+
business: [workflow]
|
|
21
|
+
technical: [ui, api]
|
|
22
|
+
quality: [reliability, security]
|
|
23
|
+
|
|
24
|
+
preconditions:
|
|
25
|
+
- "User logged in with role 'ADMIN'"
|
|
26
|
+
- "No pre-existing record with code 'REC-2026-001'"
|
|
27
|
+
|
|
28
|
+
# BẢNG MA TRẬN TEST PHÂN HOẠCH TƯƠNG ĐƯƠNG & PHÂN TÍCH GIÁ TRỊ BIÊN (TEST MATRIX)
|
|
29
|
+
testMatrix:
|
|
30
|
+
- caseId: TC-VAL-01
|
|
31
|
+
facet: "positive_boundary"
|
|
32
|
+
description: "Nhập đúng giá trị biên tối thiểu (min boundary: 5 chars)"
|
|
33
|
+
input:
|
|
34
|
+
record_code: "REC01"
|
|
35
|
+
record_name: "Hồ sơ chuẩn A"
|
|
36
|
+
service_level: "STANDARD"
|
|
37
|
+
expected:
|
|
38
|
+
valid: true
|
|
39
|
+
status: 200
|
|
40
|
+
feedback: "Lưu hồ sơ thành công"
|
|
41
|
+
|
|
42
|
+
- caseId: TC-VAL-02
|
|
43
|
+
facet: "positive_boundary"
|
|
44
|
+
description: "Nhập đúng giá trị biên tối đa (max boundary: 20 chars)"
|
|
45
|
+
input:
|
|
46
|
+
record_code: "REC-2026-MAXIMUM-001"
|
|
47
|
+
record_name: "Hồ sơ chuẩn B"
|
|
48
|
+
service_level: "STANDARD"
|
|
49
|
+
expected:
|
|
50
|
+
valid: true
|
|
51
|
+
status: 200
|
|
52
|
+
|
|
53
|
+
- caseId: TC-VAL-03
|
|
54
|
+
facet: "negative_length"
|
|
55
|
+
description: "Nhập dưới độ dài tối thiểu (< 5 chars)"
|
|
56
|
+
input:
|
|
57
|
+
record_code: "REC"
|
|
58
|
+
expected:
|
|
59
|
+
valid: false
|
|
60
|
+
errorField: "record_code"
|
|
61
|
+
errorMessage: "Độ dài mã hồ sơ bắt buộc từ 5 đến 20 ký tự"
|
|
62
|
+
|
|
63
|
+
- caseId: TC-VAL-04
|
|
64
|
+
facet: "negative_format"
|
|
65
|
+
description: "Nhập sai định dạng regex (chứa ký tự đặc biệt hoặc chữ thường)"
|
|
66
|
+
input:
|
|
67
|
+
record_code: "rec_code_@!"
|
|
68
|
+
expected:
|
|
69
|
+
valid: false
|
|
70
|
+
errorField: "record_code"
|
|
71
|
+
errorMessage: "Mã hồ sơ chỉ được gồm chữ in hoa, chữ số và ký tự gạch (- _)"
|
|
72
|
+
|
|
73
|
+
- caseId: TC-VAL-05
|
|
74
|
+
facet: "negative_duplicate"
|
|
75
|
+
description: "Nhập mã đã tồn tại trong DB (remote unique violation)"
|
|
76
|
+
input:
|
|
77
|
+
record_code: "REC-EXISTING-001"
|
|
78
|
+
expected:
|
|
79
|
+
valid: false
|
|
80
|
+
status: 409
|
|
81
|
+
errorField: "record_code"
|
|
82
|
+
errorMessage: "Mã hồ sơ này đã tồn tại trên hệ thống. Vui lòng chọn mã khác."
|
|
83
|
+
|
|
84
|
+
- caseId: TC-ACT-06
|
|
85
|
+
facet: "concurrency_double_submit"
|
|
86
|
+
description: "Giả lập nhấn nút lưu liên tục 2 lần trong 100ms"
|
|
87
|
+
action: "double_click"
|
|
88
|
+
expected:
|
|
89
|
+
buttonDisabled: true
|
|
90
|
+
singleRequestSent: true
|
|
91
|
+
duplicatedCreated: false
|
|
92
|
+
|
|
93
|
+
- caseId: TC-SYS-07
|
|
94
|
+
facet: "network_interruption"
|
|
95
|
+
description: "Mất kết nối mạng khi đang gửi dữ liệu"
|
|
96
|
+
action: "simulate_offline"
|
|
97
|
+
expected:
|
|
98
|
+
bannerVisible: true
|
|
99
|
+
formDataPreserved: true
|
|
100
|
+
|
|
101
|
+
steps:
|
|
102
|
+
- "Truy cập màn hình tạo mới theo URL hoặc Menu"
|
|
103
|
+
- "Nhập các trường dữ liệu theo bảng testMatrix"
|
|
104
|
+
- "Nhấn nút Lưu & Xác nhận"
|
|
105
|
+
- "Kiểm tra thông báo và trạng thái DOM tương ứng"
|
|
106
|
+
|
|
107
|
+
expected: Success state is visible or appropriate error message is rendered
|
|
108
|
+
postcondition:
|
|
109
|
+
- "Clean up test record if created successfully"
|
|
110
|
+
feature: example-slug
|
|
111
|
+
genType: e2e
|
|
112
|
+
route:
|
|
113
|
+
path: /example
|
|
114
|
+
auth: guest
|
|
115
|
+
testIds:
|
|
116
|
+
required:
|
|
117
|
+
- "fld_record_code"
|
|
118
|
+
- "fld_record_name"
|
|
119
|
+
- "btn_save_record"
|
|
120
|
+
|
|
121
|
+
# Fill when bundle is available (required for `flowgrid cases:gate --strict`).
|
|
122
|
+
traceability:
|
|
123
|
+
bundleScreen: W-AD-AUTH-001
|
|
124
|
+
bundleScenarios: []
|
|
125
|
+
acceptanceRefs: []
|
|
126
|
+
actionRefs:
|
|
127
|
+
- btn_save_record
|