Machine-Readable Contract
contract_schema_version : v1
issue_kind : implementation
parent_issue : " none"
goal_ref : " CI で発生する GitHub Actions の Node.js 20 ランタイム deprecation warning を解消する"
change_kind : workflow
Parent Issue
なし(単独改善 / PR #730 レビュー由来の follow-up)
Parent Goal Ref
Goal: CI 実行時に発生する GitHub Actions の Node.js 20 ランタイム deprecation warning を、first-party action を Node 24 同梱版(full SHA pin)へ更新して解消する
Desired Destination: なし(単独 Issue)
Current Validated Scope
.github/workflows/check-japanese.yml の actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2(4 箇所)と actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0(4 箇所)を Node 24 同梱版(v6 系・40 桁 full SHA pin)へ更新する
.github/workflows/deploy-pages.yml の actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7(2 箇所)を Node 24 同梱版(v8 系・40 桁 full SHA pin)へ更新する
既存の SHA pin 方針(uses: <action>@<40桁 full SHA> # <version> 形式)を維持する
更新先は upstream tag の peeled commit SHA と一致し、action metadata が runs.using: node24 であること(PR-side 補助検証で担保)
Remaining Parent Gaps
third-party action(peaceiris/actions-gh-pages@…# v4)の Node ランタイム更新は upstream の Node 24 対応リリース有無に依存するため本 Issue のスコープ外(必要なら別 Issue)
.github/workflows/ci.yml / session-manifest.yml は既に Node 24 同梱版(v6 系)を使用しており対象外
deploy-pages.yml の actions/checkout@df4cb1c… # v6(3 箇所)は既に Node 24 同梱版のため対象外
Outcome
.github/workflows/check-japanese.yml と .github/workflows/deploy-pages.yml の first-party action(actions/checkout / actions/setup-python / actions/github-script)が Node 24 同梱版の 40 桁 full SHA pin へ更新されたコミットが作成され、旧 Node 20 同梱版の SHA・バージョン注釈が 0 件になり、CI 実行時にこれらの action 由来の Node.js 20 deprecation warning が出なくなる状態。コメント注釈だけを書き換えて実体 SHA が旧版のまま、という抜け道が AC で塞がれている。
In Scope
check-japanese.yml: actions/checkout(v4.2.2 → Node 24 同梱の v6 系)、actions/setup-python(v5.3.0 → Node 24 同梱の v6 系)の 40 桁 full SHA pin 更新
deploy-pages.yml: actions/github-script(v7 → Node 24 同梱の v8 系 )の 40 桁 full SHA pin 更新
更新は full SHA pin(@<40桁 SHA> # <version> 形式)で行い、既存の pin スタイルを踏襲する
旧 action SHA(後述の 3 つ)が対象 2 ファイルから完全に消えること
Out of Scope
third-party action(peaceiris/actions-gh-pages 等)の更新
既に Node 24 同梱版(v6 系)を使う ci.yml / session-manifest.yml / deploy-pages.yml の actions/checkout の変更
actions/github-script の v9 系 への更新(v9 は require('@actions/github') 周辺等の breaking change を含み、本 Issue の「最小 Node 24 化」スコープを超えるため除外。v9 化が必要なら別 Issue で breaking change 対応込みのスコープとして起票する)
action の機能・引数・workflow ロジックの変更(バージョン更新に伴う最小限の互換調整を除く)
actions/checkout@v6 の credential 保存先変更(.git/config → $RUNNER_TEMP)に伴う persist-credentials 等の挙動調整(必要なら別 Issue)
Acceptance Criteria
Verification Commands
# AC1
$ ! rg -q ' actions/checkout@.*# v4' .github/workflows/check-japanese.yml
# AC2
$ ! rg -q ' actions/setup-python@.*# v5' .github/workflows/check-japanese.yml
# AC3
$ ! rg -q ' actions/github-script@.*# v7' .github/workflows/deploy-pages.yml
# AC4
$ ! rg -q ' 11bd71901bbe5b1630ceea73d27597364c9af683|0b93645e9fea7318ecaed2b359559ac225c90a2b|f28e40c7f34bde8b3046d885e986cb6290c5673b' .github/workflows/check-japanese.yml .github/workflows/deploy-pages.yml
# AC5
$ test " $( rg -c ' actions/checkout@[0-9a-f]{40} # v6' .github/workflows/check-japanese.yml) " -eq 4
# AC6
$ test " $( rg -c ' actions/setup-python@[0-9a-f]{40} # v6' .github/workflows/check-japanese.yml) " -eq 4
# AC7
$ test " $( rg -c ' actions/github-script@[0-9a-f]{40} # v8' .github/workflows/deploy-pages.yml) " -eq 2
各 AC1〜AC4 は negated 検証(旧版・旧 SHA がヒットしない=0 件で PASS)。コマンド先頭の ! を含めて 1 つの VC とすること。AC5〜AC7 は更新後の full SHA pin が規定件数(checkout 4 / setup-python 4 / github-script 2)存在することを確認する。
Runtime Verification Applicability
decision: not_applicable
reason: 本 Issue の Acceptance Criteria(AC1〜AC7)はすべて対象 workflow ファイルへの静的な文字列検証(rg / test による旧版・旧 SHA 不在および更新後 full SHA pin 件数の確認)で完結し、プロセス起動・通信・I/O を伴わない。Node 24 移行に伴う「runner 上での Node.js 20 deprecation warning 消失」の runtime 確認は、.github/CLAUDE.md により人間承認が必須となる PR の workflow run log で行う PR-side gate であり、本 Issue 内の runtime AC としては定義しない(PR-side 補助検証は Notes for Reviewer 参照)。
Allowed Paths
.github/workflows/check-japanese.yml
.github/workflows/deploy-pages.yml
Stop Conditions
Allowed Paths 外の変更が必要と判明した場合
In Scope の固定契約(キー集合・スキーマ・型定義)の変更が必要になった場合
新規 Issue の起票が必要と判断した場合(スコープ分割が発生する場合)
後続 Phase / 別スコープへの波及が判明した場合
nested SubAgent delegation が必要になった場合
外部サービス利用・権限昇格・既存テスト大規模改変が必要になった場合
バージョン更新後も action の breaking change で workflow が fail する場合(別 Issue 化を検討)
upstream tag の peeled SHA と pin した SHA が一致しない、または action metadata が runs.using: node24 でない場合(誤 SHA の可能性。実装を止めて再確認)
Precondition
Required Skills
GitHub Actions workflow / action versioning
SHA pinning(@<40桁 commit SHA> # <version> 形式)
upstream tag → peeled commit SHA の確認(git ls-remote --tags)
Scope Delta(任意)
N/A
Notes for Reviewer
各 AC1〜AC4 は negated 検証(未更新の旧バージョン注釈・旧 SHA がヒットしないこと=0 件で PASS)。コマンド先頭の ! を含めて 1 つの VC とすること。exit 1 を機械的に FAIL と読まない。
更新先バージョン(major 系列の固定):
actions/checkout: Node 24 同梱の v6 系 (例: v6.0.x。checkout v6 は credential 保存先が変わるが、本 2 ファイルは push を伴わない read-only 用途のため影響は限定的)
actions/setup-python: Node 24 同梱の v6 系 (metadata は node24)
actions/github-script: Node 24 同梱の v8 系 (v8.0.0 は runs.using: node24)。v9 系は breaking change を含むため本 Issue では採用しない 。
具体的な最新パッチ SHA は実装時に確認し、必ず upstream tag の peeled commit SHA を pin する。
AC は決定論的な repo-local 検証 (旧版・旧 SHA 不在 + full SHA pin 形式 + 件数)に限定している。以下の non-hermetic(network / CI 依存)検証は PR-side の必須確認項目とする:
upstream tag 一致 : pin した 40 桁 SHA が upstream tag の peeled commit SHA と一致すること。
# <repo> <tag> <pinned_sha> の順で確認
while read -r repo tag pinned; do
actual=" $( git ls-remote --tags " https://github.com/${repo} .git" \
" refs/tags/${tag} " " refs/tags/${tag} ^{}" | tail -n1 | awk ' {print $1}' ) "
test " $actual " = " $pinned "
done << 'EOF '
actions/checkout <TAG> <FULL_SHA>
actions/setup-python <TAG> <FULL_SHA>
actions/github-script <TAG> <FULL_SHA>
EOF
action metadata が node24 : pin した SHA の action.yml / action.yaml が runs.using: node24 であること。
CI log の warning 消失 : 本 Issue の PR の workflow run log に Node.js 20 deprecation warning が残っていないこと。
gh run view < run-id> --log \
| rg -n ' Node\.js 20 actions are deprecated|ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION|node20' \
&& exit 1 || true
Node 24 移行の最終確認(deprecation warning 消失)は PR-side CI の実行ログで行う。.github/workflows/* 変更は .github/CLAUDE.md により PR で人間承認必須。
由来: PR fix(#728): quote HEAD^{commit} in deploy-pages.yml to resolve ShellCheck SC1083 #730 レビューコメント fix(#728): quote HEAD^{commit} in deploy-pages.yml to resolve ShellCheck SC1083 #730 (comment) の非ブロッカー指摘 2(Node.js 20 Actions deprecation、GitHub は 2026-06-16 から Node 24 デフォルト・Node 20 は 2026 年秋削除予定)、および Issue 実装: GitHub Actions の Node.js 20 deprecation を first-party action の Node 24 同梱版更新で解消する #731 レビュー https://github.com/squne121/loop-protocol/issues/731#issuecomment-4640958190(AC 強化要求: コメント grep ではなく full SHA / upstream tag 一致 / node24 metadata / CI warning 消失まで検証する契約へ)。
Machine-Readable Contract
Parent Issue
なし(単独改善 / PR #730 レビュー由来の follow-up)
Parent Goal Ref
Current Validated Scope
.github/workflows/check-japanese.ymlのactions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2(4 箇所)とactions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0(4 箇所)を Node 24 同梱版(v6 系・40 桁 full SHA pin)へ更新する.github/workflows/deploy-pages.ymlのactions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7(2 箇所)を Node 24 同梱版(v8 系・40 桁 full SHA pin)へ更新するuses: <action>@<40桁 full SHA> # <version>形式)を維持するruns.using: node24であること(PR-side 補助検証で担保)Remaining Parent Gaps
peaceiris/actions-gh-pages@…# v4)の Node ランタイム更新は upstream の Node 24 対応リリース有無に依存するため本 Issue のスコープ外(必要なら別 Issue).github/workflows/ci.yml/session-manifest.ymlは既に Node 24 同梱版(v6 系)を使用しており対象外deploy-pages.ymlのactions/checkout@df4cb1c… # v6(3 箇所)は既に Node 24 同梱版のため対象外Outcome
.github/workflows/check-japanese.ymlと.github/workflows/deploy-pages.ymlの first-party action(actions/checkout/actions/setup-python/actions/github-script)が Node 24 同梱版の 40 桁 full SHA pin へ更新されたコミットが作成され、旧 Node 20 同梱版の SHA・バージョン注釈が 0 件になり、CI 実行時にこれらの action 由来の Node.js 20 deprecation warning が出なくなる状態。コメント注釈だけを書き換えて実体 SHA が旧版のまま、という抜け道が AC で塞がれている。In Scope
check-japanese.yml:actions/checkout(v4.2.2 → Node 24 同梱の v6 系)、actions/setup-python(v5.3.0 → Node 24 同梱の v6 系)の 40 桁 full SHA pin 更新deploy-pages.yml:actions/github-script(v7 → Node 24 同梱の v8 系)の 40 桁 full SHA pin 更新@<40桁 SHA> # <version>形式)で行い、既存の pin スタイルを踏襲するOut of Scope
peaceiris/actions-gh-pages等)の更新ci.yml/session-manifest.yml/deploy-pages.ymlのactions/checkoutの変更actions/github-scriptの v9 系への更新(v9 はrequire('@actions/github')周辺等の breaking change を含み、本 Issue の「最小 Node 24 化」スコープを超えるため除外。v9 化が必要なら別 Issue で breaking change 対応込みのスコープとして起票する)actions/checkout@v6の credential 保存先変更(.git/config→$RUNNER_TEMP)に伴うpersist-credentials等の挙動調整(必要なら別 Issue)Acceptance Criteria
.github/workflows/check-japanese.ymlに Node 20 同梱のactions/checkoutv4 系(# v4注釈)が 1 箇所も残っていない(negated 検証)。.github/workflows/check-japanese.ymlに Node 20 同梱のactions/setup-pythonv5 系(# v5注釈)が 1 箇所も残っていない(negated 検証)。.github/workflows/deploy-pages.ymlに Node 20 同梱のactions/github-scriptv7 系(# v7注釈)が 1 箇所も残っていない(negated 検証)。actions/checkout旧11bd71901bbe5b1630ceea73d27597364c9af683/actions/setup-python旧0b93645e9fea7318ecaed2b359559ac225c90a2b/actions/github-script旧f28e40c7f34bde8b3046d885e986cb6290c5673b。.github/workflows/check-japanese.ymlのactions/checkoutが 40 桁 full SHA pin +# v6注釈で 4 箇所存在する。.github/workflows/check-japanese.ymlのactions/setup-pythonが 40 桁 full SHA pin +# v6注釈で 4 箇所存在する。.github/workflows/deploy-pages.ymlのactions/github-scriptが 40 桁 full SHA pin +# v8注釈で 2 箇所存在する。Verification Commands
各 AC1〜AC4 は negated 検証(旧版・旧 SHA がヒットしない=0 件で PASS)。コマンド先頭の
!を含めて 1 つの VC とすること。AC5〜AC7 は更新後の full SHA pin が規定件数(checkout 4 / setup-python 4 / github-script 2)存在することを確認する。Runtime Verification Applicability
rg/testによる旧版・旧 SHA 不在および更新後 full SHA pin 件数の確認)で完結し、プロセス起動・通信・I/O を伴わない。Node 24 移行に伴う「runner 上での Node.js 20 deprecation warning 消失」の runtime 確認は、.github/CLAUDE.mdにより人間承認が必須となる PR の workflow run log で行う PR-side gate であり、本 Issue 内の runtime AC としては定義しない(PR-side 補助検証は Notes for Reviewer 参照)。Allowed Paths
.github/workflows/check-japanese.yml.github/workflows/deploy-pages.ymlStop Conditions
runs.using: node24でない場合(誤 SHA の可能性。実装を止めて再確認)Precondition
deploy-pages.ymlのHEAD^{commit}quote 修正)が merge 済みであること。(確認済み: 2026-06-07T00:46:49Z に main へ merge 済み)deploy-pages.ymlのコンフリクト回避)。Required Skills
@<40桁 commit SHA> # <version>形式)git ls-remote --tags)Scope Delta(任意)
N/A
Notes for Reviewer
!を含めて 1 つの VC とすること。exit 1を機械的に FAIL と読まない。actions/checkout: Node 24 同梱の v6 系(例: v6.0.x。checkoutv6 は credential 保存先が変わるが、本 2 ファイルは push を伴わない read-only 用途のため影響は限定的)actions/setup-python: Node 24 同梱の v6 系(metadata はnode24)actions/github-script: Node 24 同梱の v8 系(v8.0.0 はruns.using: node24)。v9 系は breaking change を含むため本 Issue では採用しない。action.yml/action.yamlがruns.using: node24であること。.github/workflows/*変更は.github/CLAUDE.mdにより PR で人間承認必須。