本卡屬 FR-188(母卡),實作設計決策 D2、D3 的套件端:失敗的手動掃描可以重新取檔。嚴重度:高。
Agent 手動掃描的結果送到主系統後,主系統還要向 Agent 取回報告檔才能整理。取檔那一步失敗,那筆就永遠是失敗:Agent 把同一筆再送一次,主系統以「同一台 Agent、同一筆本機編號」判定為重複直接忽略;主系統也沒有「重新取檔」的入口。報告檔其實還在 Agent 上,失敗的只是取檔那一步,卻只能整個重掃。
首腦核對:雲端 10:48 那筆,Agent 佇列在前門修好後 10:53:19 自動重送報告成功,但主系統請求早已逾時結案、source_scans 已 failed,檔案沒被接回處理。
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-source-scan/jedi_source_scan/app/service/agent_manual_scan_intake_service.py:120 insert_manual_ignore_duplicate:重送一律回 duplicate
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-source-scan/jedi_source_scan/app/service/sbom_scan_result_handler.py:152 run_manual/_process:取檔與整理;失敗寫 failed
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-source-scan/jedi_source_scan/app/service/source_scan_target_app_service.py:110 delete_scans(參考:只准刪失敗的,判準可沿用)
(agent_uid, agent_local_uid) 重送時,若既有那筆狀態是 failed,把狀態改回 running、更新 report_ref(以重送內容為準)、重新排 sbom_manual_result 背景工作;回應帶 duplicate: true 外加 requeued: true。running/done 照舊只回 duplicate。改狀態用條件式 UPDATE(WHERE status='failed'),兩筆同時重送不能排兩次。origin=agent_manual 且 status=failed,其他回 409(錯誤碼沿用本套件 SourceScanErrorCode,命名照 <前綴>_<HTTP碼><序號>)。做法與上一條重排共用同一個內部函式,不寫兩套。audit(...) 與事件碼寫法;事件碼是登記型共用檔,只在本套件內新增)。pyproject.toml 對應那行取消註解、env -u VIRTUAL_ENV poetry update <套件名>),path 改動不 commit(git update-index --assume-unchanged pyproject.toml poetry.lock)。本卡只改套件、不發版;發版與主 repo 改回釘版在結案卡做。🔴 不在卡工作區跑會動到共用 .venv 的指令;需要驗套件新行為時在 scratchpad 開獨立 venv。feature/FR-172,不切 branch;顯式 git add <檔名>、禁 -am;只 add 自己改的檔。commit 不等令,push 由決策者做。