FR-047 已知坑處理 — UX 桶 + 整個 508 arc 完結 SUMMARY(2026-07-09)

唯一進度真相docs/analysis/2026-07-07-known-pits-remediation-tracker.md。本檔是 arc 完結的彙整 + 部署 handover + follow-up,逐條定調/銷帳一律以 tracker 為準。 branchfix/v1.8.0-bugs(三 repo 皆未 push)。

§1

這個 arc 是什麼

FR-047 spec 手冊全站 67 頁 §12「邊界情況與已知坑」彙整成 508 條清單。核心認知:§12 是寫給工程師的邊界告知,不是 508 個待辦——混了「①可修 bug/缺口 / ②刻意設計只是提醒 / ③文件澄清」三種。arc 目標=逐桶把①挑出來修、②③維持 no-action。

八桶全數收口(tracker 進度總覽為準):① SEC(75→FR-048) / ② SCHEMA(60,DDL 5 項 DEV+STG) / ③ UX(47+歸入~10,本 session) / ④ ECODE(39,真缺陷 7) / ⑤ STATE(33) / ⑥ REPLACE(34) / ⑦ DEAD(30) / ⑧ 其他(204,~175 no-action)。至此 508 arc 完結。


§2

本 session 產出(UX 桶 + review 後衍生三批 + 發版)

A. UX 桶(③,最後一桶)

3 路唯讀 agent 平行 live 驗證 + 主導親驗每個肯定/否定判定。47+歸入~10 條塌縮成:

  • 真缺陷 6 決策點 U-1~U-6 全修
    • U-1 部門父層下拉吃分頁資料 → 改吃全量 orgUnitMenu(一行)
    • U-2 EC 驗證/裁決報表 404 後空白 → 補 error state + 重試
    • U-3 資訊系統「刪除」實為軟刪除 → 文案改「停用」語彙
    • U-4 批次刪除 not_found 未呈現 → 補計數
    • U-5 TOTP/MFA 啟用(本 arc 最曲折,見 B 段)
    • U-6 稽核員總覽 header 原始 ISO 字串 → 格式化
  • 誤報/已做 3 條(my-audits toast 其實有跳、ap-authoring i18n 全齊、批次刪除已報兩類)
  • date-only 時區族 7 條:live wire 實測,TW 部署+TW 瀏覽器全對 → no-action(非 UTC+8 才觸發,國際化再做)
  • 告知類 ~33 no-action + role-manage#5(ui_routes 重名)已被 SCHEMA 桶 UNIQUE 收

B. U-5 演進(TOTP/MFA 即時切換)— 一條坑滾出一串

原定「啟用前強制驗證」,經 4 次 user 定調演進:

  1. TOTP verify-before-enable 端點 + 修 otp-resend type/mfa_type key bug(BE c61cb9e0
  2. 生效模型改 B 案:MFA 開關即時生效(不依附基本資料儲存)(FE da0ce32
  3. root cause 修:update_user 需完整 payload → 新增 jedi-auth update_user_mfa_type + 主專案 PUT /user-mfa-type 輕量端點(BE 9e60bf37 + jedi-auth 2b3cf7b
  4. Dialog 先開再載(切開關即時回饋)(FE 430ea54

連帶 UX 打磨:個人資料頁拆卡(帳號安全獨立即時生效卡 + hint-bar,37a3ccc)、banner 角色/租戶/部門加類型標示(3b321e9)、MFA 關閉確認框、LDAP loading 收斂。順手修兩個既有 bug:重整直達 auth 頁 data-theme 未套、OTP 輸入框露暗色底1477092)、我的稽核任務「進入稽核」按鈕改 info 明亮藍(1ef17c8)。

C. Review 後新開三批(收尾前逐族複核 no-action,user 拍板轉「要做」)

內容 狀態
① OTP 發送節流 jedi-mfa redis 節流(otp_cooldown:{user_id},防 email bombing,登入首發+resend 共用,60s env)+ FE localStorage 吃 429 ✅ 已發版
② 六項設計調整 權限即時生效(本人 session)/ device 停用 UI / 匯入連動下拉 / 判定後刷新 / 摘要報表放寬進行中 / device_type 標準下拉 ✅ 手測待驗
②-bis notification.test 退役 做 #1 時發現角色矩陣 TEST 死欄 + notify-config 測試端點裸奔 → 退役 capability + 補守門(「能維護就能測試」) ✅ 手測待驗
③ 專案狀態機 B 案 project.status 維護半套(只掛 close_round)→ 建立即 in_progress + 補同步點 + 回填 migration;篩選/規劃 gate 改輪次驅動 ✅ 手測通過

D. 發版(user 明示)

jedi-auth 0.1.26update_user_mfa_type)+ jedi-mfa 0.0.12(OTP 節流)已 poetry publish 到 Nexus(monorepo bump fe5556a、主專案 pin 還原 7f2244d1)。已驗 venv symlink 已清、artifact 含新碼。


§3

Commits 索引

BE compliance-manager-be(15,f57fad0b..HEAD):c61cb9e0 TOTP verify+otp-resend / aadbe2ce UX 抽桶定調 / 17a34e9a+9e60bf37 U-5 B 案+端點 / 3aac0109+351ad86c review 登記 / c574f7ca 狀態機 B 案 / a3bcf6f3 OTP 429 handler / 4504e2e3 device_type seed / 6a9a5c60 notification 退役 / dc216424+d070340c 銷帳 / 7f2244d1+0a46918f 發版收尾

FE compliance-manager-fe(12,ae225f5..HEAD):ae225f5 U-1~4/6 / bfe8ac1~430ea54 U-5 系列(拆卡/banner/data-theme/dialog)/ 1ef17c8 按鈕 / 6cd28aa 狀態機 FE / 3c3e24c OTP FE / f0b47de 六項

jedi monorepo(3):2b3cf7b update_user_mfa_type / 099808f OTP 節流 / fe5556a bump

§4

規範文件盤點

  • tracker(唯一真相):八桶 + review 三批全銷帳
  • spec §12 全站同步完成(2026-07-10 收尾,commit 383b418a:14 頁 spec + html 逐頁對照 tracker,把真修的坑改寫成新行為 / 註已修,no-action 條目保留。涵蓋 user-profile(MFA B 案)、project-list/overview/dashboard(狀態機 + R1)、information-system / device(停用文案 + ECODE + SCHEMA)、user-import(R-3 + 六#3)、role-manage + _overview(六#1 + R5 + UNIQUE + notification.test 退役)、evidence 驗證/裁決(U-2)、audit-review(六#4)、summary-report(六#5)、auth/login(otp-resend + OTP 節流 + data-theme)。原「spec 待補」follow-up 全部已補
  • analysis:狀態機 root cause 在 tracker §UX「Review 後新開項 ③」+ 本 SUMMARY

§5

🚚 部署 handover(未做,等 user 明示)

  1. 進版 v1.8.1(2026-07-10 收尾):arc 定調為 v1.8.0 上線前的獨立 BUG 版 1.8.1(非折進 1.8.0)。BE pyproject → 1.8.1 + 新 release note docs/release_notes/v1.8.1.md(彙整整個 arc)、v1.8.0.md 維持原本只涵蓋 FR-043/044/045;FE package.json → 1.8.1。⚠️ git 狀態注意:目前 checkout 在 main(非 fix/v1.8.0-bugs,兩者曾同一 commit),一個 merge 曾把 arc 內容灌回 v1.8.0.md、已於 204d31ca 還原乾淨。相關 commit:spec 383b418a、v1.8.1 bump+RN 5bac6a3c、v1.8.0 還原 204d31ca(BE);FE d53b3ee
  2. BE 重啟:jedi 套件換版(0.1.26/0.0.12)+ 多處 service/route 改動,無 hot reload,這批要生效必須重啟 BE
  3. push:仍全未 push(等 user 明示)。
  4. POC migration ✅ 已套(2026-07-10):8 支 arc migration(SCHEMA 5 + device_type seed + notification.test 退役 + project.status 回填)全數套用 POC(cmmgr / --single-transaction / ON_ERROR_STOP=1,各檔 self-record schema_migrations),POC == STG。驗證:POC compliance.projects 已無 pending(archived:25 / completed:1 / in_progress:9)、system_menus DEVICE_TYPE 11 筆、uq_ui_routes_name 在;三 UNIQUE 套前預檢 POC 零重複。notification.test 在 POC 本就不存在(DELETE 0,no-op)。
    • FR-048 phase4a 能力點對齊(2026-07-10 一併處理):原 2026-07-07-fr048-phase4a-capability-seed.sql 僅 DEV 有,且其中 notification.test 已被 FR-047 退役——重放原檔會復活它。改以新檔 2026-07-10-fr048-phase4a-caps-align.sql 只 seed 非退役子集(system_config.{create,update,delete}[is_platform] + feedback.export)+ 配給 Administrator,套 DEV(no-op)/STG/POC。驗證三環境 caps4 齊、notification.test=0、Administrator grants=4。殘留 filename diff:歷史 fr048-phase4a 仍 DEV-only(有效能力狀態三環境一致)。
  5. FE 部署:六項 + U 系列 + 狀態機 FE 需重 build 部署;BE+FE 需同版(otp-resend 修正後舊 FE fallback 會 400)。
§6

📋 Follow-up(arc 外,待 user 排)

  • DB 死表盤點(本 session 掃描,未定調):A 類垃圾表(system_logs_old 10 萬列 / api_logs_old / backup 表 / operations 8 筆孤兒 / device_monitor 死功能)可退役(走 DROP 前安全四查);B 類未接線 feature(oscal.component_definitions 6 表 cluster / jedi-issue members)待確認計畫中還廢棄;命名不一致(_mapping vs plural link 表、跨 schema 同名 poams/roles)技術債。詳見對話紀錄。
  • 硬刪除 / 回收站:user 知悉,要做另開 FR(級聯面大、GRC 稽核留存衝突,建議配打字確認 + 限管理員)。
  • 權限即時生效範圍:② #1 只做「當前 session 本人」即時;admin 改他人、對方另一 session 即時=需 socket,依「別過度」未做。
  • ② / ②-bis 手測待驗:六項(尤其權限即時的情境)+ notification 退役,重啟後手測。
  • SCHEMA 桶 no-action 三候選(user review 時列出):可翻譯欄位 locale 對稱驗證 / project-list#7 排序白名單 / department-manage#3 命名不一致——維持 no-action 或另排。