visionA/.env.dev.example
jim800121chen 9e29ebf767 feat(visionA-backend): Phase 0.8b v0.6 T4 — config FAA 欄位砍 + .env 清 + i18n/godoc polish
對齊 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>
2026-05-16 19:16:28 +08:00

100 lines
4.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 keyADR-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 URLOIDC 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 相關 envVISIONA_FAA_BASE_URL / VISIONA_FAA_API_KEY
# 已撤回ADR-016visionA 端不再直接呼叫 FAAdownload / promote 改走 converter.GetResult
#
# 產生 API keyopenssl 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