@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
|
+
# ArtifactGraph — backend hooks
|
|
2
|
+
|
|
3
|
+
- Resolve endpoint, DTO, API, data, and business-rule tags from the current BE
|
|
4
|
+
repo's local index only.
|
|
5
|
+
- **Before creating a new BE spec**, run `artifactgraph_api_reuse_check` to detect
|
|
6
|
+
existing routes across product surfaces. If a match is found without `#reuse-api`,
|
|
7
|
+
emit `DUPLICATE_API_ROUTE` warning and ask member A/B/C before proceeding.
|
|
8
|
+
- Use `#reuse-api` tag on specs that intentionally reuse an existing common/sibling
|
|
9
|
+
route. Use `#call-external` for third-party integrations (OAuth, SMS, Payment, Webhook).
|
|
10
|
+
Use `#cross-service` / `#cross-entity-service` for multi-aggregate orchestration.
|
|
11
|
+
Use `#derived-data` for computed fields not stored on the entity.
|
|
12
|
+
- Run BE dry generation before write generation when both keys exist.
|
|
13
|
+
- **Code size discipline:** Enforce `platform-code-size.mdc` (~200 lines/file, ~20 lines/func). Automatically split services, DTOs, and handlers during bộ code generation.
|
|
14
|
+
- Full product registry remains in docs; ArtifactGraph does not infer or follow
|
|
15
|
+
a docs checkout.
|
|
16
|
+
- Architecture ID / C4 lookups go to bộ docs (`FLOWGRID_DOCS_ROOT`). Symbol /
|
|
17
|
+
call-graph lookups go to the target repo's `codegraph-<key>` MCP — Platform
|
|
18
|
+
DNA owns that auto-wire, not ArtifactGraph.
|
|
19
|
+
- Promote canonical registry changes in docs; keep only BE-local
|
|
20
|
+
allowlists/templates in the BE repo.
|
|
21
|
+
- Leave `/spec`, `/api-spec`, `/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,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api
|
|
3
|
+
description: /api — backend API generation through bộ code BE adapters.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /api — Backend API
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code (`--type=be`)
|
|
10
|
+
**Adapters:** `fastapi` · `laravel` · `dotnet-integration` · `nestjs`
|
|
11
|
+
|
|
12
|
+
## Generate
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm run codegen:api:dry -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
16
|
+
npm run codegen:api -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
17
|
+
npm run codegen:api -- --spec /path/to/api/01/01-backend-spec.yaml --force
|
|
18
|
+
npm run codegen:api:unit:dry -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
19
|
+
|
|
20
|
+
# Fallback direct CLI if wrappers missing:
|
|
21
|
+
flowgrid api-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
22
|
+
flowgrid api-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
23
|
+
flowgrid api-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml --force
|
|
24
|
+
flowgrid api-unit-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
25
|
+
|
|
26
|
+
flowgrid api-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
27
|
+
flowgrid api-gen --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
28
|
+
|
|
29
|
+
flowgrid api-unit-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
30
|
+
flowgrid api-registry --adapter=laravel
|
|
31
|
+
flowgrid api-unit-registry --adapter=laravel
|
|
32
|
+
|
|
33
|
+
# Laravel adapter (PHP): use `flowgrid api-gen` / `flowgrid api-unit-gen` from repo root.
|
|
34
|
+
|
|
35
|
+
flowgrid api-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
36
|
+
flowgrid api-unit-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
37
|
+
flowgrid api-registry --adapter=nestjs
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
BE never reads `ir/design.yaml` or `ir/spec.yaml`. `--id CMP-*` globs every `01-backend-spec.yaml` under that module (`…/api/<seq>/`) and generates them in order (stop on first failure). `--spec <dir>` does the same.
|
|
41
|
+
|
|
42
|
+
FE models (not this skill): `flowgrid contract-gen:dry -- --spec /path/to/ir/design.yaml` on the **FE** lane.
|
|
43
|
+
|
|
44
|
+
## Docs Root Resolution
|
|
45
|
+
|
|
46
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
47
|
+
pointer for locating `01-backend-spec.yaml`.
|
|
48
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
49
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
50
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
51
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
52
|
+
|
|
53
|
+
## Route
|
|
54
|
+
|
|
55
|
+
Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); IR via explicit `--spec` /
|
|
56
|
+
`FLOWGRID_DOCS_ROOT` when configured — never ArtifactGraph as the docs
|
|
57
|
+
bridge. This-repo conventions → local CodeGraph if present; other repo X →
|
|
58
|
+
only Platform DNA-wired `codegraph-<key>`. ArtifactGraph = local allowlist
|
|
59
|
+
hints only.
|
|
60
|
+
|
|
61
|
+
The selected backend repository is the only write target. Never infer a sibling
|
|
62
|
+
docs hub or frontend checkout. Never Write `ir/*` or `*.bundle.yaml` on the docs hub;
|
|
63
|
+
missing `codegen.profile` on **01-backend-spec.yaml** → STOP, hand off to docs `/grill-api-spec`.
|
|
64
|
+
|
|
65
|
+
Laravel supports the detected `modules-v1` profile only. FastAPI requires an
|
|
66
|
+
explicit Python runtime or target virtual environment.
|
|
67
|
+
|
|
68
|
+
`dotnet-integration` requires the .NET 8 SDK (`FLOWGRID_DOTNET`, then
|
|
69
|
+
`dotnet`) and supports the pilot-specific `mes-downtime` profile. Its API pass
|
|
70
|
+
already emits test source; it has no separate API unit-generation engine.
|
|
71
|
+
|
|
72
|
+
FastAPI generates all nested module entities, with flat `entities` and legacy
|
|
73
|
+
`codegen.entity` compatibility. Code and unit manifests retain SHA-256
|
|
74
|
+
ownership: identical and unmodified managed files are safe, while unmanaged or
|
|
75
|
+
locally modified files block the whole batch. Inspect dry-run statuses before
|
|
76
|
+
using `--force`, which explicitly overwrites conflicts. Ambiguous global
|
|
77
|
+
endpoints in a multi-entity spec are not shared across entities; the generator
|
|
78
|
+
warns and uses entity-local CRUD defaults.
|
|
79
|
+
|
|
80
|
+
## Review requirements
|
|
81
|
+
|
|
82
|
+
- Replace generated auth/authorization placeholders with project policy.
|
|
83
|
+
- Verify validation, resources/presenters, transactions and error mapping.
|
|
84
|
+
- Run backend tests and `/business-impact-review` for risky changes.
|
|
85
|
+
|
|
86
|
+
## Accelerators (optional)
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
if ArtifactGraph available: allowlist/recommend API generation
|
|
90
|
+
else: execute bộ code adapter directly
|
|
91
|
+
|
|
92
|
+
if CodeGraph available for this checkout (`codegraph-<key>`): inspect existing module conventions/callers
|
|
93
|
+
else: targeted repository search — never a workspace-parent graph
|
|
94
|
+
else: targeted repository search and reads
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Missing accelerators never block API generation. Complete each documented
|
|
98
|
+
direct or targeted-local fallback first, then follow
|
|
99
|
+
`.cursor/rules/flowgrid-code-optional-integrations.mdc` for deduplicated
|
|
100
|
+
once-per-run-and-optional telemetry with observed metrics only.
|
|
101
|
+
|
|
102
|
+
## Translation Rule (i18n)
|
|
103
|
+
Always wrap static text with native framework i18n helpers (e.g. `__('key')`, `_localizer["key"]`, `i18n.t('key')`).
|
|
104
|
+
- **[MANDATORY]** Read the `i18n` block from `ir/design.yaml`.
|
|
105
|
+
- **[MANDATORY]** Automatically generate or update the corresponding translation locale files (`.json` for NodeJS/PHP/Python, or `.resx` for .NET).
|
|
106
|
+
- **[STRICTLY FORBIDDEN]** Do NOT return unlocalized static raw error messages without an i18n wrapper.
|
|
107
|
+
|
|
108
|
+
## Profile Handling Behavior
|
|
109
|
+
**[CRITICAL INTERLOCK]** AI MUST NOT rewrite code from scratch. The CLI command `flowgrid api-gen` (Script Engine) MUST run first to emit the foundation scaffolding. Depending on `gen.codegen.profile`, AI reads the scaffolded base and enriches the targeted logic:
|
|
110
|
+
- **`profile: auth`**: Inject authentication logic (Login, JWT token, bcrypt password hashing).
|
|
111
|
+
- **`profile: select-item`**: Streamline into a lightweight selection list returning `id`, `name`/`label` for dropdown components.
|
|
112
|
+
- **`profile: setting`**: Adapt scaffold to read/write static Key-Value configurations or JSON store.
|
|
113
|
+
- **`profile: free`**: Implement domain-specific requirements according to the spec's `summary` / `purpose`.
|
|
114
|
+
- **`profile: export`**: Implement large-dataset retrieval and file export generation (CSV/Excel).
|
|
115
|
+
- **`profile: import`**: Implement file upload parsing, bulk validation, and batch insert.
|
|
116
|
+
- **`profile: dashboard-stats`**: Implement aggregation queries, grouping data to return statistical metrics.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-unit
|
|
3
|
+
description: /unit — backend API unit test generation via bộ code BE adapters.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /unit — Backend API Unit Tests
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code (`--type=be`)
|
|
10
|
+
**Adapters:** `fastapi` · `laravel` · `nestjs`
|
|
11
|
+
|
|
12
|
+
> `dotnet-integration` emits test source during its primary API pass; it has no
|
|
13
|
+
> separate unit-generation engine.
|
|
14
|
+
|
|
15
|
+
## Generate
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm run codegen:api:unit:dry -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
19
|
+
npm run codegen:api:unit -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
20
|
+
|
|
21
|
+
# Fallback direct CLI if wrappers missing:
|
|
22
|
+
flowgrid api-unit-gen:dry --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
23
|
+
flowgrid api-unit-gen --adapter=fastapi -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
24
|
+
|
|
25
|
+
flowgrid api-unit-gen:dry --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
26
|
+
flowgrid api-unit-gen --adapter=laravel -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
27
|
+
flowgrid api-unit-registry --adapter=laravel
|
|
28
|
+
|
|
29
|
+
flowgrid api-unit-gen:dry --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
30
|
+
flowgrid api-unit-gen --adapter=nestjs -- --spec /path/to/api/01/01-backend-spec.yaml
|
|
31
|
+
flowgrid api-unit-registry --adapter=nestjs
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You MUST run the codegen script (`npm run codegen:api:unit` or
|
|
35
|
+
`flowgrid api-unit-gen`) FIRST to generate the test skeleton from the backend
|
|
36
|
+
spec, before attempting to fill in gaps or add missing tests manually.
|
|
37
|
+
|
|
38
|
+
Requires a prior `01-backend-spec.yaml` under the docs hub API folder.
|
|
39
|
+
|
|
40
|
+
## Docs Root Resolution
|
|
41
|
+
|
|
42
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
43
|
+
registry/IR pointer for locating `01-backend-spec.yaml`.
|
|
44
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
45
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
46
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
47
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
48
|
+
|
|
49
|
+
## Route
|
|
50
|
+
|
|
51
|
+
Architecture/C4 → bộ docs (`FLOWGRID_DOCS_ROOT`); spec via explicit `--spec` /
|
|
52
|
+
`FLOWGRID_DOCS_ROOT` when configured — never ArtifactGraph as the docs
|
|
53
|
+
bridge. This-repo conventions → local CodeGraph if present; other repo X →
|
|
54
|
+
only Platform DNA-wired `codegraph-<key>`. ArtifactGraph = local allowlist
|
|
55
|
+
hints only.
|
|
56
|
+
|
|
57
|
+
## Review requirements
|
|
58
|
+
|
|
59
|
+
- Verify generated tests cover all endpoints in `01-backend-spec.yaml`.
|
|
60
|
+
- Replace generated auth/mock placeholders with project-specific fixtures.
|
|
61
|
+
- Run backend test suite to confirm generated tests pass.
|
|
62
|
+
|
|
63
|
+
## Accelerators (optional)
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
if ArtifactGraph available: allowlist/recommend API unit generation
|
|
67
|
+
else: execute bộ code adapter directly
|
|
68
|
+
|
|
69
|
+
if CodeGraph available for this checkout (`codegraph-<key>`): inspect existing test conventions
|
|
70
|
+
else: targeted repository search — never a workspace-parent graph
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Missing accelerators never block unit generation. Complete each documented
|
|
74
|
+
direct or targeted-local fallback first, then follow
|
|
75
|
+
`.cursor/rules/flowgrid-code-optional-integrations.mdc` for deduplicated
|
|
76
|
+
once-per-run-and-optional telemetry with observed metrics only.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-api
|
|
3
|
+
description: /grill-api — audit generated FastAPI/Laravel/Nest API before integration.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /grill-api
|
|
8
|
+
|
|
9
|
+
Run after `npm run codegen:api:dry` / `flowgrid api-gen:dry` and after implementation.
|
|
10
|
+
|
|
11
|
+
**Owner:** bộ code (`--type=be`). Docs hub is **read-only**.
|
|
12
|
+
|
|
13
|
+
## Target / ID Resolution Rule
|
|
14
|
+
|
|
15
|
+
- User prompt MAY specify a function ID, API slug, or short name (e.g. `API-AUTH-001`, `login`, `CMP-ADM-009`).
|
|
16
|
+
- Agent MUST resolve **`…/api/<seq>/01-backend-spec.yaml`** via `FLOWGRID_DOCS_ROOT` or `flowgrid_docs_route` (screen leaf `CMP-*/<NN…>/api/<seq>/`, or `common/yaml/<slug>/`, or `integrations/…/api/<seq>/`).
|
|
17
|
+
- **Read the entire `01-backend-spec.yaml`**. Do **not** use `ir/design.yaml` or `ir/spec.yaml` as BE contract.
|
|
18
|
+
- Compare generated routes/code against that 01 file. Missing 01 → STOP, hand off to docs `/grill-api-spec`.
|
|
19
|
+
- Do NOT demand full filesystem paths from the user if an ID is given.
|
|
20
|
+
|
|
21
|
+
## Docs Root Resolution
|
|
22
|
+
|
|
23
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
24
|
+
pointer for locating `01-backend-spec.yaml`.
|
|
25
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
26
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
27
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
28
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
29
|
+
|
|
30
|
+
Check:
|
|
31
|
+
|
|
32
|
+
- Routes/methods/statuses match `01-backend-spec.yaml` (action-suffix paths).
|
|
33
|
+
- AuthZ and tenant scope use trusted context.
|
|
34
|
+
- Validation does not accept request-bag noise.
|
|
35
|
+
- Null/empty/error semantics remain distinct.
|
|
36
|
+
- Writes are transaction-safe; async retries are idempotent.
|
|
37
|
+
- Generated placeholders are replaced before ship.
|
|
38
|
+
|
|
39
|
+
## Accelerators (optional)
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
if ArtifactGraph available: local contract/tag/parity hints only
|
|
43
|
+
else: scoped contract-to-code comparison
|
|
44
|
+
|
|
45
|
+
if codegraph-<repo-key> for this checkout: callers/routes/jobs/listeners
|
|
46
|
+
else: targeted repository search
|
|
47
|
+
|
|
48
|
+
architecture IDs / C4 → bộ docs (FLOWGRID_DOCS_ROOT), never CodeGraph
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Missing accelerators never block the grill. Complete each scoped model or
|
|
52
|
+
targeted-local fallback first, then follow
|
|
53
|
+
the remainder of this skill.
|
|
54
|
+
|
|
55
|
+
## Translation Rule (i18n)
|
|
56
|
+
Always wrap static text with native framework i18n helpers (e.g. `__('key')`, `_localizer["key"]`, `i18n.t('key')`).
|
|
57
|
+
- **[MANDATORY]** Read the `i18n` block from `ir/design.yaml`.
|
|
58
|
+
- **[MANDATORY]** Automatically generate or update the corresponding translation locale files (`.json` for NodeJS/PHP/Python, or `.resx` for .NET).
|
|
59
|
+
- **[STRICTLY FORBIDDEN]** Do NOT return unlocalized static raw error messages without an i18n wrapper.
|
|
60
|
+
|
|
61
|
+
## Profile Handling Behavior
|
|
62
|
+
**[CRITICAL INTERLOCK]** AI MUST NOT rewrite code from scratch. The CLI command `flowgrid api-gen` (Script Engine) MUST run first to emit the foundation scaffolding. Depending on `gen.codegen.profile`, AI reads the scaffolded base and enriches the targeted logic:
|
|
63
|
+
- **`profile: auth`**: Inject authentication logic (Login, JWT token, bcrypt password hashing).
|
|
64
|
+
- **`profile: select-item`**: Streamline into a lightweight selection list returning `id`, `name`/`label` for dropdown components.
|
|
65
|
+
- **`profile: setting`**: Adapt scaffold to read/write static Key-Value configurations or JSON store.
|
|
66
|
+
- **`profile: free`**: Implement domain-specific requirements according to the spec's `summary` / `purpose`.
|
|
67
|
+
- **`profile: export`**: Implement large-dataset retrieval and file export generation (CSV/Excel).
|
|
68
|
+
- **`profile: import`**: Implement file upload parsing, bulk validation, and batch insert.
|
|
69
|
+
- **`profile: dashboard-stats`**: Implement aggregation queries, grouping data to return statistical metrics.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: grill-api-unit
|
|
3
|
+
description: /grill-unit — BE grill gate before /unit API test generation.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /grill-unit
|
|
8
|
+
|
|
9
|
+
**Owner:** bộ code · audit gate before BE unit test generation.
|
|
10
|
+
|
|
11
|
+
Run after `npm run codegen:api:unit:dry` / `flowgrid api-unit-gen:dry` and
|
|
12
|
+
before committing generated test code.
|
|
13
|
+
|
|
14
|
+
## Target / ID Resolution Rule
|
|
15
|
+
|
|
16
|
+
- User prompt MAY specify a function ID, API slug, or short name (e.g. `API-AUTH-001`, `login`, `CMP-ADM-009`).
|
|
17
|
+
- Agent MUST resolve **`…/api/<seq>/01-backend-spec.yaml`** via `FLOWGRID_DOCS_ROOT` or `flowgrid_docs_route`.
|
|
18
|
+
- **Read the entire `01-backend-spec.yaml`**. Do **not** use `ir/design.yaml` or `ir/spec.yaml` as BE contract.
|
|
19
|
+
- Compare generated unit tests against that 01 file. Missing 01 → STOP, hand off to docs `/grill-api-spec`.
|
|
20
|
+
- Do NOT demand full filesystem paths from the user if an ID is given.
|
|
21
|
+
|
|
22
|
+
## Docs Root Resolution
|
|
23
|
+
|
|
24
|
+
1. If `FLOWGRID_DOCS_ROOT` is set (non-empty), use it as the canonical
|
|
25
|
+
pointer for locating `01-backend-spec.yaml`.
|
|
26
|
+
2. If `FLOWGRID_DOCS_ROOT` is **not** set, fall back to Platform DNA
|
|
27
|
+
configuration (`platform-dna`) to resolve the docs hub path.
|
|
28
|
+
Platform DNA discovery is slower and more error-prone, so always prefer
|
|
29
|
+
an explicit `FLOWGRID_DOCS_ROOT` when available.
|
|
30
|
+
|
|
31
|
+
## Check
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
if local ArtifactGraph available: check the BE repo's allowlist for apiUnitGenDry
|
|
35
|
+
else: npm run codegen:api:unit:dry -- --spec …
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- Generated test files match endpoints in `01-backend-spec.yaml`.
|
|
39
|
+
- Auth/tenant fixtures use trusted project context, not generated stubs.
|
|
40
|
+
- Mock dependencies are properly scoped and isolated.
|
|
41
|
+
- Edge cases (null/empty/error) have distinct assertions.
|
|
42
|
+
- Async/retry tests are idempotent.
|
|
43
|
+
|
|
44
|
+
## Accelerators (optional)
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
if ArtifactGraph available: local contract/tag/parity hints only
|
|
48
|
+
else: scoped spec-to-test comparison
|
|
49
|
+
|
|
50
|
+
if codegraph-<repo-key> for this checkout: callers/routes/existing test patterns
|
|
51
|
+
else: targeted repository search
|
|
52
|
+
|
|
53
|
+
architecture IDs / C4 → bộ docs (FLOWGRID_DOCS_ROOT), never CodeGraph
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Missing accelerators never block the grill. Complete each scoped model or
|
|
57
|
+
targeted-local fallback first, then follow the remainder of this skill.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Artifact graph — load per phase
|
|
2
|
+
|
|
3
|
+
Extract bundles: `.cursor/extracts/extract-registry.json`
|
|
4
|
+
|
|
5
|
+
Path root: `base-docs Code / `--id``
|
|
6
|
+
|
|
7
|
+
| Phase | Primary artifacts | Do not load |
|
|
8
|
+
|-------|-------------------|-------------|
|
|
9
|
+
| legacy-spec | write `base-docs/surfaces/**/code/**`, Code `*.bundle.yaml` | gen, ir/spec, codegen/* |
|
|
10
|
+
| /spec | `*.bundle.yaml` (spec + design), template | legacy/* |
|
|
11
|
+
| bqa-grill | `ir/design.yaml`, `ir/legacy.yaml` ui slice, common bundles, `review` | ir/spec gen fields, legacy source |
|
|
12
|
+
| dev-grill | `ir/design`, `ir/legacy`, write `gen` / ir/spec | legacy source, models/ |
|
|
13
|
+
| grill-with-docs | bundle + ir/* reconcile | legacy source, archaeology |
|
|
14
|
+
| portal:gen | **`ir/spec.yaml`** | bundle, legacy, design |
|
|
15
|
+
| docs:render | **`*.bundle.yaml`** | — |
|
|
16
|
+
| prototype | **`ir/spec.yaml`** + HANDOFF | legacy IR |
|
|
17
|
+
| /test | `*.test.yaml`, ir/spec testIds | legacy-api-migration |
|
|
18
|
+
| /unit | ir/spec + `{function}/generated/unit.manifest.json` | legacy/* |
|
|
19
|
+
| /model | ir/spec entities + project-config | trace full |
|
|
20
|
+
| /grill-api | legacy/api-migration | models/ |
|
|
21
|
+
| update-spec-legacy | trace slice + bundle.legacy patch | macro legacy read |
|
|
22
|
+
|
|
23
|
+
Generated output: `{function}/generated/` (HANDOFF, manifests) — cạnh bundle, không trong `ir/`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ArtifactGraph — core hooks
|
|
2
|
+
|
|
3
|
+
1. Check local status/index before artifact work.
|
|
4
|
+
2. Analyze or grill locally; ask the member to confirm ambiguous decisions.
|
|
5
|
+
3. **API reuse check (BE/docs):** Run `artifactgraph_api_reuse_check` before creating
|
|
6
|
+
a new spec. If `found: true` → add `#reuse-api` to the spec (agent applies tag, no gate).
|
|
7
|
+
`grill_check` also detects duplicates and suggests `#reuse-api` via `draftTags`.
|
|
8
|
+
4. Show `askUser[]` — A/B/C for **grill** and **parity-drift** only.
|
|
9
|
+
`context-orphan` = warn only, not a gate.
|
|
10
|
+
5. Run only allowlisted generation commands.
|
|
11
|
+
6. Send only unresolved `cloudPromptSlice` content to cloud models.
|
|
12
|
+
7. Promote canonical registries in the docs repo. In FE/BE/tests, promote only
|
|
13
|
+
repo-local allowlists/templates.
|
|
14
|
+
8. Rebuild and remember confirmed decisions.
|
|
15
|
+
|
|
16
|
+
The docs repo is registry SSOT. ArtifactGraph never owns registry payloads and
|
|
17
|
+
never follows another toolkit's cross-repo pointer.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Artifactgraph — phase hooks (local-first DSL)
|
|
2
|
+
|
|
3
|
+
> Used by skill `/artifactgraph` and phase skills. Grill **confirm = local + member**, not cloud.
|
|
4
|
+
> **SSOT:** product repo `registries/*.json` + `codegen/templates` (+ skills/docs). MCP only **indexes** + runs **allowlisted** gen.
|
|
5
|
+
|
|
6
|
+
## DSL loop (every lane: FE · BE · unit · e2e · docs)
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
(1) Read tags + MCP index (rebuild from product registries)
|
|
10
|
+
(2) artifactgraph_api_reuse_check — trước khi tạo spec mới BE/docs (check trùng route)
|
|
11
|
+
(3) artifactgraph_gen <commandKey> — local template/script
|
|
12
|
+
(4) Still #needs-* / HANDOFF missing mẫu?
|
|
13
|
+
→ member A/B/C and/or cloudPromptSlice (thiếu only)
|
|
14
|
+
(5) Member OK → promote registry + hbs **in product repo** (not inside MCP)
|
|
15
|
+
(6) artifactgraph_rebuild + remember → lần sau reuse tag + gen
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
| Lane | Local gen keys (`artifactgraph.json`) | After review promote (product git) |
|
|
19
|
+
|------|----------------------------------------|------------------------------------|
|
|
20
|
+
| **docs** (spec phase) | `specSplit`, `specSplitAll`, `docsRender`, `docsRenderCommon` | Tag chuẩn trên bundle/`ir` — reuse FE/unit/e2e |
|
|
21
|
+
| **fe** | `genDry`, `gen` | `design` / `common` registry + Mo* templates + `platform-code-size.mdc` |
|
|
22
|
+
| **be** (api repo) | `genDry`, `gen` (stack laravel/…) | BE codegen registry + templates + `platform-code-size.mdc` |
|
|
23
|
+
| **unit** | `unitGenDry`, `unitGen` | `unit-test` registry |
|
|
24
|
+
| **e2e** | `testcaseGenDry`, `testcaseGen` | `e2e-test` registry (`{spec}` = testcase path) |
|
|
25
|
+
| **lifecycle** | `lifecycleSync` | `page-lifecycle` registry |
|
|
26
|
+
|
|
27
|
+
Cloud **không** viết registry. Promote = docs `DESIGN-REGISTRY-PROMOTION` / `UNIT-REGISTRY-PROMOTION` / e2e docs + skill `/docs-mark`.
|
|
28
|
+
|
|
29
|
+
## Shared protocol (every artifact skill)
|
|
30
|
+
|
|
31
|
+
1. Run `artifactgraph init` once in the current product repo, then use
|
|
32
|
+
`artifactgraph_status`; project-local MCP is the default.
|
|
33
|
+
2. **Local:** `artifactgraph_analyze` or `artifactgraph_grill_check`; after legacy also **`artifactgraph_parity_check`**.
|
|
34
|
+
3. **API reuse check (BE/docs):** Run `artifactgraph_api_reuse_check` before creating
|
|
35
|
+
a new spec.
|
|
36
|
+
- `found: true` → route exists → add `#reuse-api` to the spec (no gate, agent applies tag)
|
|
37
|
+
- `found: false` → safe to proceed with new spec
|
|
38
|
+
- `grill_check` also detects duplicates via indexed routes → suggests `#reuse-api` in `draftTags`
|
|
39
|
+
5. On confirm: `artifactgraph_remember` (`kind=grill|parity`).
|
|
40
|
+
6. Gen only via `artifactgraph_gen` allowlisted keys; else documented `pnpm` fallback.
|
|
41
|
+
7. Still missing implementation → **`cloudPromptSlice` only** — never full registries/templates.
|
|
42
|
+
8. After implement: **promote in product repo** → `registryValidate` / lane registry cmds → `artifactgraph_rebuild`.
|
|
43
|
+
|
|
44
|
+
## Per skill
|
|
45
|
+
|
|
46
|
+
### `/spec`
|
|
47
|
+
|
|
48
|
+
- Local: gắn tag chuẩn từ index (shell/common/unit/e2e đã học); `specSplit` / `docsRender` via MCP.
|
|
49
|
+
- Confirm blocks when `specOrigin` is **not** legacy.
|
|
50
|
+
- Cloud: only unknown domain rules in `cloudPromptSlice`.
|
|
51
|
+
- **Không** `portal:gen` app ở phase này (trừ khi skill nói rõ dry gate).
|
|
52
|
+
|
|
53
|
+
### `/api-spec` · `/api-integration-spec`
|
|
54
|
+
|
|
55
|
+
- **Pre-flight:** `artifactgraph_api_reuse_check({ path, method })` trước khi viết spec.
|
|
56
|
+
- `found: true` → add `#reuse-api` vào spec; không cần tạo spec mới.
|
|
57
|
+
- `found: false` → proceed spec creation.
|
|
58
|
+
- Local: `artifactgraph_grill_check` sau khi draft spec — phát hiện `duplicate-api-route` và suggest `#reuse-api` qua `draftTags`.
|
|
59
|
+
- Cloud: only domain-specific API contract rules.
|
|
60
|
+
|
|
61
|
+
### `/dev-grill-docs` · `/bqa-grill-docs` · `/grill-with-docs`
|
|
62
|
+
|
|
63
|
+
- **Pre-flight:** `artifactgraph_grill_check` — bao gồm `duplicate-api-route` detection.
|
|
64
|
+
- Local: trace + bundle; **`parity_check`**.
|
|
65
|
+
- Cloud: only ambiguous Mo* naming with no registry alias.
|
|
66
|
+
|
|
67
|
+
### `/update-spec` · `/update-api-spec`
|
|
68
|
+
|
|
69
|
+
- **Pre-flight:** `artifactgraph_api_reuse_check` nếu spec có API routes mới.
|
|
70
|
+
- Local: `artifactgraph_analyze` sau khi sửa — phát hiện gaps mới phát sinh.
|
|
71
|
+
|
|
72
|
+
### `/prototype` · `/prototype-handoff`
|
|
73
|
+
|
|
74
|
+
- Local: `artifactgraph_gen` `gen`; Mo* already in design registry → wire only.
|
|
75
|
+
- Cloud: **only** `#needs-component` / `#needs-ui` slots with no file.
|
|
76
|
+
|
|
77
|
+
### `/unit`
|
|
78
|
+
|
|
79
|
+
- Local: `artifactgraph_suggest_tags` (lane `be` / `fe`) + `artifactgraph_gen` `unitGen`.
|
|
80
|
+
|
|
81
|
+
### `/test`
|
|
82
|
+
|
|
83
|
+
- Local: taxonomy testcase (`artifactgraph/lexicon/testcase-taxonomy.en.txt`) + `artifactgraph_gen` `testcaseGen`.
|
|
84
|
+
|
|
85
|
+
### `/docs-mark`
|
|
86
|
+
|
|
87
|
+
- Local: `suggest_tags` → update spec/registry → `artifactgraph_rebuild`.
|
|
88
|
+
|
|
89
|
+
## Summary table
|
|
90
|
+
|
|
91
|
+
| Skill | Local MCP pre-flight | Allowed gen command | Cloud prompt rule |
|
|
92
|
+
|---|---|---|---|
|
|
93
|
+
| `/spec` | `analyze`, `api_reuse_check` | `specSplit`, `docsRender` | `cloudPromptSlice` only |
|
|
94
|
+
| `/api-spec` | `api_reuse_check`, `grill_check` | `specSplit` | Domain rules only |
|
|
95
|
+
| `/grill-*` | `grill_check`, `parity_check` | — | Ambiguous Mo* names only |
|
|
96
|
+
| `/prototype` | `analyze` | `genDry`, `gen` | `#needs-component` slots only |
|
|
97
|
+
| `/unit` | `suggest_tags` | `unitGenDry`, `unitGen` | Unit pattern gaps only |
|
|
98
|
+
| `/test` | `suggest_tags` | `testcaseGenDry`, `testcaseGen` | Scenario logic only |
|
|
99
|
+
| `/docs-mark` | `suggest_tags`, `rebuild` | — | None |
|
|
100
|
+
|
|
101
|
+
## Checklist for promote
|
|
102
|
+
|
|
103
|
+
- [ ] Write registry JSON in product repo
|
|
104
|
+
- [ ] Add templates if missing
|
|
105
|
+
- [ ] Run `artifactgraph_rebuild`
|
|
106
|
+
- [ ] Next session reuses new tag automatically
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Agent Discipline (Portal phases)
|
|
2
|
+
|
|
3
|
+
Project alwaysApply rules and spec/contract win on conflict.
|
|
4
|
+
|
|
5
|
+
- State assumptions; ask when unclear; prefer simpler approaches.
|
|
6
|
+
- Minimum code for the request; no speculative features or abstractions.
|
|
7
|
+
- Surgical edits only; match existing style; do not refactor unrelated code.
|
|
8
|
+
- Define verifiable success criteria; run scoped verification before claiming done.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Docs-mark — grill detection
|
|
2
|
+
|
|
3
|
+
> Used by docs grill / FE grill skills. Grill **flags** and **asks member** — does not auto-tag.
|
|
4
|
+
|
|
5
|
+
## Grill spec signals — logic
|
|
6
|
+
|
|
7
|
+
| Signal | Suspected kind | Ask member |
|
|
8
|
+
|--------|----------------|------------|
|
|
9
|
+
| Endpoint mô tả payment/webhook/MES/ERP | `#call-external` | A local B `#call-external` C defer |
|
|
10
|
+
| 2 entity độc lập, 1 flow sync | `#cross-entity-service` | A relationship B cross-entity C split APIs |
|
|
11
|
+
| Field/response key không có trên `ir/spec.yaml` entities | `#derived-data` | A add to contract B `#derived-data` C remove |
|
|
12
|
+
| Tag có nhưng thiếu block (`externalCalls`, `services`, `derivedData`) | validation fail | Fix via `/docs-mark` |
|
|
13
|
+
| `commonRefs` trỏ registry `planned` | HANDOFF debt | Implement or defer in `openQuestions` |
|
|
14
|
+
|
|
15
|
+
## Grill spec signals — UI & codegen
|
|
16
|
+
|
|
17
|
+
| Signal | Suspected kind | Ask member |
|
|
18
|
+
|--------|----------------|------------|
|
|
19
|
+
| Column `render: custom` / `component:` set | `#needs-component: cell-{key}:MoXxx` | A) Mo local B) common C) defer |
|
|
20
|
+
| Fuzzy widget (drawer vs sheet, chip vs badge) | `#ui:` / `#needs-ui:` | Member chọn canonical |
|
|
21
|
+
| `#needs-component` but Mo* exists elsewhere | promote common-ui | A) copy local B) design registry C) defer |
|
|
22
|
+
| `#needs-ui` → design registry `planned` | HANDOFF | Implement `/prototype` or defer |
|
|
23
|
+
|
|
24
|
+
## Member prompt template
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
[GRILL-MARK] {short finding}
|
|
28
|
+
File/spec: {ref}
|
|
29
|
+
|
|
30
|
+
Chọn:
|
|
31
|
+
A) Giữ local — no mark
|
|
32
|
+
B) {suggested tag} — update spec + registry
|
|
33
|
+
C) Defer — ghi openQuestions, không block gate
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If member chooses **B** → run `/docs-mark` in the same session.
|
|
37
|
+
|
|
38
|
+
## Grill spec signals — API reuse (Section L hashtags)
|
|
39
|
+
|
|
40
|
+
| Signal | Suspected kind | Ask member |
|
|
41
|
+
|--------|----------------|------------|
|
|
42
|
+
| `artifactgraph_api_reuse_check` finds existing route for same path+method | `#reuse-api` | Agent adds `#reuse-api` to spec (no gate) |
|
|
43
|
+
| Endpoint calls payment/webhook/OAuth/SMS/MES/ERP system | `#call-external` | A local B `#call-external` C defer |
|
|
44
|
+
| 2 bounded-context entities in single synchronous flow | `#cross-service` / `#cross-entity-service` | A single service B cross-service C split APIs |
|
|
45
|
+
| Response field không có trên `ir/spec.yaml` entities | `#derived-data` | A add to entity B `#derived-data` C remove |
|
|
46
|
+
| `DUPLICATE_API_ROUTE` gap in grill_check output | add `#reuse-api` | Agent adds `#reuse-api` to current spec |
|
|
47
|
+
|
|
48
|
+
**Rule:** If 2 specs define the exact same URI path+method without `#reuse-api`, ArtifactGraph emits `DUPLICATE_API_ROUTE` gap (`severity: warn`, `draftTags: ['#reuse-api']`). Agent adds the tag to resolve — no member gate needed.
|