FR-080 交接現況(STATE)

這份是 living 檔:每棒就地 Edit,只描述「此刻」。歷史脈絡看同資料夾的 fr080-LOG.md

項目
最後更新 2026-09-09(第 2 棒:重新分析完成,報告 analysis-round2.md 已 push;決策者拿去與 PM 討論,等回報後決定下一步
branch BE feature/FR-075(本 arc 文件目前落在這條 branch,決策者未指示另開)
母案卡 未建(決策者 2026-09-09 指示「Notion 先不建立」;派工前依鐵律必須先開母卡+子卡)
本棒對應卡
卡片狀態
Notion 回寫規範 docs/claude/notion-issue-tracker.md;派工卡格式 docs/claude/notion-card-templates.md
接手前必讀 §0 讀序
預估時間 下一棒:等決策者與 PM 討論結果,裁示後開卡派工

🧭 原始需求 / WHY

這節寫一次,之後各棒不動。

  • 決策者原話(2026-09-09):「目前我們的 jedi-* 之前在 FR-069 做過一次重構分類,有些已經合併了。我們未來這個產品會希望是朝向微服務的模式,你再幫我重新分類一下,應該可以再合併一些套件。」後續補充:「我需要是插件跟微服務的模式,要可以在其他專案隨插即用,目前有很多的粒度還是太細。」
  • 兩件事:① 先分類,合併一些套件;② 朝微服務方向設計。第 1 棒只做了①的定案與②的路線圖,還沒動任何程式碼。
  • 需求的演變:分析中途曾把 asset 合併撤回(理由「欄位不重疊」),決策者駁回:「asset 這幾乎是確定一定要合併的東西了,幾乎是相同性質」。教訓已入 LOG:不要把「內容證據」推到連決策者明確要的東西都撤。
  • 本棒在大圖的位置:第 1 棒做了一輪分析,決策者 2026-09-09 裁定「今天討論的都沒用」,結論不採用。design 裡的 25→21 與七階只是第 1 棒的產出,不是定案。下一棒要重新分析,不是接手執行。

::: 🔴 決策者對第 1 棒的評價(原話) 「你已經亂套了」「你從早上就開始反反覆覆,全部沒有認真思考過」「我覺得今天討論的都沒屁用」。 原因:第 1 棒每輪換一把判準、用行數與 grep 先給答案再修、七次改版、連決策者明確要的 asset 合併都撤過。 :::

§0 接手讀序

0.1 🔒 先懂需求 gate

  1. 本檔 🧭 WHY 節(含決策者對第 1 棒的評價)
  2. fr080-LOG.md 第 1 棒 block——重點讀「教訓」欄,那是第 1 棒失敗的原因,別重蹈
  3. docs/features/FR-069-2608-jedi-module-extraction/design.md §3 決策表 D1–D18(FR-069 已拍板的裁示,重新分析時不可違反的邊界)
  4. docs/features/architecture-handbook/package-taxonomy.md(十族分類與「同類型≠同疆界」判準)

0.1b 第 2 棒產出——現行分析稿,等裁示

  • analysis-round2.md(html 同名):完整報告。最前面「暫時結論」一節是給 PM 的一頁版(25→21 逐支白話表、五層、起手式、短期順序、PM 三詞對照與程度表、四個可量指標)
  • inventory/:七份原始盤點(batch-A~D 逐支 8 題、host 宿主接線與部署、hollow-plugins 五支空殼細查、criteria 判準檔)。這些是證據,可重用
  • 第 2 棒的判準寫在 inventory/criteria.md,全程一把尺;被推翻的判斷記在報告 §9

0.1c 第 1 棒產出——只當參考材料,不當結論

  • design.md 附錄 A(實查數據:行數/表/FK/pyproject/執行期事實)與附錄 B「內容級盤點」節(兩個 subagent 讀完 25 支的 7 題盤點結果、9 條洩漏、4 組 port 重複宣告)——這些是原始證據,可重用
  • design.md 正文的定案分類、七階——第 1 棒的判斷,決策者不採用,重新分析時不要被它框住

0.2 現況與待辦

  1. 本檔 §1、§4

0.3 需要細節才開

  • design 附錄 A(實查數據)、附錄 B(內容級盤點抓到的債與洩漏清單)
  • docs/features/architecture-handbook/(FR-069 手冊,插件契約與退役 SOP)
  • docs/features/FR-069-2608-jedi-module-extraction/extraction-sop.md(合併/退役的機械步驟範本)

§1 當前狀態(2026-09-09)

項目 狀態
第 2 棒結論 analysis-round2.md25→21 四組合併(asset/task-platform+participant/system-core=config+menu/log+log-forwarding),三組像但不併(oscal-v2↔︎compliance-audit、integrity↔︎license-runtime、detection↔︎remote-agent),短期只做插件、微服務降為路線圖,五支空殼(bulletin/device/information-system/system-config/flow-engine)待補實。結論與第 1 棒四組全部重疊、理由不同(§10 已寫)。等決策者與 PM 討論後裁示
第 1 棒結論 design 寫 25→21。決策者裁定不採用,降為參考
決策者已明確表態的(重新分析時當作已知輸入) asset(device+information-system)要合併——「幾乎是確定一定要合併的東西,幾乎是相同性質」;flow-engine 要分開——「分開是對的」;system-infra 的本意是「系統開起來一定要有的基本功能」
程式碼 零改動。monorepo 與主專案都還是 25 支
待決 ②層命名(「橫切」vs「中介層」)決策者說「先放著、討論完再定義」,報告仍用「橫切(規則)」,不要自行改;integrity 是否併 license-runtime(決策者問過、本棒給兩選項未裁);FR-080 撞號——issue 掃描 arc 改 FR-081 的 prompt 已交決策者轉給該 arc 主事者,本 arc 登記表兩列重複待那邊改完再合成一列
文件 報告與 inventory 已 build 並 push 到 feature/FR-075(最新 da48a795)。公網需求站從 main 建,這條 branch 未進 main,PM 從公網看會是 404 假頁,要嘛合 main 要嘛傳 html+_shared/。README 狀態已改「第 2 棒分析稿已出等裁示」;登記表 FR-080 兩列仍是第 1 棒內容且重複,待撞號處理後一併改
Notion 未建任何卡
遺留 poetry.lockpyproject.toml 有 CM-1575/CM-1580 開發期 path override,不屬本 arc,不要 commit

§2 決策者已表態的事(重新分析的已知輸入,不是分析結果)

裁示 決策者 日期
asset 合併(device+information-system)——「幾乎是相同性質」 雷門 2026-09-09
flow-engine 不併進 task-platform(選 B) 雷門 2026-09-09
system-infra 命名本意「系統開起來一定要有的基本功能」(收多少支未定,第 1 棒的拆法未被採納) 雷門 2026-09-09
notification 應該是獨立模組,因為會持續擴充 雷門 2026-09-09
Notion 暫不建,先進需求中心 雷門 2026-09-09
log+log-forwarding 合併(本棒原判不併被質疑後撤回) 雷門 2026-09-09
短期只以插件為目標,先插件後微服務,由插件組成不同微服務 雷門 2026-09-09
出發點是「一堆 API 模塊、新產品拿來復用」;報告主軸從合併改為插件就緒度 雷門 2026-09-09
空殼插件「應該都要重構」;integrity 不進 common、不進 system-core(本棒論證、決策者未反對) 雷門 2026-09-09
issue 掃描 arc 改號 FR-081 雷門 2026-09-09
09-07 未 commit 的 jedi-module-map-proposal.html 刪除 雷門 2026-09-09

§3 重新分析的紀律(第 1 棒失敗的反面)

  1. 先讀完內容再開口。25 支的 README 疆界、表欄位、port、消費者用途,全部讀完(第 1 棒附錄 B 的盤點可重用,但要自己驗過)才給第一版。不要用行數、表數、grep 計數、pyproject 宣告先給一版再修
  2. 一把尺用到底。開工前先寫下判準,整份分析只用那一組判準;中途發現判準不對,停下來報告,不要換尺重跑
  3. 一次給完整答案,不要分七輪。決策者要的是「分析過後給我答案」:哪些合併、為什麼、朝微服務怎麼走。給一份完整的,等裁示
  4. 決策者已表態的事是輸入不是問題(§2 表)。分析可以補理由,不可以推翻
  5. 「套件不合併」與「部署分開」是兩個詞,文件裡不要用「獨立」混稱
  6. 不要引 broker

§4 下一步(等決策者發令)

決策者拿 analysis-round2.md 與 PM 討論中,回來會匯報再決定。 可能的下一步(都要等令):

  • 裁 §3 四組合併、§3.2 oscal-v2 不併、§5.3 三處設計決策(device 引用計數 port 開哪/bulletin error code 歸屬/system-config 等 D18 還是先搬 CRUD)
  • 裁要不要把 §1 四層寫成架構手冊一頁(決策者說「先放著」)
  • 裁後開 Notion 母卡+子卡;第一棒建議 asset(information-system+device 補實+合併)
  • 順帶:§11 第 3 條(宿主 _UserDirectoryAdapter 只轉發 2/4 方法,survey 部門名走降級)可能是現行缺陷,建議手測

以下是第 1 棒交接時寫的原文,保留供對照:

  1. 先分類,要合併哪些套件——25 支逐支給結論(合併/不動),每支一句內容級理由,§2 的已知輸入直接採用
  2. 朝微服務方向怎麼設計——哪些該分開部署、為什麼、要補什麼

可重用的材料:design 附錄 A、附錄 B。可參考但不採納的:design 正文。

分析完成後停下等決策者裁示,裁示後才開 Notion 卡、才派工。

§5 冷接自檢題

  1. 第 2 棒的報告在哪、最前面那節是給誰的?(答:analysis-round2.md;「暫時結論」給 PM 一頁看完)
  2. 套件結論是幾支、哪四組合併、哪三組像但不併?(答:25→21;asset/task-platform+participant/system-core/log+log-forwarding;oscal-v2↔︎compliance-audit、integrity↔︎license-runtime、detection↔︎remote-agent)
  3. 短期目標是什麼、微服務呢?(答:只做插件——register 一行 API 長出來;微服務降為路線圖)
  4. 哪件事決策者說「先放著不要改」?(答:②層命名「橫切」vs「中介層」)
  5. 接手後第一件事?(答:等決策者匯報 PM 討論結果,不自行開卡、不動碼)
  6. 第 1 棒為什麼失敗?(答:每輪換判準、形狀證據先給答案再修、七次改版)

§6 pre-flight(唯讀)

cd ~/Projects/Billows/Audit-Manager/compliance-manager-be && git status --short docs/ && git log --oneline -3
ls ~/Projects/Jedicogy/module/jedi-python-package/ | grep -c "^jedi-"    # 應為 25
grep -c "jedi-" pyproject.toml                                            # pin 數對照

§7 給下一棒的 prompt

請讀 docs/features/FR-080-2609-jedi-consolidation-and-service-path/handoff/fr080-STATE.md 接手 FR-080。第 1 棒的分析我不採用,你要重新分析一次。讀完 §0 讀序、答完 §5 自檢後停下回報,等我發令再開始分析。