セキュリティ
ブランチ保護
main 上の Apothem ブランチ保護 — レビューゲート、ステータスチェックによるゲーティング、プッシュ制限。
Apothem の main ブランチは、単一の新規リリースコミットが公開された後、GitHub のブランチ保護によって保護されます。この保護は rules/production-ready-prs.md で宣言された変更セットの規律を強制し、今後の作業のために OpenSSF Scorecard の Branch-Protection および Code-Review チェックに供給します。
ルールセット宣言
| 設定 | 値 | 根拠 |
|---|---|---|
| 対象 | main | 公開のデフォルトブランチを保護します。 |
| 強制状態 | active | ドライランモードではありません。 |
| マージ前にプルリクエストを必須化 | ✅ | main への直接プッシュを禁止します。 |
| 必須の承認レビュー数 | 1 | 新規の単独メンテナープロジェクトに対する最低限の人手レビューゲート。 |
| 新しいコミットで古い承認を破棄 | ✅ | 承認後の force-push がレビューを再トリガーします。 |
| Code Owners からのレビューを必須化 | 延期 | 2 人目のメンテナーが加わる前にこれを有効化すると、単独メンテナーの PR がデッドロックする可能性があります。 |
| 最新のレビュー可能なプッシュの承認を必須化 | ✅ | 最後にプッシュされたコミットが承認を持つ必要があります。 |
| 会話の解決を必須化 | ✅ | 未解決のレビュースレッドがマージをブロックします。 |
| ステータスチェックの合格を必須化 | ✅ | CI ワークフロー + Scorecard + CodeQL + pip-audit。 |
| 必須ステータスチェック | 現行のコアチェック | 必須リストは最新のグリーンなリリースコミットから更新されます。 |
| ブランチを最新状態に保つことを必須化 | ✅ | 古いマージによるリグレッションを防ぎます。 |
| 署名付きコミットを必須化 | 推奨 | ローカルのリリースコミットは署名されています。完全な強制は、コントリビューターのオンボーディング文書が SSH/GPG セットアップを記述するまで待ちます。 |
| 線形履歴を必須化 | ✅ | 単一線の公開履歴を理解可能に保ちます。 |
| force-push をブロック | ✅ | main 上での履歴の書き換えをブロックします。 |
| 削除を許可 | ❌ | main ブランチは削除できません。 |
単独メンテナーの制約
GitHub では、リポジトリのファイルが人手によるレビュー履歴を作成することはできません。そのためリポジトリは、現在のメンテナーモデルに対してデッドロックを起こさない最も強力なブランチ保護を適用します。すなわち、1 件の承認レビュー、古いレビューの破棄、最新プッシュの承認、会話の解決、ステータスチェック、線形履歴、そしてブランチ削除や force-push の禁止です。2 人目のメンテナーが加わると、CODEOWNERS レビューと 2 名のレビュアー最低要件がより強力な設定になります。
ステータスチェックの要件
上記で宣言された 4 つのハードゲーティングのステータスチェック:
ci— 完全なテストマトリクス + ruff + mypy + bandit + Trivy + 解決済み依存ツリーに対する pip-auditScorecard— チェックごとのリグレッションなしの OpenSSF Scorecard 実行CodeQL—python+actions向けのsecurity-extendedクエリパックpip-audit— 解決済み依存ツリーに対する週次 + PR ごとの脆弱性スキャン
その他のワークフローはステータスを報告できますが、必須チェックリストに昇格されない限り、その結果はマージをゲーティングしません。
監査のリズム
このファイルはすべてのセキュリティ監査時、およびすべてのリリースエンジニアリングのチェックポイントで見直されます。このファイルと実際のブランチ保護設定との間のドリフトは、高重大度の発見事項です。
参考資料
- OpenSSF Scorecard — Branch-Protection check
- GitHub — About protected branches
- Apothem CODEOWNERS — パススコープのレビュー所有権
rules/production-ready-prs.md§1 — このルールセットが強制する同一変更セットの規律