跳轉到

Guidant AI v1.20.0-beta.1 Release Note(預發版)

項目 內容
版本 1.20.0-beta.1(預發版;主軸=後端套件體系收整+出貨升級鏈補齊+租戶隔離修正——FR-080/089/090/091/092/093/094 七個 arc 一次收口。本版僅供 e2e 測試機驗證,不對外發佈;正式 1.20.0 於測試通過、merge main 後定版)
發布日期 2026-09-14
上一版本 1.19.0(2026-09-04)
涵蓋區間 2026-09-04 ~ 2026-09-14(35e14ee6..94370738,BE 444 commits;FE 13 commits;jedi monorepo 同期整條 feature/FR-075)
涵蓋需求 FR-080 jedi 整併與服務化(25 支收成 21 支、分五層、依賴只准往下)/FR-089 套件結構統一(以 jedi-asset 定形)/FR-090 主專案側殘留收斂(接線收成 core/plugins/<pkg>.py 一支一檔)/FR-091 21 支套件套用標準形狀/FR-092 廢碼清理/FR-093 出貨升級鏈補齊(D1–D8)/FR-094 租戶隔離修正(RLS 第三波+「分享給子租戶」開關)。另含 FR-075~088、095 資安掃描報告文件(掃描結果的修正不含在本版,決策者裁)
規模 jedi- 套件 21 支全部統一版號 1.1.0*(jedi-oscal-v2 2.4.0),已推 Nexus、BE pin 已改(94370738);主專案廢碼淨刪 73 檔約 6,300 行+12 支端點退役+FE 15 檔備份頁清除;主線 DB migration manifest 異動 29 列(22 支新增+4 支既有改為全環境套用);套件自帶 SQL 44 支;能力點宣告 115 筆
適用部署 僅 e2e 測試機(兩路驗證:乾淨 docker 新裝+模擬舊機升級,含 DB 初始化驗證,CM-1778)。不部署 STG/POC
部署性質 含大量 DB 結構變更:RLS(資料庫層的租戶隔離)開啟 30+ 張表、孤兒表 drop、套件 SQL 首次由升級鏈自動套用。帶舊資料升級路徑必須在 e2e 測試機實測通過才可轉正

0. 發版前回歸 gate

預發版 gate 走機器驗證+e2e 測試機兩路部署:

  • 機器驗證:各 arc 收口時全量 pytest 綠+守衛測試綠(模組邊界/凍結 URL/凍結 error code/能力點對 seed 零未歸類);FR-080/089/090/091 各做過 arc review,Critical/Important 全修。
  • e2e 測試機兩路驗證(CM-1778,本版的核心 gate):① 乾淨 docker 從零新裝,驗 DB 初始化+套件 SQL 攤平+能力點 upsert;② 拿舊版快照模擬客戶升級 install.sh --upgrade,驗 29 列 migration+44 支套件 SQL 順序套用、RLS 開啟後登入/切租戶/我的任務/兩支凌晨排程都還活著。
  • site-regression 自動 gate 依 v1.16.0 以來慣例暫緩;正式 1.20.0 放行前由測試機手測補位。

1. 概述

v1.19.0 把後端拆成 25 支 jedi- 套件,本版是拆完之後的收整與補洞*,分三條線:

  1. 套件體系定形(FR-080/089/090/091/092):25 支合併成 21 支、分五層(基座→橫切→平台服務→平台骨架→業務)且依賴只准往下;每支套件長一樣的形狀(plugin/ 五檔、api/ 拆守門與路由、取執行期組件一律叫 runtime());主專案側接線收成 core/plugins/<pkg>.py 一支一檔;順手清掉從入口走不到的 73 檔廢碼與 12 支三方都沒人打的端點。對外 API 契約全程凍結(URL、error code 字串值零漂移),前端無感。
  2. 出貨升級鏈補齊(FR-093):以前套件會自己宣告「我需要哪些表、哪些權限」,但安裝包與升級腳本完全不讀這兩份宣告——新版裝上去功能在、表沒建、管理員點進去 403 且沒任何錯誤訊息。本版讓 build 期把 21 支套件的 SQL 攤平進安裝包、升級時自動套;能力點(權限點)宣告 115 筆升級時自動寫進資料庫並補給管理員角色;公版流程、階段字典等「既有客戶升級才補得到」的預設值由 seed 改成 migration。
  3. 租戶隔離修正(FR-094):FR-087 資安盤點查出 13 張表、4 支 view 的 RLS(Row Level Security,資料庫自己擋、讓每個客戶只查得到自己的資料)實際上是關的——決策者親測切到子租戶後仍看得到別家待辦 39 筆、專案 213 筆。本版逐張補規則並打開,另修排程「無身分=超級管理員」的洞,新增母租戶把自訂資源「分享給子租戶」的開關。

2. 使用者可見變更

  • 租戶隔離收緊(FR-094):專案、POA&M、任務執行紀錄、問卷 12 張表、授權關聯表(角色指派/租戶隸屬/部門隸屬)、雲端硬碟串接設定等 30+ 張表開啟資料庫層隔離。切到子租戶後只看得到該租戶的資料;平台管理員不受影響。
  • 「分享給子租戶」開關(FR-094.4b/4c,CM-1790/1798):模組框架、流程範本、檢測方案、任務範本四個編輯頁多一個開關——母租戶自訂的資源打開後子租戶可讀(唯讀,不能改)。模組框架與流程範本的 API 回應新增 tenant_id 欄位,前端據此判斷是不是自己租戶的資源。
  • 部門不再是牆(FR-094 原則③):任務執行與流程範本的查詢/更新規則去掉部門條件(DEV 實查 68% 任務指派跨部門,照舊規則開隔離會讓跨部門推進任務「更新 0 筆不報錯」)。可見度靠角色與參與關係,部門只記歸屬。
  • 切到被指派的子租戶後權限全空(CM-1661/1664):本人帳號落在父租戶、在子租戶查不到自己,導致權限查詢回零列。使用者資料表補「本人恆可見」例外。
  • 待辦任務列表不再把檢測任務降級成「一般」(CM-1658);任務問卷的設備兩欄改走名冊接口,不再讀已拆掉的欄位(CM-1656)。
  • 12 支端點退役(FR-092):前端、檢測 Agent、e2e 三方都沒人打的端點下線,含 subtask_status_history 整個模組;FE views/_archived/ 15 檔備份頁一併清除。
  • 資安修補零星幾條(來自 v1.19 後的 FR-076 掃描結論):授權租戶重複用照擋 TOCTOU(CM-1580)、人為停權移到租戶層換照不再清掉(CM-1579)、全站請求大小上限 50MB(CM-1587)、LDAP 連線測試改位址時強制重輸密碼(CM-1564)。
  • 意見回饋的功能分類改由頁面路由表重建(FR-093.4d)——升級後新頁面才會出現在回饋分類裡。

3. 內部重構重點(工程視角)

  • FR-080:四組合併(資產=device+information-system、任務平台吞 participant、系統核心=system-config+system-menu、日誌吞 log-forwarding);五支「有殼沒肉」補實四支(bulletin/device/information-system/system-config,flow-engine 留待 CM-1478);跨套件直接 import 改走接口;宿主顯式決定 OTel 遙測(預設不啟用)。
  • FR-089/091:jedi-asset 定形寫進 SOP §4.3,18 支套用;identity port 只給有吐 created_user_name 的套件;enum 值域統一小寫修好「五個系統狀態只有兩個存得進去」的真 bug(CM-1678)。
  • FR-090:空殼清理、port 實作歸位 infra/<pkg>/、iam 宿主側收成 infra/iam/+core/iam_wiring.py、補審計暱稱統一走 D8;主專案自有 36 筆能力點開申報處。DI 瘦身走 B 案(套件開 host_services() 取用口)併 1.1.0。
  • jedi-common 1.1.0 新 export:system_context/tenant_context/elevated_session/fill_user_names;18 支套件下限提到 >=1.1.0。排程改用具名系統身分繞 RLS(FR-094.1a/1b,CM-1767/1787),Drive webhook 與 OAuth 回呼接上租戶身分(CM-1788)。
  • FR-093 D1–D8:flatten_pkg_migrations.sh 攤平套件 SQL、migrate.sh 三輪(主線→套件差集→能力點 upsert+角色回補)、既有庫一次性補登 23 支套件 migration、99-stamp 只蓋結構類不蓋資料類與套件 SQL(CM-1792)、六支被誤標 dev 的結構變更改 * 並補進出貨基線(CM-1655/1664)。長期規則:套件疆界的表只在套件改,主專案 scripts/sql/ 不再新增套件表的 migration。
  • 詳帳見各 docs/features/FR-08x/FR-09x/README.md 與母卡(FR-080 CM-1618 群、FR-089 CM-1676~1678、FR-090 CM-1682、FR-092、FR-093 CM-1752、FR-094)。

4. Breaking Changes

  • 對外 API:12 支端點退役(FR-092,三方零呼叫者);其餘 URL/error code 字串值零漂移。
  • 資料可見範圍:RLS 開啟後,原本靠「隔離沒開」而看得到別租戶資料的帳號會看不到了——這是修 bug 不是功能倒退,但客戶若有跨租戶指派的既有資料要注意(本版 SPEC 已寫明不支援跨租戶指派)。
  • 內部:jedi-* 25→21 支,合併掉的套件(participant/information-system/system-config/system-menu/log-forwarding)import 路徑已變;主專案側一律從 core/plugins/<pkg>.py 掛載;ctx() 改名 runtime()。
  • 出貨線:安裝包從本版起必須用 1.1.0 套件 build(2026-09-13-cm1765-drop-operations-and-device-mapping 與套件 associations 鏈同批收斂,套件未發出前不可套)。

5. DB Migration

主線(scripts/sql/manifest.tsv 異動 29 列:22 支新增+4 支既有改標 *)

FR-069 既有四支由 dev 改 *(CM-1655/1664):fr069-17-drop-users-topt-secret/fr069-cm1474-drop-assessment-plan-extensions/fr069-cm1474-drop-project-extensions/fr069-cm1490-soft-ref-job-execution-bindings——結構變更每個環境都需要,原標 dev 讓客戶裝機沒有、升級也補不上;已補進出貨基線庫。

資安修補(FR-076) - 2026-09-06-cm1580-tenant-licenses-license-id-partial-unique:授權表加部分唯一索引,擋跨租戶重複用照。 - 2026-09-06-cm1579-tenant-license-suspensions:新表,人為停權語意從授權列移到租戶層。

FR-080 - 2026-09-10-fr080-cm1624-participant-project-fks:人員指派併入任務平台後補回六張表的 project_id 外鍵+清 36 筆孤兒。 - 2026-09-10-fr080-cm1625-bulletin-org-units-soft-ref:公告部門橋表外鍵改軟參照。 - 2026-09-11-cm1661-users-rls-self-visible/2026-09-12-cm1664-users-rls-self-visible-textcmp:使用者表補「本人恆可見」,第二支修簽章憑證路徑不帶使用者編號時 ::int 炸 500。

FR-092 廢碼清理 - 2026-09-13-cm1723-drop-orphan-tables:drop 14 張零引用零資料孤兒表。 - 2026-09-13-cm1765-drop-operations-and-device-mapping:drop operations+兩張設備關聯表。 - 2026-09-13-cm1723-drop-dev-only-backup-tables/2026-09-13-cm1765-drop-system-logs-old(僅 dev):DEV 專屬備份表與舊日誌表。

FR-093 升級鏈 - 2026-09-13-fr093-1-backfill-package-migrations:既有庫一次性補登 23 支套件 migration 檔名(必須在套件差集之前執行)。 - 2026-09-14-fr093-4d-flow-templates-stage-objects(seed):公版稽核流程 2 筆+階段字典 6 筆+兩列單例設定,由 seed 改 migration。 - 2026-09-14-fr093-4d-function-labels-from-ui-routes(seed):意見回饋功能分類依路由表重建。

FR-094 租戶隔離 - cm1768-enable-rls-projects-drive-integrations:專案表補超級管理員分支並開 RLS;雲端硬碟串接設定開 RLS。 - cm1769-rls-user-roles-tenants-org-units:三張授權關聯表補 policy 並開 RLS。 - cm1770-rls-poams-evidence-jobs-parse-jobs:POA&M/證據分類兩張/任務執行/框架解析五張表開 RLS。 - cm1771-rls-workflow-executions-view-security-invoker:任務執行表去部門條件並開 RLS;兩支 view 改 security_invoker(不再以擁有者身分繞過隔離)、兩支零讀者 view drop。 - cm1772-workflow-templates-scope-rls:流程範本加 scope、清無主凍結副本、去部門條件、開 RLS。 - cm1773-rls-survey-12-tables:問卷 12 張裸表補 JOIN-based policy 並開 RLS+13 支外鍵索引。 - cm1790-shared-scope-subtree:scope 值域加 SHARED+反向前綴 helper,五張表 select 加「母租戶分享」分支(行序必須在 cm1772 之後)。 - cm1796-question-answers-backfill:作答表捷徑欄位回填+補 CASCADE 外鍵。 - cm1794-dev-fix-table-owners(僅 dev):DEV 19 張表擁有者由 cm_app 改回 cmmgr(表擁有者不受 RLS 約束,改前是假綠)。

套件自帶 SQL(scripts/sql/packages/manifest.tsv,44 支)

build 期由 flatten_pkg_migrations.sh 攤平進安裝包,升級時 migrate.sh 第二輪套差集;第三輪把 115 筆能力點宣告自動 upsert 並回補管理員角色。這是本版第一次走這條鏈,e2e 測試機兩路驗證即為其 gate。

6. 已知 follow-up(不擋正式版)

  • GET /feedback 回 500(既有問題,非本版引入)。
  • /audit-round/<uid>/{launch-audit, start-auditing, ar/finalize, ap/generate-draft} 四支端點前端零呼叫、只有 e2e step 在打——是前端漏做還是流程改走別路未定,待開卡裁決後退役。
  • 資安掃描總表 12 項待決策者裁(修正另開 arc,不進 1.20.0)。
  • jedi-flow-engine 的 pyproject.toml 未宣告 jedi-common 相依(目前靠主專案間接帶入,單獨安裝會缺)。
  • flow-engine 套件內死程式與主專案複製出去的執行服務未收(等 CM-1478 流程疆界設計);FR-090 第 6 棒 DI 瘦身規則待裁。

7. 正式版待辦

  • [ ] e2e 測試機兩路驗證通過(CM-1778:乾淨新裝+模擬舊機升級,含 DB 初始化)
  • [ ] user merge feature/FR-075 → main(BE+FE+jedi monorepo)
  • [ ] 版號轉正 1.20.0(去 beta 後綴)+FE 對齊+git tag 兩 repo+推 tag
  • [ ] spec-site 凍結快照 v1.20.0/(正式版才切,beta 不切)
  • [ ] 放行後依序上 STG/POC(install.sh --upgrade)