本卡屬 FR-169(母卡 CM-3223(https://app.notion.com/p/FR-169-Agent-8-5-408346da4cd081eeb138ef3e49d3240e)),卡 B4,批 8。只改 BE(主 repo,Repo 欄空著)。依賴:P2。

🔴 本卡是決策者 2026-10-29 實測「證據附件下載沒加密」後的全站出口盤點補卡。最大宗的上傳檔那條(jedi-file-upload)首腦已自己修好並發版 1.5.0、BE 釘版、FE 12 處改接,本卡只處理剩下三支套件的匯出端點。前面所有卡的成果都已合回四個 repo 的 feature/FR-139,工作區 .worktrees/CM-3223 與主資料夾一致,直接疊上去做。

這張卡做什麼(白話)

P2 給三支套件開了掛點,本卡在主系統把 send_protected 注進去:三支 core/plugins/<pkg>.py 的 build_adapters 各加一行 download_responder=...,直接 reuse core/plugins/_file_upload_download.py 那支 responder(把 source 改成可傳入,三支各自一個稽核代號)。做完操作日誌、意見回饋、任務批次三個匯出跟其他匯出一樣:不帶密碼 400、帶密碼拿到加密檔。FE 對應的三顆按鈕(EXPORT_API_LOGS、FEEDBACK_EXPORT、GRC_JOBS_EXPORT)要改走 useProtectedDownload,否則合回後這三顆鈕會 400——由首腦另開 FE 卡或併進本卡,看決策者。

reuse/extend/new

reuse:core/plugins/_file_upload_download.protected_download_responder 直接給三支套件用(同一支函式、source 改成各自代號可加參數);三支 core/plugins/<pkg>.py build_adapters 各加一行。FE:操作日誌匯出、意見回饋匯出、任務批次匯出三處改 useProtectedDownload().download(...)(FE 改動另開一張卡或由首腦決定併卡,本卡只列 BE)

在哪裡

repo:~/Projects/Billows/Audit-Manager/compliance-manager-be
改既有:core/plugins/api_log.py
改既有:core/plugins/issue.py
改既有:core/plugins/task.py
改既有:core/plugins/_file_upload_download.py(source 參數化)
改既有:pyproject.toml(三支套件釘版,發版後)

怎麼做

驗收(首腦照這個驗)

DEV 重啟後三個匯出端點不帶密碼 400、帶密碼回加密檔且 X-File-Protected: 1;稽核 source 各自代號;grep -rn send_file( .venv/lib/python3.11/site-packages/jedi_*/ --include=*.py | grep -v tests 剩下的全是不接清單上的

必讀