Compare commits

...

7 Commits

Author SHA1 Message Date
Leo 69e0adce1b wiki 那條帳補上牽涉哪些 repo,並記下漏掉的那幾把的共同形狀(inkstone/ISEP#115)
記憶警察(wiki-first-police)抓到的:那條 mistakes 落帳沒有 repo 欄位也沒有三元組
⇒ 下次查「這件事在哪」還是要從頭找。補 4 個 repo 位址 + 4 條三元組。

順帶把 5577/5610 的推廣寫進同一條,因為那兩把不是「忘了寫」而是同一族:
  uncle6 出貨       能力住在 ~/.wrangler 的 OAuth 登入態
  ARCRUN_NS_YOULIN  能力住在 ~/.arcrun 的 api_key
⇒ 能力其實有,只是住在「不會跟著 clone 走」的地方 ⇒ 本機永遠綠、雲端永遠紅,
  而兩邊都不會有人發現,直到某條線做到最後一步要用它。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:00:11 +08:00
Leo 47c73cdaa3 出貨線取座標那兩站也不會斷:ARCRUN_NS_YOULIN 進清單(inkstone/ISEP#115 → comment 5610)
inkstone/Arcrun#195 把實例座標拆成「網址隨 repo 走/namespace 走環境變數」之後,
一台乾淨機器只要有這一個環境變數就取得到座標。而它原本只住在
~/.arcrun/config.yaml 的 api_key——家目錄的東西不隨 repo clone 走,雲端拿不到。

- NEEDED 加 ARCRUN_NS_YOULIN(頂層 .env,長度 8)。清單 9 → 10 把。
- 在清單註解裡把這一族的共同形狀寫下來:**能力其實有,只是它住在
  「不會跟著 clone 走」的地方**——uncle6 是 ~/.wrangler 的 OAuth 登入態,
  這把是 ~/.arcrun。下一個遇到同款的人不必重新發現。
- docs/TESTING.md A26:9 把 → 10 把,狀態表補 5610。

只加這一把。
值全程沒有進版控、沒有進對話(只印名字與長度)。版本號待總管定。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 14:56:43 +08:00
Leo 92a008fd28 定版 v0.20.0(出貨那台帳號的鑰匙也在清單裡了)
leo 2026-09-01:「它出貨雲端部分還要什麼帳密也要給」「需要 uncle6?」
——需要,而且是硬需求。

實查(總管與工人各自打過一次,結果一致):
  installer/ship.targets.json 六處 accountId 去重 → 58309bb90fd93ad6d0fe0aae99170e9d
  用 products/arcrun-rag/.env 的 UNCLE6_CF_API_KEY 打 CF API:
    /user/tokens/verify → success: True, status: active
    /accounts           → 58309bb9… Uncle6.me@gmail.com's Account   一致
  本機 env 沒有 CLOUDFLARE_API_TOKEN;~/.wrangler/config/default.toml 有 oauth_token
  ⇒ 本機出貨靠家目錄的 OAuth 登入態,那個檔不隨 clone 走 ⇒ 雲端拿不到

清單 8 把 → 9 把。

🔴 未知的一格(刻意留在清單註解裡):這把有沒有 Workers Scripts:Edit 沒驗過
——驗它必須寫入。已確認至少有 Read(讀得回 uncle6 的 75 顆 worker)。

🔴 雲端出貨仍然不通,缺的不是憑證:
  · Leo/arcrun-rag-bundles-staging 對 claude-code 是 push:False(stage 釘的就是它)
  · ARCRUN_SHIP_BASE/ARCRUN_SHIP_NS 只住在 ~/.arcrun/config.yaml,不在任何 repo
  · .github-armed 只存在本機根目錄
  三件都是 leo 的裁決,不在本版範圍。

票:inkstone/ISEP#115

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:38:04 +08:00
Leo 1f05bc2134 Merge 'uncle6 那把進雲端清單'(inkstone/ISEP#115) 2026-09-01 12:38:04 +08:00
Leo cb310e9c72 出貨那三站的帳號也進清單:uncle6(inkstone/ISEP#115 → comment 5577)
出貨的 installer/docsSite/mailRelay 三站,stage 與 prod 全部部署到 uncle6
(ship.targets.json 六處 accountId 去重後只有 58309bb90fd93ad6d0fe0aae99170e9d),
而本機是靠家目錄的 ~/.wrangler OAuth 登入態出貨——那個檔不隨 repo clone 走,
所以雲端會在部署當下才斷。UNCLE6_CF_API_KEY 這條路本來就存在且 active,只是沒進清單。

- NEEDED 加 UNCLE6_CF_API_KEY(住在 products/arcrun-rag/.env)。清單 8 → 9 把。
- 清單開頭那段「範圍」跟著改,否則說明與清單本身打架;
  並把「這把有沒有 Workers Scripts:Edit 沒驗」這個未知寫在旁邊,
  下一個讀清單的人不必重新發現它。
- docs/TESTING.md A26:把「清單現在是 8 把」改成 9 把,狀態表補 5577。

只加這一把。stage bundle repo 寫入權與 ARCRUN_SHIP_BASE/ARCRUN_SHIP_NS 沒碰
(comment 5577 明寫那是 leo 的裁決,不在範圍)。
值全程沒有進版控、沒有進對話(只印名字與長度)。版本號待總管定。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:35:40 +08:00
Leo 6f37772a40 定版 v0.19.0(雲端拿得到兩台的帳密)
leo 2026-09-01:「youlin 和 geek6688 都全給,因為這兩個都是讓 CC 操作
一個 stage 一個 test prod,不給所有的就是受阻。」

make-cloud-env.sh 的清單從 1 把變 8 把(youlin 5 + geek6688 2 + Gitea 1)。
在併完的樹上實數:61 支閘/84 條註冊/7 command/7 agent/2 skill/49 腳本
——六個數字都是數出來的,與 description 一致。

🔴 這一筆是補的:766375c 併進 main 時版本沒跟著動(總管把 bump 寫在一個
被 main-push 閘擋下的複合指令裡,擋掉之後只有 merge 生效)。
版本號是 leo 唯一的驗收介面,功能進了 main 而版本沒動=等於沒交付。

票:inkstone/ISEP#115

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:11:29 +08:00
Leo 766375cd95 Merge '兩台全給:雲端拿得到 youlin+geek6688 的憑證'(inkstone/ISEP#115) 2026-09-01 12:08:29 +08:00
4 changed files with 51 additions and 5 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "isep", "name": "isep",
"description": "InkStone Environment Plugin —— leo 的 Claude Code 環境唯一真相源:61 支機械閘(84 條註冊,白話盤點見 docs/hooks-inventory.md)、7 支 slash command、2 支 skill、7 位有名字的工人(agents/,見 docs/governance/worker-roster.md)、49 支腳本,外加治理規範與標籤真相源。本機與雲端裝同一份,沒有子集。", "description": "InkStone Environment Plugin —— leo 的 Claude Code 環境唯一真相源:61 支機械閘(84 條註冊,白話盤點見 docs/hooks-inventory.md)、7 支 slash command、2 支 skill、7 位有名字的工人(agents/,見 docs/governance/worker-roster.md)、49 支腳本,外加治理規範與標籤真相源。本機與雲端裝同一份,沒有子集。",
"version": "0.18.0", "version": "0.20.0",
"keywords": [ "keywords": [
"inkstone", "inkstone",
"guardrails", "guardrails",
+2 -2
View File
@@ -568,7 +568,7 @@ bash hooks/tests/sdd-guard-retired.test.sh
``` ```
bash scripts/test-make-cloud-env.sh bash scripts/test-make-cloud-env.sh
``` ```
**該看到**`11/11 通過,跳過 0 條`(清單現在是 8 把)。**全程只印變數名字與值的長度,一個字元的值都不印。** **該看到**`11/11 通過,跳過 0 條`(清單現在是 10 把——兩台全給 + 機器帳號 + uncle6 出貨 + 出貨取座標)。**全程只印變數名字與值的長度,一個字元的值都不印。**
A 段用假的 `.env` 隔離跑(不碰真金鑰、不碰 `~/.claude/cloud-env`); A 段用假的 `.env` 隔離跑(不碰真金鑰、不碰 `~/.claude/cloud-env`);
B 段拿這台機器真正的 `.env` 對帳——**`.env` 不在的機器(雲端就是)會印 `⏭️ SKIP`** B 段拿這台機器真正的 `.env` 對帳——**`.env` 不在的機器(雲端就是)會印 `⏭️ SKIP`**
不算失敗,但也不算驗過。 不算失敗,但也不算驗過。
@@ -875,7 +875,7 @@ B2(信標那行)/B3(setup 輸出)/B4(閘的訊息)三個畫面
| **A12 留言身份欄(兩道門)** | 總管 | ✅ 11/112026-08-27 | | **A12 留言身份欄(兩道門)** | 總管 | ✅ 11/112026-08-27 |
| **A23 同時跑的線有上限** | isep-guard | ✅ 33/332026-08-29inkstone/ISEP#109 | | **A23 同時跑的線有上限** | isep-guard | ✅ 33/332026-08-29inkstone/ISEP#109 |
| **A24 一條線要有自己的工作目錄** | isep-guard | ✅ 35/352026-08-29inkstone/ISEP#109→5391 | | **A24 一條線要有自己的工作目錄** | isep-guard | ✅ 35/352026-08-29inkstone/ISEP#109→5391 |
| **A26 雲端憑證清單這台拿得到** | isep-hand | ✅ 11/112026-09-01inkstone/ISEP#115→5526/5541/5542)+兩條「該紅」方向實跑 | | **A26 雲端憑證清單這台拿得到** | isep-hand | ✅ 11/112026-09-01inkstone/ISEP#115→55265541554255775610)+兩條「該紅」方向實跑 |
| **A16 放行的門真的打得開** | 總管 | ✅ 17/172026-08-28inkstone/ISEP#90 | | **A16 放行的門真的打得開** | 總管 | ✅ 17/172026-08-28inkstone/ISEP#90 |
| **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/102026-08-28inkstone/ISEP#90 | | **A17 未推警察不誤攔雲端分支** | 總管 | ✅ 10/102026-08-28inkstone/ISEP#90 |
| **A18 信標會報雲端接線缺陷** | 總管 | ✅ 14/142026-08-28inkstone/ISEP#90 | | **A18 信標會報雲端接線缺陷** | 總管 | ✅ 14/142026-08-28inkstone/ISEP#90 |
+19 -1
View File
@@ -11,9 +11,23 @@ set -euo pipefail
# ── 雲端需要哪些變數(只有名字。要加就加在這裡)────────────────── # ── 雲端需要哪些變數(只有名字。要加就加在這裡)──────────────────
# #
# 範圍=**youlinstage)與 geek6688(測試 prod & 出貨機)兩台全給** # 範圍=**youlinstage)與 geek6688(測試 prod & 出貨機)兩台全給**
# **外加 uncle6**——出貨的三個站實際部署到的是那個帳號。
# leo 2026-09-01:「youlin 和 geek6688 都全給,因為這兩個都是讓 CC 操作 # leo 2026-09-01:「youlin 和 geek6688 都全給,因為這兩個都是讓 CC 操作
# 一個 stage 一個 test prod**不給所有的就是受阻**。」 # 一個 stage 一個 test prod**不給所有的就是受阻**。」
# uncle6 是同一句話的延伸(inkstone/ISEP#115 → comment `5577`):
# `products/arcrun-rag/installer/ship.targets.json` 六處 accountId 去重後只有一個值
# `58309bb90fd93ad6d0fe0aae99170e9d`,而本機出貨靠的是家目錄裡的 OAuth 登入態
# `~/.wrangler/config/default.toml`)——**那個檔不隨 repo clone 走,雲端永遠拿不到**。
# ⚠️ 這把「是 uncle6 的、而且 active」是驗過的;「它有沒有 Workers Scripts:Edit
# =真的部署得動」**沒驗**(驗它必須寫入,那是紅線)。缺這格會在部署當下才知道。
#
# 📌 `ARCRUN_NS_YOULIN` 是同一族的病、不同的家(inkstone/ISEP#115 → comment `5610`):
# `inkstone/Arcrun#195` 把實例座標拆成「網址隨 repo 走/namespace 走環境變數」之後,
# 一台乾淨機器只要有這一個環境變數就取得到座標——而它原本只住在
# `~/.arcrun/config.yaml` 的 `api_key`**家目錄的東西不隨 repo clone 走**。
# 🔎 這一族的共同形狀:**能力其實有,只是它住在「不會跟著 clone 走」的地方**
# uncle6 是 `~/.wrangler` 的 OAuth 登入態,這把是 `~/.arcrun`)。
NEEDED=( NEEDED=(
# ── 機器帳號 ── # ── 機器帳號 ──
GITEA_TOKEN_CLAUDE_CODE # claude-code 的 Gitea tokenbootstrap 與 plugin 安裝都靠它 GITEA_TOKEN_CLAUDE_CODE # claude-code 的 Gitea tokenbootstrap 與 plugin 安裝都靠它
@@ -24,10 +38,14 @@ NEEDED=(
YOULIN_MCP_OWNER_SECRETS # youlin 那台 MCP 的 owner secret YOULIN_MCP_OWNER_SECRETS # youlin 那台 MCP 的 owner secret
STAGE_USERNAME_YOULIN # ⚠️ 密碼類,見下面那條限制 STAGE_USERNAME_YOULIN # ⚠️ 密碼類,見下面那條限制
STAGE_PASSWORD_YOULIN # ⚠️ 密碼類,見下面那條限制 STAGE_PASSWORD_YOULIN # ⚠️ 密碼類,見下面那條限制
ARCRUN_NS_YOULIN # 出貨線取座標那兩站要它;原本只住在 ~/.arcrun/config.yaml 的 api_key(家目錄,不隨 clone 走)
# ── geek6688 測試 prod 出貨機 ── # ── geek6688 測試 prod 出貨機 ──
CLOUDFLARE_API_TOKEN_CC_SHIPPING_CORE # 出貨線寫入用 CLOUDFLARE_API_TOKEN_CC_SHIPPING_CORE # 出貨線寫入用
CLOUDFLARE_ACCOUNT_ID_GEEK6688 # 上面那把的配對 account id CLOUDFLARE_ACCOUNT_ID_GEEK6688 # 上面那把的配對 account id
# ── uncle6 = 出貨三站真正部署到的帳號(installerdocsSitemailRelaystage 與 prod 都是)──
UNCLE6_CF_API_KEY # 住在 products/arcrun-rag/.env;本機是靠 ~/.wrangler 的 OAuth 登入態出貨,那個檔不隨 clone 走
) )
# #
# 🔴 這份清單的邊界——加一把之前先問「這把打得到哪個實例」,不是「這把方便嗎」 # 🔴 這份清單的邊界——加一把之前先問「這把打得到哪個實例」,不是「這把方便嗎」
+29 -1
View File
@@ -201,9 +201,20 @@ leo 當場:「**這些為什麼不寫到票裡?**」
他會去找繞過去的方法。所以「出路能不能跑」要跟「判準準不準」一樣被測。 他會去找繞過去的方法。所以「出路能不能跑」要跟「判準準不準」一樣被測。
## ⚠️ MISTAKE: 「雲端該有哪些憑證」的清單是唯一真相源,卻沒有任何東西在跟機器對帳 ## ⚠️ MISTAKE: 「雲端該有哪些憑證」的清單是唯一真相源,卻沒有任何東西在跟機器對帳
票: `inkstone/ISEP#115`(→ comment `5522``5526` 票: `inkstone/ISEP#115`(→ comment `5522``5526``5541``5542``5577``5610`
日期: 2026-09-01 日期: 2026-09-01
📍 repo`inkstone/ISEP``scripts/make-cloud-env.sh``scripts/test-make-cloud-env.sh`
 `InkStoneCo``.env``system-dev/wiki/credentials-map.md`——清單的值真身與那張索引)
 `products/arcrun-rag``.env``UNCLE6_CF_API_KEY``installer/ship.targets.json`
 `inkstone/Arcrun``shared/instance-coordinates/`——`ARCRUN_NS_YOULIN` 的用處)
三元組:
- `雲端該有哪些憑證 >> 唯一清單在 >> inkstone/ISEP:scripts/make-cloud-env.sh 的 NEEDED`
- `NEEDED >> 值真身在 >> InkStoneCo/.env 等六個 .env(只有名字進版控)`
- `這份清單 >> 被誰逼著跟機器對帳 >> scripts/test-make-cloud-env.sh 的 B7B8B9`
- `A 段 8 個 >> 從未併進 >> inkstone/ISEP:main(只活在 fix/cloud-env-parity-14PR #43`
症狀: 雲端 session 要清空 youlin`env | grep -ciE 'cloudflare|^CF_|wrangler'`**0** 症狀: 雲端 session 要清空 youlin`env | grep -ciE 'cloudflare|^CF_|wrangler'`**0**
`credentials-map.md` 明明寫著那把 token 在 `InkStoneCo/.env` `credentials-map.md` 明明寫著那把 token 在 `InkStoneCo/.env`
@@ -229,3 +240,20 @@ leo 當場:「**這些為什麼不寫到票裡?**」
**推廣**:repo 裡任何「這台機器該有什麼」的清單,都要有一支東西定期拿它去問機器。 **推廣**:repo 裡任何「這台機器該有什麼」的清單,都要有一支東西定期拿它去問機器。
清單自己不會知道它漏了什麼。 清單自己不會知道它漏了什麼。
### 後續(同日 comment `5577`/`5610`):漏掉的那幾把有共同形狀
清單從 1 把補到 10 把的過程中,後面兩把不是「忘了寫」,是**同一族的病**:
```
uncle6 出貨 能力住在 ~/.wrangler/config/default.toml 的 OAuth 登入態
ARCRUN_NS_YOULIN 能力住在 ~/.arcrun/config.yaml 的 api_key
```
**能力其實有,只是它住在「不會跟著 clone 走」的地方**(家目錄)。
本機因此永遠是綠的,而雲端永遠是紅的——**兩邊都不會有人發現**,
直到某條線做到最後一步要用它。
📌 判準:看到「本機做得到、雲端做不到」時,先問
**「這個能力的真身住在 repo 裡,還是住在家目錄裡?」**
住在家目錄 ⇒ 它一定要有一個具名的環境變數,並且進這份清單。