|
1 | 1 | # 日報 — 2026-08-12 |
2 | 2 |
|
3 | 3 | **作業者**: hideyukiMORI |
4 | | -**バージョン**: v1.8.169(セッション終了時点) |
| 4 | +**バージョン**: v1.8.170(セッション終了時点) |
5 | 5 |
|
6 | 6 | --- |
7 | 7 |
|
@@ -269,13 +269,69 @@ GitHub により自動的に無効化される**(公式ドキュメントに |
269 | 269 |
|
270 | 270 | --- |
271 | 271 |
|
272 | | -## 5. 明日以降の方針 |
| 272 | +## 5. 依存の下限引き上げと mcp の 1.x 固定(v1.8.170) |
| 273 | + |
| 274 | +`uv.lock` は**このリポジトリの CI と開発環境しか守らない**。PyPI から入れた利用者が |
| 275 | +古い版に固定していれば、脆弱な依存で動く。利用者へ伝播させるには宣言側を上げる必要がある。 |
| 276 | + |
| 277 | +### 5-1. 直接依存の下限をセキュリティ床として引き上げ(公開メタデータが変わる) |
| 278 | + |
| 279 | +| 依存 | 変更 | advisory | |
| 280 | +|---|---|---| |
| 281 | +| `mcp` | `>=1.0` → **`>=1.28.1`** | PYSEC-2026-3481 / 3482 / 3483 | |
| 282 | +| `python-multipart` | `>=0.0.12` → **`>=0.0.31`** | PYSEC-2026-3036 / 3037 / 3040 | |
| 283 | +| `pydantic-settings` | `>=2.6` → **`>=2.14.2`** | GHSA-4xgf-cpjx-pc3j | |
| 284 | + |
| 285 | +### 5-2. mcp を 1.x 系に固定(`constraint-dependencies`) |
| 286 | + |
| 287 | +```toml |
| 288 | +[tool.uv] |
| 289 | +constraint-dependencies = ["mcp<2"] |
| 290 | +``` |
| 291 | + |
| 292 | +`pyproject.toml` の `dependencies` に `mcp<2` と書くと、**上限が全利用者へ伝播して |
| 293 | +下流の解決衝突を生む**(ライブラリに上限を書かない慣行の理由)。 |
| 294 | +`constraint-dependencies` は `uv.lock` の解決にのみ適用され、`requires-dist` には漏れないので、 |
| 295 | +**その副作用だけを外せる**。実測で確認した: |
| 296 | + |
| 297 | +| 確認項目 | 結果 | |
| 298 | +|---|---| |
| 299 | +| 解決される `mcp` | **1.29.0**(2.0.0 へ飛ばない) | |
| 300 | +| `requires-dist` の `mcp` | **`>=1.28.1`**(`<2` は含まれない) | |
| 301 | +| 対照: `uv lock --upgrade-package mcp` を明示実行 | **1.29.0 のまま・lock に差分なし** | |
| 302 | + |
| 303 | +外す条件は (a) 上流の 1.x サポート終了、(b) 2.0 固有機能が必要になったとき。 |
| 304 | +`pyproject.toml` のコメントに①何を止めているか②理由③外す条件④参照先を併記した。 |
| 305 | +**理由の無い制約は、半年後には理由不明の呪いになる。** |
| 306 | + |
| 307 | +### 5-3. 🔴 残り 4 パッケージは親の下限では塞げない(実測) |
| 308 | + |
| 309 | +今回の advisory 8 パッケージのうち、直接依存は上記 3 つだけ。残り 4 つの経路を `uv tree` で実測: |
| 310 | + |
| 311 | +| パッケージ | 経路 | 親の宣言 | 必要版 | 到達可否 | |
| 312 | +|---|---|---|---|---| |
| 313 | +| `pyjwt` | ← `mcp[crypto]` | `pyjwt[crypto]>=2.10.1` | 2.13.0 | 🔴 **不能** | |
| 314 | +| `cryptography` | ← `pyjwt[crypto]` ← `mcp[crypto]` | `cryptography>=3.4.0` | 50.0.0 | 🔴 **不能** | |
| 315 | +| `starlette` | ← `fastapi` + `mcp` + `sse-starlette` | `fastapi 0.136.1`(最新)が `starlette>=0.46.0` | 1.3.1 | 🔴 **不能** | |
| 316 | +| `msgpack` | ← `cachecontrol` ← `pip-audit[filecache]` | `msgpack>=0.5.2,<2.0.0` | 1.2.1 | 🟢 **dev 依存のみ・配布物に含まれない** | |
| 317 | + |
| 318 | +**`msgpack` は利用者に無関係**(dev 専用)。残り 3 つは、**最新の親でさえ下限が足りない**ため、 |
| 319 | +親の版を上げるという手段では到達できない。塞ぐには nene2-python が |
| 320 | +`pyjwt` / `cryptography` / `starlette` を**直接依存として宣言する**しかなく、 |
| 321 | +**使っていない依存をバージョン床のためだけに抱える**ことになる。 |
| 322 | + |
| 323 | +ライブラリとしての是非を含めて要判断のため、本リリースの射程外とした。 |
| 324 | + |
| 325 | +--- |
| 326 | + |
| 327 | +## 6. 明日以降の方針 |
273 | 328 |
|
274 | 329 | | 優先度 | タスク | |
275 | 330 | |---|---| |
276 | | -| 中 | **mcp 2.0 移行**(本日の調査 §2 が設計ノート。バージョン境界の決定が着手条件) | |
277 | | -| 中 | **依存の定期再検査を仕組み化**(`schedule:` トリガー CI か月次 `uv lock --upgrade` 運用) | |
278 | | -| 判断待ち | `pyproject.toml` の `mcp` / `python-multipart` / `pydantic-settings` の下限引き上げ(利用者影響あり) | |
| 331 | +| 判断待ち | 🔴 **推移的依存(`pyjwt` / `cryptography` / `starlette`)を直接宣言して床を作るか**(§5-3)。ライブラリが使っていない依存を抱える是非 | |
| 332 | +| 判断待ち | **CI 失敗の通知経路**(配信は機能しているが受信箱が飽和・§4) | |
| 333 | +| 中 | 🔴 **週次 schedule 自体の生存監視**(60 日自動無効化・§4) | |
| 334 | +| 塩漬け | **mcp 2.0 移行**(§2 が設計ノート。`constraint` で 1.x 固定済み。解除条件は §5-2) | |
279 | 335 | | 低 | PyJWT 推移的 CVE(PYSEC-2025-183)— mcp 修正待ち | |
280 | 336 |
|
281 | 337 | オープン Issue / PR: ゼロ。main クリーン。**CI グリーン**(3.12 / 3.14・実 DB 統合テスト含む)。 |
0 commit comments