Skip to content

chore: sync main into dev after Atlas release - #5

Merged
frobel0520 merged 14 commits into
devfrom
feature/integration-03-sync-dev
Sep 25, 2026
Merged

frobel0520 merged 14 commits into
devfrom
feature/integration-03-sync-dev

Conversation

@frobel0520

Copy link
Copy Markdown
Owner

將已發布的 main 合併回 dev,消除兩分支的歷史分歧。三個同名 SDLC 文件的 add/add 衝突採用 main 較新的版本;合併後工作樹與 main 完全一致,並保留 dev 既有導覽提交的歷史。驗證:git diff origin/main 為空;PR CI 待確認。

frobel0520 and others added 14 commits September 15, 2026 22:47
- 在 frontend/index.html 的 <head> 加入 Harbor 前端腳本,data-project=ai-agent-tutorial
- 維護模式開啟時顯示全螢幕維護畫面;有公告時顯示可關閉的底部公告列
- Harbor 連不上或逾時 800ms 時頁面照常顯示,最慢 1.5 秒一定出現

驗證:Harbor 端以測試頁實測五種情境通過(見 Harbor docs/03 ADR-010)。
- SEC-QA-01:webhook 管理與事件查詢改為需登入且在 dify_access 名單;目的地限 WEBHOOK_ALLOWED_URLS 的精確 HTTPS 網址,每次送出重新檢查、禁止 redirect
- SEC-QA-02:Dify user 改用驗證後的 Supabase UUID;新增 Postgres 原子計數的全域/每帳號限流(migration 20260909000000),超額回 429 + Retry-After,限流不可用時回 503
- SEC-QA-03:React Error Boundary、401/403/429 錯誤訊息、Playwright smoke test
- CI:新增 frontend(build + smoke)與 deno-api(Postgres 17 service)job
- docs:SA/SD 更新權限矩陣,新增 ADR-006、ADR-007

修正 bug:consume_api_rate_limit 在計數達上限後停止累加,但判斷式是 request_count <= p_limit,導致永遠放行。改成超額時計數推到 p_limit + 1 後停住(check 約束同步放寬到 1000001),並新增 rate_limit_test.ts 以真實 Postgres 重現:上限 3、呼叫 5 次,修正前全部放行,修正後第 4、5 次拒絕。

驗證:本機 Postgres 18 已確認重現與修正;npm run build 通過;Deno 測試與 Playwright smoke 待 CI 執行。待辦:錯誤 HTTP 方法回 503、前端 422 不顯示原因、WEBHOOK_ALLOWED_URLS 未寫入部署文件。
GitHub Actions 的 job 層級 if 不支援 hashFiles(),整個 ci.yml 因此被判定為無效,PR #2 的 CI 完全沒有執行(錯誤:Unrecognized function: 'hashFiles',Line 47)。現在已有 rate_limit_test.ts,這個條件不再需要,直接移除。

驗證:本機無法執行 Actions,push 後由 PR #2 的 CI 確認。
askDify 在同一個 scope 宣告了兩次 const result,deno check 報 TS2451;在執行期這也是 SyntaxError,整個 Edge Function 會載入失敗、所有路由都無法使用。改為直接解構 executeDifyRequest 的 question 與 data。

驗證:esbuild 解析修正前報「result has already been declared」、修正後通過;完整型別檢查由 PR #2 的 deno-api job 確認。
vite.smoke.config.js 沒有設定 base,smoke build 產出的資源路徑是 /assets/...,但 serve-dist.mjs 只服務 /smoke/ 底下的路徑,JS 與 CSS 全部 404、頁面空白,三個 smoke test 都找不到標題。改成 base: "./",與正式 build(vite build --base ./)一致。

驗證:重新 build 後 index.html 與 tests/error-boundary.html 的資源都是相對路徑,/smoke/ 底下 4 個資源皆回 200;瀏覽器實測主頁標題與導覽列、Error Boundary 標題與重新載入按鈕都有顯示,錯誤細節未外露。Playwright 本身由 PR #2 的 frontend job 確認。
同一則錯誤訊息會同時出現在全域狀態列與 WebHook 結果框,getByText 對到兩個元素,Playwright strict mode 判定失敗(CI 3 passed / 1 failed)。改為直接斷言 #webhookResult 的完整文字,同時更精準驗證是該操作的結果。

驗證:瀏覽器以 smoke build 模擬 401、403、429,#webhookResult 文字與預期完全相符、三次請求都帶 Bearer token、後端 detail 未外露;Playwright 由 PR #2 的 frontend job 確認。
- rateLimitRouteKey 移到 security.ts;組合不在 consume_api_rate_limit 允許清單時退回 <METHOD>:other,路由層才能照常回 404/405
- 新增 RATE_LIMIT_ROUTE_KEYS 與 security_test.ts:檢查集合與 migration 清單一致,且 6 種方法 × 13 種路由都產生資料庫接受的 key

修正 bug:GET /ask、PUT /webhooks、PATCH /notes/1 等 78 種組合中有 35 種產生 SQL 允許清單外的 key,RPC 丟錯後被當成限流不可用回 503。

驗證:esbuild 轉譯後以 Node 跑同一組檢查,修正前 35 種被拒、修正後 0;Deno 測試由 PR #2 CI 執行。
- 422 且 detail 為 200 字內字串時顯示原因;結構化 detail(如 FastAPI 陣列)只顯示通用訊息
- 新增 413 訊息;401/403/429 與其他狀態維持不揭露後端 detail
- smoke test 新增 422 兩種情境

驗證:npm run build 通過;瀏覽器以 smoke build 模擬 422 字串、422 陣列、413,#noteResult 皆符合預期、陣列內容未外露;Playwright 由 PR #2 CI 執行。
- 兩份部署文件加上一律執行 20260909000000_add_edge_rate_limit.sql(schema.sql 未包含)
- 補上 WEBHOOK_ALLOWED_URLS 的格式與留空時的行為
- 註明 push 到 main 會自動部署 Edge Function 但不跑 migration,含 migration 的 PR 進 main 前要先手動執行

驗證:文件描述對照 security.ts 的 URL 規則與 supabase-functions.yml 的觸發條件。
- 沒有設定 API 網址的 Pages build(非本機)視為線上 API 已停用:頁首、hero、側欄顯示停用說明與本機啟動方式,不再自動打 /health、/notes
- README 開頭與「上線部署」註明 Supabase 專案已移除、目前未部署,Supabase 程式與部署文件保留供重建
- 重新設定 SUPABASE_* variables 後停用提示會自動消失,不需改程式

驗證:npm run build 通過;以 127.0.0.2 模擬無 API 網址的 Pages build,停用提示只出現一次、hero 不再要求確認 Edge Function 部署、頁面載入零次 API 請求;本機與 smoke build 行為不變,Playwright 由 PR #2 CI 執行。
- 目前狀態:記錄 2026-09-21 Supabase 專案已刪除、線上後端退役,Pages 只顯示停用說明;補上 SEC-QA 強化、SDLC 基線文件、Harbor 維護畫面
- Supabase、Edge Function 自動部署標為暫停;Render 殘留服務已於 09-21 關閉
- 下一步改為「要恢復線上 demo 時」的重建步驟;正式環境設定標為重建時才需要
@frobel0520
frobel0520 merged commit 086501c into dev Sep 25, 2026
3 checks passed
@frobel0520
frobel0520 deleted the feature/integration-03-sync-dev branch September 25, 2026 03:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant