購買発注管理システムの品質ゲートを実行する。PR マージ前やフェーズ完了時に、コード品質・セキュリティ・テストカバレッジ・規約遵守を自動チェックする。タスク完了の最終確認に使用する。初期ドラフト段階やフロントエンド(Flutter)タスクには使用しない。
PR マージまたはフェーズ完了の判定に使用する。すべてのチェックをパスしない限り、タスクを完了としない。
以下のコマンドを順番に実行し、結果を記録する。
ruff check app/ を実行する。エラーが 0 件であることを確認する。ruff format --check app/ を実行する。差分が 0 件であることを確認する。mypy --strict app/ を実行する。エラーが 0 件であることを確認する。
Any 型は明示的な理由がない限り禁止。外部ライブラリの型スタブ不足の場合のみ # type: ignore[import-untyped] を許可する。bandit -r app/ を実行する。High / Medium の警告が 0 件であることを確認する。app/core/config.py を読み取り、ハードコードされた秘密情報がないことを確認する。
db.execute() 呼び出しがパラメータバインド (:param_name) を使用していることを確認する。
f"SELECT ... WHERE id = '{val}'" のようなフォーマット文字列の直接埋め込みは Critical 違反とする。pytest --cov=app --cov-fail-under=80 tests/ を実行する。requirements.md の用語定義テーブルを参照する。supplier_id を使用すること。vendor_id は禁止。purchase_order を使用すること。po のみの略称は変数名として禁止(ただし po_id は許可)。snake_case、動詞で始まるPascalCase、名詞UPPER_SNAKE_CASEsnake_case.pyapp/services/ 配下の Docstring にビジネスコンテキスト(対応する機能要件 ID、業務上の役割)が含まれていることを確認する。Args、Returns、Raises セクションが含まれていることを確認する。以下のフォーマットで結果を出力する:
# 品質ゲート結果
| チェック項目 | 結果 | 詳細 |
|---------------------|---------|--------------------------|
| ruff check | ✅ PASS | エラー 0 件 |
| ruff format | ✅ PASS | 差分 0 件 |
| mypy --strict | ❌ FAIL | エラー 3 件 (詳細は下記) |
| bandit | ✅ PASS | 警告 0 件 |
| pytest (カバレッジ) | ✅ PASS | 85% |
| 命名規約 | ✅ PASS | 違反 0 件 |
| Docstring | ✅ PASS | 網羅率 100% |
## 総合判定: ❌ 差し戻し
### 未解決の違反事項
1. [mypy] app/services/approval.py:45 — `total_amount` の型が `float` だが `Decimal` であるべき