跳轉到

D-20260731-03|部署 profile 選擇與測試鏈隔離

背景與驅動力

單一 deployment-values.json 需要人工改寫 stage 與端點;舊 check:deployment --stage 只覆寫檢查時看到的 stage,未保證檢查對象就是 bundle 實際嵌入的設定。拆分 profile 後, private-playtest 雖有真 ledger、signer 與 bootstrap 的硬閘,仍需防止測試鏈誤用 public bootstrap、signaling 或 pinning 基礎設施。

考慮過的選項

  • 維持單檔並由 CLI 暫時覆寫 stage:無法證明被驗證值與 bundle 相同,否決。
  • private-playtest 強制端點非空:GossipSub 或其他受控拓撲可不依賴所有選配服務,過度收緊, 否決。
  • 三份唯讀 profile,加上 private 非空端點格式驗證與跨 profile 隔離(採納)。
  • 放寬 private 的 ledger、signer 或 bootstrap:與 D-20260713-01 的真實多人測試定位衝突, 否決。

決定

  • developmentprivate-playtestpublic 各自持有一份 checked-in deployment values; build 透過明示 configuration 選入唯讀 profile。
  • check:deployment --profile <name> 必須直接載入該 profile,且檔案內 stage 必須等於 選取名稱;不得再用命令列覆寫 stage。
  • private-playtest 保留正式 ledger、至少一位 signer 與至少一個 bootstrap 的既有硬閘。
  • private 的 signalingUrlspinningUrls 可為空;一旦有值,分別必須是無 credential、 path、query、fragment 與 placeholder host 的 wss:https: base origin。
  • private 與 public 的 bootstrapNodessignalingUrlspinningUrls 經 multiaddr/URL canonical normalization 後不得有交集。private gate 必須載入 checked-in public profile 比對,public profile 無法載入時 fail closed。
  • legalAgentContact 仍只屬 public release policy。

後果與影響

開發者不再為切換環境改寫同一份設定;release gate 與 bundle 使用同一 profile。測試鏈仍 可不配置選配 endpoint,但不能靜默連到正式服務,避免測試房間進入正式 signaling 或測試 CID 被送進正式 pinning。新增 public 基礎設施時,也必須同步通過 private/public 隔離 gate。