日期:2026-06-14 · branch(三 repo 皆):
feature/oscal-refactor· 皆未 push 給下個 session:Wave 0(契約)+ Wave 1(jedi-oscal-v2 套件)已完成。本文件讓你冷接 Wave 2(主專案 BE 遷移)。
jedi-oscal-v2 ✅ 完成:42 表 + 全核心邏輯 + snapshot/clone + CMMC 匯入 + OSCAL JSON 匯出,194 tests 全綠,最終 review Approved。oscal schema 已 drop & 重建成新結構;但主專案 BE 仍跑舊 jedi-oscal 0.0.22 → dev 的 OSCAL 功能目前是壞的,要 Wave 2 把 BE 遷到新套件才恢復。dad80aef + 471862d8,已 commit 未 push)~/Projects/Jedicogy/module/jedi-python-package/jedi-oscal-v2/,57 commits,未 push、未發 Nexus)jedi_oscal_v2;base class 來自 jedi-common(BaseRepositoryImpl[Entity,Query,Model,Mapper]、Base/BaseModel、transaction)FrameworkService / CatalogService / ProfileService(+resolve_profile)/ SspService(+deep_clone_ssp) / AssessmentPlanService(+generate_draft) / AssessmentResultService / AssessmentRiskService / PoamService(+generate_from_findings) / RemediationService / OscalSnapshotService(snapshot_ssp/clone_resource_library) / OscalIoService(export_oscal) / ports.oscal_parser_factory.get_oscal_parser_adapteruid: Optional[str]=None sentinel(BaseRepositoryImpl.update 讀 entity.uid);uuid-identity 用 mapped_column("uuid", PG_UUID, key="uid");FK-to-built→真 FK + 模組頂 import target,FK-to-unbuilt→plain BigInteger;app service 不加 @transaction(caller 開 scope);測試用 tests/conftest.py rollback-isolated db_session(set app.is_super_admin='t' 繞 RLS)oscal schema = 新結構(48 表:base 42 + delta 6),compliance.project_audit_rounds 在、3 條 FK 在、CHECK 在public.schema_migrations 已記 2 筆(base + delta)jedi_oscal(api 6 / app 50 / infra 30 / domain 25 / DI 4)app/project/service/oscal_project_service.py — start_oscal_project() 拆成 start_project(clone 資源庫三件組,AP/AR 不在此建)+ launch_new_round(建 round → snapshot SSP → 建/沿用 AP+AR per engagement)di_containers/oscal/oscal_containers.py — 150+ 行,31+ 套件 service/repo 重新註冊(舊 → jedi_oscal_v2)infra/grc/repository/grc_audit_repo_impl.py — AR 從單行 verdict 改 AO 全量矩陣 查詢(8+ 個 OscalAssessment* query 全改)project_assessment_plan_mapping(AP→ project_audit_rounds)、assessment_plan_task_workflow_mapping(task→ ?需對齊新 ap_tasks)、ssp_reference_documents.context_idcompliance.assessment_plan_extensions 的 FK fk_ape_assessment_plan → 被刪。可一行 ALTER 重建(target oscal.assessment_plans 還在)但先確認此表在 project_audit_rounds 模型下是否還需要(可能被取代);重建前先查 orphan。public.vw_user_job_queue(My Jobs 資料源,scripts/sql/view/vw_user_job_queue.sql)→ 被刪,不能 replay:它 join 的 4 張舊 AP 表(assessment_plan_task_workflow_execution_mapping / assessment_plan_controls / assessment_plan_groups / assessment_plan_tasks)在新 schema 都沒了。要對新 oscal.ap_tasks + public.workflow_execution_control_mapping 重寫。ORM mirror infra/participant/model/vw_user_job_queue.py + consumer infra/participant/repository/task_assignee_repo_impl.py 要跟著新 column set 改。job 綁「專案 SSP 控制項」、專案成立就建、與輪次無關(不是綁 AP task)。舊 project-start 為 AP task 建 workflow 的邏輯要改成為 SSP 控制項建。
pyproject.toml 的 jedi-oscal-v2 path-dep 是 dev-only,未 commit(刻意)docs/changelog/2026-06-14-feat-fr038-wave1-jedi-oscal-v2-package.md