本卡屬 FR-091(母卡 CM-1690),版面殘留回補第二張。動三支已 Done 的套件,主專案不改。建議 model:Sonnet 5,effort:medium。可與 CM-1731 平行。

問題是什麼(白話)

SOP 說 port(套件要宿主提供的介面)放 domain/ports.py。首腦 2026-09-13 掃 21 支發現有五支開了頂層 ports/ 目錄:file-upload、issue、notification、oscal-v2(無 plugin,不在 FR-091 範圍)、iam(兩邊都有,CM-1725 在跑,收回時要求收斂)。兩處並存,讀者分不清哪個才是 port。另外 jedi-issue 把 tests/ 放在 jedi_issue/tests/ 套件內,靠 pyproject.toml 一條 exclude 才不進 wheel,其他 20 支都在套件根。這些都是 FR-069 早期抽取時各自就近做的選擇,FR-091 第一批~第三批整理時沒列入檢查項。今天已把三條規則補進 SOP §4.3(頂層不平鋪、port 只放 domain/ports.py、tests 在套件根),這張卡把已 Done 的三支收乾淨。

首腦核對過的現況

怎麼做(一支一個 commit)

要寫測試

手測(驗證等級:中——file-upload 是上傳路徑)