FR-047 功能 SPEC 量產 — Lane A 續跑交接(中繼 handoff)

項目 內容
緣由 連續作業模式跑 FR-047 頁面 spec 量產;本棒(Lane A ①)完成「專案管理群」7 頁後 context 快滿,中繼交棒
Repo / branch BE compliance-manager-be,current branch = main不切 branch、不 push,照 CLAUDE.md)
本棒完成 專案管理群 7 頁全數 ✅(commits 83fce5ac / f0c8cdef);tracker 已更新(3b096628
接手前必讀 ① 本檔全部 → ② docs/features/FR-047-2607-feature-spec-handbook/handoff/2026-07-05-mass-production-prompt.md → ③ writing-feature-specs skill → ④ 範本 docs/specs/v1.8.0/project-management/project-planning.md + 本棒產出的 project-list.md(合格 Sonnet 樣貌)
預估 剩餘 Lane ②~⑤ 約 15 頁 + 4 個 _overview;每頁 20~40 分鐘(Opus 自寫較久)

🧭 原始需求 / WHY(先懂這個,再開工)

這套手冊給誰、解決什麼docs/specs/v1.8.0/ 是給新手全端工程師的功能 SPEC 手冊——痛點是「查一個功能會查到天荒地老」。解法:一條 FE route = 一份 13 節 spec,markdown 是唯一 living truth(HTML 站 / docx 都是 build 產物)。

核心紀律一句話:spec 是 living truth,每個事實從 code / DB 掃出來,不憑記憶、不抄舊文件、不信探勘 agent 摘要的 schema 名。真相來源唯一:

  • 表結構 / schema 名 / 欄位 → scripts/deliverables/out/db_schema.json
  • endpoint 存在性 / path → scripts/deliverables/out/routes.json
  • request / response 欄位 → marshmallow serializer + service 組裝碼(開檔逐條對)
  • FE UI / 條件邏輯 → FE repo 實掃(~/Projects/Billows/Audit-Manager/compliance-manager-fe/

本棒在大圖的位置:整個量產分 3 wave、9 群、47 條目。本棒完成「專案管理群」(Wave 1 第一群)。平行有其他 session 在跑別的群(#5 跑稽核執行群 = Lane B)——所以 tracker 是多 session 共寫,改前必重讀。

本棒要續的 Lane 順序(user 指定,全屬 Lane A 連續作業)

  • ② 合規框架與 SSP 群compliance-framework/):先 _overview,再 6 頁
  • ③ 問卷群survey/):_overview + 3 頁
  • ④ 報表與儀表板群reporting/):_overview + 4 頁(analysis 🔍 先驗存廢)
  • ⑤ 認證群auth/):_overview + 登入(含 MFA OTP)+ 忘記/重設密碼

§0 接手讀序(照順序,先懂需求再碰)

  1. 🔒 先懂需求硬 gate:本檔「🧭 原始需求」+ mass-production-prompt.md(冷接自檢 3 問要答得出來)
  2. 🔒 writing-feature-specs skill 全文(8 步流程 + 13 節模板 references/page-spec-template.md + 圖形化慣例)
  3. 範本:docs/specs/v1.8.0/project-management/project-planning.md(pilot)+ _overview.md;本棒 project-list.md(Sonnet 合格樣貌)、project-create.md(Opus + BE bootstrap 時序圖法)
  4. tracker:docs/features/FR-047-2607-feature-spec-handbook/tracker.md(認領頁面 / 看誰在寫什麼)
  5. 本檔 §2 教訓(血淚,務必讀——subagent 委派會 stall、schema drift、DB 連法)

冷接自檢 4 問(答不出回去讀):

  1. spec 的事實憑什麼可信?(答:三來源 dump + 開檔,不信 agent 摘要)
  2. 為什麼不能派 subagent「寫完整頁 spec」交回就好?(答:見 §2.1,它們會 stall;只能派研究、md 自己寫)
  3. schema 名寫 grc.audit_rounds 對不對?(答:錯,真相是 compliance.project_audit_rounds;一律查 db_schema.json)
  4. 改 tracker 前要做什麼?(答:重讀,多 session 共寫)

§1 現況(本棒完成什麼)

專案管理群 docs/specs/v1.8.0/project-management/ 7 頁全數 ✅(+ _overview 早已完成):

模型 commit 特別註記
專案列表 project-list.md Sonnet 83fce5ac 可見性 vs 編輯權不對齊坑
專案建立 project-create.md Opus 83fce5ac POST /oscal-project/start clone 三件組;atomic 核心 vs best-effort 尾段時序圖
專案總覽 project-overview.md Opus 83fce5ac 三 route 變體;FE 生命週期常數指 legacy path 的 drift(§12)
稽核輪次清單 project-ap-list.md Sonnet f0c8cdef 新增輪次 UI 旗標隱藏(BE 端點仍活)
專案設定 project-settings.md Sonnet f0c8cdef ⚠️ PUT 無 BE 角色守門的安全缺口 vs verify-and-repair 嚴格 manager
專案儀表板 project-dashboard.md Sonnet f0c8cdef 全域落地頁(非 per-project 總覽);2 處已驗失效 UI

🔍 已解決project-dashboard 驗 live(ui_routes.enable=1/project/dashboard 全域落地頁)保留;project-task-setup(FE 0 個 nav 進入點,功能 FR-038 併入規劃頁任務面板)→ tracker 除名。

每頁:13 節模板 + 3~5 張 .dotassets/ 下,前綴 pl-/pc-/po-/pal-/ps-/pd-)。全部 build ✅ / 敏感資訊 grep 0 / 「GRC 系統」0。§5 實機截圖一律留佔位 callout(截圖另有專責 session,STG 亮色模式)。


§2 前次教訓(血淚,續跑必看)

§2.1 ⚠️ subagent 委派「寫完整頁 spec」會 STALL — 不要這樣派

本棒派了 3 個 Sonnet subagent 各寫一頁 spec,結果全部沒寫出 md 檔:它們把工作再分包給 research 孫 agent,然後idle 等孫 agent、不自己寫 md。孫 agent 的研究產出極好(開檔驗證、file:line、schema 對 dump),但 parent 沒落地。

  • 正確模式:subagent 只派研究(用 Explore 或 general-purpose 明令「只回事實 manifest,不寫檔」),md + dot 由主導 session 自己寫。或直接自寫全部。
  • 本棒後來救回 ap-list agent 已寫進 repo 的 4 張 dot(品質好、error code 正確),settings/dashboard 靠孫 agent 的研究報告自寫。
  • 若仍要派寫檔:prompt 必加「禁止再 spawn subagent;自己 grep、自己 Write md 到指定路徑」,並在交回後自己 verify schema/endpoint + build 才 commit。

§2.2 schema drift — 一律查 db_schema.json

agent 摘要常寫錯 schema 前綴。本棒抓到的錯:grc.audit_rounds→實際 compliance.project_audit_roundsoscal.module_framescompliance.module_framescloud_integration.drive_folder_mappingspublic.drive_folder_mappingsauth.userspublic.usersjedi_oscal.*/jedi_flow.*oscal.*/compliance.*public.workflow_executionscompliance.workflow_executionsview(vw_*)不在 dump(dump 只收 table)→ 去 scripts/sql/view/ 找定義,spec 標「(VIEW)」。

§2.3 error code 開檔驗(別抄 agent)

本棒抓到 agent 把 manager 守門寫成 GRC_403001,實際 GRC_NOT_MANAGER = GRC_403002GRC_403001GRC_NOT_AUDITOR)。error code 在 common/code/grc_error_code.py,grep 確認。

§2.4 DB 連法(.env source 會失敗)

.envDB_SECRET 是 JSON,source .env 帶不進來。用 python regex 抓密碼:

PW=$(python3 -c "import re
for l in open('.env'):
    if l.startswith('DB_SECRET='):
        print(re.search(r'\"rds_master_password\"\s*:\s*\"([^\"]+)\"', l).group(1)); break")
PGPASSWORD=\"$PW\" psql -h 192.168.50.188 -p 25432 -U cmmgr -d guidant_ai_dev -tA -c \"SELECT ...\"

public.ui_routes 欄位是 name / url / enable(不是 path);驗 route live 用 enable=1

§2.5 build 有時被別 session 的半成品擋

render_html.py 遇到缺 dot 會 sys.exit 硬停。曾被 session #3 的 audit-execution/audit-review.md(缺 ar-ui-layout.dot)擋(現已修)。若再遇:暫時把該壞 md 搬到 scratchpad → build 驗自己的頁 → 搬回。別動別人的檔本身

§2.6 tracker 多 session 共寫

#3/#4/#5/#6 都在改 tracker。每次改前 Read 對應段(Edit 會因 stale 失敗)。只改自己那幾列 + 統計 + Session 紀錄,別動別人的列。

§2.7 FR-038 legacy 端點 drift(寫輪次 / 稽核相關頁會遇到)

FE api.jsGRC_CLOSE_ROUND/GRC_LAUNCH_AUDIT 組成 /grc/project/:pid/ap/:apUid/...,但這些 path 不在現行 routes.json——現行輪次生命週期在 /audit-round/{roundUid}/...。寫到相關頁在 §12 flag,別當 live endpoint。


§3 每頁怎麼做(8 步 SOP 摘要,細節在 skill)

  1. tracker 認領(標 🚧,改前重讀)
  2. 該群 _overview.md 不存在先寫(頁面地圖 / 共用狀態機 / 角色基調 / 核心資料模型;範本 = project-management/_overview.md)
  3. 事實蒐集三來源:FE 實掃 + BE 鏈路 + db_schema.json/routes.json
  4. 寫 13 節 md(模板 references/page-spec-template.md)
  5. .dot 進該群 assets/(前綴用頁面縮寫;dot -Tsvg <f> -o /dev/null 驗編譯;視覺語彙照既有 dot:主色 #13294B、accent #B8873B、判斷菱形 #FFF6E5、例外 #FDEBD3、錯誤 #F8DCDC、成功 #D9E9DC
  6. build:python3 scripts/deliverables/render_html.py "docs/specs/v1.8.0" 必 ✅
  7. 自查:grep -REn '192\.168\.|password\s*=|Billows@'=0、grep 'GRC 系統'=0、內部連結不斷
  8. 顯式 git add <檔名> commit(禁 -am / add -A)→ 重讀 tracker → 更新該頁狀態 / commit / 日期

模型分工:tracker 標 Sonnet 的頁可派 Sonnet subagent 寫(但見 §2.1 陷阱——建議只派研究、自己落 md);標 Opus 的自己寫。


§4 Lane ② 起步線索(合規框架與 SSP 群)

FE 路徑 ~/Projects/Billows/Audit-Manager/compliance-manager-fe/src/。tracker Wave 2「合規框架與 SSP(compliance-framework/)」列的 6 頁:

  • 合規框架管理(compliance-framework-manage / version-manage,Opus)
  • 框架版本匯入 / 編輯(compliance-framework-import-version / version-edit,Sonnet)
  • 範本管理 ModuleFrame(module-frame / -items / -template-edit,Opus)
  • 範本匯入精靈 docx/excel(module-frame-import-* 5 條合一,Sonnet)
  • SSP docx 匯入 / 更新(project-ssp-import-docx,Sonnet)
  • BPMN 稽核範本管理(flow-template-manage / -create / -edit,Opus)

已知 module-frame 端點(routes.json 撈過,可信):GET /module-frame(list)、GET /module-frame/{uid}.../components.../control-defaults.../objective-defaults.../parties.../inventory.../leveraged.../ssp-resources.../system-characteristic.../template-ssp.../ssp-export.../ssp-import-templateGET /module-frame/download/{template,yaml-template} 等(增刪改各對應 POST/PUT/DELETE)。框架版本 / flow-template 端點自行 grep routes.json(pattern:frameworkflow-engine/flow-templates)。ModuleFrame 領域知識 → 讀 oscal-knowledge skill + memory reference_db_schema_module_framecompliance.module_frames_trans 翻譯表(可翻譯欄位慣例見 docs/claude/translatable-fields.md)。


§5 Pre-flight(開工必跑)

cd ~/Projects/Billows/Audit-Manager/compliance-manager-be
git branch --show-current          # 必須是 main;不對就停下問 user(不自己切)
git status --short                  # 確認自己要動的檔沒被別 session 佔
git log --oneline -5                # 對照本 handoff §1 commits
ls scripts/deliverables/out/{db_schema,routes}.json   # 事實 dump 在不在
python3 scripts/deliverables/render_html.py "docs/specs/v1.8.0" 2>&1 | tail -3  # 現況 build 是否已綠(別人的半成品可能擋,見 §2.5)

§6 行為規範重要提醒(適用本量產)

  • 不切 branch、不 push(push 永遠等 user 明示);顯式 git add 檔名、禁 -am
  • 每頁獨立 commit + 立刻更新 tracker(改 tracker 前重讀)
  • 每完成一個功能群,給 user 一句話回報然後直接繼續(不等驗收)
  • §5 截圖一律留佔位 callout(截圖專責 session 另做);一律亮色模式規格
  • 憑證只寫「見 .env / 部署文件」,絕不把 IP / 密碼寫進 spec
  • 不晶晶體、不用「GRC 系統」(用 Guidant AI / 合規稽核平台)、不用「速贏」
  • 跨 repo 開 FE 前先讀 FE CLAUDE.md(646 行);只讀不改 FE(spec 是掃 FE 現況,不動 FE code)
  • context 快滿時:照本 SOP 在乾淨的群組邊界寫下一份中繼 handoff、更新 tracker 後停下

§7 不在本期 scope(別順手做)

  • 不修 code(發現的 bug / 安全缺口只寫進 spec §12,不動實作)——例:project-settings PUT 無角色守門是記錄不是修
  • 不補 §5 實機截圖(專責 session)
  • 不動別 session 正在寫的群(看 tracker 狀態 🚧 / Session 紀錄)
  • 不重整別人已寫的頁

§8 前次 session commits(origin 未 push,全在 local main)

3b096628 docs(FR-047): tracker — 專案管理群 7 頁全完成
f0c8cdef docs(FR-047): 專案管理群收尾三頁 — 輪次清單/設定/儀表板
83fce5ac docs(FR-047): 專案管理三頁 spec — 列表/建立/總覽

(更早的 pilot / 稽核執行群 commits 見 git log;本群相關的都已 commit,working tree 對本群乾淨。)


§9 給 fresh session 的超短 prompt(user 複製貼)

接手 FR-047 功能 SPEC 量產(連續作業模式)。先讀
docs/features/FR-047-2607-feature-spec-handbook/handoff/2026-07-05-lane-a-continuation-handoff.md
全文(含 §2 教訓:subagent 委派會 stall、schema 一律查 db_schema.json、DB 連法、tracker 多 session 共寫),
答得出 §0 冷接自檢 4 問再開工。依 writing-feature-specs skill 8 步,
續跑 Lane ②合規框架與SSP群(先 _overview 再 6 頁)→ ③問卷 → ④報表(analysis 🔍先驗)→ ⑤認證。
每頁獨立 commit + 立刻更新 tracker(改前重讀);每群完成給我一句話回報後直接繼續;
不切 branch、不 push、禁 -am;§5 截圖留佔位;context 快滿寫中繼 handoff 後停。

§10 續跑進度更新(2026-07-05)

✅ Lane ② 合規框架與 SSP 群:6 頁 + _overview 全數完成(本 session #6 兩輪連續產出):

commit
_overview compliance-framework/_overview.md bba1e08d
合規框架管理(Opus) compliance-framework-manage.md d5eddff9
BPMN 稽核範本管理(Opus) flow-template-manage.md ccfd588b
合規資源庫 ModuleFrame(Opus) module-frame.md 46a69ea3
框架版本匯入 / 編輯(Sonnet) compliance-framework-import-version.md 3fdcec1b
範本匯入精靈(Sonnet) module-frame-import.md 9a5bcbbe
SSP docx 匯入(Sonnet) project-ssp-import-docx.md 9a5bcbbe

下一棒起點 = Lane ③ 問卷群(survey/) → 之後 ④ 報表群 → ⑤ 認證群。

Lane ③ 問卷群線索survey/,tracker Wave 2):

  • 先寫 _overview(問卷 v2 資料模型:問卷範本 / snapshot / 填答;與稽核任務的關係——任務可掛問卷,見專案規劃頁 §6.4 surveys)。
  • survey-v2-manage(Sonnet):views/survey/(grep FE survey-v2);survey-v2-designer(Opus,問卷設計器);survey-v2-fill / -preview(Sonnet,填答 / 預覽)。
  • 端點 grep scripts/deliverables/out/routes.jsonsurvey;已知 project-survey/*(answers / histories / checkpoint / patch)在 api.task_survey.routes。表 grep db_schema.json survey schema(有獨立 survey schema:survey.task_surveys 等)+ snapshot。jedi-survey 套件(~/Projects/Jedicogy/module/jedi-python-package/jedi-survey/)。
  • 領域知識:memory 搜 survey;問卷 snapshot 慣例見專案規劃頁 spec §11 / §6.4。

Lane ④ 報表群(reporting/)analysis 頁先驗 ui_routes.enable(🔍);project-summary-report(Opus,端點 /project-summary-report*,已在 routes.json);ai-dashboard(Sonnet,/ai-dashboard/* + /grc/dashboard/summary 已在 dashboard 頁spec);customer-dashboard-editor(Sonnet,動態儀表板模組)。

Lane ⑤ 認證群(auth/)login+otp-verify(Opus,MFA OTP;端點 grep login|otp|mfa|token;jedi-auth + jedi-mfa 套件;memory reference_dev_login);forget-password/reset-password(Sonnet,grep password)。認證頁多為未登入態,§3 權限與其他頁不同(匿名可達),§5 截圖可能要登出態擷取。

共用經驗(省時):三步匯入的 parse→預覽→confirm 模式已定型(見 _overview §4 + uc-cfi/mfi/ssi-01 dots 可參考);envelope 成功 {"status":true,"data":…};schema 一律查 db_schema.json(view 不在 dump,去 scripts/sql/view/);error code 開檔驗。

fresh session prompt(更新版,複製貼)

接手 FR-047 SPEC 量產(連續作業)。先讀 docs/features/FR-047-2607-feature-spec-handbook/handoff/2026-07-05-lane-a-continuation-handoff.md
全文(特別 §2 教訓 + §10 進度)。Lane ② 已完成;從 Lane ③問卷群(survey/,先 _overview 再 manage/designer/fill+preview)起,
→ ④報表群(analysis 🔍先驗)→ ⑤認證群(login+MFA / forget+reset,注意匿名態)。
依 writing-feature-specs skill 8 步;每頁獨立 commit + 改前重讀 tracker;schema 一律查 db_schema.json、
error code 開檔驗;不切 branch/不 push/禁 -am;§5 截圖留佔位;context 快滿寫中繼 handoff 後停。