對齊 ADR-016 / conversion.md v0.6.1 §3.1:visionA 端不再需要 FAA 設定(v0.5 T1 加的 FAAAPIKey/FAABaseURL 撤回)。
config 砍除:
- internal/config/config.go: ConversionConfig.FAABaseURL + FAAAPIKey 兩欄位
- internal/config/load.go: VISIONA_FAA_BASE_URL + VISIONA_FAA_API_KEY 兩 env 讀取
- Enabled() 簡化為「ConverterBaseURL + ConverterAPIKey 兩個非空」
- internal/config/load_test.go: TestLoad_ConversionEnabled 從 6 case 簡化為 4 case (all_set / missing_converter_url / missing_converter_key / all_empty)
.env*.example 對齊(3 個檔):
- visionA-backend/.env.example: 砍 2 個 FAA env row + 註解;header 改「2 欄位啟用」
- .env.stage.example: 同上;VISIONA_CONVERTER_API_KEY 保留 CHANGE_ME_OPENSSL_RAND_HEX_32 placeholder
- .env.dev.example: 註解區塊統一對齊
T3 review polish:
- m-2 internal/api/conversion.go: i18n message map 砍 4 個 dead case (download_token_failed / mc_token_unavailable / idp_misconfigured / idp_unavailable) — 對應 v0.5 mc_token_client 撤回時砍的 sentinel;落入 default「內部錯誤」、行為不變
- m-3 internal/conversion/util.go: hashObjectKey godoc 補「設計約束(重要)」段 + 3 條「不應做的事」(不出現在 response body/header / 不組 URL / 不寫進 user-facing 錯誤訊息)— 明示用途限定於 slog 欄位內、避免 misuse vector
- cmd/api-server/main.go: godoc 對齊 T4 完成狀態
驗證:
- B 層 verification 主動跑(T3 reviewer 接受暫緩、backend 主動跑避免 reviewer 二次要求):
* 跨檔 grep: production code 0 functional 命中(殘留全是註解 audit trail / test fixture name)
* 17 packages race -count=3 全綠
* 3 個 .env 環境一致性驗證
- go build ./... exit 0
- go test -race -count=3 ./... 17 packages 全綠
- Reviewer 5 軸(v0.6-t4-review)✅ 通過(0 Critical / 0 Major / 2 Minor / 4 Suggestion)
v0.6 對齊改造事實上完工:
- T1 ConverterClient.GetResult method
- T2 flow.go DownloadStream/PromoteToModels 改用 GetResult + e2e endpoint
- T3 faa_client 整檔砍 + ErrFAA* sentinel 清 + s-3/s-4/s-5 必補 + mockFAA regression-only
- T4 config FAA 欄位砍 + .env 清 + i18n/godoc polish
main.go startup log 已是「converter_api_key_set only」、無 FAA 殘留 / 無 tenant_id(T2-T3 已處理)。e2e regression 防護由 mockFAA negative assertion 守住(T3)。
下一步:
- visionA backend 端 ADR-016 對齊完工,等使用者跨 repo 加 converter GET /api/v1/jobs/{id}/result endpoint
- stage redeploy + e2e 完整測試
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
100 lines
4.3 KiB
Plaintext
100 lines
4.3 KiB
Plaintext
# visionA dev 環境變數範本
|
||
#
|
||
# 使用方式:
|
||
# cp .env.dev.example .env.dev
|
||
# # 編輯 .env.dev,填入 OAuth client_id / client_secret(手動 seed 後產生)
|
||
# docker compose -f docker-compose.dev.yml --env-file .env.dev up -d
|
||
#
|
||
# 詳細步驟:見 docs/DEV-SETUP.md
|
||
#
|
||
# ⚠️ 不要 commit .env.dev(已在 .gitignore 中排除)
|
||
|
||
# ============================================================
|
||
# Member Center
|
||
# ============================================================
|
||
# 預設用 ../member_center 路徑 build。如果你的 member_center 在別處,改這個。
|
||
# 例:MEMBER_CENTER_PATH=/Users/me/code/member_center
|
||
MEMBER_CENTER_PATH=../member_center
|
||
|
||
# Member Center admin 帳號(installer init 會建立)
|
||
# 之後可用這組帳密登入 MC admin UI / 拿 admin API token
|
||
MC_ADMIN_EMAIL=admin@visiona.local
|
||
MC_ADMIN_PASSWORD=Admin12345!
|
||
|
||
|
||
# ============================================================
|
||
# visionA OIDC client(必須先在 MC 註冊,詳見 docs/DEV-SETUP.md)
|
||
# ============================================================
|
||
# 第一次起來時這兩個值還沒有 → 先用 static auth 跑(VISIONA_AUTH_TYPE=static)
|
||
# OAuth client 註冊完後填入這兩個值 + 改 VISIONA_AUTH_TYPE=oidc → docker compose up -d 重啟
|
||
VISIONA_OIDC_CLIENT_ID=CHANGE_ME
|
||
VISIONA_OIDC_CLIENT_SECRET=CHANGE_ME
|
||
|
||
# Phase 0.8b 移除:VISIONA_OIDC_SERVICE_CLIENT_ID / _SECRET
|
||
# 服務間認證(visionA → converter / FAA)改 pre-shared API key(ADR-015);
|
||
# 不再走 OAuth client_credentials grant,所以 dev 也不需要 service client。
|
||
# 取代設定見下方 Phase 0.8 / 0.8b conversion 區塊。
|
||
|
||
# auth mode 切換:static(雛形預設)/ oidc(接 MC)
|
||
VISIONA_AUTH_TYPE=static
|
||
|
||
# OIDC issuer / redirect — 預設值已對齊 MC 的 dev port
|
||
# ⚠️ trailing slash 不可省(MC discovery 回的 issuer 帶 slash,否則 client init 會 reject)
|
||
VISIONA_OIDC_ISSUER_URL=http://localhost:5050/
|
||
VISIONA_OIDC_REDIRECT_URL=http://localhost:3721/api/auth/callback
|
||
|
||
|
||
# ============================================================
|
||
# Cookie / session
|
||
# ============================================================
|
||
# 至少 32 byte 隨機字串(建議:openssl rand -hex 32)
|
||
VISIONA_SESSION_SECRET=please-change-me-32-bytes-random-dev-secret
|
||
|
||
# Frontend URL(OIDC callback 完成後 redirect 回的目標)
|
||
VISIONA_FRONTEND_URL=http://localhost:3000
|
||
|
||
|
||
# ============================================================
|
||
# 既有 visionA-backend 環境變數(與 visionA-backend/.env.example 一致)
|
||
# ============================================================
|
||
VISIONA_LOG_LEVEL=info
|
||
VISIONA_API_PORT=3721
|
||
VISIONA_TUNNEL_PORT=3800
|
||
# Phase 0.7 security audit (2026-05-01) 後僅供 dev seed (VISIONA_SEED_DEMO_DATA=true) 與 unit test fixture 用;
|
||
# 已從 api.Deps 移除(見 .autoflow/05-implementation/review/phase-0.7-security-audit.md C1);
|
||
# stage / prod 不需設定。
|
||
VISIONA_STATIC_USER_ID=demo-user
|
||
|
||
VISIONA_CORS_ALLOWED_ORIGINS=http://localhost:3000
|
||
VISIONA_SEED_DEMO_DATA=true
|
||
|
||
VISIONA_STORAGE_BASE_URL=http://localhost:3721/storage
|
||
# ⚠️ 生產必改:openssl rand -hex 32
|
||
VISIONA_STORAGE_SIGNING_SECRET=dev-signing-secret-change-me-32-bytes
|
||
|
||
# Pairing token(雛形仍用 static;留空則動態配發)
|
||
VISIONA_PAIRING_TOKEN=
|
||
|
||
|
||
# ============================================================
|
||
# Phase 0.8 / 0.8b — 轉檔功能整合(dev 通常不啟用,留空即可)
|
||
# ============================================================
|
||
# 對齊 docs/autoflow/04-architecture/conversion.md §3 + ADR-015 + ADR-016。
|
||
#
|
||
# 2 個欄位(ConverterBaseURL / ConverterAPIKey)全部非空才會啟用 conversion 模組;
|
||
# dev 全空 = sidebar tab 顯示但 endpoint 不註冊。
|
||
# 若要在 dev 連 stage 的 converter 測整合,依 .env.stage.example 模板填入。
|
||
#
|
||
# Phase 0.8b v0.6 T4:原 FAA 相關 env(VISIONA_FAA_BASE_URL / VISIONA_FAA_API_KEY)
|
||
# 已撤回(ADR-016:visionA 端不再直接呼叫 FAA;download / promote 改走 converter.GetResult)。
|
||
#
|
||
# 產生 API key:openssl rand -hex 32
|
||
# VISIONA_CONVERTER_BASE_URL=http://192.168.0.130:9501
|
||
# VISIONA_CONVERTER_API_KEY=
|
||
|
||
# ============================================================
|
||
# 進階:port 衝突時可改
|
||
# ============================================================
|
||
# POSTGRES_PORT=5432
|
||
# MEMBER_CENTER_PORT=5050
|