本卡屬 FR-091(母卡 CM-1690)第三批。中量:六張表、1 條 route(issue member)、3 個 entity 檔、沒有 harness 目錄要新建。主專案 venv 裡這支是 Nexus wheel,主專案側驗證必帶 PYTHONPATH。主專案接線已在
core/plugins/issue.py(CM-1689),本卡不動主專案。
jedi-issue(議題/回饋單)plugin.py 314 行 6 dataclass,api/init.py 90 行含 ctx() 7 處,logger 有五種名("app"、"domain"、"infra"、"tests"、name)——前三個會與主專案的 logger 樹撞名,log 混進別人的 handler;"tests" 出現在正式碼裡是抽出時的殘留。40 處施工日誌。沒有 harness,套件無法離開主專案獨立起來驗。整成 jedi-asset 那個樣子。
首腦核對(2026-09-13):plugin.py 314 行 6 dataclass;api/init.py 90 行;route 1(issue_member_route);entity 檔 3(0 dataclass);表 issues/labels/members/issue_assignee_mapping/issue_label_mapping/issue_upload_file_mapping;migration 0(表由主專案 scripts/sql 建,不要為本卡新增 migration);tests 123 支(無 integration);harness 無;施工日誌 40 處;ctx() 7 處;不吐 created_user_name → 不開 identity port;tests/test_plugin_contract.py:26 PKG_ROOT 用 issue_plugin.__file__(拆檔後會指錯,本卡一併改)。主專案 8 檔 import(含 core/plugins/issue.py、di_containers/issue/feedback、app/feedback、api/label);主專案 pyproject.toml pin 的是 Nexus wheel。
套件:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-issue/
範例:jedi-asset/(plugin/ 五檔、api/guards.py+routing.py、tests/unittest/test_plugin_layout.py、tests/integration/test_service_behaviour.py、harness/dev_app.py --smoke+docker-compose.yml)
整合測試 conftest 範本(自建宿主最小生態、cm_app 身分連線):jedi-system-core/tests/integration/conftest.py
SOP:extraction-sop.md §4.3/§3.4/§6.1/§8;說明:plugin-anatomy.md
主專案 import 面:grep -rn "from jedi_issue\|import jedi_issue" compliance-manager-be --include='*.py' --exclude-dir=.venv(8 檔)
plugin.py → plugin/ 五檔(無 migration 不建 migrations.py);api/__init__.py → guards.py(runtime()+lazy decorator)+routing.py。對外 import 路徑一字不改,__all__ 列齊,Blueprint(name, "jedi_issue.plugin") 寫死。同時把 tests/test_plugin_contract.py 的 PKG_ROOT 改成 Path(jedi_issue.__file__).resolve().parent(CM-1702 修過的坑:從 plugin 取會在拆檔後只掃 plugin/ 子目錄),改完做一次「app/ 加反向 import → 守衛紅」的突變。common.jedi_issue;命名統一。inspect.signature 逐欄對照預設值。getLogger("tests") 那處是殘留,一併處理。harness/(dev_app.py 含 --smoke、docker-compose.yml 起 postgres,表用主專案 scripts/sql/ 對應的 DDL 或 Base.metadata.create_all 建,照 jedi-asset);pyproject.toml 加 addopts = "--import-mode=importlib";README 補新結構與接線路徑。tests/integration/test_service_behaviour.py(目錄新建):真 postgres 建六張表,issue 建立→指派 member→貼 label→查詢→刪除一輪。這支表由主專案建,conftest 用 Base.metadata.create_all 即可。test_plugin_contract.py 凍結集合同綠。.venv/bin/python -c "import jedi_issue;print(jedi_issue.__file__)"——首腦已查是 site-packages 的 wheel,主專案側每一條驗證都要 PYTHONPATH=/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-issue,帶與不帶各印一次貼進回寫。不改主專案 pin。pytest tests/ --import-mode=importlib(需 docker);harness --smoke;主專案 PYTHONPATH=... pytest test/test_module_boundaries.py;主專案 8 檔 import 用 AST 掃逐一實跑。