本卡屬 FR-091(母卡 CM-1690)第二批。中量偏重:這支施工日誌最多(94 處),且主專案接線不在 CM-1689 收的 11 支內(走 config/app_modules.py:97 的 blueprint 載入迴圈,三張 adapter 在 infra/license/core/scheduler.py:244 還從 HANDLE_KEY 拿 handle),本卡順手收進 core/plugins/license.py授權鎖定是出貨關鍵路徑,本卡零行為變更,手測要走到鎖定與開通。

問題是什麼(白話)

jedi-license-runtime(授權執法端)plugin.py 443 行 5 dataclass 加 _RuntimeContextbuild_servicescreate_blueprintregisteriter_migrations 全塞一檔;api/ 沒有 __init__.py 守門,route 從 current_app.extensions[EXTENSION_KEY] 直接取(等於自己寫了一份 runtime()),api/routes.py 已經是路由表(形狀接近 routing.py)。94 處施工日誌(CM-1579、CM-1626 等沿革)塞在 docstring 裡。主專案側接線散在 api/license/__init__.pyinfra/license/ 三檔、di_containers/license/core/scheduler.py 四處。兩邊一起整成標準形狀。

首腦核對(2026-09-12):套件側 plugin.py 443 行 5 dataclass;api/routes.py(路由表+認證等級欄)、license_route.pylicense_admin_route.pyserializers.py,無 __init__.py 守門;route 14;entity 檔 3(1 dataclass);表 tenant_licensestenant_license_suspensions;migration 3 支;tests 63 支(無 integration);harness 有 compose、無 --smoke;施工日誌 94 處;ctx() 0 處(但 route 直接讀 extensions,要收成 runtime());logger common.jedi_license_runtime ×6/jedi_license_runtime ×1/name ×2;不吐 created_user_name → 不開 identity port。主專案側:api/license/__init__.pyinfra/license/{notifier,tenant_admin_directory_adapter,tenant_directory_adapter}.py(守衛白名單三列)、di_containers/license/license_containers.py(import tenant_directory_adapter)、core/scheduler.py:244config/app_modules.py:97;主專案 14 檔 import;venv 指工作樹。

在哪裡

套件:/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/jedi-license-runtime/
範例:jedi-asset/;SOP:extraction-sop.md §4.3/§3.4/§5.1/§5.2;說明:plugin-anatomy.md
設計:docs/features/FR-062-2608-license-management/design.md §4.6(防死鎖——login 級五支不可升 admin)
主專案(本卡允許動的範圍):
  api/license/__init__.py                 → 併進 core/plugins/license.py 後刪
  infra/license/*.py(三檔)              → 併進同檔 ① 段後刪;tenant_directory_adapter 被 di_containers/license/ 也 import → 改 import 新位置,或依 SOP §5.1 例外留原地並保留白名單(runner 判斷後在回寫說明)
  di_containers/license/license_containers.py → 改 import
  core/scheduler.py:244                   → 從 HANDLE_KEY 拿 handle 的那段不改語意,只確認 import 路徑仍通
  config/app_modules.py:97                → 拿掉 "license"
  core/plugins/__init__.py                → PLUGINS 加一列
  test/test_module_boundaries.py          → 白名單三列拿掉、已收斂清單加 infra/license/
現成範本:core/plugins/survey.py、core/plugins/integrity.py(CM-1689 產物)

怎麼修(套件側 A~F 各一 commit,主專案側 G 一個 commit,兩 repo 分開 commit)

要寫測試

手測(驗證等級:重——出貨關鍵路徑)