本卡屬 FR-166(母卡 CM-母卡號(建完補)),卡 P0-1,階段 P0 底層、批 1。只改 jedi-python-package。依賴:無。
把主系統登入用的 LDAP 連線程式從 jedi-iam 抽出來變成獨立套件,只靠 ldap3、不碰任何資料表、不碰 Flask,這樣主系統與 Agent 都能用同一份。順便補憑證「第一次信任、之後釘住」。
跨套件抽取、要定公開介面與例外形狀;判斷多但範圍小
new(抽出):從 jedi-iam ldap_adapter.py 搬目錄連線段,不是重寫;套件只靠 ldap3
repo:~/Projects/Jedicogy/module/jedi-python-package
新開:jedi-ldap/(整支:`LdapDirectory`、`LdapConfig`、`DirectoryUser`、`FingerprintStore` protocol、tests)
細節在 design.md 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/design.md §5,開 design.html 看導覽),本段只列本卡要做到的點:
LdapConfig、FingerprintStore protocol(get/set)、LdapDirectory(cfg, store).test_connect() 回 ConnectResult(ok, reason, fingerprint, cert_meta)、verify_user() 回 DirectoryUser 或拋 LdapAuthError(reason)。ldap_adapter.py 搬目錄連線段(兩段式 bind、AD NTLM、跳脫);搬不是重寫,diff 要看得出來源。store.get(host) 空→記;不同→cert_changed 不連。encryption='none' 回 plaintext_warning。預設 starttls。cert_changed 測試要紅。LdapDirectory(cfg).test_connect() 對 DEV 的 LDAP 回結構化結果;指紋第一次記、第二次比對、變了回 CertChanged;grep -r flask jedi-ldap/ 為 0;tests 綠且含突變(把比對拿掉要紅)
對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/prototype/index.html(上方「跟著走」)。
docs/claude/domain-capabilities.md 與 FE docs/claude/frontend-overview.md §4。三擇一、預設不新增:reuse → extend 加參數 → 兩邊都確認沒有才新增。既有的是 stub/壞掉 → 修它或回報,不另寫繞過。回寫列出本卡 reuse 了哪些、新增了哪些、為什麼不能 reuse。