手冊首頁 / Release Notes / Guidant AI v1.10.1 Release Note

Guidant AI v1.10.1 Release Note

項目 內容
版本 1.10.1(BUG 版號;主軸=資安掃描 arc 全案收官 + Sonar 存量清理 arc 兩 repo 歸零 + 覆核輪 Drive 資料夾修復)
發布日期 2026-07-25
上一版本 1.10.0(2026-07-24)
涵蓋區間 2026-07-24 ~ 2026-07-25
規模 資安掃描 arc 收官(trivy/semgrep/SonarQube 三工具帳面全零 + Quality Gate 落地)+ Sonar 存量 code smell 清理(BE+FE 合計 1,440 條 open → 0,真修約 396 條)+ 3 筆功能 bug 修復(覆核輪 Drive 資料夾、GitLab 附件刪除、PDF 字型)+ 安全硬化 2 處(docker 參數驗證、PDF img src 限縮),跨 BE + FE + jedi-issue 套件
適用部署 dev(已驗);staging / poc / prod 待部署
部署性質 無新增 DB migration。含依賴升版:weasyprint 69.0、Flask-Cors 6.0.0、pytest 9.0.3、jedi-issue 0.0.16、jedi-auth 等 18 套件 pin 放寬後升新版(均已推 Nexus)。BE 需 poetry update + 重啟;FE 需同版部署。部署主機需確認 fonts-noto-cjk 字型與 LibreOffice(見 docs/claude/host-dependencies.md)。

1. 概述

v1.10.1 是品質收官版,三條主線:

  1. 資安掃描 arc 全案終結:trivy / semgrep / SonarQube 三工具 BE+FE 帳面全零(HIGH/MEDIUM 漏洞歸零、hotspots 歸零、semgrep ERROR+WARNING 歸零),SonarQube Quality Gate「Guidant-NewCode」策略落地(new code 零新增 violation 擋版、存量不擋),為掃描流程進 GitLab CI 建立乾淨基線。含 Checkmarx SAST 送測預演(semgrep security-audit ruleset 自掃 + triage 答辯材料)。
  2. Sonar 存量 code smell 清理:兩 repo open issue 從 1,440 條收斂到 0——真修約 396 條落地(BE 16 commits / FE 11 commits),623 條經逐條裁決標 accept(附裁決 comment 可追溯),82 條查證為 Sonar 誤判標 false positive。清理過程順手挖出並修復多顆潛伏雷(詳 §3)。
  3. 覆核輪 Drive 資料夾修復:發起覆核建立的新輪次此前不會在 Google Drive 建資料夾,導致第二輪起證據 AI 分類報 404「此 AP 尚未與 Drive 連結」——現發起覆核後自動補跑資料夾初始化(冪等,不影響既有輪次)。

2. 重要修補

功能 bug

  • 覆核輪 Drive 資料夾自動建立(CM-905):發起覆核成功後自動 enqueue Drive 資料夾初始化(複用專案啟動既有機制,route 層接線避免模組循環依賴);未連結 Drive 的專案發起覆核不受影響。受影響歷史專案已補資料夾。
  • GitLab 附件刪除只刪指定檔案(CM-888):原實作為「全刪」,改檔名定位。
  • 摘要報告 PDF 字型修正(CM-893):拔除 Google Fonts 外連,字型改部署環境實際存在的 Noto Sans CJK TC(原 Noto Sans TC 在主機不存在會 fallback 日文字型排繁中)。

安全硬化

  • 證據分類 docker 參數輸入驗證evidence_folder_id / framework_id / model 進 docker argv 前做字元集白名單驗證(擋 - 開頭的 flag 注入面,如 --privileged)。
  • 摘要報告 PDF img src 限縮 data: URI(CM-892):堵伺服器端外抓 SSRF 面。
  • 依賴升版收洞:weasyprint 69.0(CVE-2026-49452)、Flask-Cors 6.0.0(CVE-2024-6839/6844/6866)、pytest 9.0.3(CVE-2025-71176)、jedi-issue 0.0.16(移除 wheel 內誤打包的 .env)。

Sonar 清理中挖出的潛伏雷(本無故障回報,掃描驅動修復)

  • Google Drive get_file_metadata 實作漏介面第三參數 fields(介面違反,呼叫端照契約傳參會 TypeError)。
  • sub_workflows_count DTO 預設值因多打逗號成 tuple (0,) 而非 0
  • FE 兩元件 defineEmits 漏宣告事件(ChatBox close / UserManageUpload reload),行為靠 fallthrough 屬性僥倖正常。
  • datetime.utcnow() 汰換 ×6(Python 3.12 deprecated;含通知 sent_at 若誤用 aware 版會產生 +00:00Z 壞格式的邊界)。
  • pytz → 標準庫 zoneinfo ×2(順手修掉 1937~1979 台灣日光節約時間轉換日會拋未攔截例外的歷史邊界)。
  • except: 補 exception class ×11(不再誤吞系統中斷訊號)。

品質批次(節錄)

  • 空函式補說明註解 ×62、註解碼死碼清除 ×60+、logging 規範化 ×64(logging.exception / f-string 修正)、回傳型別註解補 Optional ×20、一行級語法現代化 200+ 條——全數逐條驗證行為等價;有行為疑慮的 12 條經實測後拒改並標 accept(如 structuredClone 對 Vue 響應式物件會拋錯)。

3. Sonar 帳面處置紀錄(治理存證)

處置 BE FE 說明
真修 ~200 條 ~196 條 code 落地,見 git log chore(sonar)/fix(sonar) 系列
accept 463 160 逐條附裁決 comment(S3776 認知複雜度不重構、FR-038 stub 保留、scripts/ 工具腳本、OOXML 規格命名等)
false positive 34 48 S6019 regex 誤判、S125 中文註解誤判、css 對比度誤報(docs/analysis/2026-07-25-sonar-css-contrast-false-positive.md)等

Quality Gate:BE / FE 雙 PASSED。Checkmarx 送測答辯材料:docs/features/security-scan-2607/2026-07-25-semgrep-security-audit-preview-triage.md

4. Breaking Changes

無。全版行為等價修改 + 依賴升版;docker 參數驗證屬收緊(原可傳任意字串,收緊為修正)。

5. DB Migration

無新增。

6. 相依套件版本

套件 版本變化
weasyprint → 69.0
Flask-Cors → 6.0.0
pytest → 9.0.3
jedi-issue 0.0.13 → 0.0.16
jedi-* 系列 pin 放寬 <10 後升至各自新版(詳 pyproject.toml)

7. 部署順序

  1. BE:git pullpoetry update → 重啟(main_app.py
  2. FE:同版 build 部署
  3. 主機層確認:fc-match 'Noto Sans CJK TC' 回 NotoSansCJK、which libreoffice 存在(新機必查,見 docs/claude/host-dependencies.md
  4. classify 容器 image 如未含新依賴需 rebuild

8. 已知 follow-up

  • FE 的 semgrep 規則覆蓋僅 40 條(BE 1,144 條),JS/TS 導向 ruleset 補掃待開案。
  • CI/CD 掃描接入(Quality Gate 已就緒,等環境)。
  • 已 accept 的 623 條為有意識的風險接受決策,日後對應模組重構時可順修。

9. 相關文件索引

  • 資安 arc 收官 handoff:docs/features/security-scan-2607/handoff/2026-07-25-security-arc-close-and-smell-cleanup-handoff.md
  • Quality Gate 設定:docs/features/security-scan-2607/sonar-quality-gate-setup.md
  • weasyprint CVE 論證:docs/features/security-scan-2607/2026-07-25-weasyprint-cve-2026-49452-resolution.md
  • 主機層依賴:docs/claude/host-dependencies.md
  • Notion cases:CM-886 ~ CM-905