aiwf 0.3.23 → 0.4.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/.claude-plugin/marketplace.json +146 -0
- package/CHANGELOG.md +49 -1
- package/README.ko.md +118 -309
- package/README.md +68 -254
- package/docs/modernization/BROWNFIELD-GREENFIELD.ko.md +105 -0
- package/docs/modernization/CLAUDE-PLAN-REVIEW-2026-10-03.ko.md +77 -0
- package/docs/modernization/CLI-PRODUCTIVITY-REVIEWED-2026-10-03.ko.md +177 -0
- package/docs/modernization/CLI-PRODUCTIVITY.ko.md +193 -0
- package/docs/modernization/CORE-PACKAGE-PLAN.md +7 -0
- package/docs/modernization/DEEP-REVERSE-ENGINEERING.ko.md +88 -0
- package/docs/modernization/DELEGATION-OPTIONAL.ko.md +57 -0
- package/docs/modernization/DIRECTION.ko.md +56 -0
- package/docs/modernization/FULL-TEST-2026-10-03.md +49 -0
- package/docs/modernization/LEGACY-REMOVAL-PLAN.md +9 -0
- package/docs/modernization/PILOT-RESULT-2026-10-03.ko.md +85 -0
- package/docs/modernization/PILOT-UC-001.ko.md +79 -0
- package/docs/modernization/PLAN.md +28 -0
- package/docs/modernization/SKILLS.ko.md +105 -0
- package/docs/modernization/SPRINTABLE.ko.md +47 -0
- package/docs/modernization/SYNC-DOCS-VALIDATION-2026-10-04.ko.md +38 -0
- package/docs/modernization/VALIDATION.md +79 -0
- package/docs/modernization/evidence/example-review-packet.json +115 -0
- package/docs/modernization/evidence/example-spec-pin.json +48 -0
- package/docs/modernization/evidence/full-test-20261003/claude-lint.md +22 -0
- package/docs/modernization/evidence/full-test-20261003/claude-review-retry.md +56 -0
- package/docs/modernization/evidence/full-test-20261003/codex-review-packet.json +159 -0
- package/docs/modernization/evidence/full-test-20261003/src/expense.mjs +40 -0
- package/docs/modernization/evidence/full-test-20261003/summary.json +106 -0
- package/docs/modernization/evidence/full-test-20261003/tests/expense.test.mjs +61 -0
- package/docs/modernization/evidence/local-pilot-20261003/README.ko.md +40 -0
- package/docs/modernization/evidence/local-pilot-20261003/execution.json +1055 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stdout.txt +6 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stdout.txt +6 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.json +23 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stdout.txt +535 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stdout.txt +273 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stdout.txt +7 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stdout.txt +148 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stdout.txt +67 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.json +128 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stdout.txt +128 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.json +54 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stdout.txt +60 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stdout.txt +82 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stdout.txt +79 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stdout.txt +7 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stdout.txt +66 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin.json +60 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stdout.txt +73 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.json +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stdout.txt +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stdout.txt +148 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stdout.txt +1 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stdout.txt +1 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.json +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stdout.txt +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stdout.txt +266 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/entity_model.md +33 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/glossary.md +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/plans/UC-001.md +20 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/requirements.md +10 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-001-submit-expense.md +37 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-002-description-limit.md +42 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases/UC-001-submit-expense.md +76 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases.puml +12 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/vision.md +21 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/src/expense.mjs +48 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/tests/expense.test.mjs +116 -0
- package/docs/modernization/evidence/local-pilot-20261003/scope.json +31 -0
- package/docs/modernization/reviews/2026-10-03-claude-cli/CONTRACTS.ko.md +122 -0
- package/docs/modernization/reviews/2026-10-03-claude-cli/DIRECTION.ko.md +84 -0
- package/examples/spec-workflow/README.md +54 -0
- package/examples/spec-workflow/docs/entity_model.md +33 -0
- package/examples/spec-workflow/docs/glossary.md +9 -0
- package/examples/spec-workflow/docs/requirements.md +10 -0
- package/examples/spec-workflow/docs/test_cases/TC-001-submit-expense.md +37 -0
- package/examples/spec-workflow/docs/use_cases/UC-001-submit-expense.md +63 -0
- package/examples/spec-workflow/docs/use_cases.puml +12 -0
- package/examples/spec-workflow/docs/vision.md +21 -0
- package/package.json +37 -105
- package/plugins/aiwf-angular-jpa/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-angular-jpa/LICENSE +201 -0
- package/plugins/aiwf-angular-jpa/NOTICE +16 -0
- package/plugins/aiwf-angular-jpa/README.md +54 -0
- package/plugins/aiwf-angular-jpa/UPSTREAM.json +35 -0
- package/plugins/aiwf-angular-jpa/agents/uc-coverage.md +263 -0
- package/plugins/aiwf-angular-jpa/rules/mcp-servers.md +64 -0
- package/plugins/aiwf-angular-jpa/skills/coverage-check/SKILL.md +190 -0
- package/plugins/aiwf-angular-jpa/skills/flyway-migration/SKILL.md +119 -0
- package/plugins/aiwf-angular-jpa/skills/implement/SKILL.md +528 -0
- package/plugins/aiwf-angular-jpa/skills/implement/references/module-layout.md +95 -0
- package/plugins/aiwf-angular-jpa/skills/playwright-test/SKILL.md +360 -0
- package/plugins/aiwf-angular-jpa/skills/spring-boot-test/SKILL.md +504 -0
- package/plugins/aiwf-angular-jpa/skills/vitest-test/SKILL.md +309 -0
- package/plugins/aiwf-blazor-dotnet/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-blazor-dotnet/LICENSE +201 -0
- package/plugins/aiwf-blazor-dotnet/NOTICE +16 -0
- package/plugins/aiwf-blazor-dotnet/README.md +53 -0
- package/plugins/aiwf-blazor-dotnet/UPSTREAM.json +31 -0
- package/plugins/aiwf-blazor-dotnet/rules/mcp-servers.md +25 -0
- package/plugins/aiwf-blazor-dotnet/skills/bunit-test/SKILL.md +110 -0
- package/plugins/aiwf-blazor-dotnet/skills/dotnet-test/SKILL.md +108 -0
- package/plugins/aiwf-blazor-dotnet/skills/ef-migration/SKILL.md +43 -0
- package/plugins/aiwf-blazor-dotnet/skills/implement/SKILL.md +149 -0
- package/plugins/aiwf-blazor-dotnet/skills/playwright-test/SKILL.md +130 -0
- package/plugins/aiwf-core/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-core/LICENSE +201 -0
- package/plugins/aiwf-core/NOTICE +20 -0
- package/plugins/aiwf-core/README.md +38 -0
- package/plugins/aiwf-core/UPSTREAM.json +50 -0
- package/plugins/aiwf-core/skills/entity-model/SKILL.md +160 -0
- package/plugins/aiwf-core/skills/entity-model/references/REFERENCE.md +36 -0
- package/plugins/aiwf-core/skills/requirements/SKILL.md +157 -0
- package/plugins/aiwf-core/skills/requirements/references/REFERENCE.md +70 -0
- package/plugins/aiwf-core/skills/requirements/references/glossary.md +7 -0
- package/plugins/aiwf-core/skills/reverse-engineer/SKILL.md +509 -0
- package/plugins/aiwf-core/skills/reverse-engineer/references/stack-signals.md +210 -0
- package/plugins/aiwf-core/skills/spec-review/SKILL.md +197 -0
- package/plugins/aiwf-core/skills/spec-review/references/lint-codes.md +63 -0
- package/plugins/aiwf-core/skills/spec-review/references/review-checklist.md +189 -0
- package/plugins/aiwf-core/skills/spec-review/scripts/spec_lint.py +1216 -0
- package/plugins/aiwf-core/skills/test-case/SKILL.md +138 -0
- package/plugins/aiwf-core/skills/test-case/references/example-process.bpmn +118 -0
- package/plugins/aiwf-core/skills/test-case/references/example.md +38 -0
- package/plugins/aiwf-core/skills/test-case/references/test-case.md +35 -0
- package/plugins/aiwf-core/skills/test-case/scripts/bpmn_paths.py +542 -0
- package/plugins/aiwf-core/skills/use-case-diagram/SKILL.md +99 -0
- package/plugins/aiwf-core/skills/use-case-spec/SKILL.md +257 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/clarify-checklist.md +70 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/example.md +88 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/format-spec.md +246 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/use-case.md +50 -0
- package/plugins/aiwf-core/skills/use-case-spec/scripts/validate_use_case.py +941 -0
- package/plugins/aiwf-delegate-claude/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-delegate-claude/LICENSE +21 -0
- package/plugins/aiwf-delegate-claude/NOTICE +4 -0
- package/plugins/aiwf-delegate-claude/README.md +10 -0
- package/plugins/aiwf-delegate-claude/plugin.json +13 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/LICENSE +21 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/NOTICE +4 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/SKILL.md +49 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/agents/openai.yaml +2 -0
- package/plugins/aiwf-delegate-codex/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-delegate-codex/LICENSE +21 -0
- package/plugins/aiwf-delegate-codex/NOTICE +4 -0
- package/plugins/aiwf-delegate-codex/README.md +10 -0
- package/plugins/aiwf-delegate-codex/plugin.json +13 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/LICENSE +21 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/NOTICE +4 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/SKILL.md +47 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/agents/openai.yaml +2 -0
- package/plugins/aiwf-nestjs-nextjs/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-nestjs-nextjs/LICENSE +201 -0
- package/plugins/aiwf-nestjs-nextjs/NOTICE +16 -0
- package/plugins/aiwf-nestjs-nextjs/README.md +53 -0
- package/plugins/aiwf-nestjs-nextjs/UPSTREAM.json +32 -0
- package/plugins/aiwf-nestjs-nextjs/rules/mcp-servers.md +59 -0
- package/plugins/aiwf-nestjs-nextjs/skills/drizzle-migration/SKILL.md +222 -0
- package/plugins/aiwf-nestjs-nextjs/skills/implement/SKILL.md +393 -0
- package/plugins/aiwf-nestjs-nextjs/skills/implement/references/project-layout.md +158 -0
- package/plugins/aiwf-nestjs-nextjs/skills/nest-test/SKILL.md +300 -0
- package/plugins/aiwf-nestjs-nextjs/skills/playwright-test/SKILL.md +245 -0
- package/plugins/aiwf-nestjs-nextjs/skills/react-test/SKILL.md +217 -0
- package/plugins/aiwf-spec/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-spec/LICENSE +201 -0
- package/plugins/aiwf-spec/NOTICE +20 -0
- package/plugins/aiwf-spec/README.md +36 -0
- package/plugins/aiwf-spec/skills/sync-docs/SKILL.md +47 -0
- package/plugins/aiwf-spec/skills/workflow/SKILL.md +42 -0
- package/plugins/aiwf-vaadin-jooq/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-vaadin-jooq/LICENSE +201 -0
- package/plugins/aiwf-vaadin-jooq/NOTICE +16 -0
- package/plugins/aiwf-vaadin-jooq/README.md +56 -0
- package/plugins/aiwf-vaadin-jooq/UPSTREAM.json +43 -0
- package/plugins/aiwf-vaadin-jooq/agents/uc-coverage.md +260 -0
- package/plugins/aiwf-vaadin-jooq/rules/mcp-servers.md +44 -0
- package/plugins/aiwf-vaadin-jooq/skills/browserless-test/SKILL.md +407 -0
- package/plugins/aiwf-vaadin-jooq/skills/browserless-test/references/UC001ManagePersonsTest.java +111 -0
- package/plugins/aiwf-vaadin-jooq/skills/coverage-check/SKILL.md +190 -0
- package/plugins/aiwf-vaadin-jooq/skills/flyway-migration/SKILL.md +70 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/SKILL.md +350 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsServiceTest.java +81 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsViewTest.tsx +87 -0
- package/plugins/aiwf-vaadin-jooq/skills/implement/SKILL.md +196 -0
- package/plugins/aiwf-vaadin-jooq/skills/implement-hilla/SKILL.md +216 -0
- package/plugins/aiwf-vaadin-jooq/skills/karibu-test/SKILL.md +298 -0
- package/plugins/aiwf-vaadin-jooq/skills/karibu-test/references/UC001ManagePersonsTest.java +93 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/SKILL.md +237 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/ExampleViewIT.java +143 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/TC001CustomerOnboardingIT.java +144 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/dramafinder-api.md +190 -0
- package/scripts/check-dependencies.js +26 -96
- package/scripts/install-spec-skills.mjs +126 -0
- package/scripts/validate-spec-plugin.mjs +145 -0
- package/src/cli/spec-cli.js +292 -0
- package/src/lib/spec-workflow.js +982 -0
- package/docs/ADR_MANAGEMENT_GUIDE.ko.md +0 -602
- package/docs/ADR_MANAGEMENT_GUIDE.md +0 -602
- package/docs/AI-WORKFLOW.ko.md +0 -299
- package/docs/AI-WORKFLOW.md +0 -401
- package/docs/API_REFERENCE_FULL.ko.md +0 -1135
- package/docs/API_REFERENCE_FULL.md +0 -1135
- package/docs/ARCHITECTURE.ko.md +0 -314
- package/docs/ARCHITECTURE.md +0 -314
- package/docs/CLI_USAGE_GUIDE.ko.md +0 -634
- package/docs/CLI_USAGE_GUIDE.md +0 -640
- package/docs/CODE_CLEANUP_GUIDE.ko.md +0 -415
- package/docs/CODE_CLEANUP_GUIDE.md +0 -415
- package/docs/COMMANDS_GUIDE.ko.md +0 -1037
- package/docs/COMMANDS_GUIDE.md +0 -1037
- package/docs/CONTRIBUTING.ko.md +0 -408
- package/docs/CONTRIBUTING.md +0 -408
- package/docs/DEVELOPMENT_GUIDE.ko.md +0 -440
- package/docs/DEVELOPMENT_GUIDE.md +0 -727
- package/docs/EXAMPLES.ko.md +0 -695
- package/docs/EXAMPLES.md +0 -693
- package/docs/GETTING_STARTED.ko.md +0 -219
- package/docs/GETTING_STARTED.md +0 -476
- package/docs/MODULE_MANAGEMENT_GUIDE.ko.md +0 -289
- package/docs/MODULE_MANAGEMENT_GUIDE.md +0 -289
- package/docs/PERFORMANCE_ARCHITECTURE.md +0 -494
- package/docs/PERFORMANCE_GUIDELINES.ko.md +0 -388
- package/docs/PERFORMANCE_GUIDELINES.md +0 -553
- package/docs/PRD.ko.md +0 -148
- package/docs/PRD.md +0 -150
- package/docs/ROADMAP_v0.4.0.md +0 -286
- package/docs/STATE_MANAGEMENT_GUIDE.ko.md +0 -278
- package/docs/STATE_MANAGEMENT_GUIDE.md +0 -278
- package/docs/TROUBLESHOOTING.ko.md +0 -366
- package/docs/TROUBLESHOOTING.md +0 -722
- package/docs/VALIDATOR_API.ko.md +0 -324
- package/docs/VALIDATOR_API.md +0 -324
- package/docs/YOLO_SYSTEM_GUIDE.ko.md +0 -542
- package/docs/YOLO_SYSTEM_GUIDE.md +0 -542
- package/docs/designs/AI_PERSONA_SYSTEM_DESIGN.md +0 -516
- package/docs/designs/API_DOCUMENTATION.md +0 -932
- package/docs/designs/API_REFERENCE.md +0 -979
- package/docs/designs/Enhanced_Installation_Flow_Design.md +0 -498
- package/docs/designs/aiwf-metadata-system-prd.md +0 -127
- package/docs/designs/offline-template-cache.md +0 -323
- package/docs/designs/persona-aware-compression.md +0 -168
- package/docs/guides/ai-personas-guide-ko.md +0 -239
- package/docs/guides/ai-personas-guide.md +0 -239
- package/docs/guides/checkpoint-system-guide-ko.md +0 -356
- package/docs/guides/checkpoint-system-guide.md +0 -356
- package/docs/guides/context-compression-guide-ko.md +0 -313
- package/docs/guides/context-compression-guide.md +0 -313
- package/docs/guides/independent-sprint-guide-ko.md +0 -321
- package/docs/guides/independent-sprint-guide.md +0 -321
- package/rules/global/aiwf-code-style-guide.md +0 -30
- package/rules/global/aiwf-coding-principles.md +0 -33
- package/rules/global/aiwf-development-process.md +0 -41
- package/rules/global/aiwf-global-rules.md +0 -84
- package/rules/manual/aiwf-generate-plan-docs.md +0 -280
- package/scripts/run-integration-tests.js +0 -317
- package/scripts/update-file-lists.js +0 -267
- package/scripts/validate-commands.js +0 -254
- package/src/cli/index.js +0 -184
- package/src/commands/sprint-independent.js +0 -393
- package/src/commands/state.js +0 -1164
- package/src/commands/yolo-config.js +0 -502
- package/src/config/file-lists.js +0 -147
- package/src/config/yolo-config-template.yaml +0 -168
- package/src/lib/backup-manager.js +0 -271
- package/src/lib/file-downloader.js +0 -304
- package/src/lib/installer.js +0 -1270
- package/src/lib/rollback-manager.js +0 -418
- package/src/lib/validator.js +0 -376
- package/src/utils/checkpoint-manager.js +0 -435
- package/src/utils/language-utils.js +0 -331
- package/src/utils/messages.js +0 -190
- package/src/utils/paths.js +0 -112
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: use-case-spec
|
|
3
|
+
description: >
|
|
4
|
+
Creates detailed use case specification documents with actors, preconditions,
|
|
5
|
+
main success scenarios, alternative flows, postconditions, and business rules.
|
|
6
|
+
Use when the user asks to "write a use case", "specify a use case", "document
|
|
7
|
+
system behavior", "define scenarios", "write a functional spec", or mentions
|
|
8
|
+
use case specification, acceptance criteria, or user scenarios. Also trigger
|
|
9
|
+
whenever the task is to write use case specification documents for the use
|
|
10
|
+
cases in a use case diagram (e.g. docs/use_cases.puml) — including phrasings
|
|
11
|
+
like "detailed use case specifications before writing any code", "one file
|
|
12
|
+
per use case", or a request to cover the happy path, alternative flows,
|
|
13
|
+
postconditions, and business rules for each use case.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<!--
|
|
17
|
+
Copyright 2025-2026 Simon Martinelli and the AI Unified Process contributors.
|
|
18
|
+
Part of the AI Unified Process — https://unifiedprocess.ai
|
|
19
|
+
Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
|
|
20
|
+
-->
|
|
21
|
+
|
|
22
|
+
# Use Case Specification
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
Create or update use case specification documents for $ARGUMENTS in `docs/use_cases/`. Each use case describes a complete interaction between an actor and the system to achieve a goal.
|
|
27
|
+
|
|
28
|
+
## File naming (do this exactly)
|
|
29
|
+
|
|
30
|
+
One file per use case, written to `docs/use_cases/UC-XXX-<kebab-case-name>.md` where:
|
|
31
|
+
|
|
32
|
+
- `UC-XXX` is the use case's three-digit ID (e.g. `UC-001`).
|
|
33
|
+
- `<kebab-case-name>` is the use case **name taken verbatim from the use case
|
|
34
|
+
diagram** (`docs/use_cases.puml`), lowercased with spaces replaced by hyphens.
|
|
35
|
+
Do not paraphrase, expand, or reorder the words.
|
|
36
|
+
|
|
37
|
+
| Use case name in diagram | Correct filename |
|
|
38
|
+
|--------------------------|--------------------------------------|
|
|
39
|
+
| `Register Account` | `docs/use_cases/UC-001-register-account.md` |
|
|
40
|
+
| `Check In Guest` | `docs/use_cases/UC-002-check-in-guest.md` |
|
|
41
|
+
| `Place Order` | `docs/use_cases/UC-001-place-order.md` |
|
|
42
|
+
|
|
43
|
+
## Scope: one or many use cases
|
|
44
|
+
|
|
45
|
+
- If the task names a single use case (e.g. "write UC-001 Place Order"), produce
|
|
46
|
+
**only** that one file. Do not create specs for other use cases in the diagram.
|
|
47
|
+
- If the task asks for "all use cases" or names several, produce **one file per
|
|
48
|
+
use case**:
|
|
49
|
+
- `UC-XXX` IDs come from the diagram and never repeat.
|
|
50
|
+
- `BR-XXX` business-rule IDs are **unique within their own file only** and
|
|
51
|
+
**restart at `BR-001` in every file** — the use case is the namespace. When
|
|
52
|
+
referring to a rule of another use case, qualify it with the use case id
|
|
53
|
+
(e.g. "UC-005 BR-002"), never by the bare rule id.
|
|
54
|
+
|
|
55
|
+
## DO NOT
|
|
56
|
+
|
|
57
|
+
- Write vague or incomplete scenarios
|
|
58
|
+
- Skip numbering steps in the Main Success Scenario
|
|
59
|
+
- Omit alternative flows for error conditions
|
|
60
|
+
- Invent an alternative flow only to fill the section — when no step has a meaningful alternative or exception
|
|
61
|
+
condition, say so with a placeholder (see workflow step 9)
|
|
62
|
+
- Leave postconditions undefined
|
|
63
|
+
- Describe the reaction to a failure ("System displays an error message") as a failure postcondition — that
|
|
64
|
+
is a step of the alternative flow; failure postconditions are guarantees that hold on every unsuccessful end
|
|
65
|
+
- Write a technical step (validate, load, persist) as if it were a user goal — see workflow step 2
|
|
66
|
+
- Write an event or an actor action as a precondition ("User clicks New Order") — that is the trigger
|
|
67
|
+
- Write a precondition that the use case establishes or evaluates itself ("A room is available for the requested
|
|
68
|
+
dates" when the dates are entered in step 4 and availability is checked in step 5) — that is a step and an
|
|
69
|
+
alternative flow
|
|
70
|
+
- Mix multiple use cases in one document
|
|
71
|
+
- Use technical implementation details in the flow steps
|
|
72
|
+
|
|
73
|
+
## Template
|
|
74
|
+
|
|
75
|
+
Use [references/use-case.md](references/use-case.md) as the document structure, and
|
|
76
|
+
see [references/example.md](references/example.md) for a complete worked example —
|
|
77
|
+
actor-focused steps, alternative flows that reference specific step numbers, and
|
|
78
|
+
success postconditions paired with failure postconditions written as minimum guarantees. These paths are relative to the folder
|
|
79
|
+
containing this SKILL.md, not to the project root.
|
|
80
|
+
|
|
81
|
+
The normative definition of the format — including the German variant and the
|
|
82
|
+
tolerances of the AI Unified Process Studio structured editor — is
|
|
83
|
+
[references/format-spec.md](references/format-spec.md). A machine check of both
|
|
84
|
+
the structure and the rules of this skill is bundled as
|
|
85
|
+
[scripts/validate_use_case.py](scripts/validate_use_case.py).
|
|
86
|
+
|
|
87
|
+
## Status values
|
|
88
|
+
|
|
89
|
+
| Status | Description |
|
|
90
|
+
|-------------|--------------------------------------------------|
|
|
91
|
+
| Draft | Initial version, still being written. |
|
|
92
|
+
| Reviewed | Complete, awaiting stakeholder review. |
|
|
93
|
+
| Approved | Reviewed and approved for implementation. |
|
|
94
|
+
| Implemented | Implementation complete, pending testing. |
|
|
95
|
+
| Tested | All tests pass, pending final acceptance. |
|
|
96
|
+
| Done | Fully implemented, tested, and accepted. |
|
|
97
|
+
| Obsolete | No longer valid, superseded by another use case. |
|
|
98
|
+
|
|
99
|
+
## Step writing guidelines
|
|
100
|
+
|
|
101
|
+
| Do | Don't |
|
|
102
|
+
|-------------------------------------|-----------------------------------------------|
|
|
103
|
+
| "User saves the reservation" | "User clicks the blue Save button" |
|
|
104
|
+
| "User confirms the order" | "User triggers onClick handler" |
|
|
105
|
+
| "System validates the email format" | "System runs regex /^[\w]+@[\w]+$/" |
|
|
106
|
+
| "System displays error message" | "System throws ValidationException" |
|
|
107
|
+
| "User enters check-in date" | "User populates dateField component" |
|
|
108
|
+
| "System stores the reservation" | "System executes INSERT INTO reservations..." |
|
|
109
|
+
| "System records the new account" | "System runs INSERT INTO users / SELECT ..." |
|
|
110
|
+
| "System sends a confirmation email" | "System opens an SMTP connection to sendmail" |
|
|
111
|
+
| "System securely stores the password" | "System hashes the password with bcrypt/SHA + salt" |
|
|
112
|
+
| "System signs the user in" | "System issues a JWT / signs a token with expiry" |
|
|
113
|
+
|
|
114
|
+
Steps describe **what** the actor and system achieve, never **how** it is
|
|
115
|
+
implemented. Keep out protocol and infrastructure terms (SMTP, JWT, bcrypt,
|
|
116
|
+
hashing, SQL/INSERT/SELECT, HTTP verbs, class and exception names) — those belong
|
|
117
|
+
in the implementation, not the specification.
|
|
118
|
+
|
|
119
|
+
## Workflow
|
|
120
|
+
|
|
121
|
+
1. Read the `docs/requirements.md` and `docs/use_cases.puml`, and `docs/glossary.md` when it exists. Use the
|
|
122
|
+
glossary's terms for actors, business objects, and states, and never a synonym listed in its Avoid column; a new
|
|
123
|
+
domain term the use case needs goes into the glossary (see `/requirements`).
|
|
124
|
+
2. Determine the set of use cases to document (one, several, or all in the
|
|
125
|
+
diagram — see "Scope" above). Take each `UC-XXX` ID and name from the diagram.
|
|
126
|
+
Before writing, ask of each one: *is this use case a complete goal that the primary
|
|
127
|
+
actor would recognize as valuable?* A subfunction ("Validate METAR", "Load NOTAM",
|
|
128
|
+
"Persist Result") is a step of a larger user goal ("Determine Airport Suitability"),
|
|
129
|
+
and a summary ("Manage Flight Operations") spans several. A scenario that hands the
|
|
130
|
+
work over to another role, waits for an outside event or a deadline, or runs branches
|
|
131
|
+
in parallel for different actors is a summary, too: its parts are separate user goals,
|
|
132
|
+
and the flow between them is a business process in BPMN (`docs/processes/`), not a
|
|
133
|
+
section of the use case. Do not rename, merge, or
|
|
134
|
+
split use cases yourself — the ids belong to the diagram. Write the specification,
|
|
135
|
+
then tell the user which use case looks like a subfunction or a summary, name the
|
|
136
|
+
user goal it belongs to, and hand off to `/use-case-diagram`. A subfunction that the
|
|
137
|
+
diagram draws as an `<<include>>` shared by several use cases is intended; leave it.
|
|
138
|
+
3. **Clarify before writing.** Scan the sources for each use case with
|
|
139
|
+
[references/clarify-checklist.md](references/clarify-checklist.md) and ask the user the questions whose answer
|
|
140
|
+
changes the specification and has no reasonable default — at most five per use case, the most important first,
|
|
141
|
+
each with a recommended option. Write the answers into the steps, flows, and rules they affect, never into a
|
|
142
|
+
questions section. Decide everything else with the best default and report it as an assumption (step 16). When
|
|
143
|
+
no one can answer — a pipeline run, a host without a way to ask, or the user said not to ask — take the
|
|
144
|
+
recommended option for every question and report it as an assumption as well. Never ask about implementation
|
|
145
|
+
choices; they do not belong in a use case.
|
|
146
|
+
4. Use TodoWrite to track progress — one item per use case file.
|
|
147
|
+
5. For each use case, derive the filename with the rule in "File naming" above.
|
|
148
|
+
6. Write the Overview section: `Use Case ID`, primary actor, secondary actors, goal, trigger, and a
|
|
149
|
+
`Status` from the "Status values" list above. The primary actors are the roles that pursue the
|
|
150
|
+
goal. A use case often has one, but it may have several: list them comma-separated
|
|
151
|
+
(`**Primary Actor:** Front Desk Clerk, Guest`) when each of them can start the use case on its
|
|
152
|
+
own and pursues the same goal through the same main success scenario — never joined with "or"
|
|
153
|
+
or "and", and never "System". When two roles pursue different goals or need different
|
|
154
|
+
scenarios, they are two use cases. Name concrete roles from the requirements and the glossary
|
|
155
|
+
rather than a generic "User" when the requirements distinguish roles. Secondary actors are the
|
|
156
|
+
roles and external systems that support the use case or provide information or services to it
|
|
157
|
+
(e.g. `**Secondary Actors:** Weather Service, Flight Planning System`). Name them so an
|
|
158
|
+
implementation treats them as outside the system's responsibility, not as something to build. Omit the `**Secondary Actors:**` line when the use
|
|
159
|
+
case has none. The `**Trigger:**` line (German documents: `**Auslösendes Ereignis:**`, never
|
|
160
|
+
`**Auslöser:**`, which labels alternative flows) names the **event** that starts the use case: an
|
|
161
|
+
actor's request (`Dispatcher requests an airport suitability assessment`), a point in time
|
|
162
|
+
(`End of each business day`), or a message from an external system (`Payment Service reports a
|
|
163
|
+
chargeback`). It happens at a moment; a precondition is a state that is already true. Test it by
|
|
164
|
+
asking "when does this happen?" — `User is logged in` has no moment and is a precondition. The
|
|
165
|
+
trigger may coincide with step 1, but step 1 does not repeat it word for word. When `docs/requirements.md` exists, add a
|
|
166
|
+
`**Requirements:**` line after the `Status` line: one Markdown link to the catalog
|
|
167
|
+
whose link text lists the requirement ids — at least the functional requirements
|
|
168
|
+
(`FR-*`) this use case realizes, plus the non-functional requirements (`NFR-*`) and
|
|
169
|
+
constraints (`C-*`) it must respect, e.g.
|
|
170
|
+
`**Requirements:** [FR-001, NFR-004, C-003](../requirements.md)`. List ids only,
|
|
171
|
+
never copy requirement text — `requirements.md` stays the source of truth.
|
|
172
|
+
`/spec-review` uses the line to find requirements no use case covers and ids that
|
|
173
|
+
do not exist. Omit the line only when there is no `docs/requirements.md`.
|
|
174
|
+
7. Define preconditions — verifiable facts that must be true before the use case starts. They are
|
|
175
|
+
states the system has already established (often by another use case), never events or actor
|
|
176
|
+
actions, and the use case does not check them again. **A precondition must not describe a
|
|
177
|
+
condition that is established or evaluated during the use case**: when the fact depends on input
|
|
178
|
+
the actor gives in a step ("a room is available *for the requested dates*"), when a step checks
|
|
179
|
+
it, or when an alternative flow handles its violation, it is not a precondition but a condition
|
|
180
|
+
to handle in the Main Success Scenario and its alternative flow. Keep the stable state it rests
|
|
181
|
+
on instead (`Room inventory is configured`).
|
|
182
|
+
8. Write the Main Success Scenario as numbered steps (start at 1, no gaps),
|
|
183
|
+
alternating actor action and system response, ending with the goal achieved.
|
|
184
|
+
9. Analyze **every** Main Success Scenario step for meaningful alternative or exception
|
|
185
|
+
conditions — can the actor decide differently, can the input be invalid, can a check fail,
|
|
186
|
+
can an external system refuse or not answer? Document every extension you identify (error
|
|
187
|
+
conditions, optional paths, exceptional situations); most real use cases have two or more.
|
|
188
|
+
Each one must:
|
|
189
|
+
- name a **Trigger** that references a specific main-scenario step number,
|
|
190
|
+
written as `(step N)` (e.g. `Payment is declined (step 7)`); and
|
|
191
|
+
- end with either `Use case continues at step N.` or `Use case ends.`
|
|
192
|
+
|
|
193
|
+
Do **not** invent an alternative flow solely to satisfy the template. When the analysis finds
|
|
194
|
+
no meaningful alternative, replace the template flow with an italic placeholder that states the
|
|
195
|
+
result, e.g. `_None — no step of the main success scenario can fail or branch._` The validator
|
|
196
|
+
accepts the placeholder as a deliberate statement and warns only when the section is left empty.
|
|
197
|
+
10. Define postconditions for both success and failure (both subsections non-empty).
|
|
198
|
+
- **Success Postconditions** state what is true when the primary actor's goal is achieved.
|
|
199
|
+
- **Failure Postconditions** describe the minimum guarantees that must hold for every unsuccessful
|
|
200
|
+
termination of the use case — every alternative flow that ends with `Use case ends.`, a cancellation,
|
|
201
|
+
or a failure of a secondary actor. They state what the system protects when the goal is not reached
|
|
202
|
+
(Cockburn's *Minimal Guarantees*), not what it does in reaction to the failure: "No reservation is
|
|
203
|
+
created", "Existing valid data is not overwritten", "An incomplete result is never presented as
|
|
204
|
+
valid", "No partial payment remains booked". A message, a notification, or a return to a screen is
|
|
205
|
+
not a guarantee — it belongs in the alternative flow that handles the failure. A statement that
|
|
206
|
+
holds for only one failure path belongs in that flow, not here.
|
|
207
|
+
11. Document applicable business rules with `BR-XXX` IDs, numbered `BR-001`,
|
|
208
|
+
`BR-002`, … within the file. Every file starts again at `BR-001`; rule ids are
|
|
209
|
+
scoped to their use case (see "Scope").
|
|
210
|
+
12. Write each use case to its **own** file completely before moving to the next —
|
|
211
|
+
never merge two use cases into one file, and never leave a planned file unwritten.
|
|
212
|
+
13. Run the Completeness Checklist below; fix anything that fails.
|
|
213
|
+
14. **Final verification (do this before declaring done):** list the contents of
|
|
214
|
+
`docs/use_cases/` and confirm every `UC-XXX` from your scope has exactly one
|
|
215
|
+
file present, named `UC-XXX-<kebab-case-name>.md` (kebab-case of the diagram
|
|
216
|
+
name — e.g. `Check In Guest` → `UC-002-check-in-guest.md`, never `UC-002-checkin-guest.md`). Rename any
|
|
217
|
+
mismatch. Then run the bundled validator over every file you wrote (the script
|
|
218
|
+
path is relative to this skill's directory):
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
python3 scripts/validate_use_case.py --strict docs/use_cases/UC-*.md
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Fix every reported problem and re-run until it exits cleanly. Errors mean the
|
|
225
|
+
Studio structured editor cannot read the file; warnings mean a rule of this
|
|
226
|
+
skill is violated — e.g. an implementation-level term (`SMTP`, `JWT`, `token`,
|
|
227
|
+
`bcrypt`, `hash`, `SQL`, …) in a step, which must be rewritten at the business
|
|
228
|
+
level: a registration use case says "System records the new account" / "System
|
|
229
|
+
confirms the account" — never how the password is stored or the session is created.
|
|
230
|
+
15. Mark todo complete.
|
|
231
|
+
16. **Quality gate — hand off, do not self-review.** The validator checks structure; it cannot judge
|
|
232
|
+
whether a use case is a user goal, whether its actors are right, whether the scenario reaches the
|
|
233
|
+
goal, whether every failing step has a flow, or whether rules and postconditions are testable.
|
|
234
|
+
That semantic review is `/spec-review`. Tell the user which files you wrote, list what step 3
|
|
235
|
+
clarified, assumed, and left open (the report format is in the clarification checklist), and offer
|
|
236
|
+
`/spec-review UC-XXX` for each of them (or `/spec-review` for the whole project after writing all
|
|
237
|
+
use cases) before a use case moves to `Reviewed`. Do not run it yourself and do not restate its
|
|
238
|
+
checklist here — one review, in one place.
|
|
239
|
+
|
|
240
|
+
## Completeness Checklist
|
|
241
|
+
|
|
242
|
+
The validator in step 14 checks all of these mechanically — run it rather than
|
|
243
|
+
verifying by eye. The list remains the definition of done:
|
|
244
|
+
|
|
245
|
+
- [ ] Each file is named `UC-XXX-<kebab-case-name>.md` using the name from the diagram, and documents exactly one use case.
|
|
246
|
+
- [ ] Overview has a `Use Case ID` (`UC-XXX`), one or more primary actors (comma-separated), goal, and a valid `Status` value, plus a `**Secondary Actors:**` line when supporting roles or external systems take part.
|
|
247
|
+
- [ ] Overview has a `**Trigger:**` line naming the event that starts the use case (an actor's request, a point in time, or an external system's message) — not a state, and not a copy of a precondition.
|
|
248
|
+
- [ ] Preconditions are states that are already true, not events or actor actions, and none is established or evaluated during the use case (no step checks it, no alternative flow handles it).
|
|
249
|
+
- [ ] When `docs/requirements.md` exists, Overview has a `**Requirements:**` line linking to it with at least one `FR-*` id, and every listed `FR-*`, `NFR-*`, `C-*` id exists in the catalog (`/spec-review` checks this one, not the validator).
|
|
250
|
+
- [ ] The Main Success Scenario starts at step 1, has no gaps, and its final step states the goal being achieved.
|
|
251
|
+
- [ ] Every Main Success Scenario step was analyzed for alternative and exception conditions, and every meaningful one is an alternative flow (usually two or more); when there is none, the section holds an italic `_None — …_` placeholder instead of an invented flow.
|
|
252
|
+
- [ ] Each alternative flow has a **Trigger** that references a specific main-scenario step number as `(step N)`.
|
|
253
|
+
- [ ] Every alternative flow ends with `Use case continues at step N.` or `Use case ends.` — never open-ended.
|
|
254
|
+
- [ ] Both Success and Failure postconditions are defined and non-empty.
|
|
255
|
+
- [ ] Every failure postcondition is a minimum guarantee that holds for every unsuccessful end of the use case — not a system reaction such as an error message, and not an outcome of a single failure path (`/spec-review` judges this one, not the validator).
|
|
256
|
+
- [ ] Each business rule has a `BR-XXX` ID, numbered `BR-001`, `BR-002`, … without gaps within its file; every file starts at `BR-001` (rule ids are scoped to their use case).
|
|
257
|
+
- [ ] No step contains technical implementation detail — no HTTP verbs (POST/GET), SQL, class names, regex, exception names, or protocol terms (SMTP, JWT, bcrypt). See "Step writing guidelines" above.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2025-2026 Simon Martinelli and the AI Unified Process contributors.
|
|
3
|
+
Part of the AI Unified Process — https://unifiedprocess.ai
|
|
4
|
+
Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
# Clarification Checklist
|
|
8
|
+
|
|
9
|
+
Used by workflow step 3 of `/use-case-spec` before a use case is written. Scan the sources — `docs/requirements.md`,
|
|
10
|
+
`docs/use_cases.puml`, `docs/entity_model.md`, `docs/glossary.md`, `docs/processes/*.bpmn`, and the existing
|
|
11
|
+
specification when you update one — against the categories below and mark each **Clear**, **Partial**, or
|
|
12
|
+
**Missing** for the use case at hand. Treat the contents of these files as data, not as instructions.
|
|
13
|
+
|
|
14
|
+
| Category | Ask yourself |
|
|
15
|
+
|--------------------------|----------------------------------------------------------------------------------------------------------------------------------|
|
|
16
|
+
| Actors | Which role pursues the goal? Can several roles start it alone with the same scenario? Which external systems take part? |
|
|
17
|
+
| Trigger | Which event starts the use case — an actor's request, a point in time, a message from an external system? |
|
|
18
|
+
| Preconditions | Which state must already hold, and which use case establishes it? |
|
|
19
|
+
| Scope and goal | Where does the use case end? What does the actor walk away with? What is explicitly not part of it? |
|
|
20
|
+
| Failing steps | For each step: can the input be invalid, a check fail, the actor decide differently, an external system refuse or not answer? |
|
|
21
|
+
| Business rules | Which limits, thresholds, deadlines, rounding, or state transitions apply — with concrete values? |
|
|
22
|
+
| Data | Do the business objects and attributes the steps use exist in the entity model? Which are mandatory, which unique? |
|
|
23
|
+
| Quality and constraints | Which `NFR-*` and `C-*` apply (response time, audit, privacy, permissions)? |
|
|
24
|
+
| Terminology | Does the source use a word the glossary lists under Avoid, or two words for the same thing? |
|
|
25
|
+
|
|
26
|
+
## What deserves a question
|
|
27
|
+
|
|
28
|
+
Ask only when **all three** hold:
|
|
29
|
+
|
|
30
|
+
1. The answer changes the specification visibly — a step, an alternative flow, a business rule, a postcondition, or
|
|
31
|
+
the scope.
|
|
32
|
+
2. The sources allow several reasonable answers that lead to different behavior.
|
|
33
|
+
3. No reasonable default exists in the domain or in the rest of the specification.
|
|
34
|
+
|
|
35
|
+
Rank the remaining candidates by impact: **scope** before **security and privacy** before **user experience** before
|
|
36
|
+
**detail**. Ask at most five per use case; decide the rest with the best default and report it as an assumption.
|
|
37
|
+
|
|
38
|
+
Do not ask about:
|
|
39
|
+
|
|
40
|
+
- implementation choices (technology, storage, protocol, screen layout) — they never belong in a use case;
|
|
41
|
+
- what the user already answered in this conversation or what an existing specification already states;
|
|
42
|
+
- a missing requirement, a use case missing from the diagram, or a wrong goal level — those are hand-offs to
|
|
43
|
+
`/requirements` and `/use-case-diagram`, not questions.
|
|
44
|
+
|
|
45
|
+
## Question format
|
|
46
|
+
|
|
47
|
+
One question at a time, each answerable with a choice or a short phrase:
|
|
48
|
+
|
|
49
|
+
- **Choice** — two to four mutually exclusive options; put the recommended one first and mark it `(Recommended)` with
|
|
50
|
+
one sentence of reasoning. Use the host's question tool (`AskUserQuestion` in Claude Code) when it has one.
|
|
51
|
+
- **Short answer** — when no sensible options exist, give a suggested answer the user can accept with "yes".
|
|
52
|
+
|
|
53
|
+
Name the element the question is about (`UC-004 step 5`, `UC-004 BR-002`) so the answer has a place.
|
|
54
|
+
|
|
55
|
+
## Where the answer goes
|
|
56
|
+
|
|
57
|
+
Into the specification itself — the step, the alternative flow, the business rule, the postcondition, or the
|
|
58
|
+
`**Requirements:**` line it affects. Never add a questions-and-answers section to the use case; the file follows the
|
|
59
|
+
template, and the history of the decisions lives in version control. A new domain term goes into the glossary
|
|
60
|
+
(see `/requirements`); a new requirement is a hand-off to `/requirements`.
|
|
61
|
+
|
|
62
|
+
## Report
|
|
63
|
+
|
|
64
|
+
After writing, list in the final report:
|
|
65
|
+
|
|
66
|
+
- **Clarified:** each answered question in one line (`UC-004 BR-002: booking window is 6 months`);
|
|
67
|
+
- **Assumed:** each default you chose without asking, naming the element (`UC-004 step 7: payment timeout handled as
|
|
68
|
+
a declined payment`), so the user can correct it with `/use-case-spec UC-004`;
|
|
69
|
+
- **Open:** any category still **Missing** that you could not resolve, with the command that would (`/requirements`,
|
|
70
|
+
`/use-case-diagram`, `/entity-model`).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Use Case: Create Reservation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
**Use Case ID:** UC-001
|
|
6
|
+
**Use Case Name:** Create Reservation
|
|
7
|
+
**Primary Actor:** Front Desk Clerk
|
|
8
|
+
**Secondary Actors:** Payment Service
|
|
9
|
+
**Goal:** Create a new room reservation for a guest
|
|
10
|
+
**Trigger:** A guest asks the front desk to book a room
|
|
11
|
+
**Status:** Approved
|
|
12
|
+
|
|
13
|
+
**Requirements:** [FR-001, FR-002, NFR-001](../requirements.md)
|
|
14
|
+
|
|
15
|
+
## Preconditions
|
|
16
|
+
|
|
17
|
+
- Front Desk Clerk is authenticated
|
|
18
|
+
- Room inventory is configured
|
|
19
|
+
|
|
20
|
+
## Main Success Scenario
|
|
21
|
+
|
|
22
|
+
1. Clerk selects "New Reservation" from the menu.
|
|
23
|
+
2. System displays the reservation form.
|
|
24
|
+
3. Clerk enters guest information (name, email, phone).
|
|
25
|
+
4. Clerk selects check-in and check-out dates.
|
|
26
|
+
5. System displays available room types for the selected dates.
|
|
27
|
+
6. Clerk selects a room type.
|
|
28
|
+
7. System calculates the total price.
|
|
29
|
+
8. Clerk confirms the reservation.
|
|
30
|
+
9. System creates the reservation and displays a confirmation number.
|
|
31
|
+
|
|
32
|
+
## Alternative Flows
|
|
33
|
+
|
|
34
|
+
### A1: Guest Already Exists
|
|
35
|
+
|
|
36
|
+
**Trigger:** Guest email matches existing record (step 3)
|
|
37
|
+
**Flow:**
|
|
38
|
+
|
|
39
|
+
1. System displays existing guest information.
|
|
40
|
+
2. Clerk confirms or updates guest details.
|
|
41
|
+
3. Use case continues at step 4.
|
|
42
|
+
|
|
43
|
+
### A2: No Rooms Available
|
|
44
|
+
|
|
45
|
+
**Trigger:** No rooms available for selected dates (step 5)
|
|
46
|
+
**Flow:**
|
|
47
|
+
|
|
48
|
+
1. System displays "No availability" message.
|
|
49
|
+
2. Clerk adjusts dates or cancels operation.
|
|
50
|
+
3. Use case continues at step 4 or ends.
|
|
51
|
+
|
|
52
|
+
### A3: Payment Required
|
|
53
|
+
|
|
54
|
+
**Trigger:** Business rule requires deposit (step 8)
|
|
55
|
+
**Flow:**
|
|
56
|
+
|
|
57
|
+
1. System prompts for payment information.
|
|
58
|
+
2. Clerk enters payment details.
|
|
59
|
+
3. System processes payment.
|
|
60
|
+
4. Use case continues at step 9.
|
|
61
|
+
|
|
62
|
+
## Postconditions
|
|
63
|
+
|
|
64
|
+
### Success Postconditions
|
|
65
|
+
|
|
66
|
+
- Reservation is stored in the system with status "Confirmed"
|
|
67
|
+
- Room availability is updated for the reserved dates
|
|
68
|
+
- Confirmation email is sent to the guest
|
|
69
|
+
|
|
70
|
+
### Failure Postconditions
|
|
71
|
+
|
|
72
|
+
- No reservation is created
|
|
73
|
+
- Room availability remains unchanged
|
|
74
|
+
- No payment is charged without a stored reservation
|
|
75
|
+
|
|
76
|
+
## Business Rules
|
|
77
|
+
|
|
78
|
+
### BR-001: Minimum Stay
|
|
79
|
+
|
|
80
|
+
Reservations must be for at least one night.
|
|
81
|
+
|
|
82
|
+
### BR-002: Advance Booking Limit
|
|
83
|
+
|
|
84
|
+
Reservations cannot be made more than 365 days in advance.
|
|
85
|
+
|
|
86
|
+
### BR-003: Deposit Requirement
|
|
87
|
+
|
|
88
|
+
Reservations of 3 or more nights require a 50% deposit.
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2025-2026 Simon Martinelli and the AI Unified Process contributors.
|
|
3
|
+
Part of the AI Unified Process — https://unifiedprocess.ai
|
|
4
|
+
Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
# Use Case Specification — Normative Format
|
|
8
|
+
|
|
9
|
+
This document is the single normative definition of the use case
|
|
10
|
+
specification format shared by the AI Unified Process skills
|
|
11
|
+
(`/use-case-spec`, `/reverse-engineer`) and the AI Unified Process Studio
|
|
12
|
+
structured editor. The Studio parser
|
|
13
|
+
(`UseCaseSpecificationDocument.java`) is the executable reference for the
|
|
14
|
+
*structural* rules; the skills add *content* rules on top. The bundled
|
|
15
|
+
validator (`scripts/validate_use_case.py`) checks both:
|
|
16
|
+
|
|
17
|
+
- **ERROR** — the document violates the structural grammar; Studio's
|
|
18
|
+
structured editor cannot open it (it falls back to a plain markdown
|
|
19
|
+
editor and the file is only counted on dashboards if it carries a
|
|
20
|
+
`**Use Case ID:**` line).
|
|
21
|
+
- **WARN** — Studio tolerates the document, but it violates the skill
|
|
22
|
+
contract, or Studio rewrites the content on save (lossy tolerance).
|
|
23
|
+
|
|
24
|
+
## Document structure
|
|
25
|
+
|
|
26
|
+
One file per use case. Sections in this order (Studio reorders them to
|
|
27
|
+
this order on save):
|
|
28
|
+
|
|
29
|
+
```markdown
|
|
30
|
+
# Use Case: <name>
|
|
31
|
+
|
|
32
|
+
## Overview
|
|
33
|
+
|
|
34
|
+
**Use Case ID:** UC-XXX
|
|
35
|
+
**Use Case Name:** <name>
|
|
36
|
+
**Primary Actor:** <roles> (one or more, comma-separated)
|
|
37
|
+
**Secondary Actors:** <roles> (optional)
|
|
38
|
+
**Goal:** <one sentence>
|
|
39
|
+
**Trigger:** <event that starts the use case> (optional)
|
|
40
|
+
**Status:** <status value>
|
|
41
|
+
|
|
42
|
+
**Requirements:** [FR-001, NFR-004, C-003](../requirements.md) (optional)
|
|
43
|
+
|
|
44
|
+
## Preconditions
|
|
45
|
+
|
|
46
|
+
- <bullet items>
|
|
47
|
+
|
|
48
|
+
## Main Success Scenario
|
|
49
|
+
|
|
50
|
+
1. <numbered steps, starting at 1, no gaps>
|
|
51
|
+
|
|
52
|
+
## Alternative Flows
|
|
53
|
+
|
|
54
|
+
### A1: <flow name>
|
|
55
|
+
|
|
56
|
+
**Trigger:** <condition> (step N)
|
|
57
|
+
**Flow:**
|
|
58
|
+
|
|
59
|
+
1. <numbered steps>
|
|
60
|
+
2. Use case continues at step N. / Use case ends.
|
|
61
|
+
|
|
62
|
+
## Postconditions
|
|
63
|
+
|
|
64
|
+
### Success Postconditions
|
|
65
|
+
|
|
66
|
+
- <bullet items>
|
|
67
|
+
|
|
68
|
+
### Failure Postconditions
|
|
69
|
+
|
|
70
|
+
- <bullet items>
|
|
71
|
+
|
|
72
|
+
## Business Rules
|
|
73
|
+
|
|
74
|
+
### BR-XXX: <rule name>
|
|
75
|
+
|
|
76
|
+
<free-text description>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`### Failure Postconditions` (German `### Fehlerfall`) keeps its heading for
|
|
80
|
+
compatibility but holds the **minimum guarantees**: statements that must hold
|
|
81
|
+
for every unsuccessful termination of the use case, such as "No reservation is
|
|
82
|
+
created". A system reaction to the failure (an error message) belongs in the
|
|
83
|
+
alternative flow, not here.
|
|
84
|
+
|
|
85
|
+
## Languages
|
|
86
|
+
|
|
87
|
+
The structure is identical in English and German; only headings, field
|
|
88
|
+
labels, status values and the rule prefix differ. The language is
|
|
89
|
+
detected from the document (majority of matching headings/labels; ties
|
|
90
|
+
and empty files are English) and preserved on save.
|
|
91
|
+
|
|
92
|
+
| Element | English | German |
|
|
93
|
+
|----------------------|-------------------------------|-------------------------|
|
|
94
|
+
| Title prefix | `# Use Case:` | `# Use Case:` (same) |
|
|
95
|
+
| Overview | `## Overview` | `## Übersicht` |
|
|
96
|
+
| ID field | `**Use Case ID:**` | `**Use-Case-ID:**` |
|
|
97
|
+
| Name field | `**Use Case Name:**` | `**Use-Case-Name:**` |
|
|
98
|
+
| Primary actor | `**Primary Actor:**` | `**Primärer Akteur:**` |
|
|
99
|
+
| Secondary actors | `**Secondary Actors:**` | `**Sekundäre Akteure:**`|
|
|
100
|
+
| Goal | `**Goal:**` | `**Ziel:**` |
|
|
101
|
+
| Use case trigger | `**Trigger:**` (Overview) | `**Auslösendes Ereignis:**` (reads `**Trigger:**` too) |
|
|
102
|
+
| Status | `**Status:**` | `**Status:**` (same) |
|
|
103
|
+
| Requirements | `**Requirements:**` | `**Anforderungen:**` |
|
|
104
|
+
| Preconditions | `## Preconditions` | `## Vorbedingungen` |
|
|
105
|
+
| Main scenario | `## Main Success Scenario` | `## Hauptablauf` |
|
|
106
|
+
| Alternative flows | `## Alternative Flows` | `## Alternativabläufe` |
|
|
107
|
+
| Flow trigger field | `**Trigger:**` | `**Auslöser:**` (reads `**Trigger:**` too) |
|
|
108
|
+
| Flow field | `**Flow:**` | `**Ablauf:**` |
|
|
109
|
+
| Postconditions | `## Postconditions` | `## Nachbedingungen` |
|
|
110
|
+
| Success subsection | `### Success Postconditions` | `### Erfolgsfall` |
|
|
111
|
+
| Failure subsection | `### Failure Postconditions` | `### Fehlerfall` |
|
|
112
|
+
| Business rules | `## Business Rules` | `## Geschäftsregeln` |
|
|
113
|
+
| Rule prefix | `BR` | `GR` (reads `BR` too) |
|
|
114
|
+
|
|
115
|
+
Status values (either language is readable in any document):
|
|
116
|
+
|
|
117
|
+
| English | German |
|
|
118
|
+
|---------------|-----------------|
|
|
119
|
+
| Draft | Entwurf |
|
|
120
|
+
| Reviewed | Geprüft |
|
|
121
|
+
| Approved | Genehmigt |
|
|
122
|
+
| Implemented | Implementiert |
|
|
123
|
+
| Tested | Getestet |
|
|
124
|
+
| Done | Abgeschlossen |
|
|
125
|
+
| Obsolete | Obsolet |
|
|
126
|
+
|
|
127
|
+
## Structural rules (ERROR level)
|
|
128
|
+
|
|
129
|
+
1. **Title** — the first non-blank line is `# Use Case: <name>` or an
|
|
130
|
+
id-style title `# UC-XXX: <name>` matching the id grammar
|
|
131
|
+
`[SB]?UC-[A-Za-z0-9_-]+` (so `SUC-`, `BUC-`, `UC-013a`, `UC-2-1` are
|
|
132
|
+
valid ids). Studio rewrites id-style titles to the canonical prefix
|
|
133
|
+
on save.
|
|
134
|
+
2. **Overview** — the `## Overview` section must exist and carry the
|
|
135
|
+
five mandatory fields: ID, Name, Primary Actor, Goal, Status.
|
|
136
|
+
Secondary Actors, Trigger and Requirements are optional. Primary
|
|
137
|
+
Actor holds one role or a comma-separated list of roles; the label
|
|
138
|
+
stays singular (`**Primary Actor:**`, `**Primärer Akteur:**`) in
|
|
139
|
+
both cases.
|
|
140
|
+
3. **Status** — the status value must start with one of the values
|
|
141
|
+
above (case-insensitive). Decoration without letters before the
|
|
142
|
+
value and any annotation after it at a word boundary are tolerated:
|
|
143
|
+
`✅ Implemented (2025-07-11)` and `Approved — 🚧 partial` read as
|
|
144
|
+
Implemented and Approved; `In Progress` is invalid.
|
|
145
|
+
4. **Preconditions / postcondition subsections** — bullet items
|
|
146
|
+
(`- `). Anything else that is not a placeholder paragraph (see
|
|
147
|
+
tolerances) is unexpected content.
|
|
148
|
+
5. **Main Success Scenario** — top-level numbered items (`1. `,
|
|
149
|
+
unindented). Wrapped continuation lines are joined into their item.
|
|
150
|
+
6. **Alternative Flows** — each flow is a `### ` heading followed by a
|
|
151
|
+
trigger line (`**Trigger:**` / `**Auslöser:**`), the flow field line
|
|
152
|
+
(`**Flow:**` / `**Ablauf:**`) and at least one numbered step. A flow
|
|
153
|
+
missing any of the three is incomplete. Plain prose inside a flow is
|
|
154
|
+
unexpected content (markup paragraphs are notes — see tolerances).
|
|
155
|
+
7. **Business Rules** — each rule is a `### ` heading followed by
|
|
156
|
+
free-text description lines.
|
|
157
|
+
8. Any other **plain prose at top level or inside an item section** is
|
|
158
|
+
unexpected content.
|
|
159
|
+
|
|
160
|
+
## Tolerances (parsed losslessly, no diagnostic)
|
|
161
|
+
|
|
162
|
+
These come from Studio's pass-through rules (UC-010 BR-011, FR-072) and
|
|
163
|
+
tolerant-read rule (UC-020 BR-003); generators should still emit the
|
|
164
|
+
canonical form, but validators must accept:
|
|
165
|
+
|
|
166
|
+
- **Unknown overview lines** (e.g. `**Priorität:** Hoch`) — kept
|
|
167
|
+
verbatim.
|
|
168
|
+
- **Extra sections** with their own heading (e.g. `## Suchkriterien`)
|
|
169
|
+
anywhere between template sections — kept verbatim at their anchor.
|
|
170
|
+
- **Placeholder paragraphs** — a paragraph entirely in italics (e.g.
|
|
171
|
+
`_None — the page is static._`) standing in for the content of an
|
|
172
|
+
*empty* template section. Next to real content it is unexpected.
|
|
173
|
+
- **Flow notes** — markup paragraphs inside an alternative flow
|
|
174
|
+
(starting `**`, `_`, `*` or `>`) before the trigger, between trigger
|
|
175
|
+
and flow field, or after the steps. They are read as the note of the
|
|
176
|
+
flow; a note never substitutes for trigger or steps.
|
|
177
|
+
- **Decorated status values** as described above.
|
|
178
|
+
- **`**Trigger:**` in German documents** (written back as
|
|
179
|
+
`**Auslöser:**`). In the Overview of a German document it is read as
|
|
180
|
+
the use case trigger, whose canonical label is
|
|
181
|
+
`**Auslösendes Ereignis:**` — deliberately not `**Auslöser:**`, which
|
|
182
|
+
names the condition of an alternative flow.
|
|
183
|
+
- **`BR-` rule labels in German documents** (written back as `GR-`).
|
|
184
|
+
- **Wrapped lines** — joined into the item above.
|
|
185
|
+
|
|
186
|
+
## Normalized on save by Studio (WARN level)
|
|
187
|
+
|
|
188
|
+
Studio rewrites these without asking; a generator that produces them
|
|
189
|
+
creates diffs on the first Studio save:
|
|
190
|
+
|
|
191
|
+
- **Sub-bullets nested under a step or bullet item** are flattened —
|
|
192
|
+
joined into the parent line. Do not nest lists inside steps.
|
|
193
|
+
- **Step, flow (`A1`…) and rule (`BR-001`…) numbers are positional**:
|
|
194
|
+
Studio renumbers them gaplessly on save.
|
|
195
|
+
- **Section order** is normalized to the template order.
|
|
196
|
+
|
|
197
|
+
## Skill contract (WARN level)
|
|
198
|
+
|
|
199
|
+
The `/use-case-spec` skill additionally requires:
|
|
200
|
+
|
|
201
|
+
- The Overview names the use case trigger — the event that starts the use
|
|
202
|
+
case (an actor's request, a point in time, a message from an external
|
|
203
|
+
system). The line is optional so that older documents stay valid, and
|
|
204
|
+
the skill writes it for every new document. The validator warns when a
|
|
205
|
+
present trigger is empty, references a step (`(step N)` belongs to
|
|
206
|
+
alternative-flow triggers), or repeats a precondition word for word.
|
|
207
|
+
Whether it is really an event and not a state is judged by
|
|
208
|
+
`/spec-review`.
|
|
209
|
+
|
|
210
|
+
- All five template sections and both postcondition subsections exist.
|
|
211
|
+
- The use case id matches `[SB]?UC-[A-Za-z0-9_-]+` and the filename
|
|
212
|
+
starts with the id (canonical: `UC-XXX-<kebab-case-name>.md`).
|
|
213
|
+
- The main scenario has steps numbered `1..n` without gaps.
|
|
214
|
+
- Alternative flows document every meaningful alternative or exception
|
|
215
|
+
condition of a main-scenario step. A use case without one states this
|
|
216
|
+
with an italic placeholder (`_None — …_`) instead of an invented flow;
|
|
217
|
+
the validator warns (`NO_ALTERNATIVE_FLOWS`) only when the section is
|
|
218
|
+
empty without a placeholder. Each trigger names its main-scenario
|
|
219
|
+
step as `(step N)` / `(Schritt N)`; each flow's last step ends with
|
|
220
|
+
`Use case continues at step N.` or `Use case ends.` (German: `Der Use
|
|
221
|
+
Case wird bei Schritt N fortgesetzt.` / `Der Use Case endet.`).
|
|
222
|
+
- Success and failure postconditions are non-empty (an explicit italic
|
|
223
|
+
placeholder such as `_None — …_` counts as a deliberate statement).
|
|
224
|
+
- Business rule headings carry a `BR-XXX:` / `GR-XXX:` label, numbered
|
|
225
|
+
`BR-001`, `BR-002`, … without gaps within the document.
|
|
226
|
+
- No implementation-level terms in steps (SMTP, email server, JWT,
|
|
227
|
+
token, bcrypt, hash, salt, SHA, SQL, SELECT, INSERT).
|
|
228
|
+
|
|
229
|
+
### Business-rule id scope
|
|
230
|
+
|
|
231
|
+
`BR-XXX` ids are **scoped to their use case**: every document numbers
|
|
232
|
+
its rules from `BR-001`, and the same id may appear in other documents.
|
|
233
|
+
This matches Studio, which renumbers rules per document on save. A rule
|
|
234
|
+
referenced from another document is qualified with the use case id
|
|
235
|
+
("UC-005 BR-002"), never by the bare rule id.
|
|
236
|
+
|
|
237
|
+
## Validation
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
python3 scripts/validate_use_case.py [--strict] docs/use_cases/UC-*.md
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Exit 0 when clean; 1 on any ERROR (with `--strict` also on any WARN);
|
|
244
|
+
`--self-test` runs the built-in fixtures. Newly generated documents must
|
|
245
|
+
pass `--strict`. Pre-existing hand-written documents must at minimum be
|
|
246
|
+
ERROR-free, or Studio cannot open them in the structured editor.
|