Skip to content

chore: CI近代化+依存更新(7日ルール)+脆弱性39→0件+/mcp本番バグ修正#4

Merged
kazuph merged 5 commits into
mainfrom
feature/ci-deps-update
Jun 12, 2026
Merged

chore: CI近代化+依存更新(7日ルール)+脆弱性39→0件+/mcp本番バグ修正#4
kazuph merged 5 commits into
mainfrom
feature/ci-deps-update

Conversation

@kazuph

@kazuph kazuph commented Jun 12, 2026

Copy link
Copy Markdown
Owner

WHY

  • CIで actions/checkout@v4 等の Node 20 deprecated 警告(2026-06-16からNode 24強制)が出ていた。
  • pnpm audit39件の脆弱性(high 8 / moderate 28 / low 3)。hono 4.7.5 の既知脆弱性や MCP SDK 1.17.4 配下の古い express 系が原因。
  • さらに検証中、本番の /mcp が warm isolate で500になる既存バグを発見(実測: 200/200/500)。単一 McpServer にリクエスト毎の transport を connect する実装が原因で、SDK 1.29 ではこのエラーが確実に発生するため修正を同梱。

HOW

  • 7日ルール: サプライチェーン対策として、公開から7日以上経過した最新版のみ採用。全候補の公開日を npm registry / GitHub Releases で実測して選定(例: hono は最新 4.12.25 が06-09公開のため 4.12.23 (05-25) を採用)。
  • transitive 脆弱性(path-to-regexp / qs)は pnpm overrides でパッチ版を強制。
  • /mcpcreateMcpServer() ファクトリ化でリクエスト毎に生成(SDK は 1 Protocol = 1 transport のため)。regressionテスト追加。
  • CI は lockfile 無視の npm install をやめ、pnpm + --frozen-lockfile で7日ルールの固定をCIでも厳守。

WHAT

変更 Before After
pnpm audit 39件 (high 8) 0件
hono / zod / MCP SDK / @hono/mcp 4.7.5 / 3.25.76 / 1.17.4 / 0.1.1 4.12.23 / 4.4.3 / 1.29.0 / 0.3.0
actions checkout@v4, setup-node@v4, github-script@v7 v6 / v6 / v9 + pnpm/action-setup@v6
CI Node / install 22 / npm install 24 (LTS) / pnpm install --frozen-lockfile
/mcp 連続リクエスト 200/200/500(本番実測) 200/200/200(workerd実測)
  • src/mcp.ts src/index.ts: McpServer ファクトリ化
  • tests/integration/http.spec.ts: Test 6b(連続initialize regression)追加
  • .github/workflows/ci.yml deploy.yml: actions更新・pnpm化
  • package.json pnpm-lock.yaml: 依存更新+overrides

Evidence

  • vitest 43件パス / tsc クリーン / build成功 / pnpm audit 0件 / frozen-lockfile インストール成功
  • 実workerd(wrangler dev)で MCP initialize → tools/list(zod4スキーマ変換)→ tools/call(実GitHub取得)→ 連続initialize 200×3 を実打確認
  • 詳細: .artifacts/ci-deps-update/REPORT.md(yunomiレビュー approve 済み)

🤖 Generated with Claude Code

kazuph and others added 4 commits June 12, 2026 15:15
単一のMcpServerインスタンスにリクエスト毎のtransportをconnectしていたため、
warm isolateで2回目以降の/mcpリクエストが
"Already connected to a transport" で500になっていた(本番で200/200/500を実測)。
SDKはProtocolインスタンスごとに1 transportのみ許可するため、
createMcpServer()ファクトリでリクエスト毎に生成する方式に変更。
連続initialize×3が全て200になるregressionテスト(Test 6b)を追加。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
公開から7日以上経過した最新版のみ採用(サプライチェーン対策の7日ルール):
- hono 4.7.5 → 4.12.23 (4.12.25は7日未満のため見送り)
- zod 3.25.76 → 4.4.3
- @modelcontextprotocol/sdk 1.17.4 → 1.29.0
- @hono/mcp 0.1.1 → 0.3.0
- @cloudflare/workers-types → 4.20260605.1
- @typescript/native-preview → 7.0.0-dev.20260604.1
- pnpm overrides: path-to-regexp 8.4.0 / qs 6.15.2 (transitive脆弱性パッチ)

pnpm audit: 39件(high 8) → 0件

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- actions/checkout v4→v6, actions/setup-node v4→v6, actions/github-script v7→v9
  (Node 20 deprecated警告の解消、全てNode 24対応版・公開7日以上経過を確認)
- pnpm/action-setup@v6 を追加し npm install → pnpm install --frozen-lockfile に変更
  (lockfile無視のインストールを廃止、7日ルールで固定したバージョンをCIでも厳守)
- Node.js 22 → 24 (LTS)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 12, 2026 06:16
@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown

🚀 Preview deployed!

https://pera1-preview.kazu-san.workers.dev

This preview will be updated on every push to this PR.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

CIのNode/actionのdeprecation対応と依存関係の脆弱性解消(pnpm audit 39→0)を行いつつ、本番 /mcp の warm isolate での連続リクエスト時に 500 になる既存バグ(transport 再接続)を修正するPRです。Workers 上での MCP 提供と CI の再現性(lockfile 準拠)を同時に強化する位置づけです。

Changes:

  • /mcp をリクエスト毎に McpServer を生成する実装へ変更し、連続 initialize での 500 を防止
  • MCP regression テスト(initialize×3 の連続成功)を integration test に追加
  • CI/Deploy を pnpm + --frozen-lockfile に統一し、actions/Node を更新(Node 24 / actions v6・github-script v9)

Reviewed changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/mcp.ts McpServer をファクトリ化してリクエスト毎に新規生成できるように変更
src/index.ts /mcp ルートで createMcpServer() を呼び出し、transport再接続問題を回避
tests/integration/http.spec.ts /mcp 連続 initialize の regression テスト(Test 6b)を追加
package.json hono/zod/MCP SDK/@hono/mcp 更新+pnpm overrides 追加
pnpm-lock.yaml 依存更新反映+脆弱性対策 overrides を lockfile に反映
.github/workflows/ci.yml actions更新+pnpm化+Node 24 化+pnpm exec 利用へ変更
.github/workflows/deploy.yml deploy を pnpm + frozen-lockfile + Node 24 に更新
.artifacts/ci-deps-update/REPORT.md 変更理由・検証結果・7日ルール根拠のレポート追加
Files not reviewed (1)
  • pnpm-lock.yaml: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml
Comment on lines 37 to 39
permissions:
pull-requests: write
steps:

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

検証結果を共有します。

403になるという点は事実誤認です: PRへのコメントは issues API 経由でも pull-requests スコープで認可されます(GitHubはリソース種別で権限をマッピング)。実証として、この permissions: pull-requests: write のみの設定で、本PRのCI実行(run 27398357374, 06:16:56Z)にて github.rest.issues.listComments/createComment実際に成功し、github-actions[bot] のプレビューコメントが投稿されています。

contents: read の点は妥当なので採用しました: permissions明示時に未指定スコープがnoneになるのはご指摘の通りで、checkoutが通っていたのはpublicリポジトリだからです。private化に備えて c9c77cfcontents: read を明示しました。

permissionsブロック明示時は未指定スコープがnoneになるため、
actions/checkout用にcontents: readを明示(現状はpublicリポジトリのため
動作していたが、private化に備えた堅牢化)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kazuph kazuph merged commit 1e22342 into main Jun 12, 2026
2 checks passed
@kazuph kazuph deleted the feature/ci-deps-update branch June 12, 2026 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants