phasegate 0.16.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +71 -39
- package/README.md +69 -9
- package/docs/ADR/ADR-013-story-reflection-gate.md +100 -0
- package/docs/guide/configuration.md +244 -7
- package/package.json +4 -2
- package/scripts/harness/adr-foundation/domain/ports/adr-document-parser-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/ports/adr-frontmatter-parser-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/ports/adr-repository-port.ts +1 -0
- package/scripts/harness/adr-foundation/domain/value-objects/adr-status.ts +6 -6
- package/scripts/harness/agent-integration/application/dto/handle-pre-tool-use-dto.ts +3 -1
- package/scripts/harness/agent-integration/application/usecases/handle-pre-tool-use-usecase.ts +108 -2
- package/scripts/harness/agent-integration/domain/ports/config-query-port.ts +2 -0
- package/scripts/harness/agent-integration/domain/ports/phase-gate-query-port.ts +1 -1
- package/scripts/harness/agent-integration/domain/ports/story-reflection-query-port.ts +8 -0
- package/scripts/harness/agent-integration/domain/services/bash-write-target-extractor.ts +258 -0
- package/scripts/harness/agent-integration/domain/services/hook-to-cli-translator.ts +21 -4
- package/scripts/harness/agent-integration/domain/value-objects/protected-file-list.ts +20 -0
- package/scripts/harness/agent-integration/domain/value-objects/story-reflection-query-result.ts +63 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/file-system-story-reflection-query-adapter.ts +122 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/harness-config-config-query-adapter.ts +20 -0
- package/scripts/harness/agent-integration/infrastructure/adapters/phase-gate-query-adapter.ts +17 -3
- package/scripts/harness/agent-integration/presentation/pre-tool-use-hook.ts +29 -2
- package/scripts/harness/biome-ast-engine/domain/services/lint-runner.ts +24 -0
- package/scripts/harness/biome-ast-engine/domain/services/rule-definition-registry.ts +1 -1
- package/scripts/harness/biome-ast-engine/domain/value-objects/source-module-snapshot.ts +5 -2
- package/scripts/harness/biome-ast-engine/infrastructure/adapters/node-workspace-file-adapter.ts +1 -1
- package/scripts/harness/biome-ast-engine/infrastructure/adapters/typescript-source-module-analyzer-adapter.ts +1 -1
- package/scripts/harness/biome-ast-engine/infrastructure/parsers/unit-comment-parser.ts +12 -7
- package/scripts/harness/ci-governance/composition-root.ts +1 -0
- package/scripts/harness/config-foundation/application/mappers/phase-config-section-mapper.ts +44 -0
- package/scripts/harness/config-foundation/application/usecases/load-resolved-config-use-case.ts +20 -1
- package/scripts/harness/config-foundation/domain/harness-config.ts +2 -1
- package/scripts/harness/config-foundation/domain/value-objects/phase-dependencies-config.ts +18 -4
- package/scripts/harness/config-foundation/infrastructure/schemas/harness-config-v2.schema.json +185 -10
- package/scripts/harness/config-foundation/infrastructure/validators/ajv-config-schema-validator.ts +2 -1
- package/scripts/harness/harness-api/application/dto/command-dispatch-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/command-dispatch-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/exit-code-decision-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/exit-code-decision-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/harness-api-response-contract.ts +1 -0
- package/scripts/harness/harness-api/application/dto/initialize-registry-input.ts +1 -0
- package/scripts/harness/harness-api/application/dto/registry-summary-output.ts +1 -0
- package/scripts/harness/harness-api/application/dto/status-derivation-input.ts +1 -0
- package/scripts/harness/harness-api/application/mappers/harness-api-response-mapper.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/decide-exit-code-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/derive-harness-status-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/dispatch-command-usecase.ts +1 -0
- package/scripts/harness/harness-api/application/usecases/initialize-command-registry-usecase.ts +1 -0
- package/scripts/harness/harness-api/composition-root.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/artifact-scanner-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/biome-lint-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/config-query-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/impact-analysis-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/phase-gate-query-port.ts +1 -0
- package/scripts/harness/harness-api/domain/ports/validator-execution-port.ts +1 -0
- package/scripts/harness/harness-api/domain/services/command-dispatch-service.ts +1 -0
- package/scripts/harness/harness-api/domain/services/command-registry.ts +1 -0
- package/scripts/harness/harness-api/domain/services/status-derivation-service.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/artifact-scan-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/check-ready-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/ci-check-result.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/cli-command-definition.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/command-input-spec.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/drift-report-summary.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/exit-code-spec.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/harness-api-response.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/harness-status-summary.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/layer-health.ts +1 -0
- package/scripts/harness/harness-api/domain/value-objects/phase-info.ts +1 -0
- package/scripts/harness/harness-api/index.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/biome-ast-engine-lint-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/file-system-artifact-scanner-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/nyquist-validation-impact-analysis-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/phase-dependency-model-query-adapter.ts +1 -0
- package/scripts/harness/harness-api/infrastructure/adapters/validator-system-execution-adapter.ts +1 -0
- package/scripts/harness/harness-api/presentation/dto/cli-output-options.ts +1 -0
- package/scripts/harness/harness-api/presentation/formatters/harness-api-json-formatter.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/check-phase-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/check-ready-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/ci-check-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/complete-check-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/detect-drift-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/impact-analysis-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/lint-handler.ts +1 -0
- package/scripts/harness/harness-api/presentation/handlers/status-handler.ts +1 -0
- package/scripts/harness/harness-error/infrastructure/adapters/legacy-error-reporter-adapter.ts +7 -1
- package/scripts/harness/integrations/pre-commit.ts +1 -0
- package/scripts/harness/main.ts +154 -34
- package/scripts/harness/phase-dependency-model/application/dto/resolve-gate-result-dto.ts +14 -0
- package/scripts/harness/phase-dependency-model/application/services/phase-gate-result-mapper.ts +20 -0
- package/scripts/harness/phase-dependency-model/application/usecases/check-story-reflection-usecase.ts +42 -0
- package/scripts/harness/phase-dependency-model/application/usecases/resolve-gate-usecase.ts +161 -0
- package/scripts/harness/phase-dependency-model/composition-root.ts +57 -1
- package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-dependencies.ts → full-phase-dependencies.ts} +3 -3
- package/scripts/harness/phase-dependency-model/domain/definitions/{default-phase-nodes.ts → full-phase-nodes.ts} +1 -1
- package/scripts/harness/phase-dependency-model/domain/definitions/full-story-reflection-defaults.ts +28 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-dependencies.ts +32 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-phase-nodes.ts +50 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/minimal-story-reflection-defaults.ts +8 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-dependencies.ts +39 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-phase-nodes.ts +118 -0
- package/scripts/harness/phase-dependency-model/domain/definitions/standard-story-reflection-defaults.ts +23 -0
- package/scripts/harness/phase-dependency-model/domain/models/phase-structure.ts +95 -23
- package/scripts/harness/phase-dependency-model/domain/ports/glob-matcher-port.ts +8 -0
- package/scripts/harness/phase-dependency-model/domain/ports/phase-config-provider-port.ts +2 -0
- package/scripts/harness/phase-dependency-model/domain/ports/story-annotation-verifier-port.ts +14 -0
- package/scripts/harness/phase-dependency-model/domain/ports/story-reflection-file-system-port.ts +16 -0
- package/scripts/harness/phase-dependency-model/domain/services/gate-graph.ts +223 -0
- package/scripts/harness/phase-dependency-model/domain/services/story-reflection-checker.ts +66 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-definition.ts +127 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-name.ts +40 -0
- package/scripts/harness/phase-dependency-model/domain/values/gate-story-annotation.ts +39 -0
- package/scripts/harness/phase-dependency-model/domain/values/phase-customization-policy.ts +16 -4
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-config.ts +44 -0
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-mapping.ts +91 -0
- package/scripts/harness/phase-dependency-model/domain/values/story-reflection-result.ts +55 -0
- package/scripts/harness/phase-dependency-model/infrastructure/adapters/picomatch-glob-matcher.ts +17 -0
- package/scripts/harness/phase-dependency-model/infrastructure/adapters/story-annotation-verifier-adapter.ts +46 -0
- package/scripts/harness/phase-dependency-model/infrastructure/config/custom-gates-config-parser.ts +22 -0
- package/scripts/harness/phase-dependency-model/infrastructure/config/harness-config-phase-config-provider.ts +78 -2
- package/scripts/harness/phase-dependency-model/infrastructure/filesystem/file-system-story-reflection-adapter.ts +94 -0
- package/scripts/harness/phase-dependency-model/presentation/cli/check-phase-gate-command-handler.ts +12 -4
- package/scripts/harness/phase-dependency-model/presentation/cli/story-reflection-status-presenter.ts +87 -0
- package/scripts/harness/regression-suite/application/dto/analyze-migration-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/analyze-migration-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/configure-ci-gate-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/configure-ci-gate-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/migrate-v0-tests-output.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/run-regression-suite-input.ts +1 -0
- package/scripts/harness/regression-suite/application/dto/run-regression-suite-output.ts +1 -0
- package/scripts/harness/regression-suite/application/mappers/migration-mapping-mapper.ts +1 -0
- package/scripts/harness/regression-suite/application/mappers/test-execution-summary-mapper.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/analyze-v0-migration-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/configure-ci-gate-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/migrate-v0-tests-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-agent-independence-guard-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-gng-gate-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-k-requirements-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/application/usecases/run-k14-k15-regression-usecase.ts +1 -0
- package/scripts/harness/regression-suite/composition-root.ts +1 -0
- package/scripts/harness/regression-suite/domain/aggregates/v0-test-migration.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/ci-gate-result-writer-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/config-query-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/import-analyzer-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/migration-mapping-repository-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/suite-registry-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/test-runner-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/ports/v0-spec-reader-port.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/import-guard-service.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/migration-analyzer.ts +1 -0
- package/scripts/harness/regression-suite/domain/services/regression-runner.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/agent-independence-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/biome-modification-spec.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/ci-gate-config.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/coverage-rate.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/gng-condition-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/import-violation.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/k-requirement-test.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/migration-mapping.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/regression-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/suite-id.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/test-execution-summary.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/test-failure-detail.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/v0-test-id.ts +1 -0
- package/scripts/harness/regression-suite/domain/value-objects/v1-test-path.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/biome-ast-import-analyzer-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/file-system-v0-spec-reader-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/harness-config-query-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/json-ci-gate-result-writer-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/markdown-migration-mapping-repository-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/static-suite-registry-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/adapters/vitest-test-runner-adapter.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/agent-independence-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/gng-gate-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/k-requirements-suite-definition.ts +1 -0
- package/scripts/harness/regression-suite/infrastructure/registry/v0-migration-suite-definition.ts +1 -0
- package/scripts/harness/setup/skill-deployer.ts +82 -5
- package/scripts/harness/shared-kernel/harness-api.ts +1 -0
- package/scripts/harness/skill-quality/composition-root.ts +1 -0
- package/scripts/harness/skill-quality/infrastructure/adapters/ajv-lesson-artifact-schema-adapter.ts +5 -4
- package/scripts/harness/traceability-model/domain/services/metadata-validator.ts +12 -10
- package/scripts/harness/traceability-model/infrastructure/parsers/source-metadata-parser.ts +16 -2
- package/skills/cascade-updater/SKILL.md +16 -3
- package/skills/codebase-mapper/SKILL.md +9 -9
- package/skills/codex-delegator/SKILL.md +5 -56
- package/skills/consistency-checker/SKILL.md +5 -9
- package/skills/consistency-checker/references//343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +6 -3
- package/skills/doc-freshness-checker/SKILL.md +6 -6
- package/skills/engineering-perspective/SKILL.md +2 -58
- package/skills/engineering-perspective/references/domain-model.md +4 -135
- package/skills/implementation-readiness-checker/SKILL.md +18 -72
- package/skills/it-test-designer/SKILL.md +25 -161
- package/skills/it-test-designer/references/it-test-design-template.md +131 -0
- package/skills/it-test-logic-designer/SKILL.md +13 -388
- package/skills/it-test-logic-designer/references/controller-test-patterns.md +100 -0
- package/skills/it-test-logic-designer/references/repository-test-patterns.md +206 -0
- package/skills/it-test-logic-designer/references/usecase-test-patterns.md +87 -0
- package/skills/pointer-validator/SKILL.md +4 -4
- package/skills/scenario-test-designer/SKILL.md +4 -68
- package/skills/scenario-test-designer/references/scenario-test-design-template.md +41 -0
- package/skills/scenario-test-designer/references/scenario-test-plan-template.md +35 -0
- package/skills/scenario-test-logic-designer/SKILL.md +21 -304
- package/skills/scenario-test-logic-designer/references/msw-patterns.md +36 -0
- package/skills/scenario-test-logic-designer/references/playwright-patterns.md +237 -0
- package/skills/test-coverage-checker/SKILL.md +39 -121
- package/skills/test-coverage-checker/references/coverage-report-template.md +99 -0
- package/skills/uiux-designer/SKILL.md +27 -92
- package/skills/uiux-designer/references/data-testid-convention.md +38 -0
- package/skills/uiux-designer/references/uiux-design-template.md +105 -0
- package/skills/unit-test-designer/SKILL.md +5 -106
- package/skills/unit-test-designer/references/unit-test-design-template.md +127 -0
- package/skills/unit-test-logic-designer/SKILL.md +28 -250
- package/skills/unit-test-logic-designer/references/test-patterns.md +207 -0
|
@@ -20,10 +20,10 @@ AIDLCプロセスの全レイヤー設計文書を横断的に検証し、矛盾
|
|
|
20
20
|
|
|
21
21
|
**このスキルは3フェーズで実行する。**
|
|
22
22
|
- **Phase 1(計画)**: Opus がスコープ・方針・不明点を整理し、人間の承認を得る
|
|
23
|
-
- **Phase 2(実行)**:
|
|
23
|
+
- **Phase 2(実行)**: プロジェクトのモデルルーティング設定に従い、実行モデルに委譲して成果物を生成する
|
|
24
24
|
- **Phase 3(レビュー)**: Opus が成果物を検証し、問題があれば直接修正する
|
|
25
25
|
|
|
26
|
-
**Phase 1/2/3
|
|
26
|
+
**Phase 1/2/3を同時に実行してはならない。**
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -119,8 +119,6 @@ AIDLCプロセスの全レイヤー設計文書を横断的に検証し、矛盾
|
|
|
119
119
|
|
|
120
120
|
---
|
|
121
121
|
|
|
122
|
-
---
|
|
123
|
-
|
|
124
122
|
## Phase 3: レビュー(Opus review)
|
|
125
123
|
|
|
126
124
|
### 実行主体
|
|
@@ -128,7 +126,7 @@ AIDLCプロセスの全レイヤー設計文書を横断的に検証し、矛盾
|
|
|
128
126
|
|
|
129
127
|
### レビュー手順
|
|
130
128
|
1. Sonnetが出力したファイルを読み込む
|
|
131
|
-
2.
|
|
129
|
+
2. プロジェクトのレビュー基準に沿って検証する
|
|
132
130
|
3. **スキル固有レビュー観点**を検証する
|
|
133
131
|
4. 判定結果を出力する
|
|
134
132
|
|
|
@@ -139,10 +137,8 @@ AIDLCプロセスの全レイヤー設計文書を横断的に検証し、矛盾
|
|
|
139
137
|
- [ ] 推奨アクションが実行可能か(対応スキル名が明記されているか)
|
|
140
138
|
- [ ] 偽陰性がないか(明らかな不整合を見逃していないか)
|
|
141
139
|
|
|
142
|
-
###
|
|
143
|
-
-
|
|
144
|
-
- [ ] SOLID違反(SRP・DIP)が設計レイヤー間で見逃されていないか
|
|
145
|
-
- [ ] コードスメル(Shotgun Surgery等)の兆候が設計変更の波及パターンから検出されているか
|
|
140
|
+
### 品質観点のレビュー
|
|
141
|
+
品質観点(SOLID、コードスメル、ドメインスメル)のレビューが必要な場合は `engineering-perspective` スキルを併用する。
|
|
146
142
|
|
|
147
143
|
### 判定と修正
|
|
148
144
|
- **BLOCK項目にFAIL** → Opusが直接修正してから完了とする
|
|
@@ -50,11 +50,14 @@
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
# ストーリーID抽出(マークダウンテーブルから)
|
|
53
|
-
|
|
53
|
+
# {storyIdPattern} はプロジェクトのストーリーID正規表現(例: US-[0-9]+)
|
|
54
|
+
grep -oE '{storyIdPattern}' {userStoriesPath}
|
|
54
55
|
|
|
55
56
|
# Unit内のストーリー参照抽出
|
|
56
|
-
grep -oE '
|
|
57
|
+
grep -oE '{storyIdPattern}' {unitsDir}/*.md
|
|
57
58
|
|
|
58
59
|
# ドメインモデルの集約名抽出
|
|
59
|
-
grep -E '^### .+集約|Aggregate'
|
|
60
|
+
grep -E '^### .+集約|Aggregate' {constructionDir}/*/domain_model.md
|
|
60
61
|
```
|
|
62
|
+
|
|
63
|
+
パス変数は `phasegate.config.json` のプロジェクト設定から解決する。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: doc-freshness-checker
|
|
3
|
-
description: 設計文書の鮮度チェック(L4バリデータ拡張)。`
|
|
3
|
+
description: 設計文書の鮮度チェック(L4バリデータ拡張)。`phasegate check-freshness` CLIを使い、設計文書の最終更新日が閾値を超えていないか、コード変更と設計文書の乖離がないかを検出する。使用タイミング: 「設計文書が古くなっていないか確認して」「ドキュメントの鮮度チェックを実行して」「L4 freshness チェック」「設計とコードの乖離を調べて」など。
|
|
4
4
|
model: sonnet
|
|
5
5
|
review: opus
|
|
6
6
|
---
|
|
@@ -8,7 +8,7 @@ review: opus
|
|
|
8
8
|
# Doc Freshness Checker
|
|
9
9
|
|
|
10
10
|
設計文書の鮮度(freshness)を検証し、古くなった文書や対応コードとの乖離を検出するスキル。
|
|
11
|
-
`
|
|
11
|
+
`phasegate check-freshness` CLIをラップし、結果を解釈・対処する。
|
|
12
12
|
|
|
13
13
|
## 前提条件
|
|
14
14
|
|
|
@@ -34,11 +34,11 @@ review: opus
|
|
|
34
34
|
# Doc Freshness チェック計画
|
|
35
35
|
|
|
36
36
|
## チェック対象スコープ
|
|
37
|
-
- ディレクトリ: {
|
|
37
|
+
- ディレクトリ: {phasegate.config.json の constructionDir、デフォルト: docs/}
|
|
38
38
|
- 閾値: {phasegate.config.json の値 or デフォルト 30日}
|
|
39
39
|
|
|
40
40
|
## 実行コマンド
|
|
41
|
-
|
|
41
|
+
npx phasegate check-freshness [--dir {path}] [--threshold {days}]
|
|
42
42
|
|
|
43
43
|
## QA
|
|
44
44
|
[Question] Q1: ...
|
|
@@ -57,11 +57,11 @@ pnpm run p2:check-freshness [--dir {path}] [--threshold {days}]
|
|
|
57
57
|
### Step 1: CLIの実行
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
|
|
60
|
+
npx phasegate check-freshness
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
オプション:
|
|
64
|
-
- `--dir <path>` — チェック対象ディレクトリ(デフォルト: `
|
|
64
|
+
- `--dir <path>` — チェック対象ディレクトリ(デフォルト: `phasegate.config.json` の `constructionDir`)
|
|
65
65
|
- `--threshold <days>` — 警告閾値(日数)
|
|
66
66
|
|
|
67
67
|
### Step 2: 結果の解釈
|
|
@@ -53,33 +53,8 @@ description: |
|
|
|
53
53
|
|
|
54
54
|
## スメル検知
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
| スメル | 兆候 | 対処 |
|
|
59
|
-
|--------|------|------|
|
|
60
|
-
| Long Method | メソッドが長い | Extract Method |
|
|
61
|
-
| Feature Envy | 他クラスのデータ多用 | Move Method |
|
|
62
|
-
| Primitive Obsession | 基本型の過剰使用 | Value Objectに置換 |
|
|
63
|
-
| Shotgun Surgery | 変更が多クラスに波及 | Move Method/Field |
|
|
64
|
-
|
|
65
|
-
### SOLID違反(アンクル・ボブ視点)
|
|
66
|
-
|
|
67
|
-
| 原則 | 違反の兆候 | 対処 |
|
|
68
|
-
|------|------------|------|
|
|
69
|
-
| SRP | 変更理由が複数 | クラス分割 |
|
|
70
|
-
| OCP | 変更時に既存コード修正 | 抽象化 |
|
|
71
|
-
| LSP | 派生型で例外発生 | 継承の見直し |
|
|
72
|
-
| ISP | 使わないメソッドに依存 | IF分割 |
|
|
73
|
-
| DIP | 具象に依存 | 抽象に依存 |
|
|
74
|
-
|
|
75
|
-
### ドメインスメル(エヴァンス + 統合視点)
|
|
76
|
-
|
|
77
|
-
| スメル | 兆候 | 対処 |
|
|
78
|
-
|--------|------|------|
|
|
79
|
-
| 責務混在 | 集約に複数責務 | 概念を分離 |
|
|
80
|
-
| 不適切なVO | nullable値オブジェクト | ドメイン的に分解 |
|
|
81
|
-
| 言語の乖離 | コードと用語が不一致 | 命名統一 |
|
|
82
|
-
| 境界不明確 | コンテキストが混在 | 境界を明確化 |
|
|
56
|
+
コードスメル(ファウラー視点)、SOLID違反(アンクル・ボブ視点)、ドメインスメル(エヴァンス視点)を並行検知する。
|
|
57
|
+
各スメルの詳細テーブルは [references/glossary.md](references/glossary.md) を参照。
|
|
83
58
|
|
|
84
59
|
## 評価基準
|
|
85
60
|
|
|
@@ -99,37 +74,6 @@ description: |
|
|
|
99
74
|
- [ ] SOLID違反・依存が外向き
|
|
100
75
|
- [ ] モデル不一致・言語の乖離
|
|
101
76
|
|
|
102
|
-
## 表現パターン
|
|
103
|
-
|
|
104
|
-
### 質問
|
|
105
|
-
|
|
106
|
-
| 視点 | パターン | 場面 |
|
|
107
|
-
|------|----------|------|
|
|
108
|
-
| 統合視点 | 「前提は?」 | 議論開始時 |
|
|
109
|
-
| 統合視点 | 「具体例にすると?」 | 抽象的な話 |
|
|
110
|
-
| ケント・ベック | 「テストは書いた?」 | 実装レビュー |
|
|
111
|
-
| ファウラー | 「これ匂う?」 | コードレビュー |
|
|
112
|
-
| アンクル・ボブ | 「依存の方向は?」 | 設計レビュー |
|
|
113
|
-
| エヴァンス | 「ドメインエキスパートはこう呼ぶ?」 | 命名議論 |
|
|
114
|
-
|
|
115
|
-
### 指摘
|
|
116
|
-
|
|
117
|
-
| 視点 | パターン | 場面 |
|
|
118
|
-
|------|----------|------|
|
|
119
|
-
| 統合視点 | 「それって違くない?」 | スメル検知 |
|
|
120
|
-
| ケント・ベック | 「今必要ないなら作らない」 | 過剰設計 |
|
|
121
|
-
| ファウラー | 「リファクタしてから機能追加」 | 変更前 |
|
|
122
|
-
| アンクル・ボブ | 「責務が複数ある」 | SRP違反 |
|
|
123
|
-
| エヴァンス | 「コンテキストが混ざってる」 | 境界不明確 |
|
|
124
|
-
|
|
125
|
-
### 開発アプローチ
|
|
126
|
-
|
|
127
|
-
- 「バーティカルスライスでまず価値提供」(統合視点)
|
|
128
|
-
- 「Make it work, make it right, make it fast」(ケント・ベック)
|
|
129
|
-
- 「2回目で抽象化を検討」(ファウラー)
|
|
130
|
-
- 「ボーイスカウトルール: 来た時より美しく」(アンクル・ボブ)
|
|
131
|
-
- 「モデルとコードを一致させる」(エヴァンス)
|
|
132
|
-
|
|
133
77
|
## 参照ドキュメント
|
|
134
78
|
|
|
135
79
|
- **統合モデル**: [references/domain-model.md](references/domain-model.md) - 完全なドメインモデル図
|
|
@@ -211,153 +211,22 @@ classDiagram
|
|
|
211
211
|
|
|
212
212
|
素早いフィードバックとシンプルさを重視。
|
|
213
213
|
|
|
214
|
-
**適用場面:**
|
|
215
|
-
- テスト戦略の検討
|
|
216
|
-
- 開発プロセスの改善
|
|
217
|
-
- 過剰設計の防止
|
|
218
|
-
|
|
219
|
-
**キーフレーズ:**
|
|
220
|
-
- "Make it work, make it right, make it fast"
|
|
221
|
-
- "YAGNI - 今必要ないなら作らない"
|
|
222
|
-
- "小さなステップで進む"
|
|
214
|
+
**適用場面:** テスト戦略の検討、開発プロセスの改善、過剰設計の防止
|
|
223
215
|
|
|
224
216
|
### FowlerPatterns(リファクタリング視点)
|
|
225
217
|
|
|
226
218
|
コードの匂いの検知と改善パターンの提案。
|
|
227
219
|
|
|
228
|
-
**適用場面:**
|
|
229
|
-
- コードレビュー
|
|
230
|
-
- レガシーコードの改善
|
|
231
|
-
- 設計パターンの適用
|
|
232
|
-
|
|
233
|
-
**検知するコードスメル:**
|
|
234
|
-
| スメル | 説明 | リファクタリング |
|
|
235
|
-
|--------|------|------------------|
|
|
236
|
-
| Long Method | 長すぎるメソッド | Extract Method |
|
|
237
|
-
| Feature Envy | 他クラスのデータを多用 | Move Method |
|
|
238
|
-
| Primitive Obsession | 基本型の過剰使用 | Replace with Value Object |
|
|
239
|
-
| Shotgun Surgery | 変更が多クラスに影響 | Move Method/Field |
|
|
240
|
-
| Divergent Change | 1クラスが複数理由で変更 | Extract Class |
|
|
220
|
+
**適用場面:** コードレビュー、レガシーコードの改善、設計パターンの適用
|
|
241
221
|
|
|
242
222
|
### UncleBobPrinciples(クリーン設計視点)
|
|
243
223
|
|
|
244
224
|
SOLID原則とクリーンアーキテクチャの適用。
|
|
245
225
|
|
|
246
|
-
**適用場面:**
|
|
247
|
-
- アーキテクチャ設計
|
|
248
|
-
- 依存関係の評価
|
|
249
|
-
- インターフェース設計
|
|
250
|
-
|
|
251
|
-
**SOLID原則チェック:**
|
|
252
|
-
| 原則 | 違反の兆候 | 対処 |
|
|
253
|
-
|------|------------|------|
|
|
254
|
-
| SRP | 変更理由が複数 | クラス分割 |
|
|
255
|
-
| OCP | 変更時に既存コード修正 | 抽象化・ポリモーフィズム |
|
|
256
|
-
| LSP | 派生型で例外発生 | 継承の見直し |
|
|
257
|
-
| ISP | 使わないメソッドへの依存 | インターフェース分割 |
|
|
258
|
-
| DIP | 具象への依存 | 抽象への依存に変更 |
|
|
226
|
+
**適用場面:** アーキテクチャ設計、依存関係の評価、インターフェース設計
|
|
259
227
|
|
|
260
228
|
### EvansDDD(ドメイン駆動視点)
|
|
261
229
|
|
|
262
230
|
ドメインモデルの品質とユビキタス言語の整合性。
|
|
263
231
|
|
|
264
|
-
**適用場面:**
|
|
265
|
-
- ドメインモデリング
|
|
266
|
-
- コンテキスト境界の設計
|
|
267
|
-
- 集約設計
|
|
268
|
-
|
|
269
|
-
**チェックポイント:**
|
|
270
|
-
| 観点 | 確認事項 | 問題時の対処 |
|
|
271
|
-
|------|----------|--------------|
|
|
272
|
-
| ユビキタス言語 | コードと用語が一致 | 命名の統一 |
|
|
273
|
-
| 境界づけられたコンテキスト | 責務が明確 | コンテキスト分割 |
|
|
274
|
-
| 集約 | 整合性境界が適切 | 集約の再設計 |
|
|
275
|
-
| ドメインイベント | 重要な出来事を表現 | イベント追加 |
|
|
276
|
-
|
|
277
|
-
## 統合評価フロー
|
|
278
|
-
|
|
279
|
-
```
|
|
280
|
-
問題/コード
|
|
281
|
-
↓
|
|
282
|
-
┌─────────────────────────────────────────┐
|
|
283
|
-
│ IntegratorCore: 前提確認 │
|
|
284
|
-
│ - コンテキストは? │
|
|
285
|
-
│ - 境界は? │
|
|
286
|
-
│ - 目的は? │
|
|
287
|
-
└─────────────────────────────────────────┘
|
|
288
|
-
↓
|
|
289
|
-
┌─────────────────────────────────────────┐
|
|
290
|
-
│ 並行評価 │
|
|
291
|
-
│ ├─ KentBeck: TDD/XP観点 │
|
|
292
|
-
│ ├─ Fowler: コードスメル検知 │
|
|
293
|
-
│ ├─ UncleBob: SOLID/アーキテクチャ │
|
|
294
|
-
│ └─ Evans: ドメインモデル品質 │
|
|
295
|
-
└─────────────────────────────────────────┘
|
|
296
|
-
↓
|
|
297
|
-
┌─────────────────────────────────────────┐
|
|
298
|
-
│ IntegratorCore: 統合・判断 │
|
|
299
|
-
│ - 各視点の結果を統合 │
|
|
300
|
-
│ - 実用性を考慮してフィルタ │
|
|
301
|
-
│ - シンプルな改善案を選択 │
|
|
302
|
-
└─────────────────────────────────────────┘
|
|
303
|
-
↓
|
|
304
|
-
EvaluationResult + Guidance
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
## ビジネスルール
|
|
308
|
-
|
|
309
|
-
### 統合Good判定ルール
|
|
310
|
-
|
|
311
|
-
以下をすべて満たす場合にGoodと判定:
|
|
312
|
-
|
|
313
|
-
| 視点 | 基準 |
|
|
314
|
-
|------|------|
|
|
315
|
-
| 統合視点 | シンプル・説明可能・実用的 |
|
|
316
|
-
| ケント・ベック | テストがある・YAGNIに従う |
|
|
317
|
-
| ファウラー | コードスメルがない |
|
|
318
|
-
| アンクル・ボブ | SOLID原則に従う・依存が内向き |
|
|
319
|
-
| エヴァンス | ドメインを適切に表現・言語が一致 |
|
|
320
|
-
|
|
321
|
-
### 統合NG判定ルール
|
|
322
|
-
|
|
323
|
-
以下のいずれかに該当する場合にNGと判定:
|
|
324
|
-
|
|
325
|
-
| 視点 | NG条件 |
|
|
326
|
-
|------|--------|
|
|
327
|
-
| 統合視点 | 複雑・目的不明・説明不能 |
|
|
328
|
-
| ケント・ベック | テストなし・過剰設計 |
|
|
329
|
-
| ファウラー | 重大なコードスメル |
|
|
330
|
-
| アンクル・ボブ | SOLID違反・依存が外向き |
|
|
331
|
-
| エヴァンス | モデル不一致・言語の乖離 |
|
|
332
|
-
|
|
333
|
-
### 優先順位ルール
|
|
334
|
-
|
|
335
|
-
改善提案の優先順位:
|
|
336
|
-
|
|
337
|
-
1. **実用性に影響するもの** (統合視点)
|
|
338
|
-
2. **テスト容易性に影響するもの** (ケント・ベック視点)
|
|
339
|
-
3. **保守性に影響するもの** (ファウラー・アンクル・ボブ視点)
|
|
340
|
-
4. **ドメイン表現に影響するもの** (エヴァンス視点)
|
|
341
|
-
|
|
342
|
-
## 表現パターン(統合版)
|
|
343
|
-
|
|
344
|
-
### 質問パターン
|
|
345
|
-
|
|
346
|
-
| 視点 | パターン | 使用場面 |
|
|
347
|
-
|------|----------|----------|
|
|
348
|
-
| 統合視点 | 「前提は?」 | 議論開始時 |
|
|
349
|
-
| 統合視点 | 「具体例にすると?」 | 抽象的な話のとき |
|
|
350
|
-
| ケント・ベック | 「テストは書いた?」 | 実装レビュー時 |
|
|
351
|
-
| ファウラー | 「これ匂う?」 | コードレビュー時 |
|
|
352
|
-
| アンクル・ボブ | 「依存の方向は?」 | 設計レビュー時 |
|
|
353
|
-
| エヴァンス | 「ドメインエキスパートはこう呼ぶ?」 | 命名議論時 |
|
|
354
|
-
|
|
355
|
-
### 指摘パターン
|
|
356
|
-
|
|
357
|
-
| 視点 | パターン | 使用場面 |
|
|
358
|
-
|------|----------|----------|
|
|
359
|
-
| 統合視点 | 「それって違くない?」 | スメル検知時 |
|
|
360
|
-
| ケント・ベック | 「今必要ないなら作らない」 | 過剰設計時 |
|
|
361
|
-
| ファウラー | 「リファクタしてから機能追加」 | 変更前 |
|
|
362
|
-
| アンクル・ボブ | 「責務が複数ある」 | SRP違反時 |
|
|
363
|
-
| エヴァンス | 「コンテキストが混ざってる」 | 境界不明確時 |
|
|
232
|
+
**適用場面:** ドメインモデリング、コンテキスト境界の設計、集約設計
|
|
@@ -36,6 +36,8 @@ review: opus
|
|
|
36
36
|
|
|
37
37
|
## 検証ワークフロー
|
|
38
38
|
|
|
39
|
+
> **パス設定:** 以下のファイルパスはプレースホルダで記述。`{constructionDir}` / `{inceptionDir}` は `phasegate.config.json` のプロジェクト設定から解決される。
|
|
40
|
+
|
|
39
41
|
### Step 1: ファイル存在チェック(自動実行)
|
|
40
42
|
|
|
41
43
|
**以下のファイルの存在を実際に確認する(Glob/Readツールを使用):**
|
|
@@ -44,27 +46,26 @@ review: opus
|
|
|
44
46
|
|
|
45
47
|
| カテゴリ | ファイルパス | 作成スキル |
|
|
46
48
|
|---------|------------|----------|
|
|
47
|
-
| 論理設計 | `
|
|
48
|
-
| 論理設計 | `
|
|
49
|
-
| ユニットテスト設計 | `
|
|
50
|
-
| ITテスト設計 | `
|
|
51
|
-
| シナリオテスト設計 | `
|
|
52
|
-
| カバレッジレポート | `
|
|
49
|
+
| 論理設計 | `{constructionDir}/{unit}/logical_design.md` | `logical-designer` |
|
|
50
|
+
| 論理設計 | `{inceptionDir}/{unit}/{story_id}/logical_design.md` | `logical-designer` |
|
|
51
|
+
| ユニットテスト設計 | `{constructionDir}/{unit}/unit_test_design.md` | `unit-test-designer` |
|
|
52
|
+
| ITテスト設計 | `{constructionDir}/{unit}/it_test_design.md` | `it-test-designer` |
|
|
53
|
+
| シナリオテスト設計 | `{inceptionDir}/{unit}/{story_id}/scenario_test_design.md` | `scenario-test-designer` |
|
|
54
|
+
| カバレッジレポート | `{constructionDir}/{unit}/coverage_report.md` | `test-coverage-checker` |
|
|
53
55
|
|
|
54
56
|
#### 推奨ファイル(なくても実装可能だが、あればより安全)
|
|
55
57
|
|
|
56
58
|
| カテゴリ | ファイルパス | 作成スキル |
|
|
57
59
|
|---------|------------|----------|
|
|
58
|
-
| ユニットテストロジック | `
|
|
59
|
-
| ITテストロジック | `
|
|
60
|
-
| シナリオテストロジック | `
|
|
61
|
-
| UIUX設計 | `
|
|
60
|
+
| ユニットテストロジック | `{constructionDir}/{unit}/unit_test_logic.md` | `unit-test-logic-designer` |
|
|
61
|
+
| ITテストロジック | `{constructionDir}/{unit}/it_test_logic.md` | `it-test-logic-designer` |
|
|
62
|
+
| シナリオテストロジック | `{inceptionDir}/{unit}/{story_id}/scenario_test_logic.md` | `scenario-test-logic-designer` |
|
|
63
|
+
| UIUX設計 | `{constructionDir}/{unit}/uiux_design.md` | `uiux-designer` |
|
|
62
64
|
|
|
63
|
-
### Step 2:
|
|
65
|
+
### Step 2: カバレッジレポートの確認
|
|
64
66
|
|
|
65
|
-
`coverage_report.md`
|
|
66
|
-
-
|
|
67
|
-
- 未カバー項目がないか確認
|
|
67
|
+
`coverage_report.md` が存在する場合、`test-coverage-checker` の検証結果を参照する。
|
|
68
|
+
カバレッジの詳細分析は `test-coverage-checker` が担当するため、本スキルでは存在確認のみ行う。
|
|
68
69
|
|
|
69
70
|
### Step 3: 検証結果の報告
|
|
70
71
|
|
|
@@ -151,64 +152,9 @@ review: opus
|
|
|
151
152
|
|
|
152
153
|
---
|
|
153
154
|
|
|
154
|
-
##
|
|
155
|
-
|
|
156
|
-
既に実装が完了しているが、テストが不足している場合に使用。
|
|
157
|
-
|
|
158
|
-
### 使用方法
|
|
159
|
-
|
|
160
|
-
```
|
|
161
|
-
「US-XXXは実装済みだが、ユニットテスト/ITテストが不足している。テスト追加の準備状況を確認してほしい」
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### 検証内容
|
|
165
|
-
|
|
166
|
-
1. **実装済みコードの分析**
|
|
167
|
-
- `backend/src/{context}/` の実装ファイルを確認
|
|
168
|
-
- Entity/ValueObject/UseCase/Repository/Controllerを特定
|
|
169
|
-
|
|
170
|
-
2. **既存テストの確認**
|
|
171
|
-
- `backend/test/unit/{context}/` のユニットテスト
|
|
172
|
-
- `backend/test/integration/{context}/` のITテスト
|
|
173
|
-
- `e2e/tests/{context}/` のE2Eテスト
|
|
174
|
-
|
|
175
|
-
3. **ギャップ分析**
|
|
176
|
-
- 実装済みコンポーネントに対するテストの存在/不存在を一覧化
|
|
177
|
-
|
|
178
|
-
### 出力例
|
|
155
|
+
## 既存実装に対するテスト追加
|
|
179
156
|
|
|
180
|
-
|
|
181
|
-
## 🔍 既存実装のテスト状況分析: US-217
|
|
182
|
-
|
|
183
|
-
### 実装済みコンポーネント
|
|
184
|
-
|
|
185
|
-
| コンポーネント | 種類 | ユニットテスト | ITテスト | E2Eテスト |
|
|
186
|
-
|--------------|------|--------------|---------|----------|
|
|
187
|
-
| WithholdingTaxProcess | Entity | ❌ なし | - | - |
|
|
188
|
-
| CsvData | ValueObject | ❌ なし | - | - |
|
|
189
|
-
| ParseCsvUseCase | UseCase | - | ❌ なし | - |
|
|
190
|
-
| WithholdingTaxRepository | Repository | - | ❌ なし | - |
|
|
191
|
-
| UploadCsvController | Controller | - | ❌ なし | - |
|
|
192
|
-
| CSVアップロードフロー | E2E | - | - | ✅ あり |
|
|
193
|
-
|
|
194
|
-
### 不足テストの作成に必要なスキル
|
|
195
|
-
|
|
196
|
-
| 不足テスト | 対応スキル | 優先度 |
|
|
197
|
-
|----------|----------|-------|
|
|
198
|
-
| Entity/VOのユニットテスト | `unit-test-designer` → `unit-test-logic-designer` | 高 |
|
|
199
|
-
| UseCase/Repository/ControllerのITテスト | `it-test-designer` → `it-test-logic-designer` | 高 |
|
|
200
|
-
|
|
201
|
-
### 推奨フロー
|
|
202
|
-
|
|
203
|
-
1. **`unit-test-designer`** → 既存Entity/VOに対するテストケース設計
|
|
204
|
-
2. **`it-test-designer`** → 既存UseCase/Repository/Controllerに対するテストケース設計
|
|
205
|
-
3. **`test-coverage-checker`** → カバレッジ検証
|
|
206
|
-
4. **`unit-test-logic-designer`** → ユニットテストロジック設計
|
|
207
|
-
5. **`it-test-logic-designer`** → ITテストロジック設計
|
|
208
|
-
6. **`story-implementor`** → TDD実装(RED→GREEN)
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
---
|
|
157
|
+
既に実装が完了しているがテストが不足している場合は、`test-coverage-checker` の「実装済みコードへのテスト追加モード」を使用すること。本スキルはファイル存在チェックに特化し、テストギャップ分析は `test-coverage-checker` が担当する。
|
|
212
158
|
|
|
213
159
|
---
|
|
214
160
|
|
|
@@ -219,7 +165,7 @@ review: opus
|
|
|
219
165
|
|
|
220
166
|
### レビュー手順
|
|
221
167
|
1. Sonnetが出力したファイルを読み込む
|
|
222
|
-
2.
|
|
168
|
+
2. プロジェクトのレビュー基準に沿って検証する
|
|
223
169
|
3. 判定結果を出力する
|
|
224
170
|
|
|
225
171
|
### 判定と修正
|