本卡屬 FR-111(母卡見建卡後補號),第 4 棒:設定與插件殼:分類設定 CRUD/模型碼表/plugin 契約/守門殼(jedi-evidence-classification,16 檔 1,850 行)。只掃不修。

這一棒在做什麼(白話)

「AI 分類設定」(哪家供應商、哪個型號、思考深度、AI 人設與提示詞)的建改刪查與守門、可選模型清單、以及套件怎麼掛進宿主(plugin 契約、接線檢查、路由表、port 介面)。

為什麼切這一塊

設定管所有專案的 AI 行為。守門是「能改系統設定的人」(CM-1867 從平台管理員放寬到租戶管理員),RLS 刻意讓每個租戶讀得到 ROOT(原廠)那一列。金鑰解析鏈「租戶→ROOT 原廠鑰→環境變數」的本體在主專案側,本棒看套件這一半:套件有沒有把鑰或「誰有鑰」露出去。插件殼是所有端點的認證來源,缺零件要拒絕啟動而不是靜默放行。

重點看什麼(工具不照清單走,掃完逐項回頭核,沒碰的自己開檔查並標「(工具未報,人工查證)」)

已知背景(未經本輪面板驗證,只是參照)

本套件從未掃過。 分類設定是 FR-107 T-5.x/CM-1864(建表+四層解析鏈)、CM-1867(守門放寬到租戶管理員+清單保留通用那幾筆)、CM-1885(模型碼表換代+思考深度三檔)、CM-1888(型號反查供應商)連做的,scope 對到 HEAD 955e409。金鑰解析鏈本體 app/system_config/service/ai_provider_key_resolver.py(199 行)與 adapter core/plugins/evidence_classification.py:149-203 在主專案,不在本棒——本棒答「套件有沒有把鑰露出去」,答不了「解析鏈守不守」,那是主專案接線棒的事(FR README 已註明兩支要同棒)。插件殼形狀與 jedi-survey(FR-109 V1 ⑥,正面案例)同一代,可對照。

怎麼做

第一步:驗 scope 檔數與行數,對上 16 檔/約 1,850 行才啟動(scope 以套件 HEAD 955e409 為準;git log -1 --format=%h 不是它就先回報,不自行改 scope):

cd /Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-evidence-classification && git ls-files -- jedi_evidence_classification/app/service/classification_profile_service.py jedi_evidence_classification/api/routes/classification_profile_route.py jedi_evidence_classification/api/schemas/classification_profile_schema.py jedi_evidence_classification/domain/llm_models.py jedi_evidence_classification/domain/service/classification_profile_domain_service.py jedi_evidence_classification/infra/repository/classification_profile_repository_impl.py jedi_evidence_classification/domain/entity/classification_profile_query_entity.py jedi_evidence_classification/migrations/005-classification-profiles.sql jedi_evidence_classification/plugin/__init__.py jedi_evidence_classification/plugin/assembly.py jedi_evidence_classification/plugin/contract.py jedi_evidence_classification/plugin/runtime.py jedi_evidence_classification/plugin/migrations.py jedi_evidence_classification/api/guards.py jedi_evidence_classification/api/routing.py jedi_evidence_classification/domain/ports.py | wc -l   # 要 = 16
cat jedi_evidence_classification/app/service/classification_profile_service.py jedi_evidence_classification/api/routes/classification_profile_route.py jedi_evidence_classification/api/schemas/classification_profile_schema.py jedi_evidence_classification/domain/llm_models.py jedi_evidence_classification/domain/service/classification_profile_domain_service.py jedi_evidence_classification/infra/repository/classification_profile_repository_impl.py jedi_evidence_classification/domain/entity/classification_profile_query_entity.py jedi_evidence_classification/migrations/005-classification-profiles.sql jedi_evidence_classification/plugin/__init__.py jedi_evidence_classification/plugin/assembly.py jedi_evidence_classification/plugin/contract.py jedi_evidence_classification/plugin/runtime.py jedi_evidence_classification/plugin/migrations.py jedi_evidence_classification/api/guards.py jedi_evidence_classification/api/routing.py jedi_evidence_classification/domain/ports.py | wc -l   # 要 ≈ 1850

第二步:把啟動指令交給決策者(你不能自己啟動)。/claude-security 這個 skill 帶 disable-model-invocation: true,模型用 Skill tool 叫會被擋;也不可以自己叫 Workflow 或自己派研究員/verifier 代替它——面板票數是工具算的、報告的驗證章蓋在那個數字上。這是刻意設計不是故障,撞到不要 debug、不要找繞路。

檔數對上後停下回報:說「檔數 16 已對上,可啟動」,並把下面兩行原樣附在回報裡交還給決策者,由決策者在本 session 親手打(單次送出、第二行不能省、每個新 session 都要重打):