Changelog
This page is generated at build time from the git history: commit subjects on the main branch that use a conventional prefix (feat, fix, perf, docs, …), grouped by month. Merge commits and commits without a prefix are not listed. The full history is on GitHub.
2026-10
Features
- site: 宣傳頁與 README 加上實際操作短片
- docs: 文件站加上 SEO,正式網址 docs.skylab-tw.com
- site: 介紹頁拆成獨立官網 skylab-tw.com,加上聯繫方式與 SEO
- users: 使用者群組(班級),老師開班時可直接匯入一班學生
- frontend: 全站讀取改接 TanStack Query
- frontend: 導入 TanStack Query、React Compiler 與 TanStack Virtual
- admin: 使用者管理的批量操作加入刪除
- resources: 我的資源加入勾選批量操作,可一次刪除多台機器
- auth: 註冊政策新增「Google 首次登入自動建帳」獨立開關
- docs: 手冊截圖改為每個小節一張,同畫面步驟合併並標上步驟編號
- docs: 使用手冊步驟截圖工具(mock API、固定時鐘、元素框選、webp 輸出與自動插圖)
- placement: CPU 超賣倍率預設改為 5 倍
- template: 範本可在同叢集內跨節點 clone
- docs: add VitePress documentation site deployed to Cloudflare Pages
- teaching: 課程環境對外網址改為前綴+16 碼亂碼,移除主機名樣板
- password: Windows 機器密碼提示只列出尚缺的字元種類
- setup: 安裝精靈 IP 網段步驟加上主系統 IP
- ip-management: 子網設定加上主系統 IP 欄位
- teacher-judge: enforce one active script set per week
- template: 範本改為平台範本,PVE 端不再轉換 (#398)
- template: 範本改為平台範本,PVE 端不再轉換
- quota: exempt administrators from all resource quotas
- frontend: remove student checkpoint completion from teacher home (#395)
- student-course: weekly progress card, tick-only report and teacher reply
- ai-judge-ui: week-based workspace and class-wide teacher review
- teacher-judge: weekly assignments, class progress and teacher replies
- teacher-judge: bind AI checks to weeks, one per week
- mining: show incident owner and link VMID to resource detail
- frontend: remove student checkpoint completion from teacher home
- navigation: toggle admin and personal home workspaces
- ai-nav: fill request schedule from the intake duration answer
- assistant: add dismissible page help hint
- teacher-judge: 持久化整班與目標執行紀錄
- frontend: page-specific guides for the remaining 29 routes
- teacher-judge: 腳本執行加入耗時量測並改用共享 SSH 併發池
- auth: add email verification and independent registration approval (#380)
- ai: add latency observability and Qwen3.8 thinking contract (#379)
- auth: add email verification and independent registration approval
- ai: add Qwen3.8-27B thinking contract via chat_template kwargs
- monitoring: add AI latency observability
- class-workspace: 學生名單批量移除、加搜尋,欄位排版改看容器寬度
- class-management: 班級管理批量封存並回收
- request-review: 申請審核批量拒絕
- admin: 使用者管理批量停用/啟用,清單排版改看容器寬度
- resource-mgmt: 批量操作改成表格上方工具列,加搜尋與狀態切換
- ui: 共用清單工具列與批量勾選元件
- login: 授權桌面 App 登入的同意頁重新排版
- ui: 沒資料時只留空狀態的新增鈕,頁首鈕等有資料才出現
- guide: 資源詳情導覽模擬頁照正式分頁重畫
- boot-options: 開機順序可拖移排序,儲存鈕靠右、列改白底
- switch: 共用開關 Switch,取代防火牆規則與節點的啟用切換
- firewall: 選中機器時只顯示跟它相關的連線
- modal: closeButton 版加 dividers={false} 拿掉分隔線
- error-state: 連不上後端改用斷線插圖頁 ConnectionLostState
- ai: sync System AI, Teacher Judge, and AI API hardening (#371)
- ai-monitoring: add AI usage CSV export with streaming and redaction
- system-ai: introduce model-owned request contracts via llm-model-profiles.yaml
- system-ai: extend role guardrails and tool contracts
- console: VNC 主控台加入 PVE 同款剪貼簿面板,貼上文字送進機器剪貼簿
- system-ai: enforce role contracts and guardrails
- security: 自訂的機器登入密碼只存雜湊,範本密碼開關改為自動偵測
- ai: AI 助手完整頁面導覽與 prompt injection 基本防護
- vm: Linux VM 登入帳號(cloud-init ciuser)命名政策
- gateway: 平台入口可選擇經 Cloudflare 代理(橘色雲)
- domain: 移除網域管理的「對外網址」分頁
- ai-api: add bulk rejection review flow
- db: 資料庫正規化到 3NF
- gateway: 平台入口儲存時自動把網域的 DNS 指到 Gateway
- gateway: HTTPS 憑證改由管理員自備,系統不再以 certbot 簽發
- ai-assistant: 浮動按鈕與對話改用章魚學士
- octo-pet: 新增章魚學士像素寵物元件
- firewall: 拓撲依班級/類型分組、可收合與篩選,並整理工具列與群組卡樣式
- spec-change: 延長到期日同時延長核准使用時段,自己申請的機器也能延期
- desktop: align platform and locale support
- desktop: notify users about new releases
- desktop: support current resource lifecycle
- auth: 帳號密碼加上複雜度規則
- backup: 快照不能用的機器改用備份當還原點 (#342)
- backup: 快照不能用的機器改用備份當還原點
- gateway: 平台入口——主系統也經 Gateway 的 nginx 對外,並納入初始化精靈
Fixes
- tests: AI proxy 佇列測試不再依賴 1 秒的真實等待時限
- docs: 截圖工具的網域列比對改為完整跳脫正規表達式
- frontend: 修正文字溢出欄位的版面(自動掃描找到)
- frontend: 修正手冊截圖檢查時發現的介面問題
- frontend: 修正 TanStack Query 改版留下的回歸
- frontend: AI API 申請核准後新金鑰沒出現在金鑰列表
- security: 解壓炸彈守門改量實際解壓量、teacher_judge 網路探測只准本機
- docs: 手冊截圖的假 token 改為一週後到期,shot 加 newFrame 並以各自視窗大小裁切
- docs: 文件產生器的表格儲存格跳脫改為單次表驅動替換,補上反斜線
- placement: 排程改看已分配規格、快速練習先檢查叢集容量、自訂 VM 可跨節點
- quick-practice: 對外發布失敗不再回收整組,修復期限從機器建好起算
- console: VNC 畫面改以 NoVncScreen 直接包 noVNC,鍵盤不再因滑鼠動作失焦
- teaching: 班級容量預檢改看已分配規格,修正誤放行與誤擋
- quick-practice: 移除 apply_for_machines 已刪除的 scope 參數
- frontend: keep AI judge chat beside the checklist on desktop
- gateway: http.conf 依最長網域宣告 server_names_hash_bucket_size
- firewall: 放行主系統 IP → 機器的 SSH,讓導師檢查連得進去
- alembic: merge platip01 and tjactive01 heads
- improve course review UX and desktop sign-in reliability
- teacher-judge: preserve execution evidence on failures
- frontend: 預設 AI 導師檢查第一週
- teacher-judge: preserve power-state failures
- template: 複製不帶走範本母機的保護,平台擋母機開機
- teacher-judge: 驗證指令選項中的檔案路徑並要求絕對路徑
- template: 轉範本要等 PVE task 結束,失敗不可標成 ready
- console: 主控台接管瀏覽器快捷鍵,noVNC 開啟後即可打字
- terminal: 終端機最底下一行被遮住
- sidebar: 管理員設定裡的首頁改名「管理首頁」,避免出現兩個「首頁」
- teacher-judge: 修正核對工具流程與空回覆,整併契約文件 (#394)
- ai: 補齊 gpt-oss-120B 模型請求契約
- teacher-judge: handle empty refine responses
- chat: grow chat composers with their content and keep IME Enter
- teacher-judge: clarify typed proposal validation
- ai-nav: bound duration regex to avoid polynomial backtracking
- alembic: support SQL_ASCII target backfill
- teacher-judge: require absolute paths for checks
- monitoring: label API requests by raw path so workload is not always "other"
- clear 47 CodeQL code quality findings
- frontend: 資源詳情導覽示範頁不再寫死假帳密
- ai: 桌面關鍵字不再推定 Windows,規劃請求總長受限
- ai: 導覽 AI 配置失敗改用規則配置,不再虛構 GPU/機型
- frontend: 移除 AI 監控 CSV 匯出
- guide: persist viewed walkthroughs on user accounts
- frontend: 教師儀表板統計卡依內容區寬度排成 2×2 (#383)
- teacher-judge: 已知執行位置不再被判為老師缺口,路徑衝突導向可修復的契約錯誤
- ai: AI_API_API_KEY 未設定的判斷不再綁 prepare-ai-stack.sh
- api: async route 裡的同步 DB 查詢移出 event loop
- lifecycle: 範本更新失敗可重試、封存一律回收、批次建機心跳與自動續跑、時段結束才釋放配額等
- monitoring: 警示依叢集區分、容量檢查涵蓋非整點重疊、LoadAvg 以實體核計、改密碼限流
- SSH 指令總時限與輸出上限、Teacher Judge 排隊誤判、LDAP 連線關閉、桌面端設定與離線提示
- vllm-service: 模型崩潰自動重啟、LiteLLM 設定檔改為僅擁有者可讀
- deploy: Grafana 關閉帳密登入、AI API 預設金鑰只停用並警示、Python ≥3.11、閘道只支援 Debian 13
- network: 挖礦存證快照保護、改網段遇預留擋下、LXC 先防火牆後開機、多 port 全有全無等
- frontend: 資源管理勾選隨刷新清理、各頁舊回應覆蓋、到期日顯示日曆日並註明截止時間
- frontend: 教室連線自動重連、不限核心不被降成 1 核、建班預設值、檢查表未儲存保護
- batch-provision: 回收卡死的工作時有建好的機器仍標 completed
- ops: opencode 的 checkout SHA 不存在、migration 檢查等錯 DB、改金鑰只改第一行
- desktop-client: 登入過期無限循環、含空白路徑無法安裝通道、開不了自訂後端
- vllm-service: 重啟誤判 port 佔用、就緒探測走代理、範本 .env 載入失敗
- ai: 巢狀控制 token 清不乾淨、表單欄位未清理就進 prompt、用量寫入失敗拖垮請求
- api: 停用 2FA 可暴力猜碼、/ws/jobs 訊息洪水觸發查詢、匯入名單卡住 event loop 等
- teaching: 課程內容缺修課檢查、排程設 0 被當預設、重試把已建好的機器標失敗等
- network: WireGuard ACL 信任 guest 回報 IP、NAT 搶 port 500、同步刪掉離線節點 storage
- vm: 核准重排把 clone 中的申請改回 idle、回收 VMID 沿用舊時段、重置與還原並行
- frontend: 沒有申請單的機器從資源列表消失、重複送出申請等
- backend: 推播重用已刪訂閱、離線節點假 0% 樣本、AI 排隊 gauge 卡住
- teacher-judge: 單一學生 NaN 毀掉整批結果、匯出控制字元 500、檢閱互相覆蓋
- infra: SSH 防護規則被繞過、連線失敗洩漏、HA 切換、CA 落地競態等
- backend: 放置權重設 0 被當預設、使用者 PATCH null 變 500、全形 2FA 碼 500
- frontend: 系統與 AI 頁面的舊回應覆蓋、配額表單被洗掉、模型用量遺失
- course-operations: 全班開關機拋錯、新環境選取被蓋掉、上一頁重複建班等
- frontend: 子網警示橫幅換頁後不出現、AI-PVE 對話會載入外站圖片
- frontend: 審核清單舊回應覆蓋、首頁座位不亮、複製台數小數被拒
- class-workspace: 課堂監看全班開關機按下沒反應
- i18n: 共用錯誤句統一成跟整頁錯誤畫面同一套用字與標點
- resources: 機器清單整頁出錯時不再重複顯示配額卡的錯誤
- home: 學生首頁「查看所有課程」沒課程時不顯示,移到標題列右側
- ci: make public model smoke warning-only (#375)
- ci: make public model smoke warning-only
- resource-detail: 快照/備份表格不斷行,規格申請原因以字數提示當 placeholder
- audit-log: 操作紀錄的動作改顯示文字,操作者 email 與徽章不再被拆字
- runtime: harden AI and realtime request lifecycles
- proxmox: 放大 PVE 連線池並縮短連線逾時、連線失敗換新 socket 重試
- codeql: 修正 #371 帶進的 6 項 CodeQL Code Quality 發現
- i18n: 表格操作欄標題統一為「操作」
- firewall: 沒有機器時不畫網際網路節點與小地圖
- teacher-judge: unify AI導師檢查 naming
- error-state: CrashState 只留「重新整理頁面」一顆按鈕
- teacher-judge: restore legacy proposal compatibility
- teacher-judge: harden long-run session stability and deadline recovery
- login-password: Windows 機器的登入密碼必須符合 Windows 複雜度,避免 cloudbase-init 設密碼被拒而登不進去
- teacher-judge: preserve execution paths through finalization
- teacher-judge: enforce typed check plan writes
- teacher-judge: require executable locations
- ai: VLLM_API_KEY 留空時不送 Authorization 標頭
- system-ai: enforce vLLM request contracts
- ai: harden guardrails and bound PVE chat context
- system-ai: align contextual help guardrail probes with production
- request-form: 範本或 AI 帶入的規格值對齊步進,記憶體不是 512 MB 倍數時表單不再送不出去
- request-form: 移除密碼欄位「平台不會保存這組密碼」的小字提示
- security: Linux 上 SHA-512 crypt 改呼叫系統 libcrypt,壓測 p95 回到門檻內
- ai: 改用碼位表清理控制字元,解掉 CodeQL overly-large-range
- proxmox: 入口節點斷線時讓快取的 client 重新探測,LXC 範本清單改長快取
- ai-api: harden public relay and credential lifecycle (#364)
- alembic: merge AI API migration heads
- account: use existing audit action for email changes
- account: verify email changes and accept uploaded avatar URLs
- ai-api: harden lifecycle, relay contracts, and endpoint defaults
- ai-monitoring: 以 /model/info 把 LiteLLM 部署健康對回公開模型名稱
- alembic: pentryprx01 改接在 aiapi01 之後,解掉雙 head
- proxmox: 輪詢 PVE 任務狀態時容忍暫時連不到 API
- ai-proxy: bound relay admission and retry lifecycle
- ai-api: harden control-plane requests and quotas
- docker: prestart 改直接用映像內 venv,不再於執行期跑 uv run
- ai-proxy: admission queue 逾時改用 call_later,Python 3.11 不再吞掉取消
- forms: 數字框改離開欄位才定稿,申請表單 CPU/記憶體補數字框
- spec-change: 規格調整送單即檢查剩餘配額,規格頁上限跟配額同步
- requests: 申請表單的硬體上限跟剩餘配額同步
- provisioning: 機器開機後開放 SSH 密碼與 root 登入
- ai-proxy: admission queue 改為直接交棒,Python 3.12+ 不再被新請求插隊
- firewall: 群組 id 改百分號編碼避免箭頭失效,搜尋中不給切收合
- ai-api: keep smoke credentials off stdout
- ai-api: rotate and clean up deployment smoke credentials
- ai-api: align key durations and deployment smoke auth
- ai-api: bound relay concurrency and align CI
- desktop: serialize tunnel lifecycle and stabilize status polling
- gateway: migrate WireGuard policy to SkyLab and deduplicate rules
- gateway: reload active WireGuard firewall on install
- desktop: avoid orphan tunnel startup race
- gateway: replace stale WireGuard UFW route
- wireguard: validate ACLs against configured subnet (#350)
- wireguard: validate ACLs against configured subnet
- ai-proxy: 串流回應標明不緩衝,確保 SSE 逐段送出
- wireguard: use configured resource subnet
- desktop: refresh expired authentication sessions
- wireguard: revalidate active peer ACLs
- resources: enforce expired usage windows across access paths
- desktop: allow WireGuard connection without VM targets (#345)
- auth: 忘記密碼限流常數改名,消除 CodeQL 明文日誌誤報
- backup: bkup01 migration 改接在 pentry01 之後
- backup: LXC 還原時明確帶上非特權設定
- snapshot: 機器當下不能用快照時隱藏並停用快照功能
Performance
- firewall: 即時 IP 查詢限時並改背景更新,拓撲與資源清單不再被 guest agent 拖住
Documentation
- 全部文件依程式現況重新整理,移除過時、重複與已無用的內容
- website: 手冊截圖說明改用 playwright-core 安裝瀏覽器並補上注意事項
- manual: 使用手冊 36 頁加上步驟截圖(中英各 304 張)
- move all documentation into website/ and add the per-feature user manual
- tidy the repository for the public open-source launch
- 修正翻譯時發現的過時內容(範本可見範圍、排程任務數、範例模型、WireGuard 範例值)
- 文件改為英文主版+中文並列,授權改為 AGPL-3.0 並加入第三方授權聲明與關於頁
Maintenance
- docs: 文件站改由 Cloudflare Pages Git integration 部署
- backend: 正式映像改用 Python 3.15,migration 檢查改用 Postgres 18
- deps: 前後端、桌面端、文件站與 Docker 映像全面升級
- frontend: 表格改用 TanStack Table v9
- deps: bump aiohttp
- deps: bump the actions group across 1 directory with 2 updates
- frontend: Docker 建置改用根目錄 workspace 鎖檔並凍結版本
- backend: 移除覆蓋率測試檔中不增加覆蓋的 707 個多餘測試
- deps: bump the actions group with 2 updates (#397)
- teacher-judge: stabilize deadline recovery test (#405)
- verify student overview and weekly task content stay consistent
- remove obsolete weekly task source fallback assertions
- template: 轉成範本統一用 TemplateFormDialog
- teacher-judge: stub the script lookup in the class script-run route test
- ai-judge-ui: name the assistant AI導師檢查 and the tab 任務設定
- course: narrow the weekly task file column
- course: remove per-week machine selection from weekly tasks
- teacher-judge: avoid assuming shared worker distribution
- backend: fix CI flake in deadline test and CodeQL substring alert
- backend: raise line coverage to 100%
- backend: coverage excludes, dead-code markers and batch summary guard
- auth: fix email verification CI test setup
- frontend: 日期時間比對不受 ICU 空白字元差異影響
- admin: 編輯使用者對話框的兩步驟驗證區塊改白底
- login: 登入頁「桌面 App」提示改白底細框
- account: 「關於」分頁左右對調,開源元件表在左
- account: 「關於 SkyLab」卡片內容重排,窄螢幕改上下排
- auth: 「正在驗證登入狀態」不包白底卡片
- routes: declare database fixtures for remaining cases
- runtime: align DB guard and AI worker contracts
- tests: stop tracking local AI service probes
- ai: add website service verification probe
- ai-api: remove bulk-reject flow
- vm-request: Windows 申請單測試改用符合 Windows 複雜度的密碼
- quality: 清除 GitHub Code quality 在 PR #364/#365 新程式碼上的 30 項發現
- backend-tests: prestart 改以 uv run 啟動,讓 runner 上的 venv 進 PATH
- deps: 前後端、桌面端與 Docker 映像全面升級(含跨大版)
- ai-api: 聊天分頁的模型列拿掉 support_agent 圖示
- ai-judge: 檢查表助理對話比照首頁 AI 對話
- dashboard: 首頁 AI 對話頭像改成章魚學士,拿掉助手標頭的 support_agent 圖示
- sidebar: 品牌標誌改用章魚學士 OctoMark,不再用 favicon 點陣圖
- frontend: favicon 換成章魚學士,補 SVG、16/32px PNG 與 apple-touch-icon
- sidebar: 「Storage」中日文介面改成「儲存空間」/「ストレージ」
- settings: 節點管理頁併入 PVE 連線頁並改名「PVE 管理」
- settings: 配額頁併入治理頁並改名「資源政策」
- connection-dialog: 兩台機器互通的方向改成「單向/雙向」
- sidebar: 液態玻璃在窄螢幕的側欄抽屜改成重霧,底下頁面的字不再透上來
- ai-service: add deployment smoke coverage
- desktop: handle unpatched build audit advisory
- desktop: require signed release installers
- desktop: remove obsolete renderer integration
- desktop: prepare v0.2.0-beta.4
- desktop: enforce lint audit and build checks
- desktop: resolve remaining npm advisory
- quality: 清除 GitHub Code quality 全部 48 項發現並升級 urllib3
- deps: bump the npm_and_yarn group across 1 directory with 3 updates
- deps: bump pyjwt (#341)
- 測試不受本機 .env 的 Turnstile 金鑰與資料庫 PVE 連線影響
2026-09
Features
- auth: 登入與註冊加入 Cloudflare Turnstile 機器人驗證
- home: 首頁機器卡標題改顯示課程環境名稱
- ai: 手動金鑰+Harmony解析+遠端apikeys
- auth: auto-register education Google users
- ci: 手動觸發的課程活動建班 workflow
- frontend: 整組開關機改為分批送出,班級監看加上整班電源按鈕
- teaching: 班級擁有者可領一套與學生相同的機器
- gateway: 閘道 VM 新增「安裝服務」一鍵安裝
- auth: 服務檢查失敗時學生與老師也能帶著警告繼續
- auth: 每次登入後的服務檢查畫面
- onboarding: 首次登入引導加入姓名與頭像設定
- setup: 初始化精靈建立的管理員也要走首次登入引導
- ip-management: 實驗室 IP 網段支援選填 VLAN
- monitoring: 監控模組接上 AI 模組(LiteLLM/vLLM 健康、指標與 Grafana 儀表板)
- ai-gateway: LiteLLM 改接 Compose 內網並自動建 DB/核發 service key
- monitoring: SkyLab 管理員免密碼登入 Grafana(nginx auth_request + auth.proxy)
- monitoring: 資源監控頁在監控 stack 啟用時顯示「在 Grafana 查看詳細」
- ai-monitoring: add AI call observability
- monitoring: Grafana 與平台健康檢查涵蓋 Gateway 主機
- ai-api: 新增金鑰詳情與聊天工作區
- ai-assistant: 助手浮在對話框之上,對話框在面板開著時改到左側置中
- gateway: Gateway 改用 nginx 取代 HAProxy 與 Traefik
- request-form: 載入狀態加轉圈提示,移除類型建議框
- onboarding: 首次登入引導精靈(語言/外觀/兩步驟驗證)
- resources: 機器開機中停用控制台
- credentials: 重設 VM 登入密碼後自動重新開機套用
- monitoring: 平台健康監控、排程心跳、系統告警與選用監控 stack
- frontend: 資源詳情頁判斷 API 404,顯示「找不到這個資源」而非一般錯誤
- backend: 補 404/500 全域 exception handler,未知路徑與未捕捉例外回統一多語訊息
- auth: 強制兩步驟驗證改為逐帳號設定,移除登入安全頁
- nginx: 反向代理加 50x 靜態錯誤頁,前端容器掛掉時不再出現預設白頁
- frontend: 新增 404 頁(紙飛機航線動畫),錯誤文案統一並加根層 ErrorBoundary
- auth: 兩步驟驗證(TOTP/Google Authenticator)+管理員重設與強制政策
- landing: 收尾改成 outro 段,雲海合攏後浮出 CTA
- landing: 段落道具與資料連動
- storage: Storage 清單加狀態篩選與搜尋
- class-workspace: 週次發布改用草稿|發布切換,重抓資料不蓋掉未儲存的修改
- segmented-control: 支援單段停用,修正選中段 hover 字色
- setup: 精靈卡片右上角加深/淺色主題切換鈕
- setup: 精靈開頭改為歡迎畫面選語言,頁首精簡為「初始設定」
- setup: 首次安裝初始化精靈(管理員 → PVE 連線 → IP 網段 → 完成)
- provisioning: run VM request clones on the arq worker
- compose: 加入 PgBouncer 連線池,backend/worker 改經 transaction pooling 連 DB
- ai-judge: add empty-state hero UI for chat and check panel
- teacher-judge: P3-a attachment convergence source id and history dedup
- teacher-judge: show detection targets and execution contract in rubric table
- sidebar: 管理員設定改麵包屑返回,導覽加捲動邊緣淡出
- jobs: 背景任務彈窗改為任務/提醒分頁,通知設定收進齒輪
- ui: 新增 PasswordInput 共用元件(顯示/隱藏密碼)
- ui: 新增 FileDropzone 共用上傳元件,檔案上傳改用拖放區塊
- teacher-judge: persist script-set failures to chat history
- provisioning: one login-password rule for every creation path
- teacher-judge: group teacher review overview by student
- teacher-judge: support typed multi-machine check plans
- ai-api: rebuild the quick-start dialog around what students need
- ai-api: redesign keys and requests as tables, move docs into a quick-start dialog
- sidebar: open teaching group to students and add quick-create entry
- resource: add structured guest_os identity with lazy detection
- teacher-judge: 腳本顯示名改用機器名稱並補回 legacy 後綴對映
- teacher-judge: 導師核查新增一次執行並移除執行結果頁
- teacher-judge: 批次執行結果改用逐機器表格與顯示名對照
- landing: 未登入首頁改為導入頁並加入 gsap 依賴
- landing: 導入頁滾動敘事與 HUD 介紹卡
- landing: 等距校園夜景場景與八段運鏡腳本
- resources: 舊班級機器關聯回老師拓撲的顯示名
- teacher-judge: 支援多機器腳本集與批次執行
- resource-detail: 無密碼記錄的機器於憑證卡顯示提示列,指出重設密碼的補救路徑
- teacher-judge: 新增導師核查與學生回饋
- teacher-judge: 傳遞課堂機器環境上下文
- teacher-judge: add logical node targeting
- class-workspace: 環境的唯讀拓撲改用與編輯器相同的防火牆畫布
- course-env: 畫布加上可隱藏的上網線,移除提示句
- course-env: 點線改用防火牆的 ConnectionDetailPanel,畫布提示預設可上網
- class-workspace: 唯讀拓撲節點改用防火牆的 vmNode 外觀
- course-env: 拓撲畫布外觀對齊防火牆頁,移除配額預估與互通警告
- course-env: 編輯器改用防火牆拓撲的連線設計與設定
- course-env: 對外服務改為 port_forward,移除 firewall_only
- nat: 對外 port 自動配號池與入口主機設定
- course-env: 機器互通改為顯式 peer_policy,沒畫線即隔離
- teacher-judge: 執行結果檢查表格化並格式化指令 log 輸出
- teacher-dashboard: add populated demo preview
- teaching-classes: machine_nodes 回傳 template_name 供對照系統範本
- resources: 課程機器顯示老師取的名字,不再顯示產生的主機名
- provisioning: 建立時記錄登入密碼,快速練習主機名帶出機器名
- course-environments: 基本資訊發布後可改,並新增說明文件
- course-environments: 套用方式發布後仍可調整,並移除下架
- ai-api: add integration docs and detailed key usage
- course-environments: autosave drafts and publish without manual saving
- firewall: 連線對話框機器下拉標註來源種類
- resources: 資源詳情概覽也顯示對外網址
- resource-mgmt: 資源管理列表也在 IP 底下列出對外網址
- resources: 我的資源與進階設定看得到反向代理的對外網址
- firewall: 拓撲上網線可隱藏,預設隱藏
- resources: 機器來源徽章,我的資源與防火牆同一套標示
- resources: 資源列表整列點擊進詳情頁
- teacher-judge: 導師可讀 workflow 投影與 session 自動化防護
- firewall: 老師可把機器開放給班級,學生從自己的機器發起連線
- firewall: 防火牆納入師生關係,老師看得到並能管班級學生的機器
- login: 登入頁回歸三色暈染主題與毛玻璃卡
- firewall: 連線對話框改為意圖優先,方向由意圖決定
- teacher-judge: 提案改以 server 端工具呼叫為唯一來源
- courses: add simulated learning walkthrough
- guide: expand contextual walkthroughs
- teacher-judge: 提案 add 候選改為伺服器端解析 item id 與快照修復
- teacher-judge: 附件評分表改為逐項隔離核查
- teacher-judge: 收斂需求對話與檢查結果
- firewall: 連線自動走最短側邊,不再固定右出左進
- monitoring: 節點用量改整卡收合,移除異常優先的部分列表
- firewall: 拓撲圖標示連線用途與方向
- teacher-judge: 強化需求推導與檢查步驟驗證
- monitoring: 節點用量表異常優先,正常節點收合
- ai-api: 我的用量加逐日 Tokens 折線圖(稽核 #7)
- users: 帳號來源標記,LDAP 帳號鎖住本地密碼欄位(稽核 #9)
- scheduler: PUT /proxmox-config 改部分更新,排程頁拆卡標註生效時機(稽核 #16)
- firewall: 拓撲頁規則面板升級為可管理工作區(稽核 #8 殘餘)
- settings: 配額/排程/治理三頁點明分工並互連(稽核 #17)
- monitoring: 監控頁減塊——警告與挖礦收進分頁、Top 5 縮欄(稽核 #24)
- review: 主 badge 收斂成審核結果,套用進度降為灰字(稽核 #4)
- forms: 頁內插入表單統一改 Modal(稽核 #11 #15 #22)
- settings: 系統管理頁補欄位說明與術語統一(稽核 #12 #20 #21 #23)
- quota-bar: 配額用量條加標題與說明,載入失敗不再無聲消失(稽核 #3)
- review: 審核頁分頁角標顯示各狀態筆數,副標去掉已移出的請求類型
- dashboard: 首頁待辦補挖礦事件來源(稽核 #1)
- admin: 使用者管理與 IP 管理加前端分頁(稽核 #9 #10)
- review: 審核頁移除統計卡與刪除申請,待審數改分頁角標(稽核 #27)
- sidebar: 系統管理移至底部「管理員設定」入口,進入後切換專屬核心側欄
- settings: 設定頁儲存列加 dirty 追蹤,未儲存跳離前攔截確認(稽核 R1)
- ai-navigation: 以任務狀態追蹤申請機器流程,不再以頁面位置推算進度
- teacher-judge: 支援腳本取證與導師審核模式
- course-env: 教學環境規格解鎖,以範本規格為基準
- template: 規格基準回填,克隆限師管並納入配額執法
- ai-api: 我的用量統一整合兩種計算路由與細項紀錄,金鑰棄用與申請狀態上色
- teacher-judge: 聊天主動核查提案流程,移除 workflow tool 死碼
- gateway: replace FRP UI with WireGuard status
- monitoring: reorganize AI usage dashboard
- courses: add weekly student learning workspace
- ai-api: 申請分頁改為 API Keys 右側「+ 新增金鑰」彈窗
- assistant: AI 助手面板玻璃化,覆蓋層開啟時鎖住背景捲動
- course-env: 學習環境編輯頁 stepper 改圓圈連線樣式並鎖定視口高度
- requests: 我的申請列表併入帳號與 GPU 欄,表單體驗調整
- teacher-judge: consolidate save and script creation flow
- teacher-judge: simplify check creation flow
- admin: 優化首頁與 AI 維運助手互動
- admin: 管理者首頁改分層總覽,AI 回覆表格改用 UI 元件
- teacher-judge: relax style gates and enforce rubric coverage in script generation
- teacher-judge: enforce automatic check support before script generation
- resource-detail: 對外服務卡片改以這台機器的網域為主
- audit: 稽核日誌篩選改為即時查詢
- resources: 主機開機自動啟動改由系統隨開關機自動對齊,不開放使用者設定
- notifications: Web Push 背景推播,分頁關掉也能收到任務完成與提醒
- teacher-judge: add script generation workflow states
- ai-pve: add guest diagnostic summary tool
- course-template: 課程環境可宣告「外網 → 機器」,每位學生各配一個網址
- review: 審核頁排程人話化、長文字收合,分頁改用 SegmentedControl
- course-template: 規格改滑桿,並補上克隆磁碟下限與儲存區容量把關
- ui: 新增共用 SegmentedControl,AI 監控與 API 審核頁改用
- monitoring: 強化管理監控與 PVE 快速檢視
- ai-pve: 收斂 PVE 對話範圍與異常判定
- sidebar: 側欄項目釘選功能
- system: 系統設定的七個分頁升格為系統管理底下的獨立頁面,移除系統設定
- ai: 優化 PVE 工具收集並加入教師對話摘要
- jobs: 網頁端桌面通知:登入後詢問瀏覽器通知權限,背景時任務終態與新提醒發系統通知
- resources: 規格調整改用拉桿
- resources: 我的資源總覽分頁改版
- resources: 進階設定改版:對外服務、防火牆、生命週期、開機、憑證、共享、標籤、轉範本
- ai: 重整 AI API 金鑰管理頁面
- ai: enhance monitoring dashboard and metrics API
- spec-change: 核准後改由申請人套用,執行中的 VM 關機改規格再開機
- resource: 整組操作放在群組列,環境內機器可看單台資訊
- resource: 環境內機器與單機的操作對齊,規格鎖定改為真的擋
- teacher-judge: 重整檢查工作區版面
- teacher-judge: 腳本總覽新增重新命名功能
- class: 讓班級狀態自己前進,並收斂分類與資訊欄位
- guide: move user guide trigger into page header as icon button
- teacher-judge: 自動核准腳本並加入修正重試流程
- ai: update capabilities and improve layout for AiFloatingChat component
- ai: explain the screen the user is on, and index what the platform can do
- review: rebuild the batch page as class review, unstick the request page
- teacher-judge: add chat attachments and creation modes
- teacher-judge: streamline check creation and data upload flow
- teacher-judge: improve rubric detectability workflow
- frontend: 表單送出檢查改為聚焦未填欄位並標紅,不再反灰送出鈕
- teacher-judge: 將評估摘要與來源整合至聊天室
- publish WireGuard desktop client beta
- teaching: 整班鎖定同一叢集,叢集內把學生分散到不同 server
- teacher-judge: expand objective checks and rubric editor
- teaching: 學生依叢集容量分配,單一學生的機器不跨叢集
- frontend: 我的申請與申請表單 UX 改善
- teaching: 課堂機器必須放在同一個叢集
- placement: 群組 affinity 與 GPU 額度納入排程約束
- 導入 i18next 多語系架構,前後端全面翻譯為英文/日文
- course: let students mark assignment items complete
- templates: 老師建範本、學生在「我的申請 › 範本開通」克隆
- firewall: 拓樸圖拉線直接開啟新增連線對話框
- admin-home: let the conversation take over the page while you ask
- ai-assistant: gather requirements in conversation before planning
- ai-assistant: fold the recommender into the assistant, drop its own UI
- teacher-judge: extract AI check page and hide sidebar
- ai-assistant: one assistant that navigates, plans a spec and fills the form
- ai-navigation: step-by-step flows, conversation memory, real routes
- desktop: replace FRP tunnel with WireGuard
- wireguard: add desktop tunnel control plane
- GPU 選項依範本叢集過濾、自動開機攔截 vGPU 啟動失敗
- frontend: 資源管理表格比照我的資源改造
- frontend: 我的資源表格欄寬固定與群組列整列開合
- ai-pve: apply postgres identity prompt migration
Fixes
- firewall: 鎖定快速練習拓撲
- firewall: 顯示課程拓撲連線
- db: 認證後立即歸還 DB 連線,整班登入不再耗盡連線池
- notifications: avoid repeated session expiry alerts
- auth: 登入節流改依帳號計次,整班共用出口 IP 不再集體 429
- scheduling: 排程不再把被關掉的申請單機器自動開回來
- teaching: 無埠協定的課程連線不再送 dport 給 PVE
- cleanup: LDAP TLS 最低版本設為 1.2,launcher 測試改綁 IPv6 loopback
- cleanup: 全分支複審追加修正
- ci: 建班腳本改用 LXC 映像當課程環境來源
- cleanup: 遮蔽 regex 改為線性時間、修正過期的測試 monkeypatch 目標
- cleanup: 移除 all 中已刪除的 CourseEnvironmentAudience、拿掉會逾時的動態 import 測試
- ai-gateway: --start 不再預檢上游 /v1/models
- ai-gateway: --init-env 換掉與 vLLM/master key 重複的舊 AI_API_API_KEY
- ai-gateway: --init-env 寫入前檢查權限並顯示真正的失敗原因
- 修正今天 DB 重構 review 找到的問題
- db: 刪除流程不再回滾 IP 釋放;移除快速練習開放對象與死稽核值;補 updated_at onupdate
- db: JSON 欄位改用 json 而非 jsonb,移除 preset CHECK
- db: 狀態/列舉字串欄位補 CHECK 約束
- db: 課程環境 node_key 補複合外鍵,週次指定機器需存在於班級
- placement: 共享儲存以叢集為單位計算容量
- db: resources 記錄所屬 PVE 連線,VMID 配發與查找不再猜
- db: 補齊 user 外鍵 ondelete、範本 pve_vmid 改 partial unique、補缺漏索引
- vllm: configure Nemotron Mamba cache dtype
- monitoring: 監控 stack 支援 rootless Docker 的 socket/data-root 路徑
- home: 首頁機器卡補上開機中(starting)狀態
- gateway: 「重新同步」一併重建 nginx 的 Port 轉發設定
- teacher-judge: 學生頁不再顯示腳本驗證的技術錯誤,放寬 evidence/raw 型別
- guide: 導覽鈕只掛在頁首標題旁,手機寬度恢復顯示
- onboarding: 引導精靈只在後端明確回 onboarding_completed=false 時顯示
- error-state: 三頁載入失敗改用共用 ErrorState,Gateway 補上重試
- proxmox: PVE CA bundle 的 HTTPS 請求改用非 X509 strict context
- users: 使用者對話框改 portal 到 body,補 dialog 無障礙屬性
- ai-api-keys: 篩選鈕與取消鈕改用 btn-secondary
- a11y: 班級工作頁與 AI 檢查頁的內容區改用 div
- course-topology: 唯讀拓撲推開太近的機器,連線標籤不再被蓋住
- queue: address review findings on the arq migration
- background: move heavy work to arq, leader-gate every lifespan loop, harden Redis client
- 2026-09-22 全系統稽核修復(安全、流程邏輯、部署)
- firewall: 額外封鎖網段的 out-DROP 排到 gateway:default 之前才會生效
- teacher-judge: persist reviews for failed targets
- ai-pve: vendor template UI helpers into tracked frontend service
- teacher-judge: improve command failure evidence and raw log
- teacher-judge: finalizer repairs legacy check plan before accepting prose
- ai-help: 帳號設定與閘道的情境說明跟上新介面
- class-workspace: 週次列改單欄時 grid-area 全部歸位
- provisioning: keep and apply the login password of LXC clones created stopped
- ai-api: show the currently configured base URL on credentials
- resources: let the backend decide whether a request can be cancelled
- quick-practice: finish reclaiming sessions that were ended early
- audit: add missing course and quick-practice audit actions
- teacher-judge: render optional cwd as Python None in compiled scripts
- ai-navigation: drop the remaining quantifiers from the explicit-request regex
- ai-navigation: remove polynomial-time regexes from phrase matching
- ai-api: fix code viewport height to 15 lines
- ai-api: refine code examples and stabilize dialog height
- ai-navigation: align teaching workflows and shorten guidance
- course-templates: align the documents field, name untitled drafts, trim list subtext
- ai-help: add contextual help surface for /quick-create
- migrations: 收斂雙 head 並確保 vm_requests.password 可空
- resource: harden teaching display names and sync test mocks with Resource fields
- resource: tolerate missing guest_os in resource public building
- provisioning: prevent VMID and IP allocation collisions
- resources: 群組列徽章 tooltip 帶入班級/環境名稱,修正空插值
- machine-kind: 非本人機器之 tooltip 改為擁有者敘述,新增 otherOwnerHint 三語系鍵
- resources: 老師擁有自己班上的班級機不再誤標成學生機器
- db: vm_requests.password 回到 NOT NULL;一次性清理課程機器上舊的 firewall_only 規則
- class-workspace: 環境預覽被 flex 壓成 0 高;資訊列改為每人/全班資源
- lxc: sync platform SSH key on LXC start/reset/schedule paths
- template: LXC 克隆後以 pct exec 注入平台公鑰至 authorized_keys
- quick-practice: 套用方式成為唯一的可見度閘門
- teacher-judge: 重試去重,避免重複錯誤與工具結果行
- teacher-judge: 淘汰 success_criteria 欄位並調整潤飾與缺口提示詞
- teacher-judge: refine 全部提案不可套用時不顯示面板,保留 chat 回覆
- teacher-judge: align run_command exception repair contract
- teacher-judge: 強化腳本品質與 coverage 修復流程
- firewall: 上網線只藏機器連出去的出站線,對外開放照畫
- resource-mgmt: 資源管理頁移除機器來源徽章
- ai-help: sync monitoring labels with dashboard
- teacher-judge: edit patch 補上執行資訊時清除過時 missing_information
- teacher-judge: 收斂對話焦點規模並修復逾時 coercion 與參數缺口提示
- teacher-judge: 修復 json_object 封鎖提案工具呼叫並補上失敗總結
- ai-api: 金鑰卡片移除 Prefix 顯示,Base URL 改顯示 SkyLab 網域
- contextual-help: 同步 AI API 我的用量元素與現行統一用量 UI
- teacher-judge: 統一自動判定與缺少資訊回覆
- firewall: 同一對節點之間的線各走一側,入站與出站不再疊成一條
- firewall: 線上標籤改貼近所屬節點,不再互相重疊
- tests: 修復 merge upstream/main 後的三處 CI 失敗
- monitoring: 離線節點不可展開,趨勢無資料時不畫空圖
- course-env: 儲存驗證失敗補 inline 錯誤訊息與 aria-errormessage(稽核 #26)
- reverse-proxy: 「網址清單」正名「對外網址」並補一行用途說明(稽核 #13)
- ai-api: 「刷新」改名「重新產生金鑰」並套 danger 樣式(稽核 #6)
- tables: 表格補 min-width 讓橫向卷動生效,欄位不再互擠(稽核 R3)
- network: separate publish targets from outbound firewall blocks
- teacher-judge: 待更新項目不再外溢到未編輯檢查項目
- frontend: .env.example 的 VITE_API_URL 預設留空
- resource: 關機機器的 IP 回退到 ip_allocation 分配紀錄
- jobs: 任務取消通知改用 info 藍樣式
- review: 審核頁切換列時詳情欄捲回頂端
- teacher-judge: refine generic command detection rules
- admin: 對話輸入框收成單行
- admin: 對話不再重複開場白,上排兩張卡等高
- admin: 對話框改隨內容長,兩張卡的標題節奏對齊
- teacher-judge: sync automation review state with rubric
- audit: 日期篩選不可查今天以後的日期
- teacher-judge: retry script generation and AI review call failures
- audit: 日期篩選拿掉選擇器的 min/max 限制
- audit: 日期篩選起始不可晚於結束日期
- jobs: 幾秒內完成的任務也會通知;WS 重連改用最新 token;不安全來源給明確提示
- audit: 補回已下線的 AuditAction 歷史值並同步 auditaction enum
- resource-detail: 進階設定的 modal 改 portal 到 body,覆蓋整個頁面
- network: IP 快取寫入失敗後 rollback,避免拓撲 PendingRollbackError
- class-workspace: 上課環境的拓撲對齊課程環境的新樣貌
- scheduler: 移除三個沒人讀的放置欄位,補齊五個讀得到卻改不了的
- governance: 治理頁補上課程學習環境區塊,兩個欄位不再改不到
- unify desktop sign-in and connection flow
- refine desktop login connection action
- restyle desktop connection button
- use colorful SkyLab Connect app icon
- make desktop download public and apply SkyLab branding
- course-template: 側欄固定與畫布同高才會出現捲軸;映像清單改為各自載入
- course-template: 還原角色欄位,側欄改為常駐可見的捲軸
- course-template: 側欄移除角色欄位並收緊間距,正常情況不再需要捲動
- course-template: 對外網址不可重複,側欄過長時就地捲動
- course-template: 對外服務改為摘要列表 + 彈出設定
- course-template: 對外服務的說明改寫得更明確
- network: 反向代理改走統一發布路徑,補 NAT 清理與連線重疊檢查
- ui: 側欄彈窗改 portal 到 body,防火牆規則面板改浮動卡片
- course-template: 側欄標題不再重複顯示機器名稱
- course-template: 側欄標題字級與斷字,移除方向說明
- ai: 強化 PVE 對話歷史與 SSH 確認安全性
- ai: 完成後端 AI P1 穩定性優化
- security: 挖礦偵測 RRD 時間框隨視窗選擇,覆蓋率改由取樣間隔推估
- governance: 閒置偵測依視窗選 RRD 時間框、重開機重算,新增閒置通知延遲設定
- teacher-judge: simplify script rename workflow
- ai: 修正 AI 導覽元素違反的兩條既有規則
- network: 開機時一併回復被改弱的入站策略;AI 助手按鈕稍微透明
- network: 拓樸規則改為同步,並將多機環境模板更名為學習環境
- ui: 修正不存在的 --color-bg 變數導致輸入框變透明
- ui: 修好三個壞掉的圖示,收斂金鑰篩選,AI 審核歸入審核群組
- class: 修正每週內容跑版,收斂上課環境與班級總覽的版面
- class: 修正排程星期、課次內容流失與精靈週次停留在草稿
- placement: 讓 LXC 克隆的節點約束誠實,群組 affinity 改為叢集層級
- db: 合併 tjsub02 與 tplcat02 兩個 migration head,縮短 tplcat02 revision id
- navigation: remove stale courses route
- requests: 範本回到申請表單的資源設定,範本要求 GPU 時才顯示並強制選擇
- ai-navigation: drop the unused session id CodeQL flagged
- resources: 刪機先標記申請單已消耗,排程器不再復活機器
- ai-chat: parse GFM tables, and make long node listings readable
- ai-assistant: make every step button do something, and loosen the layout
- ai-assistant: keep the flow going after planning, and land the GPU choice
- gateway: harden WireGuard backup collection
- course: show published weekly PDFs without checks
- desktop: restore About route and fallback
- db: remove duplicate Python entrypoint revision
- frontend: 未定義的 --shadow-xl 改為 --shadow-lg
- frontend: 補回可點列失去的 hover 回饋
- frontend: 新增 --color-primary-on-surface 修正品牌色文字深色模式對比
- db: make dbc02 replayable, and add a safe SECRET_KEY rotation path
Performance
- frontend: 首次載入瘦身,入口 883→404 KB、語系 1038→346 KB
- jobs: 近期任務快照在 2.5 秒內共用
- scheduling: 活單檢查沿用叢集清單狀態,節點沒變不寫 DB
- db: 任務與告警清單常用的 created_at 加索引
- resources: 資源清單與拓撲的 IP/DB 查詢改批次,IP 快取改獨立交易寫回
- frontend: 分頁隱藏時暫停輪詢,建立中申請與子網狀態降低頻率
- frontend: 自動刷新防重入、任務 WS 正常時停掉 REST 輪詢
- resources: 關機警告改用批次 /resources/my/session-status
- proxmox: PVE 設定與叢集清單改用行程內短暫快取
- firewall: 拓撲圖只抓一次叢集清單並平行查詢各機器
- compose,nginx: 補 restart 策略、拿掉 backend --reload、nginx upstream keepalive + gzip、靜態資源長快取、Postgres 記憶體參數
- teaching: 班級列表改批次查詢,300 次查詢降到 4 次
- gpu: GPU 管理頁的 Proxmox 查詢改為併發並加短期快取
- teacher-judge: pipeline A/B/C low-risk optimizations
- availability: 可用性月曆 lite 模式快取配置結果,面板改為背景更新
Documentation
- 清理過時與已完成的文件
- style-guide: Dialog 補上 portal、陰影與無障礙規則
- development: activate the venv before starting the backend
- teacher-judge: 補上班級詳情回應完整形式(多台機器+連結圖譜)
- teacher-judge: template_key/command_key 連結深度分析筆記
- frontend: 新增樣式規範需求填寫範本,供前端登記各節要求與變數變更
- 前端一致性與可用性稽核(28 項回饋逐條查證)
- style: move frontend style guide into docs with dated filename
- placement: 補上重構清場紀錄與最終測試數字(v1.3)
- placement: 更新排程改善計畫的實作紀錄至 v1.2
- repo: deployment/development/progress.md 移入 docs/
- frontend: STYLE_GUIDE 補上表格的三條規則
Maintenance
- monitoring: 系統健康狀態小卡等寬等高、依寬度自動排欄,任務表名稱與排程主次對調
- frontend: 拿掉 index.html 的液態玻璃 HTML 註解,說明留在 _themes.scss 不外露
- ai-judge: 檢查表助理空對話的輸入框移到面板底部,拿掉底部提示與輸入框陰影
- ai-assistant: AI 助手開場貼近輸入框,能力說明改成圓點清單
- ai-api: API 聊天的對話與輸入框撐滿聊天區,不再收成置中窄欄
- quick-practice: 快速練習頁拿掉頁首副標題
- class-workspace: 班級啟用後分頁改用分段切換,課堂監看工具列對齊
- frontend: 空狀態有下一步時都帶動作鈕,全站對齊
- home: 首頁與快速練習頁空狀態改用共用 EmptyState,研究環境入口直接開申請表單
- ai-api: API 聊天分頁樣式對齊其他分頁與共用元件
- 測試檔改用描述性名稱並移除審查內部編號
- cleanup: 收尾跨組修改並修正整理後失敗的測試(階段四)
- cleanup: 跨單位修改、合併後續與 vllm-service 舊 Gateway 移除(階段三)
- cleanup: 全專案整理與 bug/安全修復(階段二:各單位修復與整理)
- db: ai_template_call_logs 併入 ai_api_usage
- db: proxmox_config 移除舊版單連線欄位
- db: JSON 文件欄位統一為 jsonb
- db: audit_logs.action 由 PG enum 改為 VARCHAR
- db: vmid / resource_vmid 雙欄收斂,修正刪除防線與稽核清除範圍
- db: 移除死表與死欄位
- sidebar: AI 使用監控移到「監控與日誌」並改名 AI 用量監控
- monitoring: 憑證名稱斷言改用 token 比對避開 CodeQL 誤報
- monitoring: 監控 stack 拿掉 Uptime Kuma 與 Prometheus 告警規則
- 修正兩支跟不上實作的既有失敗測試
- ai-judge: 旋轉圖示斷言改對 MIcon 的 micon-spin
- icons: AI 機器人圖示統一為 support_agent
- home: 學生首頁卡片重新設計
- dashboard: 管理員首頁資料不完整提示併入頁首更新時間
- nginx: 50x 頁標題改紅色,與心跳線同色系
- icons: MIcon 新增 spin prop,處理中圖示統一轉圈
- layout: 路由載入層移除底色,避免在漸層背景上露出色塊
- 清除 CodeQL Standard findings(未用匯入/全域變數、空 except、無效敘述等)
- nginx: 50x 頁心跳線與告警燈改用淡紅色
- nginx: 50x 頁改成伺服器塔+心跳監測線場景
- nginx: 50x 錯誤頁比照 404 加動畫(雲朵浮沉、淡雲漂移、閃電閃爍)
- frontend: 錯誤文案收斂為統一句,新增共用 ErrorState 元件
- loading: 3D 方塊收尾改淡出,移除底色遮罩
- governance: 精簡治理設定的說明文字
- quotas: 配額覆寫表改用共用表格與按鈕 mixin,對話框對齊 Dialog 規範
- settings: PVE 連線與節點改成清單列,對話框對齊 Dialog 規範
- ip: 備註欄移到表格最後一欄
- gateway: SSH 連線設定的動作鈕移到卡片標題列
- domain: Cloudflare 連線狀態併入分頁列右側
- gpu: 移除映射鈕改用危險款圖示鈕 mixin,補上 aria-label
- ai-judge: 檢查清單改用共用空狀態與釘選鈕,被擋住的製作鈕改為說明原因
- jobs: 任務詳情改成標籤在上、值在下的欄位格線
- 全專案清理重複程式碼、死碼與多餘註解
- perf: make the double-click dedup test robust on small CI runners
- perf: move the fan-out stress tests onto the queue path; local runner honours Retry
- remove dead routes, unused services and the unwired TOTP module
- services: finish moving background work off the API process and untangle cross-service helpers
- compose: nginx 對外 port 改為可設定的 NGINX_HOST_PORT,預設 8082
- deploy: 更正 runs-on 註解,runner 名稱不是 label 需另行加 skylab-main label
- 對齊 2026-09-22 稽核修復後的行為,修 CI 兩支失敗與一支時序 flaky
- deploy: 部署改為只允許手動觸發,runner 改指定 skylab-main
- stop tracking docs/chen_yang, keep local files
- network: remove legacy FRP tunnel stack
- firewall: 移除「開放給班級」,老師一律改用「僅開放防火牆」
- teacher-judge: retire script generation and review path
- teacher-judge: hide executor transport from LLM prompts
- reverse-proxy: 對外網址列動作改圖示鈕,刪除確認改用 useConfirm
- ip: IP 管理表格固定欄寬,子網設定表單對齊 Dialog 規範
- domain: 網域管理分頁改 SegmentedControl,表單與列動作改用 mixin
- users: 使用者管理刪除確認改 useConfirm,表單與列動作改用 mixin
- requests: 申請表單改用 PasswordInput,兩欄高度改由格線分配
- review: 批次審核詳情自成捲動區,審核列固定在外;窄螢幕直向堆疊
- templates: 範本表單改 FileDropzone 多檔上傳,刪除確認改用 useConfirm
- account: 帳號設定收成「個人資料/外觀」兩頁,密碼與危險區域併入個資
- ai-api: AI API 與審核頁改用共用按鈕、表單與分段控制
- ai: 助手頭像統一為 support_agent,首頁助手標頭透出玻璃
- gateway: 移除日誌與設定檔的手動刷新鈕,日誌改自動更新
- dashboard: 管理員首頁移除「重新檢查」鈕,待辦改自動更新
- i18n: 清單串接改用 joinList,依語系給分隔符
- ui: 可點卡片 hover 移除藍框,保留淡入淡出
- ui: 玻璃卡內的內容區塊一律白底細框
- teacher-judge: complete P1 dead-code cleanup
- remove docs/chen_yang from repo tracking, keep local copy
- course: remove the unused Course Lab one-click deployment
- remove AI_PVE_template from repo tracking, keep local copy
- ui: 移除頁首副標與清單說明行,刪除相關設定互連列
- i18n: unify "learning environment" wording as "teaching environment"
- remove ai-navigation-demo prototype
- quick-practice: rename "quick create" labels to "quick practice"
- db: merge alembic heads osid01 + tjmm01 into mrg03 (no-op)
- templates: 機器範本頁整修——移除重新整理鈕、徽章與動作鈕收斂 mixin、列選單 portal 化修正裁切
- styles: badge 變體命名歸位規範五款(badge_ok/badge_err/badge_error 改 badge_success/badge_danger)
- styles: 新增 btn-icon-secondary mixin,資源列表動作鈕統一白底描邊並補 aria-label
- resource-detail: 迷你拓撲圖例與畫布底色對齊防火牆頁(flow token、文案、chip 樣式)
- ui: 提示列 icon 對齊文字首行光學置中(hintLine、infoBox)
- resource-detail: 規格分頁套用變更按鈕改靠卡片右側
- resource-detail: 憑證卡整理——按鈕改 btn-secondary 靠右、間距 token 化、兩欄卡片等高、移除公鑰冗餘說明
- firewall: 拓撲來源徽章置中騎卡片上緣,節點加高上內距,底色改以透明度調淡
- guide: 移除冗餘 fallback 色碼,樣式規範補導覽 z-index 保留區段
- styles: form-control 水平內距抽出 $form-control-padding-x 共用變數
- firewall: 對外暴露數與方向標示同步亮藍,老師開放框色改用所有權群色
- firewall: 圖例與提示字級改用 token,導覽示範連接點移除寫死色碼
- styles: 表單控制項與連結 chip 收斂共用 mixin(form-control、btn-ghost)
- machine-kind: 變體展開為 mine/other 兩類,移除元件內自訂屬性 --kind
- machine-kind: 移除 size prop 並同步更新五處呼叫端
- machine-kind: 徽章尺寸統一採用 badge-base mixin,內距對齊狀態標籤並移除 sm 變體
- ui: 稽核批次——dialog 關閉鈕收斂 btn-dialog-close、MIcon outlined 預設
- toast: sonner 樣式統一——按鈕吃 btn mixin、色票對齊主題
- machine-kind: 徽章顏色收斂為「我的/別人的」兩群
- course-env: 移除編輯器裡沒人用的 createPortal import
- connection-dialog: 「怎麼開放」改為分段切換,拿掉說明
- connection-dialog: 表單收斂——port 欄位定寬、方向只講單向/雙向、拿掉多餘說明
- class-workspace: 環境預覽畫布高度調為 360–520px
- class-workspace: 環境預覽畫布加高(420–600px)
- course-env: 畫布註解對齊移除小地圖後的實際內容
- course-env: 編輯器收斂——儲存橫幅只在失敗時出現,移除側欄對外服務、小地圖與互通下拉
- connection-dialog: 送出改為可注入,支援課程環境模板模式
- teacher-judge: 直接保存腳本結果並移除執行期 AI 判讀
- teacher-judge: split backend test suites and simplify AiJudge execution UI
- provisioning: 統一機器登入密碼的產生與保存
- student-ui: 首頁與課程頁抽成 HomeOverview 與 CourseCard,加入最近使用的機器
- batch-review: 移除班級審核的四張統計卡
- resources: 機器來源獨立成欄,兩張資源表對齊同一組比例
- student-ui: 首頁改名與版面統一,導覽入口改回小圖示
- course-environments: 移除建立新版本
- form: textarea 全站固定高,resize 預設收斂到 _reset
- firewall: 連線對話框移除「你要做什麼?」標題,卡片自明
- firewall: 對外開放連線改亮藍,與內部互通的灰拉開
- ai-api-review: 審核狀態切換器加各狀態筆數 badge
- resource-detail: 操作紀錄筆數改掛分頁切換器 badge
- ui: 移除複述標題的頁面副標與卡片說明
- resources: 移除機器標籤功能
- monitoring: focus usage dashboard on API key traffic
- jobs: 背景任務頁整修與標籤永不換行
- monitoring: 節點趨勢固定最近 1 天,時間範圍切換器移除
- resource-detail: 頁首返回鍵對齊、分頁改 SegmentedControl 與卡片標頭精簡
- review: 班級審核與 GPU 管理統計卡收斂
- ai-api: 分頁對齊金鑰管理的 SegmentedControl、統計卡收斂
- styles: 新增六款按鈕 mixin,全站按鈕複製體收斂
- dashboard: AI 助手標頭精簡為輸入框上方識別列
- monitoring: 時間切換器移入節點用量卡、運行狀態卡對齊量測卡
- teaching: 課程營運 stepper 箭頭分段、彈窗對齊規範與樣式清理
- teacher-judge: 提案階段 success_criteria 改為選填並補齊 timeout 預設值
- teacher-judge: 補齊 ai 判定模式重送候選的 success_criteria
- teacher-judge: 移除檢查項目 description 欄位並強化提案工具解析
- monitoring: simplify AI usage overview
- firewall: 抽出連線對話框的 payload 與送出邏輯並補上測試
- monitoring: 警告列圖示與文字間距拉開至 12px
- monitoring: 警告列圖示改對齊第一行中線
- monitoring: 警告列圖示改垂直置中
- monitoring: 移除頁籤面板內重複的卡片標題
- monitoring: 頁籤貼齊卡片左緣,卡片左上角改直角密合
- monitoring: 警告/挖礦頁籤改資料夾式,選中頁與面板同一塊面
- monitoring: 警告/挖礦切換改底線頁籤,緊貼所屬面板
- monitoring: 離線列補展開箭頭佔位,節點名稱欄對齊
- jobs: 任務篩選改用共用 SegmentedControl(稽核 #25)
- class-mgmt: 班級工具列左右對調,狀態篩選在左、搜尋在右
- class-mgmt: 班級狀態篩選改用共用 SegmentedControl
- i18n: 抽 utils/formatDate 收斂全站寫死 zh-TW 的日期格式化
- teacher-judge: 收斂評分表為單一 AI Chat 流程
- teacher-judge: 術語統一,評分表全面改為檢查表
- ai-api: 申請紀錄已通過狀態改回一般樣式,不上綠色
- template-ui: 設定選項文案改為標題加說明
- i18n: 三語系鍵同步本輪 UI 調整
- dashboard: 首頁卡片改用 style guide 玻璃卡
- ai-monitoring: 詳細區工具列切換器移到搜尋框左側,失敗列取消紅底
- ai-keys: 金鑰管理改為純表格列表
- resource-mgmt: 批次與單台刪除改走共用 useConfirm
- resources: 我的資源名稱欄寬收斂、確認流程整合
- confirm: 確認彈窗全站統一 useConfirm,玻璃卡為基準
- admin: 待辦列改單行、兩層並排
- admin: 待辦改按急迫度分層,消掉告警與異常的重複
- admin: 首頁與 AI 對話改用系統既有的卡片與對話語彙
- admin: 首頁移除主控台與資源水位,版面收緊成兩區
- ai: 「拓撲圖」已出現在前端語系檔,從 contextual help 的歸納豁免清單移除
- resource-detail: 移除進階設定的「對外服務」卡片
- network: 三份連線/發布/規則表單統一為一份 ConnectionDialog
- models: 移除零使用的分組狀態介面
- ui: AI 助手去除裝飾圖示,個人頁面版面細修
- course-ops: 課程操作訊息改走 toast,學習環境列表與拓撲對齊全站樣式
- ai-keys: 金鑰管理改左右分欄,狀態切換改用 SegmentedControl
- 同步 bun.lock 並補上 vLLM 預設模型名稱
- colors: 移除 --color-warning,警示色統一走 --color-danger
- colors: 寫死色碼收斂回主題變數
- ai-chat: AI 助手浮動按鈕改為純圖示
- loading: 學生端載入狀態統一為共用 LoadingState
- reverse-proxy: 拿掉分頁副標與「反向代理怎麼運作」說明,改成清單卡片排版
- resources: 進階設定拿掉備註只留標籤,轉成範本移到資源列表的更多選單
- settings: 配額管理併入系統設定分頁
- quality: 清除 Code quality 第二輪的 Python 發現與 5 項 AI 建議
- quality: 清除 CodeQL code-quality 掃描的全部 79 項發現
- template: 發布改成主要按鈕,移除沒有範本時的提示
- template: 收斂多機環境編輯器的區塊與比例
- class: 拓撲卡去掉重複說明,畫布還給主體高度
- class: 統一課程環境選擇器,收斂環境模板頁的密度
- style: 一鍵建立的表單改用全站共用的欄位樣式
- class: 概覽收成三塊,兩個殼的視覺語彙對齊
- teacher-judge: simplify check session workflow
- teacher-judge: align script overview wording
- teacher-judge: align check terminology and validation
- frontend: 表頭改對齊圖示左緣,不再縮進到文字起點
- frontend: 表格名稱欄表頭文字對齊列內主文字
- placement: 修正重構後殘留的未使用匯入與匯入順序
- placement: 清掉重構後的孤兒函式,鎖住群組凍結行為
- deps: 更新 desktop-client 套件並修正 element-plus 2.14 的 row 型別
- deps: 更新前端套件並改用 import.meta.dirname
- deps: 更新後端套件並相容 FastAPI 0.141 的 lazy include_router
- placement: 預覽與核准統一為同一套決策,移除未接線的 local search
- placement: 清除死碼與假策略切換,補上 GPU 退回把關
- 升級 github/codeql-action 至 v4
- users: email 重複的兩個斷言改為 zh-TW 預設訊息
- deps-dev: bump ip-address in /desktop-client (#249)
- db: tplgpu02 改接在上游 wgpeer01 之後,migration 鏈恢復單一 head
- ai-pve: put the send button beside the input, shrink the chrome
- ai-pve: tighten the ask box, drop the log heading, shorten the log
- admin-home: fix the type scale and the stretched hero
- ai-pve: drop the sidebar entry, render the replies as markdown
- ai-navigation: fold "確認並送出" into opening the form
- ai-assistant: open the form first, then let the AI fill it in
- frontend: remove legacy course learning pages
- frontend: 清除 StudentHomePage 搬移後的孤兒舊檔並修 shadow token
- frontend: 清除 npm 殘留鎖檔、openapi 快照與孤兒 hook
- repo: 移除已完成遷移的 frontend_old
- repo: 根 package.json 名稱由模板預設改為 skylab
- repo: test_vllm_service_api.py 歸位到 vllm-service/
- repo: 舊版 README 截圖 img/ 併入 docs/
- repo: gitignore 補上 .venv 與 ai-template-recommendation
- frontend: 移除 PageHeader 的 titleExtra 與殘留樣式
- frontend: 移除頁首與標題重複的小標
- frontend: 表格系統一致性改版與頁面標題對齊 (#243)
- frontend: 頁面 h1 與 sidebar 名稱對齊
- frontend: 申請表單送出中的沙漏加轉圈動畫
- frontend: 我的申請表格改版與全站展開區白底統一
- frontend: 全站列表表格名稱欄移除圖示、gap 統一 16px
- frontend: 使用導覽壓暗聚焦區以外的畫面
- frontend: 表格列 hover 改為「可點才變色」
- frontend: 學生首頁其他使用情境改版
- frontend: AI 檢查頁排版精簡與配色 token 對齊
- frontend: 班級管理頁首返回鍵樣式與文案統一
- frontend: 班級管理狀態標籤改為全站通用的填色式
- frontend: badge_muted 統一寫法並改用狀態灰
- frontend: 學生首頁快速練習區塊移出資源卡片區
- frontend: 移除班級空狀態按鈕與建班頁 backLink/eyebrow
- frontend: 表格列 hover 改用專屬 --color-row-hover 與表頭區隔
- frontend: 學生首頁 needCard 改為彈性寬度
- frontend: 學生 dashboard 拆分首頁與課程總覽頁
- frontend: dashboard 依身分拆分子資料夾
- api: remove dead and duplicated routes, wire up token revocation
- db: retire dead schema objects and realign the migration chain
2026-08
Features
- frontend: 表單送出時未填欄位改為紅框並定位游標
- environment lifecycle, reference protection and practice controls
- ai: teach the planner what a template is and where it comes from
- requests: a template is a source, not a fixed spec
- templates: let teachers open a template for student self-service
- course-env: scope quick-practice environments to an audience
- frontend: sidebar 手機/桌面切換斷點改為 1024px
- ai-pve: consolidate chat and add PostgreSQL prompt guidance
- unify teaching workflows and desktop connect experience
- frontend: 對話框統一離場動畫
- complete multi-machine environment lifecycle
- ai-pve: support three template targets
- teacher-judge: refine rubric naming and session actions
- teacher-judge: merge rubric editor into AI check workspace
- frontend: streamline student course machine access
- resources: allow after-class machine practice
- course: create student course shells for classes
- teacher-judge: refine upload and rubric workspace flow
- teacher-judge: refine rubric detection workflow
- 申請列表補上「機器已建立但維運失敗」的狀態與引導
- LoadingState 換用 3D 方塊堆疊動畫
- 路由載入動畫改為覆蓋整個 main 的遮罩
- 新增共用 PageHeader 元件,全站頁面標題列統一改用
- 提醒整合進 Sidebar 背景任務中心,通知來源單一入口
- /ws/jobs 快照附帶學生提醒,供前端即時接收
- launch and manage multi-machine practice environments
- preview grouped machine environments
- 申請表單 LXC 映像友善命名與 -GPU 標記,新增 VM/LXC 自動判斷建議
- 反向代理規則表單抽成共用 Modal,資源詳情進階設定可直接管理網址
- teacher-judge: unify rubric polish workflow
- placement 模板節點約束——申請只落在拿得到模板的節點
- teacher-judge: refine session rubric ownership and AI workspace
- frontend: wire student home to live course data
- course: connect student courses to teaching classes
- teaching: add live classroom resource usage
- docs: add multi-machine practice environment design proposal
- 範本政策(密碼/GPU)、icon 與使用手冊附件、克隆體驗改版
- frontend: add classroom resource heatmap
- navigation: route users to role-specific teaching entry points
- teaching: add guided class setup workflow
- dashboard: add teacher and admin home workflows
- student: focus courses on tasks and scheduled machines
- guide: add contextual student walkthroughs
- student: add course-focused dashboard flow
- course: expose approved AI tasks to students
- teaching: complete class resource governance flow
- GPU 申請支援 vGPU mdev profile 與 SR-IOV 容量計算
- 配額上限支援 0=無限制(不執法)
- 申請表單依範本規格帶入預設值與磁碟下限
- Windows 範本支援 cloud-init 重設與帳號欄位調整
- 克隆機隨機登入密碼與轉範本前 cloud-init 重設
- frontend: 審核頁加「已過期」分頁
- frontend: 申請列表與審核頁顯示已過期狀態
- scheduler: 把申請逾時過期掛進 run_scheduler tick
- vm-request: 加逾時申請自動過期的協調 service
- vm-request: 加逾時申請查詢與過期標記的 repository 函式
- vm-request: 新增 expired 狀態與 vm_request_expired 稽核動作
- frontend: IP 管理移至系統管理並補回子網設定表單
- 支援多組獨立 PVE 連線(多 node/多叢集)
Fixes
- review pass over the template and audience work
- frontend: 頁面留白歸零斷點跟進 1024px
- ai-pve: resume confirmations and align request timeout
- ai-pve: support optional targets and hot reload
- ci: merge remaining alembic heads
- teacher-judge: avoid polynomial regex backtracking
- remove duplicate quick practice unique constraint
- teacher-judge: update pin icon and rename refactor action
- 補上 placement 測試對 allowed_template_nodes_for_request 的 mock
- migration 改用 DROP INDEX IF EXISTS,乾淨資料庫不再因索引不存在而失敗
- 範本克隆 vGPU 規格預設帶入最小可建立規格,無可用時顯示記憶體不足
- 管理功能路由與側欄項目僅 admin 可見,學生無法直達管理頁
- LXC 克隆啟動後套用使用者自訂密碼,Course Lab 沿用範本內建帳密
- VMID 僅對管理員/老師顯示,學生介面隱藏
- icon 本地預覽改為檔名顯示,斷開 file→objectURL→src 資料流
- icon URL sanitizer 的 blob 分支改嚴格 regex 驗證
- 範本 icon XSS 防護(CodeQL js/xss-through-dom)
- 修復上游 CI——migration 樹收斂與 ReDoS
- 修正上游合併後遺症
- teaching: preserve structured capacity issues
- security: sanitize capacity preview errors
- security: prevent class exception detail exposure
- 稽核操作者歸屬、AI 上游錯誤回 502 與側欄無障礙名稱
- init 快照撞 qmstart config lock 時重試
- 重建 teaching/access.py 修復資源詳情 500
- frontend: createSessionId fallback 改用 crypto.getRandomValues
- models: proxmox_nodes.connection_id 外鍵補上名稱與 ondelete=CASCADE
- jobs: 過期申請不再靜默顯示成等待中
Performance
- frontend: buffer classroom heatmap updates
Documentation
- document multi-machine environment status
- ux: add student flow audit and demo
- 補 VM 申請逾時自動過期的實作計畫
- 補 VM 申請逾時自動過期的設計
- 補 IP 管理子網設定表單的設計與實作計畫
Maintenance
- templates: templates can no longer require a GPU
- templates: trim non-essential fields from the VM-to-template form
- course-env: drop the unused multi-machine environment code
- frontend: course-operations 依頁面拆分子資料夾
- frontend: 主題色修正與按鈕漸變預設
- course-operations: 班級管理列表改版與資料夾清理
- 空狀態極簡化——移除說明文字、垂直置中並放大
- AiPve/TeacherDashboard/CourseCms 改用共用頁首與空/載入狀態
- 各頁面表格抽共用、色彩全面 token 化與 overlay 歸位
- 共用元件色彩 token 化與濾鏡/層級歸位
- course-operations 家族全面歸隊全站設計系統
- 樣式基礎建設——五色制 token、共用 mixin 與規範修訂
- 側欄首頁一律顯示「首頁」,不再依角色改名
- 移除 RoleDashboardPage,首頁改由路由層依角色分派
- 頁面容器統一改為滿寬,STYLE_GUIDE 新增頁面版面規範
- Admin/Teacher 首頁 SCSS 由單行壓縮展開為多行格式
- 移除舊版 DashboardPage,StudentHomeNewPage 改名 StudentHomePage
- 舊前端文案「Root 密碼」統一改為「密碼」
- migration 移除 teacher_judge_sessions.selected_file 殘留 unique 索引,對齊 model 定義
- ui: 抽取共用 LoadingState 元件並整理介面文案
- frontend: remove demo-only data and flows
- frontend: stabilize local demo tooling
- frontend: 全站空狀態統一改用共用 EmptyState 元件
- 移除 script deploy 功能與 AI 範本 capability catalog,整理頁面結構
2026-07
Features
- update practice template design documentation with new usage rules and service whitelist
- update course label to indicate informal status in sidebar navigation
- add practice template design documentation for n8n and Database environments
- add migration scripts for reconciling and restoring resource-execution markers
- update teaching panel label to indicate informal status
- simplify template visibility logic and remove group ID handling from templates
- add position coordinates to course environment nodes and update related services
- update default values for course environment edges and enhance validation
- add course environment management and class capacity reservation services
- teaching-classes: add batch-job index for teaching class machine nodes
- classroom: enhance presence and session management
- teaching-classes: implement teaching class orchestration features
- implement course template management with local storage integration
- add course template management and editor pages
- vllm: add LiteLLM migration scaffolding
- Integrate start and end date props in AvailabilityPanel and update related logic
- Add credential reminders for VM and LXC configurations in request forms
- Extend availability period to 90 days across VM request schemas and services
- Enhance AI recommendation system with form context and scheduling options
Fixes
- restore template and course environment saves
- 補回側邊欄權限群組過濾
Maintenance
- replace groups with formal classroom workflows
- update terminology from "環境模板" to "課程環境" across multiple components
- enhance class management and template editor UI for better usability
- update course template management and editor pages for improved clarity and functionality
- Remove auto advice feature and related styles from RequestFormPage
2026-06
Features
- frontend_new: access token 到期前自動以 refresh token 續期
- add AI template recommendation service with chat, recommend, and usage tracking methods
- enhance VM request and resource schemas with new status handling
- 新增VLLM設定的monkeypatch函數以支援測試
- 更新模型匯入,新增教師評分檔案相關類型
- 擴展VM請求狀態,新增provisioning和running狀態,更新相關類型和元件
- 更新AI評分管理功能,新增評分表、收集腳本與腳本執行的管理介面
- add teacher judge file upload and analysis types, endpoints, and tests
Fixes
- frontend-old: polyfill crypto.randomUUID for HTTP non-secure context
- nginx: /old/ 將 set 移到 rewrite 之前避免 uninitialized variable 500
- frontend-old: 修正部署在 /old/ subpath 下載入失敗
- nginx: 將 proxy_pass 改為 runtime DNS 模式避免 startup emerg
- ci: 修正 deploy-pve-test 觸發條件與 runner 標籤對應實際環境
- restore _migrate_request_to_desired_node re-export in coordinator
- resolve all 179 CodeQL code-quality findings (maintainability + reliability)
- ci: 修正 PR #166 四項失敗檢查
- security: 修正 GitHub Security 全部開放警示
- resolve ruff import sorting errors
- 刪除執行中資源前確實停機,並禁止取消已開通的 VM 請求
- 修復安全性與併發問題(12 處)並補上回歸測試
- 更新biome自動修正工作流程以正確處理鎖定檔和推送邏輯
- 更新依賴安裝步驟以移除鎖定檔,確保在Linux環境中正確解析
Maintenance
- polyfills: if 條件壓回單行配合 Biome formatter
- deps: bump the uv group across 2 directories with 2 updates
- 更新所有相依套件到最新版
- AvailabilityPanel: update date range selection logic and remove time pickers
- clean up import statements in capability_catalog, recommendation_service, vm, and test_template_intent_flags
- deps: bump the npm_and_yarn group across 2 directories with 1 update
2026-05
Features
- normalize VMRequest status and update frontend assets
- 支援孤兒 VM 清理、SSH PTY 互動式部署及前端多項改善
- create migration to enforce unique index on ai_api_credentials.api_key_prefix
- drop legacy NAT unique constraint and update VMID handling in models
- remove obsolete cleanup relations migration file
- enhance Proxmox and VM request models with new configurations and properties
- Refactor VM ID handling and improve logging in provisioning and tunnel proxy services
- Enhance ProxmoxStorage and ScriptDeployLog models with foreign key constraints
- Add resource_vmid field to multiple models and update related logic
- Normalize resource relationships and enhance database constraints
- frontend_new: add AI management page
- frontend_new: add batch review page
- frontend_new: add AI monitoring page
- frontend_new: add jobs overview page
- frontend_new: add IP management page
- frontend_new: add GPU management page
- dashboard: redesign quick start with course cards and template gallery
- add persistent dismiss to session warning dialog
- make expiry_warning_hours admin-configurable
- add batch_job_id to resources and fix group VM behavior
- desktop+backend: expiry warnings on desktop client + personal status mapping
- add current request strategy documentation for VM/LXC applications
- add window availability request handling and response models for VM/LXC applications
- add comprehensive analysis of existing AI features and user experience in Campus Cloud
- enhance quick template request handling and logging improvements
- implement quick template request mode for VM/LXC applications
- web: warn students 24h before VM expiry
Fixes
- 修正 Windows 本機開發 WebSocket WinError 121 問題
- 後端重啟時清理殘留的 running 部署任務
- address copilot review feedback
- frontend: satisfy biome checks
- backend: unwrap AI monitoring user rows
- address Copilot review feedback
- desktop: fix LogController missing replies and add persistent warning dismiss
- biome format and declare vm_requests window indexes in model
- add resource_extend_session to AuditAction enum
- 有排程的批量建立資源預設不自動開機
- improve code readability by formatting multiline statements in ApplicationRequestPage and vite.config
Maintenance
- 連同 package-lock.json 一起刪除,避免 bun 從舊 lockfile migrate
- deps: bump the npm_and_yarn group across 3 directories with 2 updates
- deps: bump idna in the uv group across 1 directory
- frontend_new: wire admin pages into sidebar
- frontend_new: refine shared UI helpers
2026-04
Features
- frontend: add quick-start helpers and refine create flows
- 新增工作類型 "deletion" 至 JobKind
- VM 刪除背景化 + 排程超時警示
- rewrite desktop client as Electron + Vue 3 and wire download flow
- script-deploy: 持久化部署 log 並提供 admin 檢視頁
- add batch VM operations (start, stop, shutdown, reboot, reset, delete)
- enhance VM migration job handling and user deletion
- implement persona presets and resource baselines for improved recommendation accuracy
- enhance ConnectionDialog to include admin role checks for gateway configuration
- add cancel functionality for VM requests
- add query keys for API requests and implement resource payloads
- Implement network services for Gateway VM management
- Add pre-launch checklist and completeness assessment for VM placement system
- Enhance VM request review and migration job management
- enhance storage management and placement logic for VM requests
- enhance VM request review functionality with new context and migration fields
- enhance VM request handling with overlapping window checks and improved placement logic
- restrict VM request and application access to student users only
- enhance availability request logic and improve slot selection handling
- implement VM request provisioning updates and enhance request review process
- normalize placement strategy to priority dominant share across configurations and update related components
- add VM request availability feature with frontend and backend integration
- redesign admin/proxmox as 3-tab layout with node/storage management
- add node/storage CRUD and sync-now endpoints to proxmox-config API
- update proxmox_node repo with merge-based upsert and update_node
- update proxmox schemas with NodeUpdate, StoragePublic/Update, SyncNowResult
- add ProxmoxStorage repository
- add ProxmoxStorage model and migration
- add priority field to ProxmoxNode model and migration
- add Redis-based rate limiting for AI API requests
- Enhance resource management by adding support for LXC and VM types, improving analytics, and refining UI elements
- Add VM quantity support and expand template functionality in simulator
- implement AI API key authentication dependency and add test database fixtures
Fixes
- ci: ruff organize imports on test_recurrence
- address copilot review feedback
- ci: biome organize-imports + format on groups detail
- ci: align FK ondelete + drop duplicate BatchJob TS types
- ci: merge alembic heads + biome formatting
- frontend: align job/resource types after ntubclass merge
- frontend: adjust OpenAPI TOKEN typing for audit log export
- rewrite admin migration jobs route with UTF-8 encoding
- network: allocate static IP for service-template LXC deploys
- vm-request: auto-run service template install script on approval
- pass count to delete confirmation title i18n interpolation
- add node.id None guard in check_nodes; use saved_storages count in sync-now
- use getNodes (GET) instead of checkNodes (POST) in useQuery
- move HTTPException to top-level import in proxmox_config routes
- update upsert_nodes docstring to include is_online and last_checked
- add session.flush() in upsert_storages consistent with proxmox_node pattern
- add range validation ge=1, le=10 to ProxmoxNode.priority
Documentation
- Add backend future directions and maintenance guidelines
Maintenance
- deps: bump follow-redirects
- deps: bump pytest in the uv group across 1 directory
- enhance AI API approvals page with improved layout and data table integration
- update user roles in API routes and components for better access control
- update signup flow and layout components
- deps: bump the npm_and_yarn group across 2 directories with 1 update
- deps: bump cryptography in the uv group across 1 directory
- deps-dev: bump the npm_and_yarn group across 3 directories with 1 update
2026-03
Features
- Add monthly analytics page and resource allocation logic documentation
- Initialize PVE Resource Simulator with FastAPI and frontend
- enhance recommendation and resource options services with async improvements and new disk size rules
- implement AI API request and credential management
- remove deprecated template recommendation configuration file
- enhance AiChatPanel with improved message handling, UI adjustments, and plan integration
- add PVE advisor module with recommendation service and AI integration
- add application request page and routing
- enhance AiChatPanel with quick prompts and input hint; update CreateVMRequest for hostname normalization
- add AI chat panel and integrate AI recommendation features
- Implement AI template recommendation service
- implement chat prompt building functions for AI infrastructure consultation
- add Proxmox templates service and resource options service
- Implement AI-based PVE Placement Advisor service
- Implement AI Log Analytics service with analysis and explanation features
- add resource management and recommendation services
- add ChatBox and MessageBubble components for enhanced chat functionality
- add WebGL support to terminal and VNC proxies, increase scrollback buffer
- add resource management services including resource listing, control, deletion, and configuration updates
Fixes
- update greeting instructions and refine dual-mode rule for clarity
2026-02
Features
- implement encryption and decryption for VM request passwords
- implement My Resources feature to list user-owned resources
- add CreateVMRequest component for resource application
Fixes
- remove Applications item from admin sidebar menu
- update hostname field validation to use regex for better accuracy
- update revision ID in migration and enhance VM request validation