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- 套件,本版是拆完之後的收整與補洞*,分三條線:
- 套件體系定形(FR-080/089/090/091/092):25 支合併成 21 支、分五層(基座→橫切→平台服務→平台骨架→業務)且依賴只准往下;每支套件長一樣的形狀(
plugin/五檔、api/拆守門與路由、取執行期組件一律叫runtime());主專案側接線收成core/plugins/<pkg>.py一支一檔;順手清掉從入口走不到的 73 檔廢碼與 12 支三方都沒人打的端點。對外 API 契約全程凍結(URL、error code 字串值零漂移),前端無感。 - 出貨升級鏈補齊(FR-093):以前套件會自己宣告「我需要哪些表、哪些權限」,但安裝包與升級腳本完全不讀這兩份宣告——新版裝上去功能在、表沒建、管理員點進去 403 且沒任何錯誤訊息。本版讓 build 期把 21 支套件的 SQL 攤平進安裝包、升級時自動套;能力點(權限點)宣告 115 筆升級時自動寫進資料庫並補給管理員角色;公版流程、階段字典等「既有客戶升級才補得到」的預設值由 seed 改成 migration。
- 租戶隔離修正(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整個模組;FEviews/_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)