FR-163 專案總覽證據視角——收口 SUMMARY

FR-163 專案總覽證據視角——收口 SUMMARY(2026-10-25)

§1

一句話

專案總覽頁左側導航標題列多一組「控制項視角|證據視角」;切到證據視角,左樹展到評估目標、右邊一張平的證據表,不用再點四層才看到檔名。從決策者口述到收口同一天完成。

§2

為何做

決策者 2026-10-25 口述:「我要一層一層點到 AO 才看得到檔案」。要盤「這個控制項證據齊不齊」「哪些評估目標一份都沒有」只能一條條點。

§3

做出來的行為(終局)

  • 入口:左欄「控制項導航」標題列右側的 segmented 切換;選擇依專案記在瀏覽器 localStorage。
  • 左樹:同款標題列+搜尋;群組→控制項→評估目標,排法對齊控制項視角(代號與份數一行、名稱另起一行最多兩行);評估目標列 obj.N 編號+完整名稱(換行不截斷);每節點去重後的證據份數,0 份紅字。點任一層只縮右表範圍。
  • 右表:四欄——型別、證據(檔名+大小;第二行來源 Tag · 上傳者 · 日期)、位置(第一行「N 個控制項 · N 個評估目標」,下面最多兩行 obj.N+名稱,超過收「還有 N 個…」tooltip;評估目標範圍隱藏)、操作(檔案預覽/下載/開任務,連結開啟/開任務)。型別 chip 全部|檔案|連結;分段 不分段|依控制項|依評估目標,分段列浮在卡片上(控制項段淡主色、評估目標段浮層色;2026-10-26 隨 FR-164 追修,FE a1e8bb43),無證據的評估目標列「尚無證據」。
  • 資料:全部來自既有 GET /ssp/{sspUid}/control-tree,不另開端點。同一個檔掛多個評估目標以 file_uid 去重(連結以 reference_url)。切換時先畫讀取狀態再攤平;不分段時 DataTable 虛擬捲動。
  • 只看不改:加檔/改連結回任務抽屜。沒有採納/退回狀態欄(系統無此概念)。
§4

Commits

BE feature/FR-139(合回 16ca9cb1d,工作坊 17)

hash 內容
7ed7de2bf design/D2 雛形/開卡 CM-3083~3085/登記表
b39d4c70a 開卡腳本改 Repo 欄已存在;Notion 加「Repo」select、workshop.toml 加 [repos](走 agent-workshop API)
8ded42389 FR-163.1:control-tree 每筆證據補 uid/description/file_uid/file_size/created_user/created_at+created_user_name enrich(3 檔 13+/3−)
c05983323 追加卡 CM-3087~3089 開卡腳本
abf35224b 追加卡 CM-3090 開卡腳本

FE feature/FR-139(合回 a68ae07f 工作坊 17、781cb090 工作坊 19)

hash 內容
d0d48634+41d73941 FR-163.2:證據視角本體——evidence-view/ 七支新檔,總覽頁 +10 行掛載;截圖
4b998d0b FR-163.3:切換鈕從頁首動作列搬到 master-detail 區上方
cb8d9f1c FR-163.4:攤平延後一格先畫讀取狀態;不分段時虛擬捲動(分段 rowGroupMode 不能並用)
a3835c52 FR-163.5:八欄縮四欄、證據格兩行、位置欄數量優先、任務移進操作欄
8b6e2594 FR-163.6(首腦直改):切換鈕併進左欄標題列,證據視角補同款標題列,v-model:view-mode 透傳;左 Splitter 24%→27%
f2561b64 直改:左樹箭頭點了沒反應——模板 toggle(expandedControls, …) 被 Vue 自動拆 ref 成 Set
100974a9 直改:評估目標列補 obj.N 編號
080b1cc9 直改:評估目標名稱完整換行
9380b670 直改:導航排法對齊控制項視角(名稱另起一行、字級一致)
189017cd 直改:分段列底色改 --bg-base+細線;colspan 用 :pt 給實際欄數(PrimeVue 寫死欄數−1)

未 push(兩 repo 都在 feature/FR-139;BE ahead 17、FE ahead 23,含其他 FR 的 commit)。

§5

卡片

母卡 CM-3083 Done;子卡 CM-3084~3085、3087~3090 全 Done(工作坊 17、19 各 finish 合回並結案;3090 首腦直改後由決策者實看核可)。

§6

決策軌跡(含被推翻的)

決策 結果
D 版「右邊依控制項分段卡片再依評估目標分段卡片」 推翻——決策者實看「很難看、不友善」;查業界(Drata/Vanta 證據庫平鋪+歸屬欄位;表格 UX 巢狀上限兩層)改 D2「永遠一張表+位置欄」
雛形假資料「退回原因:缺 9 月資料」 刪除——決策者問「這哪來的」;查證 job_evidences 無審核欄、FR-142「採用」在稽核結果側,畫面不設狀態欄
分隔線雛形用純 JS 產品一律 PrimeVue Splitter(決策者「有現成的就不要自己硬用」)
去重鍵用 uid(卡上寫的) runner 抓到卡片寫錯:DEV 4,194 筆 uid 對 380 個實際檔案,改 file_uid
切換鈕放頁首動作列(.3 放 master-detail 上方) 決策者兩度退回:「放到下面」→「跟導航合併,放那邊突兀」→ 併進標題列(.6)
「可以有讀取畫面嗎」 單加 spinner 沒用(同步攤平佔住主執行緒),改延後一格+虛擬捲動
「時間跟上傳者合併」 不只合併——右半四欄每列相同卻各佔固定寬,整列重排成四欄
7 棵手刻導航樹收斂成共用元件 決策者裁「之後再做,現在改風險太大,不是主軸」(見 follow-up)
§7

驗收後五筆直改的根因(給下次開卡)

  1. 箭頭展不開:@click.stop="toggle(expandedControls, id)"——<script setup> 模板把頂層 ref 自動拆開,函式收到的是 Set 不是 ref,寫不回去。點「那一列」會展開(選取連帶展開),驗收截圖都點列所以漏掉。群組箭頭同病。
  2. 缺 AO 編號、名稱截斷、字太小、導航排法:第 7 棵手刻的樹沒帶前 6 棵修過的東西。根因是「每做一頁再刻一棵」,見 follow-up。
  3. 分段列看不出來:--bg-elevated 與卡片只差一點;且 PrimeVue subheader colspan 寫死 columnsLength − 1(預設分組欄要佔一格),本表沒那欄,宣告 hidden 欄無效(hidden 會被扣掉),要用 :pt 給實際欄數。
§8

規範文件

文件 狀態
頁面 SPEC spec-site/current/project-management/project-overview.md ✓ 變更紀錄+§1.1 9a+§7 檔案地圖+§12 坑 19
使用手冊 user-manual/lifecycle-and-use-cases.md ✓ 新段「一次看完每條評估目標交了哪些證據」
docs/features/README.md 登記表 ✓ 🟡→✅
FR README ✓ 七張卡 Done、指向本 SUMMARY
memory ✓ feedback_playwright_run_code_file_echoes_credentials、feedback_fe_nav_tree_rewritten_per_page_reuse_first(同步進 docs/claude/memory/)
analysis 不另寫——決策軌跡全在本檔與 design.md D1~D10
§9

Follow-up

  1. 🔴 FE 7 棵各自手刻的「群組→控制項→評估目標」導航樹(ProjectAuditorOverview.vue 內嵌、ProjectPlanningView.vue 內嵌、EvidenceNavTree、ApObjectiveTree、ArObjectiveTree、PoamObjectiveTree、MfControlTree)。建議:以 ApObjectiveTree 為底抽共用 ControlObjectiveTree,先換證據視角,再逐支換 Ap/Ar/Poam/Mf,兩支超大檔最後。決策者 2026-10-25 裁延後。
  2. DEV blsadmin 密碼進了本 session 對話紀錄(Playwright MCP 回顯登入腳本)。歸檔 docs/conversation-history/ 時遮掉;建議輪換密碼並同步 test repo .env.e2e。
  3. 死掉的 i18n 鍵 nav_groups_suffix/nav_controls_suffix:總覽頁已無引用,本次收口一併刪。
  4. FE 截圖資料夾名 docs/features/FR-163-round-evidence-view/ 少了 2610(runner 自取),與 BE 資料夾不一致;不影響功能,下次動到再改。
  5. 問卷型證據(SURVEY)第一版不列(design D10);匯出證據清單 Excel 未做。
  6. nav_groups_suffix 那串「N 群組 · N 控制項」只剩搜尋結果列有,標題列拿掉(給切換鈕讓位)。