feat: 啟用 staging 真實轉檔 + 修 ref_images/promote OAuth bug #1

Merged
jim800121 merged 2 commits from feat/real-conversion-worker into main 2026-06-24 20:47:36 +00:00
Collaborator

摘要

讓 staging 轉檔服務從 stub 切成真實轉檔,並修掉 visionA「轉檔 → 進模型庫」鏈路上的兩個 blocker。

背景

visionA 反映 staging 拿到的是 stub 版假 NEF。本 PR 啟用真實轉檔(repo 自帶 ktc + prebuild toolchain),並修正 e2e 過程中發現的問題。

變更

真實轉檔(commit 0cae1b1)

  • services/workers/Dockerfile.real:真實版 worker image,含 ktc + toolchain/prebuild(USE_PREBUILD),WORKER_MODE=real
  • .dockerignore / docker-compose.real.yml:build context 控制 + override(保留 stub 可 rollback)
  • jobService.js ref_images S3 key(jobs/{id}/ref_images/jobs/{id}/input/ref_images/)對齊系統主約定,加 contract guard test
  • 同步 security.md 路徑描述

promote OAuth fix(commit f3f0cf1)

  • oauthClient.js:promote 換 token 從 HTTP Basic 改成 client_secret_post(form body),修 MC 401 invalid_client。根因由 visionA 端實測定位
  • secret 不進 log 約束維持,加防回退測試

驗證

  • 真實轉檔 staging e2e:platform 530 下 onnx→bie→nef 全綠,產真 NEF 636KB(合法 FlatBuffer、非 stub),/result 可拉、結果上 MinIO
  • promote fix:curl MC token endpoint 旁證,新送法(form body)回 200、舊送法(Basic)401
  • scheduler 全套件 666 tests pass
  • ⚠️ 使用約定:呼叫端 platform 必須與模型量化 platform 一致

🤖 Generated with Claude Code

## 摘要 讓 staging 轉檔服務從 stub 切成真實轉檔,並修掉 visionA「轉檔 → 進模型庫」鏈路上的兩個 blocker。 ## 背景 visionA 反映 staging 拿到的是 stub 版假 NEF。本 PR 啟用真實轉檔(repo 自帶 ktc + prebuild toolchain),並修正 e2e 過程中發現的問題。 ## 變更 ### 真實轉檔(commit 0cae1b1) - `services/workers/Dockerfile.real`:真實版 worker image,含 ktc + toolchain/prebuild(USE_PREBUILD),WORKER_MODE=real - `.dockerignore` / `docker-compose.real.yml`:build context 控制 + override(保留 stub 可 rollback) - 修 `jobService.js` ref_images S3 key(`jobs/{id}/ref_images/` → `jobs/{id}/input/ref_images/`)對齊系統主約定,加 contract guard test - 同步 `security.md` 路徑描述 ### promote OAuth fix(commit f3f0cf1) - `oauthClient.js`:promote 換 token 從 HTTP Basic 改成 `client_secret_post`(form body),修 MC 401 invalid_client。根因由 visionA 端實測定位 - secret 不進 log 約束維持,加防回退測試 ## 驗證 - 真實轉檔 staging e2e:platform 530 下 onnx→bie→nef 全綠,產真 NEF 636KB(合法 FlatBuffer、非 stub),/result 可拉、結果上 MinIO - promote fix:curl MC token endpoint 旁證,新送法(form body)回 200、舊送法(Basic)401 - scheduler 全套件 666 tests pass - ⚠️ 使用約定:呼叫端 platform 必須與模型量化 platform 一致 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jim800121 added 2 commits 2026-06-24 20:47:25 +00:00
staging worker 原本跑 WORKER_MODE=stub(假轉檔、產佔位 NEF),visionA 因此反映拿到的是 stub。本次讓真實轉檔上線並打通 onnx→bie→nef 完整鏈路。

新增:
- services/workers/Dockerfile.real:真實版 worker image,COPY repo 自帶 ktc/ + toolchain/prebuild(2GB),設 USE_PREBUILD/LD_LIBRARY_PATH/PYTHONPATH/KTC_DISABLE_MP/WORKER_MODE=real;排除 libs/dynasty+libs/compiler 省 3.2G
- .dockerignore:控制 build context(排除被 USE_PREBUILD 取代的舊系統 binaries)
- docker-compose.real.yml:override 三 worker 改用 registry image,保留 base stub build 供一鍵 rollback

修正(e2e 抓到的兩個問題):
- jobService.js: ref_images S3 key 由 jobs/{id}/ref_images/ 改為 jobs/{id}/input/ref_images/,對齊系統主約定(local.js/legacy.js/bie worker consumer.py),修好 bie 量化抓不到 dataset 的 blocker。加 contract guard test 鎖死寫入 prefix == worker 讀取 prefix
- security.md: 同步 ref_images S3 key 路徑描述

驗證(staging e2e):
- platform 530(與模型相符)下 onnx→bie→nef 全綠,產真 NEF 636KB(合法 FlatBuffer、非 STUB),/result 可拉、結果上 MinIO
- 已知約定:呼叫端 platform 必須與模型量化 platform 一致(配錯會在 bie 量化階段失敗)

scheduler 全套件 667 tests pass。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
promote 流程的 OAuth client 去 Member Center(OpenIddict)換 service token 時
用 HTTP Basic Auth 送 client 憑證,但 MC 只接受 client_secret_post(憑證放 form
body),導致 MC 回 401 invalid_client → promote 拿不到 token 去 FAA PUT → 對
visionA 回 500。根因由 visionA 端實測定位(交接檔 converter-promote-oauth-handoff.md)。

改 apps/task-scheduler/src/auth/oauthClient.js:
- client_id/client_secret 從 Authorization Basic header 移進 form body(既有 body
  上新增、保留 grant_type/scope/audience)
- 移除 Authorization header 與 buildBasicAuthHeader() + _internals export
- 檔頭 design 註解更新為 client_secret_post,避免被改回 Basic

安全約束維持:client_secret 僅進必要 body、絕不進任何 log(既有 "secret never in
log" 測試跑全路徑 grep 驗證、現變成 body 帶 secret 情境的鎖)。

test:oauthClient.test.js 改斷言鎖「headers 無 Authorization + body 含 client_id/
client_secret」防回退。scheduler 全套件 666 pass。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jim800121 merged commit a440600807 into main 2026-06-24 20:47:36 +00:00
jim800121 deleted branch feat/real-conversion-worker 2026-06-24 20:47:37 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: warrenchen/kneron_model_converter#1
No description provided.