aiwf 0.3.22 → 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 -104
- 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/{src/lib/resources/templates/npm-library/template → plugins/aiwf-delegate-claude}/LICENSE +2 -2
- 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/DEPENDENCY_MAP.md +0 -90
- package/src/cli/cache-cli.js +0 -459
- package/src/cli/checkpoint-cli.js +0 -417
- package/src/cli/index.js +0 -481
- package/src/cli/language-cli.js +0 -286
- package/src/cli/sprint-cli.js +0 -287
- package/src/commands/ai-tool.js +0 -383
- package/src/commands/compress.js +0 -60
- package/src/commands/create-project.js +0 -160
- package/src/commands/evaluate.js +0 -459
- package/src/commands/persona.js +0 -309
- package/src/commands/sprint-independent.js +0 -393
- package/src/commands/sprint-task.js +0 -262
- package/src/commands/state.js +0 -1164
- package/src/commands/token.js +0 -312
- 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/ai-persona-manager.js +0 -711
- package/src/lib/backup-manager.js +0 -271
- package/src/lib/cache-system.js +0 -332
- package/src/lib/context-engine.js +0 -568
- package/src/lib/file-downloader.js +0 -304
- package/src/lib/github-integration.js +0 -402
- package/src/lib/installer.js +0 -1066
- package/src/lib/memory-profiler.js +0 -471
- package/src/lib/metrics-collector.js +0 -885
- package/src/lib/offline-detector.js +0 -386
- package/src/lib/resource-loader-enhanced.js +0 -399
- package/src/lib/resource-loader.js +0 -250
- package/src/lib/resources/commands/ai-persona.js +0 -602
- package/src/lib/resources/commands/compress-context.js +0 -389
- package/src/lib/resources/commands/evaluate.js +0 -246
- package/src/lib/resources/commands/persona-context-apply.js +0 -562
- package/src/lib/resources/commands/token-tracking.js +0 -443
- package/src/lib/resources/config/commit-patterns.js +0 -103
- package/src/lib/resources/config/language.json +0 -6
- package/src/lib/resources/personas/PERSONA_INDEX.md +0 -57
- package/src/lib/resources/personas/analyst.json +0 -44
- package/src/lib/resources/personas/architect/best_practices.md +0 -136
- package/src/lib/resources/personas/architect/knowledge_base.md +0 -377
- package/src/lib/resources/personas/architect.json +0 -44
- package/src/lib/resources/personas/backend/best_practices.md +0 -766
- package/src/lib/resources/personas/backend/knowledge_base.md +0 -1070
- package/src/lib/resources/personas/data_analyst/best_practices.md +0 -594
- package/src/lib/resources/personas/data_analyst/knowledge_base.md +0 -1057
- package/src/lib/resources/personas/developer.json +0 -44
- package/src/lib/resources/personas/developer.md +0 -37
- package/src/lib/resources/personas/evaluation_criteria.json +0 -137
- package/src/lib/resources/personas/frontend/best_practices.md +0 -445
- package/src/lib/resources/personas/frontend/knowledge_base.md +0 -729
- package/src/lib/resources/personas/persona-index.json +0 -31
- package/src/lib/resources/personas/reviewer.json +0 -44
- package/src/lib/resources/personas/security/best_practices.md +0 -307
- package/src/lib/resources/personas/security/knowledge_base.md +0 -498
- package/src/lib/resources/personas/tester.json +0 -44
- package/src/lib/resources/templates/README.md +0 -78
- package/src/lib/resources/templates/api-server/config.json +0 -64
- package/src/lib/resources/templates/api-server/template/.aiwf/config.json +0 -56
- package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
- package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
- package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
- package/src/lib/resources/templates/api-server/template/.env.example +0 -29
- package/src/lib/resources/templates/api-server/template/.eslintrc.json +0 -23
- package/src/lib/resources/templates/api-server/template/README.md +0 -171
- package/src/lib/resources/templates/api-server/template/jest.config.js +0 -26
- package/src/lib/resources/templates/api-server/template/nodemon.json +0 -9
- package/src/lib/resources/templates/api-server/template/package.json +0 -61
- package/src/lib/resources/templates/api-server/template/src/app.ts +0 -60
- package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +0 -38
- package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
- package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +0 -128
- package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/index.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
- package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
- package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
- package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
- package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
- package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +0 -31
- package/src/lib/resources/templates/api-server/template/src/routes/index.ts +0 -13
- package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +0 -67
- package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +0 -37
- package/src/lib/resources/templates/api-server/template/tests/app.test.ts +0 -40
- package/src/lib/resources/templates/api-server/template/tsconfig.json +0 -43
- package/src/lib/resources/templates/npm-library/config.json +0 -61
- package/src/lib/resources/templates/npm-library/template/README.md +0 -201
- package/src/lib/resources/templates/npm-library/template/package.json +0 -78
- package/src/lib/resources/templates/web-app/config.json +0 -53
- package/src/lib/resources/templates/web-app/template/.aiwf/config.json +0 -54
- package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
- package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
- package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
- package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +0 -20
- package/src/lib/resources/templates/web-app/template/README.md +0 -151
- package/src/lib/resources/templates/web-app/template/index.html +0 -14
- package/src/lib/resources/templates/web-app/template/package.json +0 -44
- package/src/lib/resources/templates/web-app/template/postcss.config.js +0 -6
- package/src/lib/resources/templates/web-app/template/public/vite.svg +0 -1
- package/src/lib/resources/templates/web-app/template/src/App.tsx +0 -21
- package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
- package/src/lib/resources/templates/web-app/template/src/index.css +0 -60
- package/src/lib/resources/templates/web-app/template/src/main.tsx +0 -10
- package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +0 -89
- package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +0 -25
- package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
- package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +0 -9
- package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +0 -1
- package/src/lib/resources/templates/web-app/template/tailwind.config.js +0 -30
- package/src/lib/resources/templates/web-app/template/tsconfig.json +0 -37
- package/src/lib/resources/templates/web-app/template/tsconfig.node.json +0 -10
- package/src/lib/resources/templates/web-app/template/vite.config.ts +0 -23
- package/src/lib/resources/utils/background-monitor.js +0 -223
- package/src/lib/resources/utils/compression-metrics.js +0 -1031
- package/src/lib/resources/utils/compression-strategies.js +0 -557
- package/src/lib/resources/utils/content-normalizer.js +0 -455
- package/src/lib/resources/utils/context-compressor.js +0 -583
- package/src/lib/resources/utils/context-rule-parser.js +0 -180
- package/src/lib/resources/utils/context-token-monitor.js +0 -463
- package/src/lib/resources/utils/context-update-manager.js +0 -502
- package/src/lib/resources/utils/git-utils.js +0 -220
- package/src/lib/resources/utils/importance-classifier.js +0 -645
- package/src/lib/resources/utils/information-filter.js +0 -710
- package/src/lib/resources/utils/persona-aware-compressor.js +0 -598
- package/src/lib/resources/utils/prompt-injector.js +0 -242
- package/src/lib/resources/utils/simplified-evaluator.js +0 -119
- package/src/lib/resources/utils/text-summarizer.js +0 -492
- package/src/lib/resources/utils/token-counter.js +0 -177
- package/src/lib/resources/utils/token-monitor.js +0 -484
- package/src/lib/resources/utils/token-reporter.js +0 -452
- package/src/lib/resources/utils/token-storage.js +0 -433
- package/src/lib/resources/utils/token-tracker.js +0 -283
- package/src/lib/rollback-manager.js +0 -418
- package/src/lib/state/priority-calculator.js +0 -217
- package/src/lib/state/state-index.js +0 -155
- package/src/lib/state/task-scanner.js +0 -328
- package/src/lib/task-analyzer.js +0 -599
- package/src/lib/template-cache-system.js +0 -559
- package/src/lib/template-downloader.js +0 -467
- package/src/lib/template-version-manager.js +0 -491
- package/src/lib/token-optimizer.js +0 -517
- package/src/lib/validator.js +0 -376
- package/src/utils/checkpoint-manager.js +0 -435
- package/src/utils/engineering-guard.js +0 -399
- package/src/utils/language-utils.js +0 -331
- package/src/utils/messages.js +0 -166
- package/src/utils/paths.js +0 -112
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# AIWF Spec validation — updated 2026-10-03
|
|
2
|
+
|
|
3
|
+
Verified on Node.js 22.23.1 and Python 3.14.4. This record covers the local implementation and packaging, not live model execution or a generated application.
|
|
4
|
+
|
|
5
|
+
| Check | Fresh result |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `npm run test:spec` | 61 tests passed; 0 failed/skipped. `npm test` runs the same suite. Includes methodology-core/default-package selection, legacy exclusion and npm-bin symlink execution, spawned CLI calls, malformed pins/evidence, init preservation, drift, log hashes, symlink/output boundaries, all four optional stack installs, source provenance and installed parser self-test. |
|
|
8
|
+
| `npm run test:spec-upstream` | All three imported Python self-tests passed. |
|
|
9
|
+
| `npm run validate:spec-plugin` | 31 unchanged upstream skills across 5 methodology/stack plugins + 1 AIWF workflow extension; 71 imported files match original SHA256 values. The core NOTICE has one recorded attribution addition. All manifests, bundled references, marketplace and package entries validate. |
|
|
10
|
+
| `npm run validate:spec-example` | 0 errors, 0 warnings, 0 information findings; no lint baseline accepted. |
|
|
11
|
+
| Strict UC validator | 1 worked-example file; 0 errors, 0 warnings. |
|
|
12
|
+
| `spec_lint.py --trace` | FR-001 → UC-001 → BR-001 → TC-001. Document trace only. |
|
|
13
|
+
| Fresh-root smoke | init → filled example → lint → pin → check → packet → saved readback succeeded. 7 spec files; modified UC detected and stale packet generation rejected; restored original returns in sync. |
|
|
14
|
+
| Syntax/static checks | All retained Node source/scripts/tests pass `node --check`; `npm run check:deps` checks literal imports and local paths across 5 source files without external dependencies. `git diff --check` passes. No external linter or TypeScript target is declared. |
|
|
15
|
+
| Package inspection | A real `npm pack --json` final tarball contains 129 files (including the full-test report and captured fixture), all 32 skill manifests and complete plugin resources/rules/agent prompts/LICENSE/NOTICE; no legacy plugins or entry points. Offline installation into a clean temporary project installs only AIWF, without external dependencies. Its npm bin, library/validators and Codex installer run successfully. No npm publication performed. |
|
|
16
|
+
|
|
17
|
+
## Saved demonstration
|
|
18
|
+
|
|
19
|
+
[Review packet](evidence/example-review-packet.json) embeds the actual structural lint and AIWF regression output, along with two reported passes and one `not_run` application check. [Spec pin](evidence/example-spec-pin.json) records the example's 7 file hashes. The saved packet was read back and its status/digest/check counts verified.
|
|
20
|
+
|
|
21
|
+
This demonstration retains the first-slice 43-test log. The later original-preserving import was checked separately with the 57-test run recorded above; the saved example is not a current stack application or model run.
|
|
22
|
+
|
|
23
|
+
The saved packet also retains the command paths actually used at that time, including `plugins/aiwf-spec/skills/spec-review/scripts/spec_lint.py`. Following the core-package correction, the equivalent current path is `plugins/aiwf-core/skills/spec-review/scripts/spec_lint.py`, as shown in the current example guide. Historical command/evidence records are not rewritten to imply a later execution.
|
|
24
|
+
|
|
25
|
+
The example digest is `da872a517e79e8d54791085831b5db5ca9dca67bbb52fcec67c061f87d16645b`. The example shows an imagined expense workflow; there is no expense app implementation. These artifacts demonstrate the recording format and local tool behavior, not expense-feature acceptance.
|
|
26
|
+
|
|
27
|
+
## Historical legacy baseline — before removal
|
|
28
|
+
|
|
29
|
+
`npm test -- --runInBand --coverage=false` yields **13 failed suites / 2 passed suites; 34 failed / 78 passed / 20 skipped tests**. A separate export of unmodified HEAD `19492b0`, using the same installed dependencies, yields the identical failing suite list and counts. Typical existing failures reference missing `index.js`, persona/context modules, and an obsolete bin location. Legacy tests also report open handles.
|
|
30
|
+
|
|
31
|
+
This comparison establishes an unchanged observed legacy failure set at that earlier revision, not that all legacy behavior was correct. On 2026-10-03 the user requested legacy removal: these modules, obsolete tests and Jest setup were removed, and npm test now runs the retained spec-workflow suite. The old test counts above are historical evidence, not current failures or fixes.
|
|
32
|
+
|
|
33
|
+
There is no TypeScript/typecheck target or external ESLint dependency. The unused legacy ESLint configuration was removed. Syntax, literal import/dependency and whitespace checks above are the static checks used for the current package.
|
|
34
|
+
|
|
35
|
+
## Unverified gates
|
|
36
|
+
|
|
37
|
+
- Broad automatic skill routing across arbitrary requests and stack implementation. Bounded explicit Codex/Claude skill execution is now verified in [FULL-TEST-2026-10-03.md](FULL-TEST-2026-10-03.md).
|
|
38
|
+
- One actual application's implementation, runtime behavior and stakeholder acceptance.
|
|
39
|
+
- Sprintable Doc upload/readback, report evidence, approval flow, concurrency/retry/version invalidation.
|
|
40
|
+
- CI execution queue, unattended retries/resume, safe merge and deployment.
|
|
41
|
+
- Parser behavior on older supported Node/Python versions; Korean semantic completeness.
|
|
42
|
+
|
|
43
|
+
No production data changed; no deployment, remote publication or approval was performed.
|
|
44
|
+
|
|
45
|
+
## Independent review integration
|
|
46
|
+
|
|
47
|
+
Resolved the installer’s inconsistent sibling references by rewriting command and explicit skill-name references throughout copied Markdown, including bundled references. Added a regression check. Added local hashes for modified upstream resources and recorded the package-wide Node >=20 compatibility change in CHANGELOG. Main also added regressions for ordinary Todo product names and notes incorrectly satisfying UC/TC minimums.
|
|
48
|
+
|
|
49
|
+
## Original-preserving import follow-up
|
|
50
|
+
|
|
51
|
+
The user's follow-up requests original skill preservation. Verified the live upstream HEAD with `git ls-remote`: `065dadda0f696c29ff2bacbda31b38152082e6fa` remains latest at this check. Restored all seven core SKILL.md files to their original bytes, moving AIWF host guidance into the separate workflow skill. Imported all 24 stack skills, nested resources, rules and the two coverage-agent prompts unchanged. Recorded versions, original authors and per-file hashes in each plugin's UPSTREAM.json.
|
|
52
|
+
|
|
53
|
+
Before implementation, new core/stack preservation and selection tests failed on modified/missing source and unsupported installation. After implementation, all 57 tests pass. Stack hash tests also compare the imported files directly against the pinned upstream checkout available in this session. The validator now checks upstream SKILL.md hashes, not just their notices. Installed copies receive only name/reference mappings; source files in this repository remain original. All four stack installs, unknown stack rejection, dry-run and existing-core/stack conflict preservation are covered.
|
|
54
|
+
|
|
55
|
+
Separate review and live host/model checks remain distinct. The imported coverage-agent prompt is bundled, but installing a file does not register a native Codex custom agent. The wrapper documents host mapping; no independent reviewer execution is implied by these installation tests.
|
|
56
|
+
|
|
57
|
+
A separate read-only reviewer checked the installer, validator, workflow, plugin metadata and packaging declarations and found no blocking issue. Documentation findings (stack discovery and non-Markdown example references) are addressed in the skill guide. A future upstream skill containing its own `rules/` or `agents/` folder will require an explicit resource-conflict policy before updating that import; the current pinned inventory has no such overlap.
|
|
58
|
+
|
|
59
|
+
## Methodology core package correction — 2026-10-03
|
|
60
|
+
|
|
61
|
+
The seven upstream core skills were present under aiwf-spec, but aiwf-core still pointed to legacy session/YOLO/task commands. Corrected this package boundary: aiwf-core is now the primary marketplace package with the upstream 2.19.0 version and original author; aiwf-spec contains only the AIWF workflow extension. The core skill files, references and validators moved without byte changes. Existing legacy-core files are preserved under aiwf-core-legacy; the local CLI remains aiwf-spec and installed Codex names remain unchanged.
|
|
62
|
+
|
|
63
|
+
New regressions fail before correction and pass afterward. All 59 targeted tests, all three original Python self-tests, the strict example lint and source/manifests validator pass. Default Codex installation includes core's seven skills and the wrapper's one skill, with optional stacks unchanged. The package test/readback confirms core and legacy files ship. Existing installations are not overwritten; users installing from the marketplace should choose aiwf-core first and install aiwf-spec only when the workflow extension is wanted.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## Legacy framework removal — 2026-10-03
|
|
67
|
+
|
|
68
|
+
This supersedes the legacy-preservation choice in the preceding package correction. Removed 627 tracked legacy files: core-legacy/dev/experts/tools plugins, old CLI/install/runtime helpers, multilingual command collections, duplicate skills/rules, old documentation and Jest suites/configuration. Only tracked repository files were deleted; consuming-project data, local runtime state and Git history were left untouched. The root remains a marketplace, with six plugins and no all-in-one root plugin manifest. npm metadata now exposes only aiwf-spec and the spec-workflow library, with no external Node dependencies; the lockfile contains only the root package.
|
|
69
|
+
|
|
70
|
+
The package-inventory regression failed before removal and passes afterward. A clean tarball installation exposed a CLI symlink-entry bug: invoking the npm bin returned silently because the path differed from import.meta.url. A new help/init regression reproduced that failure, and resolving the entry path fixes it. All 60 current regressions, all three original Python self-tests, strict example lint, provenance/import checks and Node syntax checks pass. The 31 upstream skills and 71 unchanged imported resources retain their recorded original hashes; the only imported-source modification remains the core NOTICE attribution.
|
|
71
|
+
|
|
72
|
+
The installed npm binary completed init → example structural lint → pin → check → packet → saved packet readback. The installed Codex installer then copied 13 skills (core + workflow + NestJS/Next.js) into the temporary project, and all three installed Python parser self-tests passed. The review packet stayed awaiting_review. This confirms package execution and recording, not live-model implementation, application acceptance or Sprintable integration. Existing historical packet logs/commands were not rewritten.
|
|
73
|
+
|
|
74
|
+
A separate read-only reviewer found no blocking issue in the retained imports, plugin/package inventory, CLI entry fix, provenance and current guidance. The reviewer reran the current regressions and local validators; the packaged installation smoke was assessed from this session's recorded results. All 17 current guide files have resolving local Markdown links, and importing the installed npm library by package name succeeds.
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
## Full behavior test follow-up — 2026-10-03
|
|
78
|
+
|
|
79
|
+
[Full test report](FULL-TEST-2026-10-03.md) records fresh regression, all-stack package installs, preservation/failure checks and actual Codex/Claude skill execution. Fixed directory packet output errors with a coded refusal; 61 regressions now pass. A live Codex-generated service fixture passes 12 tests independently, and its recorded packet logs/spec hashes were read back. Claude structural lint passes, with three advisory semantic warnings remaining in the example. These bounded runs do not establish full stack applications, UI/login or stakeholder acceptance.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"collected_at": "2026-10-02T08:16:54.916Z",
|
|
4
|
+
"status": "awaiting_review",
|
|
5
|
+
"acceptance": "not_recorded",
|
|
6
|
+
"remote_sync": "not_attempted",
|
|
7
|
+
"spec": {
|
|
8
|
+
"digest": "da872a517e79e8d54791085831b5db5ca9dca67bbb52fcec67c061f87d16645b",
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "docs/entity_model.md",
|
|
12
|
+
"sha256": "edb9c35d17e73885346df31782089088c4dfe26e82f8b0cd2463e9febedc9d4e",
|
|
13
|
+
"bytes": 1474,
|
|
14
|
+
"kind": "required"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"path": "docs/glossary.md",
|
|
18
|
+
"sha256": "093fc46be4b64534e670c046d935fce2287246190390d119f4c2edf43b7aedd9",
|
|
19
|
+
"bytes": 560,
|
|
20
|
+
"kind": "required"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "docs/requirements.md",
|
|
24
|
+
"sha256": "d6190c0cfe5b43cd1fa7ba46fb252a558cc2854b0a5523cce7c2cf34db2c5254",
|
|
25
|
+
"bytes": 471,
|
|
26
|
+
"kind": "required"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "docs/test_cases/TC-001-submit-expense.md",
|
|
30
|
+
"sha256": "f47b50f116ac8af187daf8915382c3a7e084d0110840b8b2cd0413f5d9a5d3b2",
|
|
31
|
+
"bytes": 1529,
|
|
32
|
+
"kind": "test_case"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "docs/use_cases.puml",
|
|
36
|
+
"sha256": "b693ab2ddf7896b404a5193acd1fe65c3b4e0bb768df56a54360dc0f8c3a412d",
|
|
37
|
+
"bytes": 208,
|
|
38
|
+
"kind": "required"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"path": "docs/use_cases/UC-001-submit-expense.md",
|
|
42
|
+
"sha256": "e19c5b44acb98dcfb6c4992b1be16520cfe83f7dcb7dee04415b59cedd0590cf",
|
|
43
|
+
"bytes": 1812,
|
|
44
|
+
"kind": "use_case"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"path": "docs/vision.md",
|
|
48
|
+
"sha256": "52fabfa494c1419bc1045f3404e26478a523a52c0f9910c40ac0199a7a9455fd",
|
|
49
|
+
"bytes": 516,
|
|
50
|
+
"kind": "required"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"pin": {
|
|
55
|
+
"digest": "da872a517e79e8d54791085831b5db5ca9dca67bbb52fcec67c061f87d16645b",
|
|
56
|
+
"matched": true
|
|
57
|
+
},
|
|
58
|
+
"drift": {
|
|
59
|
+
"added": [],
|
|
60
|
+
"changed": [],
|
|
61
|
+
"deleted": []
|
|
62
|
+
},
|
|
63
|
+
"git": null,
|
|
64
|
+
"evidence": {
|
|
65
|
+
"trust": "reported_untrusted",
|
|
66
|
+
"checks_summary": {
|
|
67
|
+
"total": 3,
|
|
68
|
+
"passed": 2,
|
|
69
|
+
"failed": 0,
|
|
70
|
+
"not_run": 1
|
|
71
|
+
},
|
|
72
|
+
"checks": [
|
|
73
|
+
{
|
|
74
|
+
"name": "Specification structure and references",
|
|
75
|
+
"command": "python3 plugins/aiwf-spec/skills/spec-review/scripts/spec_lint.py --docs <smoke>/docs --strict --no-baseline",
|
|
76
|
+
"status": "passed",
|
|
77
|
+
"log": {
|
|
78
|
+
"path": "artifacts/spec-lint.log",
|
|
79
|
+
"sha256": "d891432dfaf07be0bf54139efeb64d926f404eaf302147f73d96b624b99cb67a",
|
|
80
|
+
"bytes": 62,
|
|
81
|
+
"content": "0 error(s), 0 warning(s), 0 info(s), 0 suppressed by baseline\n"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "AIWF CLI regression tests",
|
|
86
|
+
"command": "npm run test:spec (AIWF checkout)",
|
|
87
|
+
"status": "passed",
|
|
88
|
+
"log": {
|
|
89
|
+
"path": "artifacts/spec-tests.log",
|
|
90
|
+
"sha256": "55979ee00c532db39ba76043c71ed01c426ca2a2698036ba6a306157e18d5d87",
|
|
91
|
+
"bytes": 8670,
|
|
92
|
+
"content": "\n> aiwf@0.3.24 test:spec\n> node --test tests/spec-workflow/*.test.mjs\n\nTAP version 13\n# Subtest: dry run writes nothing, real install retains parser siblings and attribution\nok 1 - dry run writes nothing, real install retains parser siblings and attribution\n ---\n duration_ms: 90.812084\n type: 'test'\n ...\n# Subtest: existing skill prevents partial install and preserves user content\nok 2 - existing skill prevents partial install and preserves user content\n ---\n duration_ms: 1.12275\n type: 'test'\n ...\n# Subtest: symlinked skill parent and dangling destination are rejected\nok 3 - symlinked skill parent and dangling destination are rejected\n ---\n duration_ms: 1.035125\n type: 'test'\n ...\n# Subtest: installer CLI rejects unknown flags and missing project\nok 4 - installer CLI rejects unknown flags and missing project\n ---\n duration_ms: 68.946625\n type: 'test'\n ...\n# Subtest: installed workflow and reference documents use the prefixed sibling names\nok 5 - installed workflow and reference documents use the prefixed sibling names\n ---\n duration_ms: 14.055625\n type: 'test'\n ...\n# Subtest: cli init prints machine JSON and exits zero\nok 6 - cli init prints machine JSON and exits zero\n ---\n duration_ms: 28.77975\n type: 'test'\n ...\n# Subtest: cli check --json reports ok on a pinned spec and nonzero drift afterwards\nok 7 - cli check --json reports ok on a pinned spec and nonzero drift afterwards\n ---\n duration_ms: 101.797625\n type: 'test'\n ...\n# Subtest: cli check exits nonzero when no pin exists\nok 8 - cli check exits nonzero when no pin exists\n ---\n duration_ms: 28.127458\n type: 'test'\n ...\n# Subtest: cli packet writes a review packet and refuses to overwrite without --force\nok 9 - cli packet writes a review packet and refuses to overwrite without --force\n ---\n duration_ms: 110.323083\n type: 'test'\n ...\n# Subtest: cli rejects unknown options and missing required arguments with nonzero exit\nok 10 - cli rejects unknown options and missing required arguments with nonzero exit\n ---\n duration_ms: 97.717417\n type: 'test'\n ...\n# Subtest: cli help exits zero and documents the commands\nok 11 - cli help exits zero and documents the commands\n ---\n duration_ms: 22.26375\n type: 'test'\n ...\n# Subtest: cli pin is blocked on Draft templates and exits nonzero\nok 12 - cli pin is blocked on Draft templates and exits nonzero\n ---\n duration_ms: 25.360375\n type: 'test'\n ...\n# Subtest: cli packet rejects an --output escaping the root or a symlinked output\nok 13 - cli packet rejects an --output escaping the root or a symlinked output\n ---\n duration_ms: 69.4035\n type: 'test'\n ...\n# Subtest: cli check on a tampered pin exits nonzero with pin_invalid JSON\nok 14 - cli check on a tampered pin exits nonzero with pin_invalid JSON\n ---\n duration_ms: 29.228875\n type: 'test'\n ...\n# Subtest: init creates Draft templates and empty use_case/test_case directories\nok 15 - init creates Draft templates and empty use_case/test_case directories\n ---\n duration_ms: 2.797125\n type: 'test'\n ...\n# Subtest: init is idempotent and never overwrites existing user files\nok 16 - init is idempotent and never overwrites existing user files\n ---\n duration_ms: 1.380042\n type: 'test'\n ...\n# Subtest: init rejects a symlinked artifact directory\nok 17 - init rejects a symlinked artifact directory\n ---\n duration_ms: 0.353375\n type: 'test'\n ...\n# Subtest: init rejects a symlinked required artifact file\nok 18 - init rejects a symlinked required artifact file\n ---\n duration_ms: 0.441666\n type: 'test'\n ...\n# Subtest: pin is blocked while templates remain Draft\nok 19 - pin is blocked while templates remain Draft\n ---\n duration_ms: 2.013375\n type: 'test'\n ...\n# Subtest: pin requires at least one use case and one test case\nok 20 - pin requires at least one use case and one test case\n ---\n duration_ms: 3.200333\n type: 'test'\n ...\n# Subtest: pin is deterministic and idempotent for unchanged content\nok 21 - pin is deterministic and idempotent for unchanged content\n ---\n duration_ms: 16.138083\n type: 'test'\n ...\n# Subtest: pin refuses to overwrite without --refresh and honors --refresh\nok 22 - pin refuses to overwrite without --refresh and honors --refresh\n ---\n duration_ms: 23.107208\n type: 'test'\n ...\n# Subtest: check reports ok, drift (added/changed/deleted), draft, and missing pin\nok 23 - check reports ok, drift (added/changed/deleted), draft, and missing pin\n ---\n duration_ms: 40.728333\n type: 'test'\n ...\n# Subtest: findDraftMarkers is case-insensitive and covers NEEDS CLARIFICATION\nok 24 - findDraftMarkers is case-insensitive and covers NEEDS CLARIFICATION\n ---\n duration_ms: 0.829625\n type: 'test'\n ...\n# Subtest: parseEvidence rejects malformed evidence and unknown fields\nok 25 - parseEvidence rejects malformed evidence and unknown fields\n ---\n duration_ms: 0.3385\n type: 'test'\n ...\n# Subtest: packet embeds log digest/body, preserves failed/not_run, and never claims approval\nok 26 - packet embeds log digest/body, preserves failed/not_run, and never claims approval\n ---\n duration_ms: 16.761709\n type: 'test'\n ...\n# Subtest: packet refuses when the pin is missing or the spec drifts\nok 27 - packet refuses when the pin is missing or the spec drifts\n ---\n duration_ms: 14.490958\n type: 'test'\n ...\n# Subtest: packet rejects log paths that escape the root or traverse a symlink\nok 28 - packet rejects log paths that escape the root or traverse a symlink\n ---\n duration_ms: 20.783666\n type: 'test'\n ...\n# Subtest: packet rejects an oversized log\nok 29 - packet rejects an oversized log\n ---\n duration_ms: 15.55925\n type: 'test'\n ...\n# Subtest: pin snapshots docs/processes/*.bpmn and tracks the optional lint baseline\nok 30 - pin snapshots docs/processes/*.bpmn and tracks the optional lint baseline\n ---\n duration_ms: 14.856333\n type: 'test'\n ...\n# Subtest: lint baseline is tracked but not scanned for draft markers\nok 31 - lint baseline is tracked but not scanned for draft markers\n ---\n duration_ms: 8.42125\n type: 'test'\n ...\n# Subtest: Reviewed status is recorded, not treated as a blocker (no approval claimed)\nok 32 - Reviewed status is recorded, not treated as a blocker (no approval claimed)\n ---\n duration_ms: 7.136166\n type: 'test'\n ...\n# Subtest: pin records optional git HEAD and dirty status when inside a repository\nok 33 - pin records optional git HEAD and dirty status when inside a repository\n ---\n duration_ms: 67.002041\n type: 'test'\n ...\n# Subtest: check rejects a tampered pin digest and packet refuses to build\nok 34 - check rejects a tampered pin digest and packet refuses to build\n ---\n duration_ms: 7.570666\n type: 'test'\n ...\n# Subtest: validateStoredPin rejects bad schema, duplicate paths, bad path, hash, bytes, kind, and null files\nok 35 - validateStoredPin rejects bad schema, duplicate paths, bad path, hash, bytes, kind, and null files\n ---\n duration_ms: 6.587291\n type: 'test'\n ...\n# Subtest: check rejects a self-consistent fake pin that omits required or minimum artifacts\nok 36 - check rejects a self-consistent fake pin that omits required or minimum artifacts\n ---\n duration_ms: 11.700208\n type: 'test'\n ...\n# Subtest: check flags artifacts missing from disk as out of sync\nok 37 - check flags artifacts missing from disk as out of sync\n ---\n duration_ms: 11.545708\n type: 'test'\n ...\n# Subtest: pin validates the existing pin instead of trusting a matching digest\nok 38 - pin validates the existing pin instead of trusting a matching digest\n ---\n duration_ms: 23.559833\n type: 'test'\n ...\n# Subtest: check returns a uniform shape for missing and invalid pins\nok 39 - check returns a uniform shape for missing and invalid pins\n ---\n duration_ms: 6.927167\n type: 'test'\n ...\n# Subtest: packet marks pin.matched true only within an in-sync spec\nok 40 - packet marks pin.matched true only within an in-sync spec\n ---\n duration_ms: 13.02875\n type: 'test'\n ...\n# Subtest: packet rejects a non-UTF-8 log instead of embedding a misleading body\nok 41 - packet rejects a non-UTF-8 log instead of embedding a misleading body\n ---\n duration_ms: 11.643208\n type: 'test'\n ...\n# Subtest: ordinary Todo product names are not unresolved drafting markers\nok 42 - ordinary Todo product names are not unresolved drafting markers\n ---\n duration_ms: 1.985875\n type: 'test'\n ...\n# Subtest: folder notes do not satisfy the required UC and TC minimums\nok 43 - folder notes do not satisfy the required UC and TC minimums\n ---\n duration_ms: 2.797958\n type: 'test'\n ...\n1..43\n# tests 43\n# suites 0\n# pass 43\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 551.798542\n"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "Expense application behavior",
|
|
97
|
+
"command": "Application pilot not implemented",
|
|
98
|
+
"status": "not_run"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"unverified": [
|
|
102
|
+
"Expense application has not been implemented or tested",
|
|
103
|
+
"Live Claude/Codex skill invocation not tested",
|
|
104
|
+
"Sprintable synchronization not implemented",
|
|
105
|
+
"Business acceptance not recorded"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"limitations": [
|
|
109
|
+
"Recorded check output is not proof of business acceptance.",
|
|
110
|
+
"Check statuses are reported by the submitter and are not independently verified by this tool.",
|
|
111
|
+
"Remote synchronization was not attempted.",
|
|
112
|
+
"Human acceptance has not been recorded.",
|
|
113
|
+
"Structural and semantic lint is not performed by this tool; it remains an upstream step."
|
|
114
|
+
]
|
|
115
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"spec_digest": "da872a517e79e8d54791085831b5db5ca9dca67bbb52fcec67c061f87d16645b",
|
|
4
|
+
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": "docs/entity_model.md",
|
|
7
|
+
"sha256": "edb9c35d17e73885346df31782089088c4dfe26e82f8b0cd2463e9febedc9d4e",
|
|
8
|
+
"bytes": 1474,
|
|
9
|
+
"kind": "required"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "docs/glossary.md",
|
|
13
|
+
"sha256": "093fc46be4b64534e670c046d935fce2287246190390d119f4c2edf43b7aedd9",
|
|
14
|
+
"bytes": 560,
|
|
15
|
+
"kind": "required"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "docs/requirements.md",
|
|
19
|
+
"sha256": "d6190c0cfe5b43cd1fa7ba46fb252a558cc2854b0a5523cce7c2cf34db2c5254",
|
|
20
|
+
"bytes": 471,
|
|
21
|
+
"kind": "required"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "docs/test_cases/TC-001-submit-expense.md",
|
|
25
|
+
"sha256": "f47b50f116ac8af187daf8915382c3a7e084d0110840b8b2cd0413f5d9a5d3b2",
|
|
26
|
+
"bytes": 1529,
|
|
27
|
+
"kind": "test_case"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "docs/use_cases.puml",
|
|
31
|
+
"sha256": "b693ab2ddf7896b404a5193acd1fe65c3b4e0bb768df56a54360dc0f8c3a412d",
|
|
32
|
+
"bytes": 208,
|
|
33
|
+
"kind": "required"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "docs/use_cases/UC-001-submit-expense.md",
|
|
37
|
+
"sha256": "e19c5b44acb98dcfb6c4992b1be16520cfe83f7dcb7dee04415b59cedd0590cf",
|
|
38
|
+
"bytes": 1812,
|
|
39
|
+
"kind": "use_case"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"path": "docs/vision.md",
|
|
43
|
+
"sha256": "52fabfa494c1419bc1045f3404e26478a523a52c0f9910c40ac0199a7a9455fd",
|
|
44
|
+
"bytes": 516,
|
|
45
|
+
"kind": "required"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
## Spec Review: whole project
|
|
2
|
+
|
|
3
|
+
**Lint:** 0 errors, 0 warnings, 0 infos, 0 suppressed by baseline. Part A passes with exit code 0.
|
|
4
|
+
**Semantic:** Not rerun, as you asked. The earlier semantic review found 3 warnings, and I'm carrying that conclusion forward unchanged.
|
|
5
|
+
|
|
6
|
+
### Lint findings (deterministic)
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
0 error(s), 0 warning(s), 0 info(s), 0 suppressed by baseline
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
I ran the checker as `python3 scripts/spec_lint.py --docs docs --strict --no-baseline`, with no `--trace`, no pipes and no appended commands. The output above is its actual output. I didn't read exit status from the shell, so the exit code 0 comes from the zero-findings output. I didn't edit any files.
|
|
13
|
+
|
|
14
|
+
### Semantic findings (advisory)
|
|
15
|
+
|
|
16
|
+
I didn't repeat the semantic review. The earlier review's 3 warnings are still open, because nothing in this conversation shows them declined or accepted. I don't have their details here, so I can't list them by file, line and element.
|
|
17
|
+
|
|
18
|
+
### Verdict
|
|
19
|
+
|
|
20
|
+
**Ready for Approved:** no. Lint passes, but the 3 earlier semantic warnings are still open.
|
|
21
|
+
|
|
22
|
+
Those warnings need to be resolved or explicitly accepted first. If you give me the earlier report, I can map each warning to the command that fixes it, such as `/use-case-spec UC-XXX`. This fixture run is not stakeholder approval.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
## Spec Review: whole project
|
|
2
|
+
|
|
3
|
+
Scope: all of `docs/`, which holds one use case (UC-001), one test case (TC-001) and the supporting documents.
|
|
4
|
+
|
|
5
|
+
**Lint:** 0 errors, 0 warnings, 0 info, no baseline used. The checker printed only the trace output.
|
|
6
|
+
**Semantic:** 3 warnings, 3 infos. These are advisory.
|
|
7
|
+
|
|
8
|
+
### Lint findings (deterministic)
|
|
9
|
+
|
|
10
|
+
The checker ran with `--strict --no-baseline --trace`. It printed no findings, only the trace matrix below. The tool result showed no exit code. I read the empty findings list as exit 0, but I can't confirm it.
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
## Requirements → Use Cases → Business Rules → Test Cases
|
|
14
|
+
|
|
15
|
+
| Requirement | Req. Status | Use Case | UC Status | Business Rules | Test Cases |
|
|
16
|
+
|-------------|-------------|-----------------|-----------|----------------|------------|
|
|
17
|
+
| FR-001 | Open | UC-001 지출 내역 제출 | Reviewed | BR-001 | TC-001 |
|
|
18
|
+
|
|
19
|
+
## Test Cases → Process → Use Cases
|
|
20
|
+
|
|
21
|
+
| Test Case | Process | Use Cases |
|
|
22
|
+
|-----------|---------|-----------|
|
|
23
|
+
| TC-001 | — | UC-001 |
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Semantic findings (advisory)
|
|
27
|
+
|
|
28
|
+
Part B is not deterministic. A second run may phrase or rank these findings differently.
|
|
29
|
+
|
|
30
|
+
| Severity | File:Line | Element | Check | Finding |
|
|
31
|
+
|----------|-----------|---------|-------|---------|
|
|
32
|
+
| warning | docs/use_cases/UC-001-submit-expense.md:17 | UC-001 Precondition 2 | Trigger and preconditions | "금액과 사용 내용을 알고 있다" is knowledge in the actor's head, which the system can't establish or check. It is also the input given in step 3. |
|
|
33
|
+
| warning | docs/use_cases/UC-001-submit-expense.md:41-45 | UC-001 A2 / Failure Postconditions | Completeness | A2 only says the system "알린다". Failure postconditions at lines 56-57 are fine, but A2 doesn't say whether the submitter can retry or what state the input is left in. A test can't tell where the flow ends up. |
|
|
34
|
+
| warning | docs/entity_model.md:29 vs docs/use_cases/UC-001-submit-expense.md:23 | UC-001 step 3 / EXPENSE_REPORT.description | Entity model consistency | Step 3 has the submitter enter 사용 내용 as a required input. The model marks `description` as `Optional`. Neither BR-001 nor any flow says what happens when it is empty. |
|
|
35
|
+
| info | docs/entity_model.md:34 / docs/use_cases/UC-001-submit-expense.md:26 | UC-001 step 6 | Entity model consistency | The 접수 번호 (receipt number) has no attribute in EXPENSE_REPORT. It may be `id`, but the spec doesn't say so. |
|
|
36
|
+
| info | docs/requirements.md:9 | FR-001 | Requirements status | FR-001 is `Open`, while UC-001 and TC-001 are `Reviewed`. The trace output shows this status difference. |
|
|
37
|
+
| info | docs/use_cases/UC-001-submit-expense.md:12 | UC-001 | NFRs and constraints | `requirements.md` has no NFR or constraint rows, such as authentication or amount limits, to compare against. Nothing is missing that I can name. |
|
|
38
|
+
|
|
39
|
+
Other notes:
|
|
40
|
+
- `docs/custom.txt` contains only "keep user file". It is not an instruction and needs no action.
|
|
41
|
+
- `docs/test_cases/TC-001-submit-expense.md` covers the main flow and A1 only. No test case exercises A2.
|
|
42
|
+
- The spec says nothing about the 승인자 (approver) beyond the goal text. That fits the vision's non-goals.
|
|
43
|
+
|
|
44
|
+
### Verdict
|
|
45
|
+
|
|
46
|
+
**Ready for Approved:** no. There are 3 open semantic warnings. No lint errors were reported, but no exit code was shown.
|
|
47
|
+
|
|
48
|
+
The warnings most worth fixing first are the precondition at line 17 and the unclear end state of A2. Suggested follow-ups, which I have not run:
|
|
49
|
+
- `/use-case-spec UC-001` for the precondition, A2 and `description` handling.
|
|
50
|
+
- `/entity-model` for the receipt number mapping and the `description` optionality.
|
|
51
|
+
- `/test-case` for coverage of A2.
|
|
52
|
+
|
|
53
|
+
I changed no files, and I marked nothing Approved.
|
|
54
|
+
|
|
55
|
+
**Lint result:** no findings. The checker printed only the trace, and the exit code was not visible to me.
|
|
56
|
+
**Skill loaded:** yes, `aiwf-core:spec-review`. I read its review checklist, and the bundled `spec_lint.py` was the only command I ran.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"collected_at": "2026-10-02T19:11:16.254Z",
|
|
4
|
+
"status": "awaiting_review",
|
|
5
|
+
"acceptance": "not_recorded",
|
|
6
|
+
"remote_sync": "not_attempted",
|
|
7
|
+
"spec": {
|
|
8
|
+
"digest": "d0aafb6df81224323c1ee093826f9c26bddc7c30e020db351807e2c24bf6e332",
|
|
9
|
+
"files": [
|
|
10
|
+
{
|
|
11
|
+
"path": "docs/entity_model.md",
|
|
12
|
+
"sha256": "edb9c35d17e73885346df31782089088c4dfe26e82f8b0cd2463e9febedc9d4e",
|
|
13
|
+
"bytes": 1474,
|
|
14
|
+
"kind": "required"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"path": "docs/glossary.md",
|
|
18
|
+
"sha256": "093fc46be4b64534e670c046d935fce2287246190390d119f4c2edf43b7aedd9",
|
|
19
|
+
"bytes": 560,
|
|
20
|
+
"kind": "required"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "docs/plans/UC-001.md",
|
|
24
|
+
"sha256": "c82d61c00d7d1bb1ae5fc69c7bb734977b4f4777e59e12ea5cc1a21201859347",
|
|
25
|
+
"bytes": 2438,
|
|
26
|
+
"kind": "plan"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "docs/requirements.md",
|
|
30
|
+
"sha256": "d6190c0cfe5b43cd1fa7ba46fb252a558cc2854b0a5523cce7c2cf34db2c5254",
|
|
31
|
+
"bytes": 471,
|
|
32
|
+
"kind": "required"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "docs/test_cases/TC-001-submit-expense.md",
|
|
36
|
+
"sha256": "f47b50f116ac8af187daf8915382c3a7e084d0110840b8b2cd0413f5d9a5d3b2",
|
|
37
|
+
"bytes": 1529,
|
|
38
|
+
"kind": "test_case"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"path": "docs/use_cases.puml",
|
|
42
|
+
"sha256": "b693ab2ddf7896b404a5193acd1fe65c3b4e0bb768df56a54360dc0f8c3a412d",
|
|
43
|
+
"bytes": 208,
|
|
44
|
+
"kind": "required"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"path": "docs/use_cases/UC-001-submit-expense.md",
|
|
48
|
+
"sha256": "e19c5b44acb98dcfb6c4992b1be16520cfe83f7dcb7dee04415b59cedd0590cf",
|
|
49
|
+
"bytes": 1812,
|
|
50
|
+
"kind": "use_case"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"path": "docs/vision.md",
|
|
54
|
+
"sha256": "52fabfa494c1419bc1045f3404e26478a523a52c0f9910c40ac0199a7a9455fd",
|
|
55
|
+
"bytes": 516,
|
|
56
|
+
"kind": "required"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"pin": {
|
|
61
|
+
"digest": "d0aafb6df81224323c1ee093826f9c26bddc7c30e020db351807e2c24bf6e332",
|
|
62
|
+
"matched": true
|
|
63
|
+
},
|
|
64
|
+
"drift": {
|
|
65
|
+
"added": [],
|
|
66
|
+
"changed": [],
|
|
67
|
+
"deleted": []
|
|
68
|
+
},
|
|
69
|
+
"git": null,
|
|
70
|
+
"evidence": {
|
|
71
|
+
"trust": "reported_untrusted",
|
|
72
|
+
"checks_summary": {
|
|
73
|
+
"total": 8,
|
|
74
|
+
"passed": 4,
|
|
75
|
+
"failed": 0,
|
|
76
|
+
"not_run": 4
|
|
77
|
+
},
|
|
78
|
+
"checks": [
|
|
79
|
+
{
|
|
80
|
+
"name": "lint",
|
|
81
|
+
"command": "python3 .agents/skills/aiwf-spec-review/scripts/spec_lint.py --docs docs --strict --no-baseline",
|
|
82
|
+
"status": "passed",
|
|
83
|
+
"log": {
|
|
84
|
+
"path": "artifacts/lint.log",
|
|
85
|
+
"sha256": "5b0af6693efc7cdf93a47254390b64d56bc34569f5f30eaef88c4d8d3a5a5549",
|
|
86
|
+
"bytes": 232,
|
|
87
|
+
"content": "command: python3 .agents/skills/aiwf-spec-review/scripts/spec_lint.py --docs docs --strict --no-baseline\nexit_code: 0\n--- stdout (verbatim) ---\n0 error(s), 0 warning(s), 0 info(s), 0 suppressed by baseline\n--- stderr (verbatim) ---\n"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "pin",
|
|
92
|
+
"command": "node /private/tmp/aiwf-comprehensive-5ih6czuw/consumer/node_modules/aiwf/src/cli/spec-cli.js pin --root .",
|
|
93
|
+
"status": "passed",
|
|
94
|
+
"log": {
|
|
95
|
+
"path": "artifacts/pin.log",
|
|
96
|
+
"sha256": "8cc7e1cda6eee52c200b89740b5807dd3a7ec3ea635a981eb3cb578140c40459",
|
|
97
|
+
"bytes": 270,
|
|
98
|
+
"content": "command: node /private/tmp/aiwf-comprehensive-5ih6czuw/consumer/node_modules/aiwf/src/cli/spec-cli.js pin --root .\nexit_code: 0\n--- stdout (verbatim) ---\nPinned 8 files (digest d0aafb6df81224323c1ee093826f9c26bddc7c30e020db351807e2c24bf6e332).\n--- stderr (verbatim) ---\n"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "tests",
|
|
103
|
+
"command": "node --test tests/expense.test.mjs",
|
|
104
|
+
"status": "passed",
|
|
105
|
+
"log": {
|
|
106
|
+
"path": "artifacts/tests.log",
|
|
107
|
+
"sha256": "0d2eda8736018069247e34e619ad8d88e33d0a6a5e45eeda444df8df6e842099",
|
|
108
|
+
"bytes": 2547,
|
|
109
|
+
"content": "command: node --test tests/expense.test.mjs\nexit_code: 0\n--- stdout (verbatim) ---\nTAP version 13\n# Subtest: UC-001 success persists amount, description, submitted state and receipt\nok 1 - UC-001 success persists amount, description, submitted state and receipt\n ---\n duration_ms: 2.32475\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects 0 without changing prior state\nok 2 - UC-001 BR-001/A1 rejects 0 without changing prior state\n ---\n duration_ms: 0.387625\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects -1 without changing prior state\nok 3 - UC-001 BR-001/A1 rejects -1 without changing prior state\n ---\n duration_ms: 0.129625\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects -100 without changing prior state\nok 4 - UC-001 BR-001/A1 rejects -100 without changing prior state\n ---\n duration_ms: 0.053334\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects NaN without changing prior state\nok 5 - UC-001 BR-001/A1 rejects NaN without changing prior state\n ---\n duration_ms: 0.103417\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects Infinity without changing prior state\nok 6 - UC-001 BR-001/A1 rejects Infinity without changing prior state\n ---\n duration_ms: 0.044\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects -Infinity without changing prior state\nok 7 - UC-001 BR-001/A1 rejects -Infinity without changing prior state\n ---\n duration_ms: 0.069208\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects 12000 without changing prior state\nok 8 - UC-001 BR-001/A1 rejects 12000 without changing prior state\n ---\n duration_ms: 0.072917\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects null without changing prior state\nok 9 - UC-001 BR-001/A1 rejects null without changing prior state\n ---\n duration_ms: 0.259125\n type: 'test'\n ...\n# Subtest: UC-001 BR-001/A1 rejects undefined without changing prior state\nok 10 - UC-001 BR-001/A1 rejects undefined without changing prior state\n ---\n duration_ms: 0.247458\n type: 'test'\n ...\n# Subtest: TC-001 service slice permits correction from -100 to 12000\nok 11 - TC-001 service slice permits correction from -100 to 12000\n ---\n duration_ms: 0.116417\n type: 'test'\n ...\n# Subtest: UC-001 A2 storage failure preserves earlier records and permits recovery\nok 12 - UC-001 A2 storage failure preserves earlier records and permits recovery\n ---\n duration_ms: 0.124667\n type: 'test'\n ...\n1..12\n# tests 12\n# suites 0\n# pass 12\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 39.374458\n--- stderr (verbatim) ---\n"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "check",
|
|
114
|
+
"command": "node /private/tmp/aiwf-comprehensive-5ih6czuw/consumer/node_modules/aiwf/src/cli/spec-cli.js check --root .",
|
|
115
|
+
"status": "passed",
|
|
116
|
+
"log": {
|
|
117
|
+
"path": "artifacts/check.log",
|
|
118
|
+
"sha256": "e444b544bc4e382a93411dab163fb1b897ddddc92eb5002f7c5f43c423757a12",
|
|
119
|
+
"bytes": 193,
|
|
120
|
+
"content": "command: node /private/tmp/aiwf-comprehensive-5ih6czuw/consumer/node_modules/aiwf/src/cli/spec-cli.js check --root .\nexit_code: 0\n--- stdout (verbatim) ---\nstatus: ok\n--- stderr (verbatim) ---\n"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "UI journey and displayed validation/receipt",
|
|
125
|
+
"command": "Not executed: outside authorized service smoke",
|
|
126
|
+
"status": "not_run"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "Login precondition",
|
|
130
|
+
"command": "Not executed: outside authorized service smoke",
|
|
131
|
+
"status": "not_run"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"name": "Stakeholder acceptance",
|
|
135
|
+
"command": "Not executed: outside authorized service smoke",
|
|
136
|
+
"status": "not_run"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "Full semantic review acceptance",
|
|
140
|
+
"command": "Not executed: outside authorized service smoke",
|
|
141
|
+
"status": "not_run"
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"unverified": [
|
|
145
|
+
"UI journey and displayed messages/receipt; TC-001 end-to-end browser flow not run.",
|
|
146
|
+
"Login/authentication and submitter identity not implemented or verified.",
|
|
147
|
+
"Stakeholder acceptance and full semantic acceptance not recorded; specifications remain Reviewed (FR-001 remains Open).",
|
|
148
|
+
"Durable persistence, Decimal(10,2), description length and submitter foreign keys are outside this in-memory service smoke.",
|
|
149
|
+
"Advisory model finding remains open: submitted status is absent from entity attributes; receipt/id mapping is implicit. See artifacts/semantic-review.md."
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"limitations": [
|
|
153
|
+
"Recorded check output is not proof of business acceptance.",
|
|
154
|
+
"Check statuses are reported by the submitter and are not independently verified by this tool.",
|
|
155
|
+
"Remote synchronization was not attempted.",
|
|
156
|
+
"Human acceptance has not been recorded.",
|
|
157
|
+
"Structural and semantic lint is not performed by this tool; it remains an upstream step."
|
|
158
|
+
]
|
|
159
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Process-local persistence for the bounded UC-001 smoke. */
|
|
2
|
+
export class InMemoryExpenseStore {
|
|
3
|
+
#records = [];
|
|
4
|
+
#failNext = false;
|
|
5
|
+
|
|
6
|
+
failNextWrite() {
|
|
7
|
+
this.#failNext = true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
insert(expense) {
|
|
11
|
+
// UC-001 A2: fail before mutation, preserving every earlier record.
|
|
12
|
+
if (this.#failNext) {
|
|
13
|
+
this.#failNext = false;
|
|
14
|
+
throw new Error('Expense persistence failed');
|
|
15
|
+
}
|
|
16
|
+
const record = structuredClone({
|
|
17
|
+
...expense,
|
|
18
|
+
receiptId: String(this.#records.length + 1),
|
|
19
|
+
});
|
|
20
|
+
this.#records.push(record);
|
|
21
|
+
return structuredClone(record);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
list() {
|
|
25
|
+
return structuredClone(this.#records);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function submitExpense(store, { amount, description = '' }) {
|
|
30
|
+
// UC-001 BR-001 / A1: no coercion or non-finite monetary amounts.
|
|
31
|
+
if (!Number.isFinite(amount) || amount <= 0) {
|
|
32
|
+
throw new RangeError('Amount must be a positive finite number');
|
|
33
|
+
}
|
|
34
|
+
return store.insert({
|
|
35
|
+
amount,
|
|
36
|
+
description,
|
|
37
|
+
status: 'submitted',
|
|
38
|
+
submitted_at: new Date().toISOString(),
|
|
39
|
+
});
|
|
40
|
+
}
|