feat(ci): 週次 schedule と workflow_dispatch を追加し外界の変化を検知する (v1.8.169) - #771
Merged
Conversation
CI が push と pull_request にしか結合していなかったため、コードが動かない 限り上流 advisory の変化を検知できなかった。2026-05-30 から 2026-08-12 まで 74 日間 1 コミットも無く、その間にコードは 1 行も変わっていないのに pip-audit の検出数は 0 から 22 件(pyjwt / cryptography / starlette を含む =認証と TLS の面)へ増えていた。advisory は我々のコミットではなく、 それ自身の時計で公開される。 - schedule: cron '30 0 * * 1'(月曜 00:30 UTC = 09:30 JST)。毎時 00 分は GitHub Actions の高負荷帯で schedule が遅延しやすいと公式に明記されている ため意図的に 30 分にずらした - workflow_dispatch を併設。schedule の初回発火を待たずに確認・再実行できる - concurrency グループに github.event_name を含めた。含めないと schedule / workflow_dispatch の実行が push の実行に cancel され、設定ファイルは正しく 見えるのに走らない状態になる(nene-origin で実測された罠) 監査専用の workflow を別に作らず ci.yml をそのまま週次で回す設計にした。 別ファイルにすると PR のマージ関門と週次チェックが別々に育って乖離する。 同じ ci.yml を回せば「週次で確認しているもの」と「マージに必要なもの」が 定義上一致する。 既知の限界を docs に明記した: public リポジトリの scheduled workflow は リポジトリの活動が 60 日間無いと GitHub により自動的に無効化される。本リポの 空白は 74 日でしきい値を 14 日超えており、この装置は自身が検知しようとして いる状態によって停止させられうる。リポジトリ単体では解決できない。 あわせて失敗通知の配信状況を実測し、日報 §4 と current.md に記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
なぜ
CI が
pushとpull_requestにしか結合していなかったため、コードが動かない限り外界の変化を検知できなかった。2026-05-30 から 2026-08-12 まで 74 日間 1 コミットも無く、その間にコードは 1 行も変わっていないのに
pip-auditの検出数は 0 → 22 件(pyjwt / cryptography / starlette を含む=認証と TLS の面)へ増えていた。advisory は我々のコミットではなく、それ自身の時計で公開される。何を入れたか
schedulecron: '30 0 * * 1'(月曜 00:30 UTC = 09:30 JST)workflow_dispatchconcurrency.groupci-${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}nene-origin #412 からの翻訳(写経していません)
参照実装は npm 系の艦なので、Python 側の形に翻訳しました。後続の Python 系リポはこちらを参照実装にできます。
paths-ignore: internal-docs/**により、内部ドキュメントだけの変更が続いた 8 日間 CI が一度も走らなかったpaths-ignoreは無い。 盲点は「コミット自体が 74 日間無かった」ことpip-auditpackage-lock.jsonuv.lock(コミット済み・uv syncが尊重する)0 0 * * 1(毎時 00 分)30 0 * * 1(下記)paths-ignoreを持たないリポでも同じ穴が開くというのが翻訳して分かったことです。uv.lockをコミットしている効果:uv syncが lock を尊重するので、週次実行は「いま固定している版に対する既知脆弱性」を正確に測ります。npm 側の lockfile と同じ役割ですが、Python ではpip-auditが lock された環境をそのまま監査するため検知器として精度が高い。scheduleイベントは高負荷時に遅延しうる。高負荷時間帯には毎時の開始が含まれる」「遅延の可能性を下げるには毎時の別の時刻にスケジュールせよ」と明記されているため、意図的に 30 分にずらしました。origin とも時刻がずれるので、フリートで同時発火する事態も避けられます。🔴 concurrency の地雷(指摘どおり対処)
github.event_nameを group に含めています。含めないと schedule /workflow_dispatchの実行が push の実行に cancel され、**「設定したのに走らない」**状態になります。設定ファイルは正しく見えるのに動かないため気づきにくい罠です。監査専用 workflow を別に作らなかった理由
別ファイルにすると PR のマージ関門と週次チェックが別々に育って乖離します。同じ
ci.ymlを週次で回せば「週次で確認しているもの」=「マージに必要なもの」が定義上一致します。週次でcheck(3.12 / 3.14)・integration-db・package-buildの 3 ジョブがすべて回ります。🔴 この装置自身の限界(未解決・リポジトリ単体では解決できない)
GitHub 公式ドキュメント:
本リポジトリは PUBLIC で、空白は 74 日(2026-05-30 → 2026-08-12)= しきい値を 14 日超過。
「週次が動いていること」を外側から確かめる仕組みは、この workflow の中では解決できません。
docs/todo/current.mdの優先タスクと日報 §4 に限界として明記し、フリート全体の装置設計へ回します。失敗通知の実測(別途提案します)
週次で回しても失敗が誰にも届かなければ「CI が走っていなかった」が「走ったが誰も見なかった」に化けるだけなので実測しました。
ci_activity通知が実際に生成されている)ci_activityci_activity配信は届いている。届いた先が飽和している。 経路設計は本 PR の射程外として提案に回します。
検証
concurrencyにevent_name含有を確認scripts/check_docs_nav.pynpm run docs:buildpytestmypy/ruff check/ruff format --checkpip-audit --ignore-vuln PYSEC-2025-183マージ後に
workflow_dispatchで 1 回手動実行し、緑を確認するまでが完了です(workflow_dispatchはデフォルトブランチに存在して初めて発火できるため)。🤖 Generated with Claude Code