本卡屬 FR-091(母卡 CM-1690)第二批。中量:兩張表(system_configs、system_menus)、2 支 migration、8 條 route、api/init.py 272 行是這批最厚的。harness 已有
--smoke(可直接當範本給同批其他支抄)。主專案側接線已由 CM-1689 收進core/plugins/system_core.py,本卡不動主專案。
jedi-system-core 是 FR-080 把 system-config 與 system-menu 兩支硬併成的,所以內部兩套寫法並存(跟 jedi-asset 整理前設備/資訊系統的狀況一模一樣)。plugin.py 362 行 6 dataclass,api/init.py 272 行裝守門、ctx() 23 處與兩組路由表,logger 只用 name(沒掛 common. 樹,主專案的 log 轉發鏈收不到)。45 處施工日誌。本卡整成 jedi-asset 那個樣子,並把兩套內部寫法統一(照 jedi-asset C 組)。
首腦核對(2026-09-12):plugin.py 362 行 6 dataclass;api/init.py 272 行;route 8;entity 檔 3(0 dataclass);表 system_configs、system_menus;migration 2 支;tests 153 支(無 integration 目錄);harness 有 compose+--smoke;施工日誌 45 處;ctx() 23 處;logger name ×3;不吐 created_user_name → 不開 identity port。主專案 venv 裡指工作樹(path override 生效)。主專案 18 檔 import。
套件:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-system-core/
範例:jedi-asset/;SOP:extraction-sop.md §4.3/§3.4/§8;說明:plugin-anatomy.md
主專案 import 面:grep -rn "from jedi_system_core\|import jedi_system_core" compliance-manager-be --include='*.py' --exclude-dir=.venv(18 檔)
主專案 pyproject.toml:74~98 有一段關於 system-config/system-menu 合併與 pin 的施工日誌註解——那是主專案的檔,本卡不動,首腦另收
plugin.py → plugin/ 五檔(含 migrations.py);api/__init__.py 272 行 → guards.py+routing.py(config 與 menu 兩組路由表併進同一張 routing.py,分兩段)。對外 import 路徑一字不改。拆完用 AST 掃主專案 18 檔的 import 逐一實跑。common.jedi_system_core;config/menu 兩套內部寫法統一(route class 命名、service 屬性名、repo 方法名、error code 命名)——照 jedi-asset 60b2ada 那個 commit 的做法,先列差異表再改。inspect.signature 逐欄對照預設值。--smoke 已有,確認拆檔後仍過;pyproject.toml 加 addopts = "--import-mode=importlib";README 補新結構與接線路徑。tests/integration/test_service_behaviour.py(目錄要新建,conftest 照 jedi-asset):真 postgres 套 001/002,config 讀寫一輪、menu 樹讀取一輪,斷言 RLS/grant 生效。test_plugin_contract.py 凍結集合同綠。.venv/bin/python -c "import jedi_system_core;print(jedi_system_core.__file__)"。首腦查是工作樹,但仍要印一次確認;指到 site-packages 就加 PYTHONPATH。pytest tests/ --import-mode=importlib(需 docker);harness --smoke;主專案 pytest test/test_module_boundaries.py;主專案 18 檔 import 逐一實跑。