本卡屬 FR-092(母卡 CM-1703),第 6 棒盤點(CM-1709)產出。改
pyproject.toml的宣告,不改任何程式碼。報告docs/features/FR-092-2609-dead-code-cleanup/scan-unused-deps.md為準。
主專案 pyproject 有三支套件從專案第一個 commit 起就沒有任何一行程式碼 import 過(gevent、flask-marshmallow、google-auth-oauthlib),每次出貨都白裝約 9.8 MB 與三份授權/CVE 面。反過來,有五支套件主專案天天在用卻沒宣告,全靠 jedi 套件當相依帶進來——其中 openpyxl 撐著 xlsx 匯入匯出核心功能(11 支活檔),哪天套件 pin 一換主專案就在執行期炸,而 pyproject 上完全看不出來。
首腦核對:gevent 全 monorepo 零 import(含 .venv 外)、gunicorn 無 worker_class、SocketIO 走 eventlet;openpyxl 12 支活檔模組層 import、pyproject 零宣告。屬實。
pyproject.toml:26 "flask-marshmallow==1.2.1" 拔
pyproject.toml:30 "gevent==24.11.1" 拔
pyproject.toml:64 "google-auth-oauthlib (>=1.2.0,<2.0.0)" 拔
pyproject.toml [project].dependencies 補:openpyxl/werkzeug/cryptography/requests/httpx
git diff pyproject.toml 看一眼;本卡只動上面三行與新增五行,不碰 jedi 段落、不還原也不擴大那些 override。commit 時用 git add -p pyproject.toml 只挑本卡的 hunk。若判斷 hunk 分不乾淨,停下回寫本卡問決策者。openpyxl (>=3.1.5,<4.0.0)、werkzeug (>=3.1,<4.0)、cryptography (>=42.0,<47.0)(對齊 jedi-license-runtime/remote-agent 的區間)、requests (>=2.31,<3.0)、httpx (>=0.28,<0.29)(對齊 jedi-detection 等三支的區間,避免解析衝突)。poetry update(不用 poetry lock),確認 lock 內 gevent/zope.event/zope.interface/requests-oauthlib/oauthlib 消失、五支新宣告出現。不寫。驗:python main.py 起得來+RUN_MODE=socketio python main.py 起得來(驗 eventlet 路徑)+守衛三檔綠+python -m pytest test/ -k 'excel or xlsx or template' -q 綠(openpyxl 路徑)。
scripts/build/ 對這八支零提及,不需改;docs/claude/deployment-env.md 若有列依賴清單順手對一下。