一句話:本卡為 FR-099 母案,把主專案的「意見回饋」與「標籤」兩個模組整組併進 jedi-issue 套件,做完主專案這兩塊目錄全刪、只剩 core/plugins/issue.py 一個接線檔。三棒,實作類。子卡清單在末段。

這系列在做什麼(白話)

系統裡有個「意見回饋」功能:使用者填表回報問題,管理員在後台看清單、改狀態、匯出 Excel。旁邊還有個「標籤」功能,提供回饋表單上的「回饋類型」「功能分類」兩個下拉選單。

這兩個功能的程式現在放在主專案(compliance-manager-be)裡,但它們的資料和大半邏輯其實早就住在 jedi-issue 這支套件裡了——主專案那份只是一層殼,從頭到尾在呼叫套件。本案把這層殼也收進套件,讓「意見回饋」變成一個裝上就能用的完整零件,新產品要用直接裝套件就有,不必再抄一份程式。

做完之後,主專案的 api/feedback/、api/label/、app/feedback/、domain/feedback/、infra/feedback/ 這五個目錄全部刪除,對外的網址(URL)一個字都不變,使用者完全感覺不到差別。

為什麼要做

2026-09-16 決策者 review 主專案剩餘 route 時點出來的。過去幾輪模組化(FR-069/FR-080)是「按目錄掃」的:api/issue/ 被搬進套件了,但意見回饋叫 api/feedback/、標籤叫 api/label/,是另外兩個目錄名,掃的時候沒被認出來是同一件事,就留在原地。

更麻煩的是套件 README 上有兩條錯誤聲明,等於事後幫這個漏洞蓋章——它寫著「Issue 本體產品目前未使用」「GitHub/GitLab 整合產品目前沒在用」。實際上意見回饋兩者都在用。後面每一輪盤點的人讀了 README,都會以為 issue 那塊是死的、不用管。

首腦核對過的證據(2026-09-16 實查,runner 不必重做)

① 主專案 feedback 幾乎整條鏈都在呼叫套件——app/feedback/service/issue_service.py 全檔在包 jedi-issue 的 IssueService,24 處呼叫(grep jedi_issue 主專案共 35 處命中)。

② infra/feedback/model/feedback_issue.py 那張表 feedback_issues 只有四個欄位(issue_uid + gitlab_issue_uid + github_issue_uid + 審計欄),是一張純關聯表,標題內容全靠 relationship 從套件的 issues 表撈。

③ DEV 庫實查資料量:issues 23 筆、labels 35 筆、feedback_issues 14 筆。表都在 public schema,其中 issues/labels/members 等六張 owner 是 ammgr(隨套件走),feedback_issues owner 是 cmmgr(主專案的)。

④ api/label/routes/label_route.py 全檔 23 行,只做一件事:呼叫 jedi_issue.app.label.service.LabelService。是純轉發殼。

⑤ FE 三處打 /labels/menu,全在 src/views/feedback/ 底下(SystemFeedbackForm.vue 兩處抓 FEEDBACK_TYPE/FUNCTION、SystemFeedbackManage.vue 一處)。標籤不是獨立功能,是回饋的附屬品。

⑥ 🔴 label_repo/label_domain_service 在 di_containers/feedback/ 與 di_containers/issue/ 兩個 container 裡各建了一份——這是 FR-090 第 6 棒明文禁止的「主專案重複建套件 service」,本案順手收掉。

⑦ DEV 庫 system_configs 的 ISSUE_INTEGRATE_CONFIG:GITLAB 與 GITHUB 兩筆 enable 都是 false,但 FE 有完整設定頁 src/views/issue-integrate-config/IssueIntegrateConfigForm.vue 讓管理員開啟。

⑧ 套件 plugin/contract.py 已宣告四個能力點 issue-integrate-config.{create,read,update,delete}(皆 is_platform=True);但 feedback.{create,read,update,delete,export} + feedback-view.read 這六個還在主專案的 capabilities 表,尚未進套件宣告。

決策者已拍板(D1~D3)

D1(2026-09-16):GitLab/GitHub 外部整合保留,整組搬進套件。連同 FE 設定頁一起視為正式功能,python-gitlab 與 PyGithub 兩支相依也留著。理由:日後客戶要開就能開,不做去留決策省下的爭議大於維護成本。

D2(2026-09-16):開成獨立 FR-099,母卡+子卡,不掛在 FR-090/FR-092 底下。理由:牽涉 BE+FE+套件三個 repo,且要留得下完整脈絡。