Arc 範圍:2026-05-08 10:47 ~ 2026-05-09 05:11(連續 ~18 小時,含長段 subagent 平行 dispatch) Branch:
feature/project-flow-engineHEAD0393613— 62 commits ahead of main / 57 ahead of origin(未 push、未 merge main,user 自行手動 push) Working tree:乾淨 承前:docs/conversation-history/2026-05-07-project-flow-engine/(spec + plan 撰寫階段,已歸檔) 承後:M5 FE(12-14 週)/ M6 Test + UAT(10-11 週)/ 5 個 deferred issues(pending)
| 階段 | 時間 | 動作 |
|---|---|---|
| 起 | 2026-05-08 10:47 | /clear + 啟動 superpowers:subagent-driven-development + 從 M0 OSCAL Spike 開始(plan header 已寫 review 策略:M4 結束才 user review) |
| 終 | 2026-05-09 05:11 | 8 templates E2E PASS + final handover + context check 還夠 + user 下指令「把這個 session 寫進 conversation-history 跟 SUMMARY」 |
期間:~30 個 subagent dispatch + ~10 輪重大架構討論。
e04255c)本 arc 起點為
e04255c(前 5 個 commits 屬上一個 spec 撰寫 arc,ed72ae7 ~ e04255c,已記在 2026-05-07 arc)。
| Hash | 主題 |
|---|---|
f004602 |
M0 spike findings 回灌 spec |
ad98d08 |
backfill commit hash to spike-findings changelog |
| Hash | 主題 |
|---|---|
aa90da1 |
Activity Protocol + ExecCtx / NodeResult DTO + ActivityBase |
164dc4b |
ActivityRegistry singleton |
c93671a |
schema 策略修正(既有套件表保留 public,新表進 flow_engine) |
297d336 |
backfill |
e4217cc |
flow_execution_contexts table + repo + JSONB merge |
a3e4da1 |
activity_logs table + repo + JSONB payload |
7f9c0f2 |
backfill |
6da07c9 |
CompletionChecker + EntityStateCounter (Task 1.4 + 1.4.b) |
1aa83b5 |
backfill |
55e30e7 |
ActivityDispatcher + SystemLogEmitter + PluginResolver Protocol |
903ad9d |
backfill |
da2b5b7 |
DI container wiring + init_activities hook (M1 scaffolding) |
46b95d9 |
backfill |
| Hash | 主題 |
|---|---|
b563392 |
M2.A generic plugins (kickoff/approval/gateway/export-report) |
1abd890 |
backfill |
ec28834 |
M2.B survey plugins (survey_design / assign_respondents / survey_fill) |
149fff5 |
backfill |
d8df598 |
M2.C OSCAL plugins (preparing/active/internal_review/external_audit/remediation) |
2eb7579 |
backfill |
| Hash | 主題 |
|---|---|
4a009d1 |
M3 schema extensions (workflow_templates + compliance.projects) |
078983f |
backfill |
fb28777 |
TemplateSnapshotService (deep-copy live template → snapshot) |
fda89cd |
backfill |
c0b7005 |
M3 Task 3.4 — 5 builtin BPMN templates + DB seed |
2a6899d |
backfill |
| Hash | 主題 |
|---|---|
a976637 |
M4 Task 4.1 — Role Catalog full bundle (4.1.a–4.1.f) |
f6bf7d3 |
backfill |
a25f223 |
M4 Task 4.2 — Project Flow API (4.2.a + 4.2.b + 4.2.c) |
13d41f5 |
backfill |
ba4d4e1 |
M4 Task 4.3 — Template CRUD API + Static Analysis + TEMPLATE_CHANGE event |
aa8eb89 |
backfill |
5ce1084 |
M4 Task 4.4 — 廢除既有 OSCAL phase-switching endpoints |
a4d15ec |
backfill |
694973a |
M4 milestone summary + LLM code review findings |
bd71901 |
backfill |
| Hash | 主題 |
|---|---|
e0542b2 |
C4 — BpmnPluginResolver typed exceptions (was raising ValueError → 500) |
575eebf |
backfill |
2762881 |
C3 — M4 DTOs 加 created_user_name/updated_user_name nickname |
8113f86 |
backfill |
c41403f |
C1+C2+I2 — repo 抽象修補 DDD 層級違規 |
75e1788 |
backfill |
f0034e5 |
OSCAL plugin wiring — replace M2.C scaffolding with real services |
c710ed2 |
backfill |
3ecca88 |
review_marks 加 verdict + oscal_internal_review wiring |
b9a0501 |
backfill |
d32ce43 |
truncate 既有 OSCAL/project 資料 — 對齊 spec §11.4 統一架構 |
51be62e |
backfill |
5e5b5c4 |
M4 closure — plugin runtime guard + survey wiring + e2e smoke |
8113dfc |
backfill |
| Hash | 主題 |
|---|---|
882a3fc |
spec amendment — 4 project type categories + task plugins + complete-time config |
dbfa1f7 |
backfill |
19d0aa8 |
D1 — complete-time config gap closed (node_config_overrides) |
0f49499 |
backfill |
8e4ef9e |
B1 — 任務類 5 plugins + 3 BPMN templates + entity strategies |
0393613 |
backfill (HEAD) |
e04255c..HEAD)234 files changed, 27,121 insertions(+), 359 deletions(-)
app/flow_engine/ — Activity Protocol / Registry / Dispatcher / Engine adapterapp/flow_engine/plugins/ — 12 plugins(M2.A 通用 4 / M2.B 問卷 3 / M2.C OSCAL 5)+ B1 任務類 5app/flow_engine/strategies/ — entity strategies(OSCAL AP / Survey / POAM / Task / etc)app/compliance/role/ — Role Catalog + RoleCatalogSeedingService + UserDeletionServiceapp/compliance/template/ — TemplateSnapshotService + TemplateStaticAnalyzerapi/flow_engine/ — Project Flow API + Template CRUD APIdomain/flow_engine/ + infra/flow_engine/ — repo interface + impldi_containers/flow_engine/public,新表進 flow_engine;新 enum 進 compliance)2026-05-08-flow-engine-execution-contexts.sql2026-05-08-flow-engine-activity-logs.sql2026-05-08-flow-engine-template-extensions.sql2026-05-08-flow-engine-role-catalog.sql2026-05-08-truncate-legacy-oscal-data.sql(截除 140 個 legacy projects 對齊 spec §11.4)oscal-full-audit.bpmnoscal-internal-only.bpmnoscal-execute-only.bpmnsurvey-with-review.bpmnsurvey-fill-only.bpmntask-execute-only.bpmn(B1 新增)task-with-approval.bpmn(B1 新增)task-recurring.bpmn(B1 新增)→ 共 8 個 builtin templates,E2E smoke PASS。
/projects/<uid>/flow) — current_node / activity log / phase / completion/templates/...) — admin 自訂 BPMN flow(含 static analysis 攔錯)/role-catalogs/...) — tenant 內 4 個 builtin role + custom role;project_role_assignments 取代既有 OSCAL participant 角色硬編node_config_overrides 機制(解決 complete-time config gap — 同 plugin 不同節點可改 config 而不需另開 plugin variant)current_node + phaseassessment_plans.status、assessment_results.status 在 user-facing 不再有意義docs/changelog/2026-05-08-*.md)依 type 分類:
feat (20):
feat-flow-engine-activity-logs.mdfeat-flow-engine-b1-task-plugins.mdfeat-flow-engine-builtin-templates.mdfeat-flow-engine-completion-checker.mdfeat-flow-engine-di-container.mdfeat-flow-engine-dispatcher.mdfeat-flow-engine-generic-plugins.mdfeat-flow-engine-m3-schema.mdfeat-flow-engine-m4-milestone-summary.mdfeat-flow-engine-oscal-plugins.mdfeat-flow-engine-plugin-runtime-guard.mdfeat-flow-engine-project-flow-api.mdfeat-flow-engine-review-mark-verdict.mdfeat-flow-engine-role-catalog.mdfeat-flow-engine-survey-plugin-wiring.mdfeat-flow-engine-survey-plugins.mdfeat-flow-engine-template-api.mdfeat-flow-engine-template-snapshot.mdfeat-flow-execution-contexts-table-and-repo.mdfeat-project-flow-engine-oscal-plugin-wiring.mdfix (4):
fix-flow-engine-c1-c2-i2-repo-abstraction.md(C1+C2+I2 — DDD 層級違規)fix-flow-engine-c3-audit-nicknames.md(C3 — DTO 加 user nickname)fix-flow-engine-c4-typed-exceptions.md(C4 — typed exception)fix-flow-engine-d1-complete-time-config.md(D1 — node_config_overrides)tweak (9):
tweak-flow-engine-deprecate-oscal-routes.md(M4.4 廢除 OSCAL endpoints)tweak-flow-engine-spec-amendment-4-types.md(A1 spec amendment)tweak-project-flow-engine-external-review-fixes.mdtweak-project-flow-engine-plan-amend.mdtweak-project-flow-engine-reviewer-pass2.mdtweak-project-flow-engine-schema-strategy.mdtweak-project-flow-engine-spec-and-plan.mdtweak-project-flow-engine-spike-findings.mdtweak-truncate-legacy-oscal-data.mddocs/analysis/2026-05-08-*)2026-05-08-template-static-analyzer-fixpoint-lattice.md — Template static analyzer 演算法選型分析(intersection vs union;lattice 選擇;spec 演算法直譯會 fail,改為 union semantics + per-loop-iteration verification)2026-05-08-project-type-comparison.html — 4 種 project type 對照表(流程、UI、資料、適用場景)2026-05-08-user-flow-comparison.html — User flow / FE 互動細節對照(建專案 / 設定流程 / 執行 / 結案)docs/issues/pending/2026-05-08-*)2026-05-08-flow-engine-schema-migration-deferred.md — 現有 jedi-flow-engine 表保留 public schema;統整搬到 flow_engine deferred 到 Phase 2/3(影響 ~30 主專案檔 + 16+ jedi-flow-engine 檔)2026-05-08-tenant-create-role-catalog-hook.md — 新 tenant 建立時自動 seed 4 個 builtin role catalog(M4 暫時手動跑 seeding service)2026-05-08-user-delete-cascade-hook.md — User force-delete 時 cascade 清 project_role_assignments(M4 寫 wrapper service 但 jedi-auth delete_user 沒攔到)docs/features/project-flow-engine-setting/design.md — A1 amendment 加 4 type 分類框架(§4.2 + §11.x)docs/features/project-flow-engine-setting/implementation-plan.md — D1 + B1 task entry + node_config_overrides + builtin template list 更新README.mdSUMMARY.md(本檔)part-01-of-09-m0-spike-and-spec-amend.md ~ part-09-of-09-spec-amend-and-handover.md(9 parts,總 ~648KB)Spike 發現 design v1.0 假設 flow_engine schema 既有 → 實況 staging DB 上 workflow_* / element_variables 都在 public(11K+ rows)。決策:採 C 方案修 spec(既有套件表保留 public,新表進 flow_engine),不去搬遷既有 jedi-flow-engine 表(搬一次要碰套件 + 主專案 ~30 檔,性價比低)。Schema 搬遷另開 deferred issue。
留 issue(2026-05-08-flow-engine-schema-migration-deferred.md)。理由:架構整潔度問題不影響功能 / 安全 / 資料一致性;要動就要連動 jedi-flow-engine 套件。
M2 階段先把 12 plugins 全部建骨架,留 TODO;wiring 到 OSCAL service 留到 M4 closure 統一處理。理由:先確認 protocol shape 站得住、不要早期花時間在每個 OSCAL service 對接。事後 wiring 驗證 protocol,補進 OSCAL plugin。
從原本「OSCAL vs Survey 二分」 → 演化成 OSCAL / 問卷 / 任務 / 混合 4 type,type = project type(不是 plugin type)。觸發點:user 在 22:44 ~ 03:45 期間舉「半年歲修重開機」、「每月意見調查」、「資安掃描」等場景,發現現有 OSCAL/Survey 二分 cover 不到「純任務派發」case。
決策過程:
docs/analysis/2026-05-08-*.html)決策依據:產品未上線(dev/staging only);migrate 路徑要寫 backfill SQL 對齊新 BPMN flow + project_role_assignments,~1-2 週工程;truncate 是 1 行 SQL。Spec §11.4 統一架構(無雙路徑)授權此選項。
node_config_overrides 解Wiring 階段發現 plugin config 是 plugin-level,但同一個 plugin 在不同節點可能要不同 config(如 approval plugin 在「審核」vs「複覈」用不同 reviewer pool)。三個方案:
node_config_overrides JSONB column on workflow node — 採用理由:config 是 BPMN-aware 但不在 BPMN spec;存資料庫 + 編輯器顯示,比 BPMN inline 易維護。
5 plugins:task_assign / task_execute / task_recurring_trigger / task_aggregate / task_complete 3 templates:task-execute-only / task-with-approval / task-recurring
任務類專屬 entity strategy(不共用 OSCAL AP / Survey)— task 是輕量 entity,不掛 catalog/profile/AP 完整鏈。
Builtin templates 命名從早期 audit-full / audit-execute-only 改為 oscal-full-audit / oscal-execute-only 等明確區分。新增的 task / survey templates 也比照命名(survey-fill-only, task-recurring),讓 admin 一眼看出 type。
flow-engine-schema-migration-deferred — 既有 jedi-flow-engine 表保留 public,整潔度問題(Low)tenant-create-role-catalog-hook — 新 tenant 自動 seed 4 個 builtin role 待整合 jedi-auth add_tenant(Low)user-delete-cascade-hook — User force-delete cascade 清 assignments;M4 寫 wrapper 但 jedi-auth delete_user 沒攔(Low)TODO(M5+/M6+) 在 plugin code 內(部分通知 / dashboard 整合 / 進階審核流程)feature/project-flow-engine HEAD 0393613mainorigin/feature/project-flow-engineUser 在 05:07 明確說:「不用回 main, 留在此 branch 就好, 我這邊手動 push」
→ 不要自動 push。User 自己手動 git push origin feature/project-flow-engine。
d32ce43)192.168.50.188:25432 / guidant_ai_stgdocs/features/project-flow-engine-setting/design.md(spec,已含 A1 amendment)docs/analysis/2026-05-08-user-flow-comparison.html(4 type 視覺化對照)docs/analysis/2026-05-08-project-type-comparison.html(4 type 對照)docs/changelog/2026-05-08-feat-flow-engine-m4-milestone-summary.md(M4 milestone 概覽)docs/changelog/2026-05-08-*.md 各細項TODO(M5+/M6+) 對應通知 / dashboard 整合 / 進階審核流程| JSONL | 範圍 | 狀態 |
|---|---|---|
38b1775b-74ec-49cf-a77e-e702bedb5100.jsonl |
05-08 10:47 ~ 05-09 05:11 | 主要來源 |
64f17990-26de-4e41-b442-4b4bc1d642f5.jsonl |
05-08 10:47 ~ 05-09 00:29 | 38b1775b 的子集,無需另存 |
a25716a8-d218-462a-afbb-c6600b2a50d7.jsonl |
05-08 09:40 ~ 11:50 | 同期側 spec review session(小 119 lines),內容已被本 arc part-01 涵蓋 |
未納入:
f77de22c-...jsonl(spec/plan 撰寫階段) — 已歸檔在 2026-05-07-project-flow-engine/ceeabdcb-...jsonl(3 msgs project status lookup) — peripheral,不影響 arc 內容SUMMARY §1-§10 截止於 05-09 05:11(user 說「不用回 main, 留在此 branch 就好」)。本段為後續延伸 — user 把 branch 給另一個 AI 跑 5-agent code review (code-reviewer × 2 / silent-failure-hunter / pr-test-analyzer / type-design-analyzer / comment-analyzer),找出 20 條 finding,user 選 (c) 全套修完進 M5。
| Severity | 數量 | 全部修完? |
|---|---|---|
| CRITICAL (阻擋 merge) | 4 | ✅ |
| IMPORTANT | 7 | ✅ |
| NICE-TO-HAVE | 6 | ✅(並入 IMPORTANT 一起做) |
| Spec drift | 3 | ✅ |
| 總計 | 20 | ✅ 100% |
| Wave | 範圍 | Commits | 內容摘要 |
|---|---|---|---|
| 1 | C-4 + I-3 + I-4 + I-6 + I-7 + spec drift | 0df57ad + cd5c0fc |
4 plugin ValueError → typed / POA&M enum 修 / coerce_int helper / 2 tracking issues / 5 milestone label / 3 comment / spec §11 Drift 1-3 |
| 2 | I-1 型別設計 | d9ccca2 + 50eb71c |
tagged-union NodeResult / Activity Protocol 拆三層 / RoleCatalogValidationError / 2 entity required field |
| 3 | C-3 + I-2 | 3be3512 + 29070dc + 5258d97 |
production_mode flag / notify dead shell removal (Option B) |
| 4 | C-2 5 silent failure | 1eb24e4 + 8fb25ed |
dispatcher / DI / survey lock / verdict default 反保守 / revert atomic |
| 5 | C-1 domain DDD | afca954 + 5f5604c |
3 處違規全清 / 4 個 repo abstraction 擴充 / domain 層 0 處 module-level infra import |
| 6 | I-5 test coverage | b125557 + 9db05bf |
51 新 test 跨 6 個 sub-task |
| Final | summary | 2b476f1 + a9ca173 |
wrap-up + 補 test DB task_assignees.is_approver schema drift |
| 項目 | 狀態 |
|---|---|
| DDD 層級 | ✅ domain/ 內 0 處 module-level infra import / session call |
| Error handling | ✅ 0 處 raise ValueError 漏網(全 typed exception) |
| Audit field nicknames | ✅ created_user_name / updated_user_name 全 enrich |
| Plugin DI pattern 一致 | ✅ 17 plugin 全走 services dict + production_mode guard |
| Silent failure | ✅ 0 處 try/except Exception: pass 在 hot path |
| Type safety | ✅ tagged union + Protocol split + entity required field 收緊 |
| Spec drift | ✅ 4 個 reconciliation 段(§11.5-§11.8)寫進 design.md |
task_assignees.is_approver schema drift 後)User 主動 push branch 到 origin(先前 §8 「自己手動 push」 fulfilled)。
compliance-manager-fe/docs/handover/2026-05-09-from-be-flow-engine-arc.md — 新 session 在 FE repo 開啟即可看到 onboarding pack:必讀文件清單、4 type 框架、API 摘要、M5 task breakdown(12-14 週)、BE 留下的 10 個雷區、PrimeVue 3.53 quirks、suggested first prompt。
docs/analysis/2026-05-08-code-review-prompt.mddocs/changelog/2026-05-09-tweak-flow-engine-pr-review-final-summary.mddocs/changelog/2026-05-08-fix-flow-engine-pr-review-wave-*.md + 2026-05-09-tweak-flow-engine-pr-review-wave*-*.md真 End of Summary — 2026-05-09 ~16:00