Skip to content

MCP 2026-07-28 対応 + GitHub レーンの溢れ修正 - #48

Merged
sasagar merged 2 commits into
mainfrom
dev
Aug 4, 2026
Merged

MCP 2026-07-28 対応 + GitHub レーンの溢れ修正#48
sasagar merged 2 commits into
mainfrom
dev

Conversation

@sasagar

@sasagar sasagar commented Aug 4, 2026

Copy link
Copy Markdown
Member

GitHub レーンの溢れが黙って切られるのを直す (a8b467e)

レーンには最初から overflow-y: auto が書かれていたのに効いていなかった。子の
.week-grid-github-viewport が既定の align-self: stretch だったため、子がレーンの
高さまで縮められ scrollHeightclientHeight を超えず、スクロールバーを出す条件が
成立しない。溢れは横方向の週送りクリップ用の overflow: hidden が吸収するので、
警告も出ずに項目が消えていた。align-self: flex-start で解消。

なお macOS のオーバーレイスクロールバーは静止時に出ないため、静的な手がかりは
依然として「行が途中で切れて見える」ことだけ。フェード表示はやりすぎと判断して見送った。

MCP を 2026-07-28 仕様に追随させる (50ab74f)

仕様 2026-07-28 は initialize ハンドシェイクと Mcp-Session-Id を廃止した破壊的改訂。
kichijitsu は 2025-11-25 のままで、新仕様の tools/list が完全に不通だった。

SDK を上げるだけでは済まなかった — 2026-07-28 対応は SDK v2 (別パッケージ) にあり、
McpAgent は agents 0.20.0 で deprecated / feature-frozen。このため
McpAgent (DO + SDK v1) → createMcpHandler + SDK v2 へ移行した。

あわせて Origin 検証を追加した。 両リビジョン共通の MUST でありながら実装が無く、
適合性スイートでも落ちていた (SDK 非依存の自前実装の穴)。認証より先に評価する。

適合性スイート (ローカル wrangler dev に対してのみ実施)

シナリオ
server-stateless (2026-07-28) 5/31 24/28
http-header-validation 13/13
tools-list (2026-07-28) 不通 2/2
dns-rebinding-protection 1/2失敗 2/2
server-initialize (2025-11-25) 通過 1/1

残り4件はすべて "Not testable" (診断用フィクスチャツール未実装、または未公開の capability)。

後方互換

createMcpHandler は1本のハンドラで両世代を捌く。2026-07-28 は initialize から
ネゴシエートされない設計なので、設定済みの Claude は従来どおり 2025-11-25 で接続する。
ローカルで旧世代 tools/list が10ツール全て返し work_summary 呼び出しが成功することを実測済み。

レビュー時の注意

  • migration v4 で本番の DO クラス KichijitsuMcpAgent を削除する。read-through 設計で
    永続データを持っていなかったので失われる状態はないが、一方通行の変更
  • allowedOriginHostnames: "*"mcp-origin.tsセットで初めて安全。ハンドラ既定の
    許可リストが本番ドメインを弾くため無効化し、代わりに自前検証を手前に置いている。片方だけ消さないこと。

ドキュメント

MCP が DO を経由しなくなったので、規約の「返した予定の要約が Durable Object の作業領域を
通る」という記述を削除した (privacy.html の JA/EN と docs/data)。もう存在しない仕組みの説明だった。


sync 771 passed / web 1499 passed / lint 通過 / 公式ビルドのプレースホルダ埋込・自己ホスト漏れ検査ともにクリーン。

🤖 Generated with Claude Code

https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ

sasagar and others added 2 commits August 4, 2026 23:00
max-height: 30vh を超えた分がスクロールできず消えていた。実測で issue/PR 4件が
完全に見えず1件が途中切断、タスクレーン相当の器では 386px が消えていた。

**原因は viewport の align-self が既定の stretch だったこと。** viewport がレーンの
切り詰められた高さまで引き伸ばされるため、中身が高くてもレーン自身は「はみ出して
いない」状態(scrollHeight === clientHeight)になり、**レーンに元から書いてあった
overflow-y: auto がスクロールバーを出す機会が無かった**。はみ出しは viewport の
overflow: hidden(週送りスライドのための**横方向**のクリップ)が黙って引き受けていた。
設計変更ではなく、意図が効いていなかった不具合。align-self: flex-start の1行で戻る。

高さ由来の「+N」は足さない。打ち切りが二重になるうえ、高さの上限はレーン全体に・
「+N」は日ごとに掛かるので、2つの N が別の粒度で並んでどちらを見ているか分からなくなる。
打ち切りは「+N」の1箇所に閉じ込め、高さ超過はスクロールで解決する役割分担にした
(GITHUB_MAX_VISIBLE_MILESTONES はグループ数の上限であって高さの上限ではなく、
2グループ × 6件 = 15行 で上限内でも 30vh を超える)。

あわせて2点。scrollbar-gutter: stable ― 常時表示型スクロールバーの環境で、溢れた週だけ
日列が細くなって終日レーン・時刻グリッドと列がずれるのを防ぐ(終日レーンと本体は既に
stable なので揃えただけ)。gutter に position: sticky ― スクロールすると行ラベルが
流れて消える。GitHub 側はそのラベルが畳むボタンそのもの。

タスクレーンも構造も原因も同一だったので同じ直し方を当てた。

溢れていない場合が不変であることは、DOM ジオメトリで確認(30vh に収まる高さで
.week-grid-github 配下の全154要素の x/y/width/height を突き合わせて差分ゼロ)。
ピクセル比較は現在時刻線があり無変更でも一致しないため。

なお macOS のオーバーレイ型スクロールバーは静止時に出ないので、静止画では行の途中切れ
以外に手がかりが無い。恒常的な目印(下端のフェード等)は入れていない。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ
MCP 仕様 2026-07-28 は initialize ハンドシェイクと Mcp-Session-Id を廃止し、
リクエストごとに _meta でバージョンを運ぶステートレス方式へ移行した破壊的改訂。
kichijitsu は 2025-11-25 を名乗ったままで、新仕様の tools/list が
「Mcp-Session-Id header is required」で完全に不通だった。

SDK を上げるだけでは済まない: 2026-07-28 対応は SDK v2 (別パッケージの
@modelcontextprotocol/server) にあり、McpAgent は agents 0.20.0 で
deprecated / feature-frozen になって新仕様を話せない。このため
McpAgent (Durable Object + SDK v1) から createMcpHandler + SDK v2 へ移行する。
ツール10本の意味論は保存したまま mcp-server.ts へ移設した。

あわせて Origin 検証を追加する。DNS リバインディング対策として両リビジョン
共通の MUST でありながら実装が無く、適合性スイートでも落ちていた
(SDK 非依存の自前実装の穴)。認証より先に評価する。Origin 無しは許可 —
仕様の条件が "present and invalid" であり、Claude 等の非ブラウザ
クライアントは Origin を送らないため (mcp-origin.ts のコメント参照)。

適合性スイート (@modelcontextprotocol/conformance、ローカルの wrangler dev
に対してのみ実施):
  server-stateless (2026-07-28)      5/31 → 24/28  ※残り4件は Not testable
  http-header-validation             —    → 13/13
  tools-list (2026-07-28)            不通 → 2/2
  dns-rebinding-protection           1/2失敗 → 2/2
  server-initialize (2025-11-25)     通過 → 1/1 通過

後方互換: createMcpHandler は1本のハンドラで両世代を捌く (legacy: "stateless"
レーンが initialize を受ける)。2026-07-28 は initialize からネゴシエート
されない設計なので、設定済みの Claude はこれまで通り 2025-11-25 で接続する。

MCP が DO を経由しなくなったので、規約とドキュメントの「返した予定の要約が
Durable Object の作業領域を通る」という記述を実態に合わせて削除した
(privacy.html の JA/EN と docs/data)。もう存在しない仕組みの説明だった。

test 755 → 771 passed (既存テストの書き換えなし、+16 は Origin 検証の新規)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ
@sasagar
sasagar merged commit ff5b267 into main Aug 4, 2026
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.

1 participant