# FR-047 功能 SPEC 手冊 — 量產進度控管表（集中狀態管理）

> **使用規則**：每完成一個頁面 spec **必須更新本表**（狀態 / commit / 日期 / 模型）；每個 session 收尾更新「Session 紀錄」。
> 狀態值：`⬜ 未開始` / `🚧 撰寫中` / `🔍 待驗證`（route 存廢或歸屬待確認）/ `✅ 完成` / `🛑 等 user gate`
> SOP：`writing-feature-specs` skill（含 13 節模板 / 事實來源紀律 / build 驗證）；範本 = [project-planning.md](../../specs/v1.8.0/project-management/project-planning.md)
> 頁面清單來源：2026-07-05 實掃 FE `src/config/router/index.js`（110 條 route 去重合併：`-round`/`-ap` legacy 變體、多步匯入精靈、form 子頁併入母頁 spec）
> **姊妹表（已知坑處理）**：全站 spec §12「邊界情況與已知坑」508 條的定調 / 修復銷帳**不在本表**，唯一追蹤表 → [`docs/analysis/2026-07-07-known-pits-remediation-tracker.md`](../../analysis/2026-07-07-known-pits-remediation-tracker.md)（本表只管 spec 頁面量產進度，坑的處理狀態一律看那份）

## 產出原則

- 一個 spec = 一條使用者頁面 route（變體 / 精靈步驟 / form 子頁併入）
- 每群先寫 `_overview.md`（頁面地圖 / 共用狀態機 / 角色 / 核心資料模型）再放量頁面
- 模型：**核心流程頁 = Opus**（業務綜合）、**管理 / 設定 / 列表頁 = Sonnet**（結構抽取）
- 🔍 標記的頁面：執行者先驗證 route 是否 live（FE 選單 / `public.ui_routes` enable=1）、歸屬是否正確，死 route 回報本表除名，不要硬寫

## Wave 1 — 稽核主流程（價值最高，Opus 為主）

### 專案管理（project-management/）

| 頁面 | route（含變體） | 模型 | 狀態 | Commit | 日期 |
|------|----------------|------|------|--------|------|
| _overview | — | main | ✅ | `26b12e43` 起多輪 | 2026-07-05 |
| 專案規劃頁 | project-planning(-round/-ap) | main | ✅ pilot（§5 實機截圖完成，STG 亮色，帳號 blsit / 專案「回饋整合設定」） | `674d7de0` 等 | 2026-07-05 |
| 專案列表頁 | project-list | Sonnet | ✅（§5 截圖完成） | `83fce5ac`, `a91fbf95` | 2026-07-05 |
| 專案建立 | project-create | Opus | ✅（§5 截圖完成） | `83fce5ac`, `a91fbf95` | 2026-07-05 |
| 專案總覽頁 | project-auditor-overview(-round/-ap) | Opus | ✅（§5 截圖完成） | `83fce5ac`, `a91fbf95` | 2026-07-05 |
| 專案儀表板 | project-dashboard | Sonnet | ✅（§5 截圖完成；全域落地頁，非 per-project 總覽；§12 記錄 2 處已驗失效 UI） | `f0c8cdef`, `a91fbf95` | 2026-07-05 |
| 稽核輪次清單 | project-ap-list | Sonnet | ✅（§5 截圖 1/2，`pending_reverify` 狀態 STG 無資料缺 1 張） | `f0c8cdef`, `a91fbf95` | 2026-07-05 |
| 專案設定 | project-settings | Sonnet | ✅（§5 截圖完成；§12 記錄 PUT 無角色守門安全缺口；截圖順帶發現參與人員 tab 顯示 uid 非暱稱 bug，已另開 task） | `f0c8cdef`, `a91fbf95` | 2026-07-05 |
| ~~任務配置頁~~ | ~~project-task-setup(-ap)~~ | — | ❌ 除名（已驗死 route：FE 0 個 nav 進入點，功能 FR-038 併入專案規劃頁任務面板；router 條目為孤兒） | | 2026-07-05 |

**FR-047 規劃頁 hub 拆分（2026-07-06，未 commit）**——`project-planning.md` 由 699 行單頁改造成 hub 導航頁（266 行），重功能拆 4 子頁 + FlowPhaseBanner 抽共用元件：

| 頁面 | route / 定位 | 模型 | 狀態 | Commit | 日期 |
|------|------------|------|------|--------|------|
| 專案規劃頁（hub） | project-planning(-round/-ap) | main | ✅ hub 改造（13 節頁級化 + §5 hub wireframe + 六 Tab 對照；子頁連結） | 未 commit | 2026-07-06 |
| 現況編輯與程序書 | planning-status | main | ✅ 新頁（現況#1/程序書#2/節點參與人員#13；UC-01/05/08；wireframe） | 未 commit | 2026-07-06 |
| AO 任務配置與啟動 | project-task-edit | main | ✅ 擴充（改題 Task Config；補快速配置#5/開始執行#6/UC-PP-02；wireframe；坑：快速配置清空關聯） | 未 commit | 2026-07-06 |
| 批次維護 | planning-batch-ops | main | ✅ 新頁（#7~#10；匯入三步×2 field-level + Excel 樣板欄位；文件匯出 6 格式；wireframe） | 未 commit | 2026-07-06 |
| 基本資訊與參與人員 | planning-basic-info | main | ✅ 新頁（Tab2/3 合一；PUT /grc/project；坑 1 無角色守門安全 finding；wireframe） | 未 commit | 2026-07-06 |

> 搬運複核抓到原 planning §3/§10 error code stale：階段角色 `GRC_403009`→實際 `GRC_403050`、前置 `GRC_412035`→實際 `GRC_412021`、現況 `GRC_403031`→實際走 `GRC_403051`（皆已於子頁修正）。**待辦 follow-up**（等 user wireframe sweep 收斂再做，避免並行 clobber）：① 全站 grep 修指向舊 `project-planning.md#` 錨點（project-overview.md:267 `#93-`）；② audit-review / ap-authoring / poam / project-overview 的 FlowPhaseBanner 重複描述改引用 `shared-components/flow-phase-banner.md`（該頁 §1.2 已列使用頁）。

### 共用元件（shared-components/）

| 頁面 | 定位 | 模型 | 狀態 | Commit | 日期 |
|------|------|------|------|--------|------|
| 階段推進橫幅 | flow-phase-banner | main | ✅ 新頁（跨生命週期共用元件；§6.5 stage info/advance；stage_objects；wireframe；§1.2 列 5 使用頁） | 未 commit | 2026-07-06 |

### 稽核執行（audit-execution/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Opus | ✅ | | 2026-07-05 |
| 稽核計畫填寫頁 | project-ap-authoring-round | Opus | ✅（§5 截圖 3/4，DOCX 匯入需 audit_planning 階段資料缺） | `75fbdef6` | 2026-07-05 |
| 稽核執行頁（AR 判定） | project-audit-review-round | Opus | ✅（§5 截圖完成 5/5） | `75fbdef6` | 2026-07-05 |
| POA&M 矯正頁 | project-poam-round | Opus | ✅（§5 截圖 1/4，STG 全庫無 POA&M 資料） | `25c3420f`, `75fbdef6` | 2026-07-05 |
| 我的任務（受稽方執行） | project-my-tasks | Opus | ✅（§5 截圖 2/4，批次完成需已上傳證據任務缺） | `1d923a4c`, `75fbdef6` | 2026-07-05 |
| 我的稽核 | project-my-audits | Sonnet | ✅（§5 截圖 2/3，逾期標籤需輪次起訖日期缺） | `9edea842`, `75fbdef6` | 2026-07-05 |
| ~~任務執行 / 檢視~~ | workflow-setup / workflow-view | — | 🔀 除名（非本群）：live 的 BPMN 範本編輯/檢視（`?id=workflow_template_uid`，由 ModuleFrame/規劃頁 task-setup 導向），歸 Wave 2 合規框架與 SSP 群 flow-template-* 同族 | | 2026-07-05 |

## Wave 2 — 合規資產與證據

### 合規框架與 SSP（compliance-framework/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Opus | ✅ | `bba1e08d` | 2026-07-05 |
| 合規框架管理 | compliance-framework-manage / version-manage | Opus | ✅（欠 §5 截圖） | `d5eddff9` | 2026-07-05 |
| 框架版本匯入 / 編輯 | compliance-framework-import-version / version-edit | Sonnet | ✅（欠 §5 截圖） | `3fdcec1b` | 2026-07-05 |
| 範本管理（ModuleFrame） | module-frame / -items / -template-edit | Opus | ✅（欠 §5 截圖） | `46a69ea3` | 2026-07-05 |
| 範本匯入精靈（docx / excel） | module-frame-import-*（5 條合一） | Sonnet | ✅（欠 §5 截圖） | `9a5bcbbe` | 2026-07-05 |
| SSP docx 匯入 / 更新 | project-ssp-import-docx | Sonnet | ✅（欠 §5 截圖） | `9a5bcbbe` | 2026-07-05 |
| BPMN 稽核範本管理 | flow-template-manage / -create / -edit | Opus | ✅（欠 §5 截圖） | `ccfd588b` | 2026-07-05 |

### 證據管理（evidence/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Opus | ✅ | `1a3fdb66` | 2026-07-05 |
| 證據分類覆核 | evidence-classification-review | Opus | ✅（欠 §5 截圖） | `8b9c1fa5` | 2026-07-05 |
| 分類報表（驗證 / 裁決） | evidence-classification-report-validation / -adjudication | Sonnet | ✅（欠 §5 截圖） | `0caf4a53` | 2026-07-05 |
| 雲端整合（Drive） | cloud-integrations | Sonnet | ✅（欠 §5 截圖） | `3f86d320` | 2026-07-05 |
| 檔案 Agent 管理 | remote-agent-manage | Sonnet | ✅（欠 §5 截圖） | `fc7e33ae` | 2026-07-05 |
| 儲存設定 | storage-config | Sonnet | ✅（欠 §5 截圖） | `c0c8d00b` | 2026-07-05 |

### 問卷（survey/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Sonnet | ✅ | `d9e16dec` | 2026-07-05 |
| 問卷管理 | survey-v2-manage | Sonnet | ✅（欠 §5 截圖） | `84f9569d` | 2026-07-05 |
| 問卷設計器 | survey-v2-designer | Opus | ✅（欠 §5 截圖） | `c206faa7` | 2026-07-05 |
| 問卷填寫 / 預覽 | survey-v2-fill / -preview | Sonnet | ✅（欠 §5 截圖） | `(本次)` | 2026-07-05 |

## Wave 3 — 報表、協作與系統管理（Sonnet 為主）

### 報表與儀表板（reporting/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Sonnet | ✅ | `849318b7` | 2026-07-05 |
| 專案摘要報表 | project-summary-report / -tab-view / -history | Opus | ✅（欠 §5 截圖） | `afa14805` | 2026-07-05 |
| AI 儀表板 | ai-dashboard | Sonnet | ✅（欠 §5 截圖） | `(本次)` | 2026-07-05 |
| ~~客製儀表板編輯~~ | ~~customer-dashboard-editor~~ | — | ❌ 除名（已驗死：ui_routes enable=0 選單停用、`DashboardEditor.vue` 為 vue-grid-layout demo（TodoCard/BarStatsCard/PeiStatsCard 假卡）、無 API / 無持久化、template 留有未完成 `item.h"npm` typo；未完成 scaffold 非功能頁） | | 2026-07-05 |
| ~~分析頁~~ | ~~analysis~~ | — | ❌ 除名（已驗死：ui_routes 無此列、FE 0 個 nav 進入點、`ThreatAnalysis.vue` 為 Sigma.js 硬編範例 demo（John/Mary/Sushis…）、無 API 呼叫；scaffolding 殘留非功能頁） | | 2026-07-05 |

### 認證（auth/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Sonnet | ✅ | `4f5e08f9` | 2026-07-05 |
| 登入（含 MFA OTP） | login / otp-verify | Opus | ✅（欠 §5 截圖） | `9156038f` | 2026-07-05 |
| 忘記密碼 / 重設密碼 | forget-password / reset-password | Sonnet | ✅（欠 §5 截圖） | `(本次)` | 2026-07-05 |

### 協作（collab/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| 公告管理（manage+form） | bulletin-manage / -form | Sonnet | ✅（欠 §5 截圖） | `9f57cc84` | 2026-07-05 |
| 公告檢視（list+view+user-guide） | bulletin-list / -view / -user-guide | Sonnet | ✅（欠 §5 截圖） | `cf26f3b1` | 2026-07-05 |
| 回饋管理（系統 / 巡檢） | system-feedback-* / cruising-feedback-*（8 條合一） | Sonnet | ✅（欠 §5 截圖；巡檢停用+會炸 BE，見 §12） | `c38d3309` | 2026-07-05 |

### 系統管理（system-admin/）

| 頁面 | route | 模型 | 狀態 | Commit | 日期 |
|------|-------|------|------|--------|------|
| _overview | — | Opus | ✅（Opus 自寫：三層 RBAC + 組織模型 + system_configs 慣例） | `(本次)` | 2026-07-05 |
| 使用者管理 | user-manage / user-form | Sonnet | ✅（欠 §5 截圖；live=UserMTRBACForm，UserForm.vue 死碼；§12 寫入端點僅 JWT） | `44e5ca10` | 2026-07-05 |
| 角色權限管理 | role-manage / role-form | Opus | ✅（欠 §5 截圖；§12 系統角色/平台能力僅 FE 保護、能力全量取代） | `(本次)` | 2026-07-05 |
| 選單管理 | system-menu-manage | Sonnet | ✅（欠 §5 截圖；jedi-system-menu 套件；別混 ui_routes） | `9f02f316` | 2026-07-05 |
| 部門管理 | department-manage | Sonnet | ✅（欠 §5 截圖；§12 path/cascade 待驗證） | `1f0b06ae` | 2026-07-05 |
| 租戶管理 | tenant-manage | Sonnet | ✅（欠 §5 截圖；新增連帶 seed 部門/角色；§12 cascade/FK） | `0c049ea7` | 2026-07-05 |
| 設備管理 | device-manage | Sonnet | ✅（欠 §5 截圖；§12 delete 無 BE 擁有者/角色守門） | `d1ba1d9a` | 2026-07-05 |
| 資訊系統盤點 | information-system-manage | Sonnet | ✅（欠 §5 截圖；FIPS-199 C/I/A 自動算；§12 軟刪/enum 漂移） | `58cc1c6c` | 2026-07-05 |
| 通知 / SMTP 設定 | notify-config / smtp-config(-manage) | Sonnet | ✅（欠 §5 截圖；system_configs NOTIFY_CONFIG/SMTP；§12 mail/test 無守門） | `4e5085d0` | 2026-07-05 |
| LDAP 設定 | ldap-config | Sonnet | ✅（欠 §5 截圖；group=THIRD_PARTY_LOGIN/LDAP） | `fa218d1d` | 2026-07-05 |
| 議題整合設定 | issue-integrate-config | Sonnet | ✅（欠 §5 截圖；§12 HIDDEN_SECRET 漏遮罩 token / issue_service copy-paste bug） | `ce4ef268` | 2026-07-05 |
| 工具外掛管理 | tool-plugin-manage | Opus | ✅（🔍 驗 live=enable=1；查出前端 mock 占位頁、無後端/持久化） | `384f7f3b` | 2026-07-05 |
| 掃描設定檔管理 | detection-profile-manage | —（FR-059 新頁隨案補寫） | ✅（欠 §5 截圖；FR-059 檢測 Profile 庫雙軌管理頁；§12 公用版新增無 FE 入口、update capability 預留孤兒、只在 DEV） | （未 commit） | 2026-08-01 |
| Log 轉發設定 | log-forwarding | —（FR-068 新頁隨案補寫） | ✅（欠 §5 截圖；FR-068 系統 log 轉發；三端點皆有 capability 守門＝本群少數；§12 測試用已存設定／UDP 不保證送達／遮罩為預留位／STG-POC 未套 migration） | （未 commit） | 2026-08-27 |
| 操作日誌 | user-log | Sonnet | ✅（欠 §5 截圖；只查 api_logs；§12 export @jwt 註解=SEC-001） | `161cf483` | 2026-07-05 |
| 個人資料 | user-profile | Sonnet | ✅（欠 §5 截圖；§12 otp-qrcode 無認證洩 secret；topt_secret 死欄） | `6e197f98` | 2026-07-05 |
| ~~網站導覽~~ | ~~sitemap~~ | — | ❌ 除名（已驗死 route：`public.ui_routes` 無對應列＋FE 全域零 nav 進入點，僅孤兒 router 條目＋menu.json label；SiteMap.vue 只把 permissions[0].items 畫成 OrgChart，未獨立成頁） | | 2026-07-05 |
| 背景服務與排程（無 UI 頁） | —（APScheduler 3 job / SocketIO 2 namespace / 分類容器 / Agent 心跳） | Opus | ✅（Opus 自寫；drive_sync 5s 佇列狀態機 + 故障行為；無 session 清理排程） | `d412e40e` | 2026-07-05 |

## FR-047 全站拆分重整 — W1（2026-07-06）

> 依 [sitewide plan](handoff/2026-07-06-sitewide-wireframe-and-split-plan.md)：workspace 型多畫面頁拆成 hub＋功能子頁（或平級雙頁），每頁補版面 wireframe（§2.5 慣例）。拆分判準：獨立畫面數 ≥2 才拆，單畫面 CRUD＋dialog 群不拆（只補 wireframe）。

### A 級（已執行拆分）

| 原頁 | 拆法 | 新增 / 改檔 | wireframe |
|------|------|------------|-----------|
| system-admin/user-manage.md | hub（Tab0 列表）＋子頁 | user-manage.md（hub）／**user-form.md**（表單＋授權組合）／**user-import.md**（Excel 精靈）；user-profile.md 不動 | 3 張 |
| audit-execution/audit-review.md | hub＋子頁 | audit-review.md（hub）／**audit-verdict.md**（Tab0 判定工作區）／**audit-risk.md**（Tab1 風險 UC-AR-02） | 3 張 |
| compliance-framework/module-frame.md | hub（頁1 列表）＋子頁 | module-frame.md（hub）／**module-frame-detail.md**（頁2 下鑽）／**module-frame-defaults.md**（頁3 樣板編輯器；五 tab 交叉引用 project-ssp-*，不複製欄位） | 3 張 |
| system-admin/notify-smtp-config.md | 平級雙頁（無 hub，原檔退役） | **notify-channels.md**（Telegram/Discord）／**smtp-config.md**（列表＋表單）；notify-smtp-config.md `git rm` | 2 張 |

NAV_STRUCTURE 同步（三 hub 加子頁縮排、notify 換兩平級 entry）；退役檔站內連結全站修正（README / system-admin/_overview / issue-integrate-config）。authoritative build ✅、11 頁 wireframe/TOC anchor 全解析、敏感資訊＋「GRC 系統」grep 0。

### B 級（判定，不預拆）

| 頁 | 判定 | 理由 |
|----|------|------|
| audit-execution/ap-authoring.md | **不拆**（wireframe-only，歸 W2） | Tab1/Tab2 是行程勾選的唯讀投影（`_backfill_scope_from_tasks`），非獨立畫面；就地新增稽核人員 / DOCX 匯入為 modal dialog，非自成流程。單一可編輯畫面（Tab0 行程卡）。 |
| evidence/evidence-classification-reports.md | **✅ 已拆（2026-07-06 user 拍板，協調 session 執行）**：拆為 `evidence-classification-validation.md`＋`evidence-classification-adjudication.md`（NAV 掛 review 子頁），原檔與舊 wireframe 退役，全站連結修正，build 76 頁綠、錨點 0 缺 | §7 顯示兩條獨立 route（`-validation`/`-adjudication`）＋兩 Vue view，符合「各自有 route → 拆兩頁」判準。**但**①user W1 指令僅點名 4 個 A 級頁拆分、B 級為「判定」；②concurrent W2 arc 正把此頁當單頁做 wireframe量產（已建 evidence-classification-reports-wireframe.svg、改 review.md 連結）——執行拆分會與並行工作衝突。已建的拆分草稿已撤回、原檔保持完整。 |

## 統計

| | 頁面 spec | _overview | 合計 |
|--|----------|-----------|------|
| 總數 | 47（46 頁面 + 1 背景服務；task-setup + sitemap + analysis + customer-dashboard-editor 除名；tool-plugin-manage 已驗 live 保留） | 9 | 56 |
| 已完成 | 47（專案管理 7 + 稽核執行 5 + 證據管理 5 + 合規框架 6 + 協作 3 + 問卷 3 + 報表 2 + 認證 2 + 系統管理 14：全群含背景服務） | 8（協作群無 _overview） | 55 |
| **拆分重整後（2026-07-06）** | **67 內容頁**（量產 47 → planning 拆分 +4、共用元件 banner +1、W1 A 級 +7（原 4 頁中 1 頁退役）、ecr B 級 +2（原頁退役）、SSP 編輯器 +5、task-edit 既有）＋ **每頁 §5 wireframe 全覆蓋（67/67）** | 8 | 75 |

## Gate 紀錄

| Gate | 日期 | 結果 |
|------|------|------|
| Pilot（專案規劃頁）驗收 | 2026-07-05 | ✅ 六輪回饋後定稿 + §5 實機截圖五張（STG 亮色）完成 |
| Wave 1 完成抽查 | | 待 |
| Wave 2 / 3 完成抽查 | 2026-07-05 | ✅ 系統管理群抽 user-manage（`44e5ca10`）5 條紅線全過（§9 七表全對 dump / §6.1 全對 / §1.1 對 UserMTRBACForm 實裝 / 引用 _overview / 7 dot 齊）；連同下行三群抽查，Wave 2/3 抽查完備 |
| **全站終驗**（正確性＋內容掃描） | 2026-07-06 | ✅ 機械層全綠 + Sonnet ×9 逐頁核實 76 頁 + 逐條仲裁修正完成（見 Session 紀錄末列）；all-green build |
| **量產總驗收** | | 🛑 47/47 頁面 spec + 8 _overview 全完成、四群抽查 PASS、**全站終驗完成（機械+內容 all-green）** — **等 user 總驗收**（過後才 rsync 更新 POC 部署） |
| 問卷 / 報表 / 認證 三群抽查（中控 #2） | 2026-07-05 | ✅ 各抽 1 頁（設計器 / 摘要報表 / 登入含MFA）對 5 條紅線全過；報表那頁 agent 誤判 FAIL 經仲裁改 PASS（routes.json 含 Flask-RESTful add_resource 雙路徑 artifact，非 spec 錯誤，spec 9 端點全對得上 dump） |

## Session 紀錄

| 日期 | Session | 完成項 |
|------|---------|--------|
| 2026-07-05 | #1 | FR-047 立案 + pilot 六輪定稿 + HTML 站（lightbox 縮放）+ writing-feature-specs skill + changelog 政策改版 + 本 tracker |
| 2026-07-05 | #1 中控交棒 | 量產發包（Lane A/B/截圖/FR-046 Phase3）+ POC nginx 部署 + 中控交接 → [orchestrator-handoff](handoff/2026-07-05-orchestrator-handoff.md)；原 session 收尾欠對話歸檔/SUMMARY/Notion（等 user 令） |
| 2026-07-05 | #2 | 專案管理群量產：project-list / project-create / project-overview 三頁 spec（13 節 + 12 dot）+ _overview 頁面地圖對齊（commit `83fce5ac`；欠 §5 實機截圖） |
| 2026-07-05 | #3 | 稽核執行群量產：_overview（AP→AR→POA&M 資料模型）+ 稽核計畫填寫頁 + 稽核執行頁 二頁 spec（13 節 + 13 dot）；build ✅ / 敏感資訊 grep 0（欠 §5 實機截圖） |
| 2026-07-05 | #4 | 專案規劃頁 §5 實機截圖五張（STG 亮色）：查出原「未解 login redirect bug」真因是 FE `cm_persist_mode=session` 心跳過期清 token（非登入壞），另查出目標專案「亞州航空」已軟刪除、改用「回饋整合設定」+ blsit 帳號；截圖嵌入 spec + rebuild HTML |
| 2026-07-05 | #5（Lane B 連續） | 稽核執行群收尾：POA&M 矯正頁（`25c3420f`）+ 我的任務（`1d923a4c`）+ 我的稽核（`9edea842`，Sonnet 撰主導抽查）三頁 spec（13 節 + 14 dot）；🔍 workflow-setup/view 驗為 live BPMN 範本編輯、除名歸 Wave 2。稽核執行群 5 頁全數完成（欠 §5 截圖） |
| 2026-07-05 | #6（Lane A 連續） | 專案管理群收尾：稽核輪次清單 + 專案設定 + 專案儀表板三頁（`f0c8cdef`，13 節 + 10 dot）；🔍 驗存廢：project-dashboard=live（保留）、project-task-setup=dead（除名，FR-038 併入規劃頁）。專案管理群 7 頁全數完成。安全發現：project-settings PUT 無 BE 角色守門（§12）。subagent 委派中途 stall，改主導自寫（研究 grandchild 產出可用） |
| 2026-07-05 | #6（Lane A 續） | 合規框架與 SSP 群：_overview（`bba1e08d`，資產模型+三步匯入）+ 合規框架管理（`d5eddff9`）+ BPMN 流程範本（`ccfd588b`）+ 資源庫 ModuleFrame（`46a69ea3`）三頁 Opus 自寫；13 節 + 11 dot；build ✅ / grep 0。剩 3 頁 Sonnet 匯入頁交下棒（handoff §10 有完整線索：共用 parse→confirm 三步式 + ImportDocx/Excel 共用元件）。教訓：研究 subagent（Explore 唯讀）產出佳、md 主導自寫可靠；schema drift 續抓（module-frame 的 ssp_ 前綴、NOT_PLATFORM_ADMIN=403060） |
| 2026-07-05 | #6（Lane A 再續） | 合規框架群收尾 3 匯入頁：框架版本匯入/編輯（`3fdcec1b`）+ 範本匯入精靈 docx/excel（`9a5bcbbe`）+ SSP docx 匯入（`9a5bcbbe`）；13 節 + 6 dot。共用 SspDocxImportPage 由 source_type 分流（module_frame full vs project_ssp statement_only）；parse job 暫存三步式。**合規框架與 SSP 群 6 頁 + _overview 全數完成**。schema drift 續抓（agent 的 oscal.ssps/controls → 實際 system_security_plans/catalog_controls） |
| 2026-07-05 | #5（Lane B 續） | 證據管理群量產：_overview（`1a3fdb66`）+ 證據分類覆核（`8b9c1fa5`，Opus 自寫）+ 分類報表（`0caf4a53`）/ 雲端整合（`3f86d320`）/ 檔案 Agent（`fc7e33ae`）/ 儲存設定（`c0c8d00b`）四頁（Sonnet 撰主導抽查）；13 節 + 18 dot；build ✅ / grep 0。證據管理群 6 檔全完成（欠 §5 截圖）。安全發現：EC 覆核 / storage-config PUT 僅 JWT 無角色守門（各 §12）。EC_ error code 前綴（非 GRC_） |
| 2026-07-05 | #5（Lane B 續） | 協作群量產：公告管理（`9f57cc84`）+ 公告檢視（`cf26f3b1`，皆 Sonnet 撰主導抽查）+ 回饋管理（`c38d3309`，Sonnet 陷 delegation loop、主導 stop 後自寫）三頁 spec（13 節 + 13 dot；協作群無 _overview）。build ✅ / grep 0。關鍵：回饋存 issues+feedback_issues、巡檢回饋停用且 {type:1} 會炸 BE；公告硬刪除；回饋/公告寫入皆無 BE 角色守門。**Lane B 剩系統管理群（15 頁）+ 背景服務——context 將滿，見 handoff `docs/features/FR-047-2607-feature-spec-handbook/handoff/2026-07-05-laneB-system-admin-handoff.md`** |
| 2026-07-05 | #7（Lane A 續） | 問卷群量產：_overview（`d9e16dec`，作者/消費雙端 + 快照 + 雙生命週期）+ 問卷管理（`84f9569d`，Sonnet）+ 問卷設計器（`c206faa7`，Opus，頁題三步精靈/7型別）+ 問卷填寫預覽（`(本次)`，Sonnet，五模式/狀態機/socket協作/歷史還原）四檔（13 節 + 20 dot）。3 個唯讀 Explore research agent 產出 → md 主導自寫（§2.1）。error code 開檔驗（jedi_survey `SURVEY_*` vs 主專案 `TASK_SURVEY_*`）。抓錯：agent 誤報「folder 刪除需非空 409」（實為無條件軟刪）、`SURVEY_409003` 為死碼（頁刪 CASCADE 不擋子頁）、`GRC_SURVEY_HAS_ANSWERS` 只保護規劃頁任務移除、頁/題硬刪除無 is_delete。安全發現：作者端與消費端寫入皆僅 JWT、狀態轉換合法性只在 FE（各 §12）。**問卷群 3 頁 + _overview 全數完成。下一棒 = Lane ④ 報表群（analysis 🔍先驗）** |
| 2026-07-05 | #8（Lane B 續） | 系統管理群起：pre-flight ✅ + 建 dir；🔍 驗存廢：tool-plugin-manage=live（`ui_routes` enable=1 保留）、**sitemap=dead 除名**（無 ui_routes 列＋FE 零 nav 進入點）。_overview（Opus 自寫：三層 RBAC 樞紐 + 租戶/部門組織模型 + system_configs key-value 慣例 + 3 dot）+ 角色權限管理（Opus 自寫：RBAC 樞紐頁 + 4 dot）二檔（13 節）。build ✅ / grep 0。用 1 隻唯讀 Explore agent 蒐 RBAC 碼 → 主導自寫。schema 校真相：`user_roles` 實含 scope/org_unit_id/is_default（設計文件簡化版遺漏）；`capabilities.is_platform`；role error code = `AUTH_` 前綴（非 GRC_）。安全發現：role 端點全僅 JWT、系統角色/平台能力保護只在 FE、能力全量取代；名稱重複 raise NotFound(404) 但碼是 AUTH_409004（型別/碼不符）。剩 12 Sonnet CRUD 頁 + 背景服務 spec |
| 2026-07-05 | #7（Lane A 續） | 報表群量產：_overview（`849318b7`）+ 專案摘要報表（`afa14805`，Opus，TipTap富文本/WeasyPrint PDF/版本歷史 U-R）+ AI 儀表板（`(本次)`，Sonnet，五階段生成管線/Claude三模型/不落 DB）三檔（13 節 + 8 dot）。2 隻唯讀 Explore research → md 主導自寫。🔍 驗存廢：**analysis + customer-dashboard-editor 皆 demo scaffold 除名**（Sigma.js / vue-grid demo 假卡、無 API、後者 enable=0 + `item.h"npm` typo）。error code 開檔驗：AI_DASHBOARD_400001~404002、摘要報表無專屬碼；Claude 模型 ID 對 `claude_client.py`（haiku/sonnet/opus-4-5）。安全發現：摘要報表寫入/匯出無角色守門且不檢查專案歸屬、AI 儀表板 health 免 JWT（各 §12）。**報表群 2 頁 + _overview 全數完成。下一棒 = Lane ⑤ 認證群（login+MFA / forget+reset，匿名態）** |
| 2026-07-05 | #7（Lane A 續） | 認證群量產（匿名態）：_overview（`4f5e08f9`，認證資料模型 + 登入/MFA/JWT 流程 + 密碼變更生命週期 + 匿名態特性）+ 登入含 MFA OTP（`9156038f`，Opus，captcha/鎖定/MFA分流/TOTP啟用）+ 忘記/重設密碼（`(本次)`，Sonnet，token 30分 single-use/bcrypt 防重用/三情境同頁）三檔（13 節 + 7 dot）。2 隻唯讀 Explore research → md 主導自寫。error code 開檔驗（jedi_login `LOGIN_*`/jedi_mfa `MFA_401001`/jedi_auth `AUTH_*`）。安全發現：忘記密碼帳號列舉（404 vs 200）、密碼政策僅 FE、匿名端點僅靠 token 憑證、otp-resend type/mfa_type 欄位 BUG、cm_persist_mode 心跳清 token 陷阱、全域 MFA_REQUIRED（各 §12）。**認證群 2 頁 + _overview 全數完成 → FR-047 Lane A（②③④⑤）全部收官** |
| 2026-07-05 | #8（Lane B 收官） | **系統管理群全數完成（14 頁 spec + _overview）**：Opus 自寫 4（_overview / role-manage / background-services / tool-plugin-manage）+ Sonnet 派 10（user-manage / user-profile / user-log / system-menu / department / tenant / device / information-system / notify-smtp / ldap / issue-integrate；每頁抽查 §1.1/§6.1/§9 紅線後 commit）。authoritative build ✅ 全 15 頁 / grep 0 / 全 dot compile。方法：7 隻 Sonnet full-writer 分兩批並行（帶 §5 鐵則「不 spawn/不跑 render_html」，零 delegation loop）。tool-plugin-manage 查出=前端 mock 占位頁（選單可達但無後端）；sitemap 除名。schema 校真相：`totp_secrets`（真 TOTP 表，users.topt_secret 是死欄）、LDAP group=`THIRD_PARTY_LOGIN`（非 LDAP）、information_systems delete=軟刪、UserForm.vue 死碼(live=UserMTRBACForm)。**重大安全發現（只記錄不修，各頁 §12）：`GET /otp-qrcode/<uid>` 完全無認證洩 TOTP secret（最嚴重）、api-logs export @jwt 註解掉(SEC-001)、device/user/role 寫入端點多僅 JWT 無角色守門、ISSUE_INTEGRATE_CONFIG token 未遮罩明文回傳、issue_service GITLAB/GITHUB copy-paste bug。FR-047 頁面 spec 全數 47/47 完成。** |
| 2026-07-06 | W1（拆分重整） | A 級 4 頁拆分（user-manage / audit-review / module-frame → hub＋各 2 子頁；notify-smtp-config → notify-channels＋smtp-config 平級雙頁、原檔 `git rm`）＋每頁 §5 版面 wireframe（§2.5 慣例，共 11 張新 SVG）。NAV_STRUCTURE 同步、退役檔連結全站修正、authoritative build ✅、anchor 全解析、敏感/「GRC 系統」grep 0。B 級：ap-authoring **不拆**（投影 tab＋modal）、evidence-classification-reports 判定為拆但因 concurrent W2 衝突 **deferred**（草稿撤回、原檔留存）。⚠️ 執行期發現 concurrent W2 wireframe量產 session 同 working tree 並行（render_html.py＋多頁 spec 有其 WIP）；render_html.py NAV 變更同時攜帶 planning arc WIP。未 push（等 user）。 |
| 2026-07-06 | planning 拆分 | 規劃頁改造 hub＋planning-status／batch-ops／basic-info 3 新子頁＋task-edit 擴充＋shared-components/flow-phase-banner 共用元件 spec（`5f53613e` / `2c39c6b4`）；各含 wireframe |
| 2026-07-06 | W2 | wireframe 量產前半 25 頁：專案管理 11（`4eb1c720`）＋稽核執行 4（`49dcb46d`）＋問卷 3（`d3b5b351`）＋證據 7（`b335eb70`） |
| 2026-07-06 | W3 | wireframe 量產後半 24 頁：系統管理 12（`0facde1d`）＋合規框架 5（`e325f303`）＋協作 3（`44caaa42`）＋報表 2（`497eba9a`）＋認證 2（`5d65beb4`）＋ skill 更新（`68b2bd07`，拆分判準修正版＋wireframe 慣例） |
| 2026-07-06 | NAV 對齊產品選單 | 側欄重構（user 拍板）：群＝ui_routes 產品 7 群＋認證＋共用元件、樹＝畫面容器關係（NAV 遞迴任意層，最深 7 層）、跨群 ↺ 重複掛 5 頁（麵包屑取主家）。SSP 編輯器掛進規劃頁下、階段頁掛進專案總覽下、my-tasks/my-audits/摘要報表歸「專案與任務」、租戶組織/系統設定/AI 分析成獨立群、儲存/Agent/雲端整合歸系統管理。檔案零搬移（NAV 與資料夾解耦）。build 76 頁綠、playwright 實測側欄渲染正確 |
| 2026-07-06 | 側欄收合＋粗體修 | 側欄可收合（群標題＋父項 chevron、localStorage 記憶、當前頁鏈強制展開＋捲動定位；playwright 7 項行為驗證全過）；build 前清舊 html 產物（退役頁殘留不再誤導）；修 4 頁 SSP 子頁「粗體貼全形標點不轉譯」（全站掃描歸零，dot 圖 `********` 遮罩為合法內容非誤植） |
| 2026-07-06 | 協調收口 | 四 arc 並行後統一收口（`c50d12b7`~`928a2562`）：46 個 dangling .dot 補進版、W1 四組按序 commit、NAV＋tracker 共用檔收口、html/ 入 gitignore；**B 級 ecr 依 user 拍板拆分**（`867cbe44`：validation＋adjudication 兩頁、原頁退役）；全站 build 76 頁綠、NAV 0 孤兒、斷圖 0、wireframe 67/67 全覆蓋 |
| 2026-07-06 | **全站終驗** | §1 機械層（build/敏感/斷圖/粗體/wireframe/內部錨點）全綠、修 6 斷錨（`ac88e487`）。§2 Sonnet ×9 並行逐頁核實 76 頁（對 routes.json/db_schema.json/FE/error code）。§3 逐條仲裁 ~30+ findings → CONFIRMED 按群修正 5 commit：flow-phase-banner schema/path（`b3a99b83`）、system-admin 5 頁（`bb76b1d4`）、survey/collab hub 殘影（`46d19112`）、flow-template 誤標套件（`1203dfdc`）、audit-execution 7 頁含 4 A 級（`ec466e84`）。誤報/optional 回報 user，清 2 項：module-frame `oscal.ssps`/`is_template`→實表名+template_ssp_id 機制（`0ba8190f`，深掘推翻 agent 原判「dump artifact」）、全站 `\_overview` 反斜線清理（`1595a825`）。all-green build。**底層 is_template code/migration drift 另 spawn task 回報 BE 待辦。** 教訓濃縮進 writing-feature-specs skill 紅旗。 |
| 2026-07-20 | **render_html.py 側欄/CSS/JS 外部化重構** | 新增 Release Notes 頁面那次 commit 一次動了 323 個檔案暴露問題：CSS/lightbox JS/側欄 HTML 全內嵌進每頁，改側欄結構就要重 render 該版本目錄下全部頁面。抽成 `docs/specs/_shared/{site.css,site.js}`（跨三版本共用靜態檔）+ 各版本目錄 `html/nav-data.json`（純資料，per-version）；`build_nav()` 拆成 `nav_data()`，`TEMPLATE` 側欄改空殼由瀏覽器端 JS fetch 後動態渲染（current 高亮/收合狀態一併搬到瀏覽器端判定）。三版本重 build 零「nav 未涵蓋」警告、`index.html` 未變。瀏覽器實測（Chrome DevTools MCP）側欄渲染/導頁/高亮/收合 persistence/`file://` fallback/console 零 error 全過，涵蓋三版本各深度頁面。效果驗證：模擬新增一頁重 build，僅 `nav-data.json`（+7 行）異動、零既有 `.html` 被觸動（對比重構前 323 檔）。設計取捨見 `docs/analysis/2026-07-20-spec-site-shared-assets-extraction.md`；SUMMARY 見 [handoff/2026-07-20-render-html-shared-assets-refactor-SUMMARY.md](handoff/2026-07-20-render-html-shared-assets-refactor-SUMMARY.md)。commit `dfc6ecc6`/`852b0e55`，tag `v1.9.0`（沿用既有版號非新 release），未 push。 |

## 最後定版前待辦（user 2026-07-06 拍板：先不動，定版時一次多線程處理）

- **章節連結化**：全站約 **1004 處**待轉真實錨點連結，不是現在就做——
  - **A. 表格「詳述」欄裸文字**（§1.1/§6.1/§9.1 等總清單表的「詳述」欄，例：`§10`、`§6.2`、`UC-PD-01`）：**774 處**
  - **C. 已是連結但只連到整份檔案開頭、未連到精確章節**（例：`[_overview §5](_overview.md)` 少了 `#5-...` 錨點片段）：**230 處**
  - **技術做法（已驗證可行）**：pandoc 產生的錨點 id 有固定規律（`## 10. 頁面邏輯與資料對應` → `id="10-頁面邏輯與資料對應"`；`### 6.2 核心 endpoint` → `id="62-核心-endpoint"`；UC 標題 `#### UC-PD-01 ...` 也有 h4 id）。**不要自己重刻 pandoc 的 slugify 演算法**（fullwidth 括號、斜線等會被吃掉，容易猜錯）——正確做法是先跑 `render_html.py` build 出 HTML，從已 build 好的 `html/*.html` 反查每個標題的真實 id，再回填連結進來源 md。
  - 規模判斷：跨 55 頁、上千處，建議走 workflow/多 agent 平行處理（每頁一隻 agent，讀該頁已 build 的 HTML 抓 id 表 → 回填 md → 統一跑一次 authoritative build 驗證）。
- **§6 API 格式一致化**（user 2026-07-06 提出；project-dashboard.md §6.2 已示範修好、範本已補鐵則）：
  - 現況：§6.2 核心 endpoint 有兩種寫法混用——好的用「request→json 區塊 / response→欄位表」，爛的把 JSON 塞行內 code span、欄位擠成「、」串散文（一堵牆難讀）。
  - 待掃：**Response 散文串**僅 project-dashboard.md（已修）；**Request 行內 JSON** 全站 25 處，其中 ~15 短（行內可接受、不用動）、**~8 處較長需改**（`login`/`poam` remediation/`survey` fill patches/`ai-dashboard`/`survey-manage` 列表/`ap-authoring` subjects/`remote-agent`/`otp-verify` 等）。
  - 判斷點：長 `{...}` 是**真 JSON payload** → 拉 ```json 區塊；是**欄位+必填註記簡寫**（如 `{username（必）, password（必）...}`）→ 改**欄位表**。非機械替換，逐 endpoint 判斷，併入上面多 agent 批次一起做。

## 本次順手做的白話化（未在上面 waves 逐條記，這裡補記）

- `round-state-machine.dot`（狀態機圖）+ `project-management/_overview.md` §2、`audit-execution/_overview.md` §2 兩張轉換表：API action 名前面加白話動詞（`啟動稽核 launch-audit`、`開始稽核 start-auditing`、`完成判定 finalize`、`結束本輪 close-round`、`啟動複驗 launch-reverify`），API 名保留供 UI 動作 ↔ endpoint 對照，只加白話不刪技術詞。
