本卡屬 FR-107(母卡 CM-1843),第 .2 棒:儲存 port 與容器改取檔。這是子需求卡,實際工作在底下的子任務卡。

這一棒在做什麼(白話)

port(插座) 是套件開出來的抽象介面:套件只說「我需要有人幫我拿檔/找任務/查框架版本」,實際怎麼拿由主專案插上去的 adapter(轉接頭) 決定。這樣套件就不必知道檔案存在主機硬碟、物件儲存還是客戶內網的遠端代理。

這一棒開三個插座(IEvidenceStorage 取檔放檔、ITaskEvidenceSink 找任務掛證據、IClassificationContext 查框架版本鏈),主專案寫對應的三個轉接頭。

同時改造分類容器:現在容器自己連資料庫、自己解密 Google Drive 憑證、自己下載檔案——等於把資料庫密碼交給一個外部容器。改成「主專案先把整批檔拉到一個工作目錄,再起容器,容器只讀那個目錄」(D2 甲案)。改完容器的環境變數只剩一個 AI 金鑰,網路可以完全關掉。容器 image 也從主專案搬進套件 repo,改名 evidence-classifier(原本叫 cmmc-classifier,名字綁死框架)。

為什麼切這一塊

這一棒是「把分類引擎與儲存方式解耦」的核心。插座定好之後,.3(分類跑在批次上)與 .5(框架去硬編碼)才有東西可以接;而容器改造牽動 image build 與出貨包,越早定下契約越好。

子任務清單

完成怎麼判定(決策者親手可做)

一台沒有 Drive 憑證、沒有資料庫密碼的容器跑一次分類能拿到檔、能回結果;儲存後端從 local 切到 seaweedfs 再跑一次,程式零改動;docker inspect 看新容器環境變數只剩 AI 金鑰。

依賴

前置:FR-107.1 完成(需要批次表與 IEvidenceStorage 的骨架)。下游:.3 與 .5 都吃這一棒的 port。

相關座標