使用方式:把下方「交接 prompt 本體」整段貼到新 session 即可接手。 前置狀態:A1 BE 端 partial shipped,剩 FE 下載按鈕 + 完整 E2E。
我要接手 SSP 匯入匯出 Phase 2 A1(Excel 樣板下載)的收尾工作,BE 端
已完整 ship(partial T7 BE 部分含 changelog + tracker 都完成),剩 T6 FE
下載按鈕 + T7 完整 E2E。
前置狀態
========
- branch: feature/ssp-import-export-phase2(BE repo,沿用,不另開)
- A1 已 ship 8 commits 未 push(涵蓋 T0~T5 + partial T7 BE 部分)
- 71 個 unit test 全綠(T2 22 + T3 16 + T3/T4/T5 app service 24 +
T4/T5 generator filled 7)
- blank / filled 兩模式 code 層級完整可用
- BE smoke 撞 A0.1 follow-up #7 jedi-issue GitLab env,user 端配齊環境後可跑完整 boot
- jedi-oscal 仍 path-dep(A0.1 既有,本 phase 不動套件層)
開工 SOP
========
第一步:必讀文件(順序)
1. docs/conversation-history/2026-05-19/ssp-import-export-phase2-A1/SUMMARY-be-partial-ship.md
← 本 session(T4 + T5 + partial T7)完整收口 + A1 全 commit 鏈 + 設計 anchor + 剩餘工作
2. docs/conversation-history/2026-05-19/ssp-import-export-phase2-A1/SUMMARY.md
← 上 session(T0-T3)partial summary
3. docs/changelog/2026-05-19-feat-mf-ssp-import-template-download.md
← 完整 changelog 含 API spec、行為差異、父子 row contract、TEMPLATE_VERSION
4. docs/features/FR-011.2-2605-ssp-import-export-phase2/design-A1.md
← A1 完整設計(含 §14 SemVer SOP)
5. docs/features/FR-011.2-2605-ssp-import-export-phase2/implementation-plan-A1.md
← 7 個 task 詳細 plan;T6 / T7 詳細範圍在 line 533-577 / 580-660
讀完後給「我看完了,A1 BE 完成範圍是 T0-T5 + partial T7,下一步建議做 X」的
簡短確認。
第二步:決定下一階段
====================
兩個方向:
選項 A — T6(FE 下載按鈕)
- 中型,0.5d
- 跨到 ~/Projects/Billows/Audit-Manager/compliance-manager-fe/
- 範圍:MF 詳細頁工具列加 SplitButton(blank / filled 下拉)+ axios blob
download + i18n(zh_Hant_TW + en)+ API endpoint constant
- 跟 T7 cucumber 平行可做(T6 先做能讓人手動測,T7 才寫自動化 e2e)
選項 B — T7 完整 E2E(cucumber + 完整 BE smoke)
- 中型,0.5d
- 跨到 ~/Projects/Billows/Audit-Manager/compliance-manager-test/
- 範圍:cucumber feature `mf_excel_template_download.feature` 兩 scenario
(blank + filled)+ Playwright step + page object;user 端配齊 GitLab env
後跑完整 BE boot smoke
- 嚴格說 T7 cucumber 需 T6 FE 按鈕已實作(FE 才能點下載)
建議順序:T6 → T7(依賴關係 + 可手動測過 T6 再寫自動化)
選項 C — 暫停 A1 收尾,切到其他 phase
- 例如 B1 Docx 樣板 + generator 骨架(中型,依賴 A0.1,可平行 A1 未完項)
- 或 A2 Excel Parser + 解析 API(中型,依賴 A1 BE 已 ship,可開始)
問我選哪個,等我說 GO 才開工。
第三步:依選擇走對應 SOP
========================
T6 (FE) SOP:
- 主要 repo 切到 compliance-manager-fe
- 不必新開 phase docs(implementation-plan-A1.md Task 6 已涵蓋)
- 完成後寫 changelog(type=feat,modules=[module-frame, ssp-import-template, frontend])
- BE repo 改 docs/changelog 標 T6 完成 + tracker README 更新「FE shipped」
T7 (E2E + 完整 BE smoke) SOP:
- 主要 repo 切到 compliance-manager-test
- BE repo user 端 配齊 GitLab env 後做完整 smoke(curl 兩個 mode + openpyxl 驗)
- 完成後 update docs/changelog 標 T7 完成 + tracker README 改 "A1 fully shipped"
Pre-flight verify 該做的事(動工前必驗):
T6 verify:
- MF 詳細頁 .vue 檔路徑(compliance-manager-fe src/views/ 下;user 確認過去)
- 既有 SplitButton 元件用法(看 PrimeVue Splitter / Button 用法)
- axios blob download pattern(既有 export 功能可能已有)
- API 端點 constant 加哪裡(compliance-manager-fe/src/config/api/api.js)
- BaseService 用法(compliance-manager-fe/src/service/BaseService.js)
T7 verify:
- 既有 cucumber feature 結構(compliance-manager-test/features/)
- Playwright page object pattern
- 既有 download / file 驗證 step(之前 framework PDF / SSP 匯入應有類似)
- openpyxl 在 test repo 是否已裝(package.json)
每項在 implementation log 內列具體 grep / read 命令。
鐵律(沿用 A0.1 + A1 T0-T5 全部)
=================================
1. 顯式 git add <file>,禁 -am / -A — commit 前必 git status --short 確認 staged 區乾淨
2. jedi-oscal 維持 path-dep,不 bump 版本不推 Nexus(Phase 2 整體完工才一次性 bump)
3. pyproject.toml dev-path 改動不該 commit(仍 working tree M 是對的)
4. BE 重啟必 lsof -ti:8000 | xargs kill -9(nohup orphan PID 已知陷阱)
5. 改 BE service code 後必提醒 user 重啟 — BE 沒 hot reload(FE 有 hot reload, 但 routes 改要重 build)
6. DDD 嚴格分層 — Route 不碰 DB,App Service 用 @transaction,Generator 純函式不依賴 DI
7. 不寫 docstring / 註解除非真有 non-obvious 的 why 要記
8. Test 用 mock 包 logger 避開 jedi DBLogHandler 撞 SessionLocal=None
9. T0 verify 結果不符 design 假設時主動修 design.md(不照舊硬幹)
10. 跨 repo 切換時提醒 user:FE / test repo 跟 BE 是不同 git repo,commit / branch 分開
T6 specific:
- compliance-manager-fe 自己的 CLAUDE.md(646 行)為 FE 規範主導;BE CLAUDE.md
的 BE 視角文件 `docs/claude/frontend-overview.md` 提供 BE 開發者 cheatsheet
- 加按鈕走 i18n(不寫死中文)
- response handling 注意 BaseService 的返回值規則
- PrimeVue 3.53 quirks:SplitButton / Dropdown null-value bug 看 BE CLAUDE.md
「PrimeVue 3.53 已知 quirks」段
T7 specific:
- E2E 一律在 compliance-manager-test repo,不在主 BE 加 test
- BDD 三層分離:requirements → specs → features/steps/pages
- 完整 BE smoke 需 user 端配齊 GitHub / GitLab env
已知 contracts(接 T6 / T7 必看)
=================================
API endpoint
~~~~~~~~~~~~
GET /api/1.0/module-frame/<uid>/ssp-import-template?mode=blank|filled&locale=zh_Hant_TW
回 xlsx binary + Content-Disposition: attachment; filename=ssp_template_<mf_short_name>_<mode>_<yyyymmdd>.xlsx
錯誤:
- 404 GRC_MODULE_FRAME_NOT_FOUND
- 400 mode 不在 blank/filled
- 401 無 JWT
樣板版本 TEMPLATE_VERSION
~~~~~~~~~~~~~~~~~~~~~~~~~
v1.0.0 — 寫在 00_說明 sheet R1 col B
A2 parser 讀此版本做相容性判斷(design.md §14 SemVer SOP)
控制項 sheet B 模式(07_控制項與AO)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 父 row:statement_id 空 + control_id 填 + control_name 填 + 灰底 F2F2F2 覆蓋整 row
- 子 row:statement_id=AO uid 字串 + control_id 同父 + objective_id (e.g. "AC-1_smt.a") + 白底
- A2 parser 用 statement_id 是否為空判斷父子;control_id 連續判斷階層歸屬
DI wiring(T6/T7 不必動,但理解有幫助)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
module_frame_container 加 3 個 DependenciesContainer slot(device / oscal /
information_system);main containers.py device 直接傳、oscal/info_system 用
override pattern(mirror line 175)。
已知限制
========
- 主 BE 完整 boot 撞 jedi-issue 缺 GITHUB_PRIVATE_TOKEN / GITLAB_* env vars
(A0.1 follow-up #7,非 A1 引入),單元測試與 partial smoke 可跑,完整 boot
smoke 需 user 環境
- pre-existing test_module_frame_write_strategy_v2_parties::test_write_parties_refreshes_existing_party_in_place
失敗(非 A1 引入,T4 c3de9fa 也 fail)— low severity,OSCAL Party 模型相關 stale test
工具預期
========
- T6 用既有 PrimeVue 元件 + BaseService pattern,不需新建 helper
- T7 用既有 cucumber + Playwright + openpyxl pattern
- 對 BE 端只需把 changelog + tracker README 標 T6/T7 完成
謝謝。
T6 + T7 完整 ship 後:
fully shipped ✅| Commit | 主題 |
|---|---|
b18db55 |
docs A1 phase docs — design + implementation plan |
f59c4ff |
docs T0 verify 結果回填 design.md (4 處) |
d9d54c2 |
feat T1 skeleton — route + app service + DI 接通 |
f68525f |
feat T2 generator base — sheet defs + styles + lookup + DV helpers |
ffd5d63 |
feat T3 blank mode — generator 主邏輯 + lookup wiring + 30 tests |
f14a942 |
docs T0-T3 partial summary |
c3de9fa |
feat T4 filled mode 非控制項 sheet — 6 領域預填 + DI + 12 tests |
419907d |
feat T5 07 控制項與AO sheet — 父子 row + MF defaults 預填 + 6 tests |
46b8999 |
docs T7 partial — BE smoke + changelog + tracker |
8 commits 未 push。