リリースチェックリスト
各リリースで本チェックリストを完了し、公開 Issue、PR、ワークフロー実行、GitHub Ruleset API 応答、リリース成果物へのリンクを保存する。チェック自体は証跡ではなく、各項目から実証資料を参照できる必要がある。
チャネルは1本
リリースチャネルは vX.Y.Z の1本である。リリースワークフローの SemVer ゲートがプレリリース識別子を拒否するため、弱い主張を逃がす第2チャネルは存在しない。リリースが何を主張し何を主張しないかは、代わりにリリース自体とともに公開する(主張せず、開示する)。
リリースノートは CHANGELOG.md から生成する。タグには専用の ## [X.Y.Z] 節が必要であり、これが無い場合ワークフローは公開を拒否する。scripts/changelog.mjs は ## [Unreleased] にも近傍のバージョンにもフォールバックしない。節の本文が空であってはならない。
すべてのリリースはメンテナ1名で完結する。以下のどの項目も第2の人物を待たない。これは回避されているギャップではなく意図した立場であり、それについて正直であり続けるための仕組みが次節である。
主張せず、開示する
本リポジトリの vX.Y.Z タグが主張するのは、リリースコミット上で CI Required と Security Required が通過したことである。しかもこれは信頼に基づく主張ではなく、リリースワークフローが公開前に検証する。ADR-0016 以降にマージされた PR は加えてセルフレビュー証跡を持ち、これはマージ時点で Governance Required が強制している。リリース側でこの証跡を再検証はしない。Governance Required は PR の head コミットに対して投稿されるものであり、タグが指すマージコミットは別の SHA であってこのステータスを持たないためである。独立した承認と職務分離は主張しない。メンテナ1名のリポジトリはそのいずれも生み出せないためである。
この事実は本ページ任せにしない。リリースワークフローが成果物とともに出力する。
| 出力 | 内容 |
|---|---|
release-manifest.json | schema_version: 2 の下に governance: { mode, independent_approval, separation_of_duties, adr } |
| コンテナイメージのラベル | io.github.ksuk.merlon.governance.*(同じ4項目) |
| GitHub Release 本文 | CHANGELOG 節の上に置かれる開示ヘッダ |
したがってベンダー審査を行う運用者は、文書を読まずとも docker inspect またはマニフェストの取得だけで判断材料を得られる。それが導入に足るかどうかは、自組織の規制上の義務に照らして運用者が判断すべき事項である。AML/CFT システムにおいては、その判断はベンダーが何を主張していようと当局に対して説明できるものでなければならない。
決定・棄却した代替案・内部品質基準に対するテーラリングは ADR-0016 に記録している。
検証とセキュリティ
- 正確なリリースコミットで
CI RequiredとSecurity Requiredが連続3回成功した。試行番号付きの実行リンクを記録し、その間にソース変更がない。 -
make lint、make test、make docs-check、PostgreSQL マイグレーション再適用、リリースイメージ dry-run、脆弱性検査、ライセンス検査、SBOM が同じコミットで成功した。 - 未解決の Critical/High 脆弱性と監査所見を解消した。または、期限と是正内容を伴う期限付き例外を方針に従って記録した。この例外は独立承認されていない。記録にその旨を明記する。
- リリース日に依存関係のライフサイクルの公式サポート/EOL 情報を再確認した。
- localhost限定の性能検証harnessを、exact release commitと合成dataで実行した。JSON出力とhost/container情報をlinkし、error rateが0で、公開中のthroughputまたはlatency表現を実測結果が裏付けている。
運用証跡
- 匿名化した復元訓練記録に、バックアップ識別子、復元元/先 PostgreSQL 版、リリースコミット、実施者、開始/終了時刻、RTO 結果、マイグレーション台帳、ヘルスチェック、代表的な暗号化データ読取、
merlon-audit verify結果がある。秘密情報と顧客データは含めない。 - 匿名化した脆弱性対応訓練記録に、テスト Advisory、検知時刻、責任者、重大度判断、影響分析、封じ込め、修正/例外判断、連絡、所要時間、フォローアップがある。セキュリティ責任者が承認した。独立オブザーバーが関与していない旨を記録に明記する。
- 本リリースのマイグレーションロールバック、DB 互換性、暗号鍵復旧、エンジン設定ダイジェスト、アラートキュー、監視準備をレビューした。
バージョンと来歴
- タグ作成前に、正確な候補コミットと予定する厳密な SemVer タグを指定して、手動の
Release Evidence Dry Runワークフローを実行した。このワークフローはローカルイメージを ビルドして検査し、GitHub artifact attestation bundleを作成する。さらに、公開ワークフローと 同じgeneratorでCycloneDXイメージSBOMとrelease manifestを生成し、それらの関連付けを検証して 環境記録とともに保持する。このrehearsalはタグを作成せず、イメージをpushせず、GitHub Releaseを 公開しない。成功したrunと保持されたartifactをrelease Issueにリンクした。 - リリース版はプレリリース識別子を持たない厳密な SemVer で、
mainから到達可能な保護済み注釈付きタグを使用する。タグメッセージはリリース Issue を参照する。 -
CHANGELOG.mdがこのタグの内容を記述している。タグ付け前にnode scripts/changelog.mjs <tag>を実行し、ワークフローがどの節を公開するかを確認する。 - リリースワークフローが不変のダイジェストでコンテナを公開した。可変の
latestタグをリリース識別子として扱わない。 - GitHub Release に
release-manifest.json、SHA256SUMS、CycloneDX イメージ SBOM が添付され、タグ、コミット、イメージ、ダイジェストを特定できる。 - 公開イメージダイジェストの artifact provenance attestation を GitHub で検証し、検証出力をリリース Issue にリンクした。
- デプロイ記録が同じイメージダイジェストを示し、デプロイ後のヘルス、監査、代表的ワークフローの確認を含む。
変更の来歴
- リリース Issue が、このタグに含まれる全 PR を参照している。
- 含まれる全 PR が Traceability、DCO、
Governance Requiredを通過した。最後の1つは、与えられる相手が存在しないレビューの代わりに置かれたセルフレビュー証跡である。 - 実運用中の
main/リリースタグ Ruleset が.github/rulesets/のベースラインと一致し、直近の Ruleset Drift 実行が成功している。 - 本リリースについて
bypass_actorsを管理者が検証した(前回値の引き継ぎではない)。週次の Ruleset Drift ではこのフィールドを検査できない。読み取りには Ruleset への write 権限が必要であり、その資格情報を保存していないためである。週次ジョブはunverifiable状態を保持するので、実際の検証はここで行う。管理者自身のトークンでREPO=ksuk/merlon bash scripts/ruleset-baseline.sh --export-all .github/rulesetsを実行し、全 Ruleset で値が[]であることを確認し、差分があれば記録する。リリースは自らのガバナンス上の立場を成果物に記載する。この手順は、そのbypass_actorsに関する部分を、過去のある時点ではなく公開時点で真にするためのものである。
本ページのどの項目も、免除・繰延・第2の人物待ちにはならない。チェックできない項目があればリリースを出さない。それが唯一維持する価値のあるチェックリストである。