credential 填入形態不統一(json_blob vs 字串)→ 統一成散裝欄位+自動組裝 #6

Open
opened 2026-07-05 07:20:54 +00:00 by Leo · 1 comment
Owner

問題:credential 填入形態不統一,違「單一方法」+ 攻打 low-code 用戶

現況auth-recipe-seeds.ts 裡 google service_account 類 recipe 的 required_secretstype: json_blob(label「Service Account JSON 整份貼上/下載」),但 notion/telegram 等是單一字串。同樣「填 credential」卻兩種形態——有的填一格、有的要用戶去 GCP 下載整份 JSON 貼上。

為什麼是缺陷

  • 違「credential 統一填入」鐵律(InkStoneCo D25,2026-07-05 leo 拍板):credential 只該有一種方法——.env/界面填欄位,程式讀環境變數自動組裝。
  • 攻打 low-code 用戶:SA 值其實只是 private_key+client_email 兩個欄位(用戶 .env 本就有),卻要求「上傳整份 JSON」。實測連 AI 都得寫腳本把散裝值組成 JSON 才填得進去,low-code 用戶做不到。

正解

  1. SA 類 recipe 的 required_secretsjson_blob 改成散裝欄位private_key / client_email,其餘如 token_uri 用程式預設值)。
  2. acr creds push / credential 寫入路徑照 recipe 的 required_secrets 欄位定義自動組裝(該組 JSON 的組 JSON),用戶只丟 .env/界面有的值。
  3. 消除「上傳檔案」這條路——一律填欄位。

驗收:用戶只在 .envprivate_key+client_emailacr creds push → google_sheets_sa workflow 注入成功,全程無「下載/貼上 JSON 檔」步驟。

呼應 arcrun 既有「外部 API 只有一條一致的路」原則(兩種寫法=bug,收斂成一條)。

## 問題:credential 填入形態不統一,違「單一方法」+ 攻打 low-code 用戶 **現況**:`auth-recipe-seeds.ts` 裡 google service_account 類 recipe 的 `required_secrets` 定 `type: json_blob`(label「Service Account JSON 整份貼上/下載」),但 notion/telegram 等是單一字串。**同樣「填 credential」卻兩種形態**——有的填一格、有的要用戶去 GCP 下載整份 JSON 貼上。 **為什麼是缺陷**: - 違「credential 統一填入」鐵律(InkStoneCo D25,2026-07-05 leo 拍板):credential 只該有一種方法——`.env`/界面填欄位,程式讀環境變數自動組裝。 - 攻打 low-code 用戶:SA 值其實只是 `private_key`+`client_email` 兩個欄位(用戶 `.env` 本就有),卻要求「上傳整份 JSON」。實測連 AI 都得寫腳本把散裝值組成 JSON 才填得進去,low-code 用戶做不到。 **正解**: 1. SA 類 recipe 的 `required_secrets` 從 `json_blob` 改成**散裝欄位**(`private_key` / `client_email`,其餘如 `token_uri` 用程式預設值)。 2. `acr creds push` / credential 寫入路徑照 recipe 的 `required_secrets` 欄位定義**自動組裝**(該組 JSON 的組 JSON),用戶只丟 `.env`/界面有的值。 3. 消除「上傳檔案」這條路——一律填欄位。 **驗收**:用戶只在 `.env` 填 `private_key`+`client_email` → `acr creds push` → google_sheets_sa workflow 注入成功,全程無「下載/貼上 JSON 檔」步驟。 呼應 arcrun 既有「外部 API 只有一條一致的路」原則(兩種寫法=bug,收斂成一條)。
Author
Owner

擴充(leo 拍板北極星鐵律,2026-07-05):不只散裝欄位,還要 GUI/明碼檔為主

原 issue 講「json_blob → 散裝欄位」是對的,但只是最小修。leo 把層級拉到 low-code 用戶體驗,填入方法有硬優劣排序:

排序 方法
最優 GUI(Mira credential 界面點填)
次之 一個明碼(非隱藏)文字檔要用戶填(打開資料夾看得到、看得懂)
最糟 方法好幾種 / CLI / 藏成隱藏檔

關鍵洞.env 對 low-code 用戶太難——它是隱藏檔,OS 預設不顯示,用戶打開資料夾看不到、不懂怎麼叫出隱藏檔、不知道去哪填。「藏成 .env」是開發者安全直覺,對 low-code 用戶是障礙。

正解(本 issue 範圍擴大)

  1. 散裝欄位(原 issue):SA 從 json_blob → private_key + client_email,程式自動組裝。
  2. 明碼檔非隱藏:credential 填入檔用 credentials.yaml / my-secrets.yaml 這種. 開頭、看得見的檔名,安全靠 .gitignore 擋(用戶自己電腦不外洩就夠),不靠藏成隱藏檔。
  3. GUI 為主入口:Mira credential 界面是最優路徑,CLI/檔案是退路。
  4. 一種方法:所有 credential 同一種填法,禁形態分歧(json_blob vs 字串 vs 上傳檔)。

驗收:low-code 用戶(不懂 CLI、不懂隱藏檔)能只靠「Mira 界面點填」或「打開一個看得見的檔案填幾個值」完成任一 credential,全程無「下載 JSON / 叫出隱藏檔 / 跑命令」。

依據:InkStoneCo D25 + 北極星「low-code 用戶入口永遠是丟網址/一句話給 AI」+「攻打 low-code 用戶」鐵律。

## 擴充(leo 拍板北極星鐵律,2026-07-05):不只散裝欄位,還要 GUI/明碼檔為主 原 issue 講「json_blob → 散裝欄位」是對的,但只是最小修。leo 把層級拉到 low-code 用戶體驗,填入方法有硬優劣排序: | 排序 | 方法 | |------|------| | **最優** | GUI(Mira credential 界面點填) | | **次之** | 一個**明碼(非隱藏)文字檔**要用戶填(打開資料夾看得到、看得懂) | | **最糟** | 方法好幾種 / CLI / 藏成隱藏檔 | **關鍵洞**:`.env` 對 low-code 用戶太難——它是**隱藏檔**,OS 預設不顯示,用戶打開資料夾看不到、不懂怎麼叫出隱藏檔、不知道去哪填。「藏成 .env」是開發者安全直覺,對 low-code 用戶是障礙。 **正解(本 issue 範圍擴大)**: 1. **散裝欄位**(原 issue):SA 從 json_blob → private_key + client_email,程式自動組裝。 2. **明碼檔非隱藏**:credential 填入檔用 `credentials.yaml` / `my-secrets.yaml` 這種**非 `.` 開頭、看得見**的檔名,安全靠 `.gitignore` 擋(用戶自己電腦不外洩就夠),不靠藏成隱藏檔。 3. **GUI 為主入口**:Mira credential 界面是最優路徑,CLI/檔案是退路。 4. **一種方法**:所有 credential 同一種填法,禁形態分歧(json_blob vs 字串 vs 上傳檔)。 **驗收**:low-code 用戶(不懂 CLI、不懂隱藏檔)能只靠「Mira 界面點填」或「打開一個看得見的檔案填幾個值」完成任一 credential,全程無「下載 JSON / 叫出隱藏檔 / 跑命令」。 依據:InkStoneCo D25 + 北極星「low-code 用戶入口永遠是丟網址/一句話給 AI」+「攻打 low-code 用戶」鐵律。
Leo added the
s
backlog
label 2026-08-09 13:13:16 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Leo/Arcrun#6