# STEP 2119 — ci-wire-1987-1988 (blocked at Actions billing) + chat→tab relay Phase 0

**Timestamp**: 2026-09-19T00:02 (JST)
**Tab worktree**: `main` (rei-aios-bd tab)
**Commit (workflow + scripts + sidecar)**: `db82f4206`
**Commit (this notepad entry)**: `<pending>` — filled at push
**T1 completion status**: **未達 (blocked)** — PASS run URL と FAIL run URL は 両方 未取得

## 一行 summary

STEP 1987/1988 MCP tests を CI に wire する workflow と package.json scripts を push 済 (commit db82f4206) だが、 fc0web account の GitHub Actions billing block により test 実行に至らず (run 35359665517 は 3s abort — CI が判定した記録ではなく CI が起動しなかった記録)。 T2 Phase 0 (chat→tab relay 読み取り可否 probe) は 完了 = 表 + Pattern 5 差分 1 段落 を 下記に記録。

## T1 CI wire — 現状 record

### 成果物 (push 済 in commit db82f4206)

- `.github/workflows/ci-mcp-tests.yml` (new) — ubuntu-latest, node 22, `npm ci --no-audit --no-fund` (rei-pl は package.json + package-lock.json 両方から runner 側で削除)、 STEP 1987/1988 を 個別 step で 実行 (timeout 2min + 5min)、 push (main + `ci-verify-**`) + pull_request (main) + workflow_dispatch trigger
- `package.json` — 2 npm scripts 追加 (`test:step1987`, `test:step1988`)。 Surgical diff (2 line addition only) — 途中 `npm pkg set` が pre-existing duplicate keys を dedup したので revert して Edit で 追加、 side-effect 排除
- `data/tabs/rei-aios-bd/README.md` (new) — sidecar 進行記録

### Local baseline (Windows i7-6700、 CI と 比較用)

- STEP 1987: **11 passed / 0 failed** in 2.0s wall
- STEP 1988: **23 passed / 0 failed** in 6.1s wall (test 3.4s + tsx startup 2.7s)

### Actions run 35359665517 — 「CI が起動しなかった」 record

- URL: https://github.com/fc0web/rei-aios/actions/runs/35359665517
- Trigger: push (commit db82f4206) → 直後 2026-09-18T14:59:43Z (UTC)
- Duration: 3s (job 開始前 abort)
- GitHub annotation (原文):
  > "The job was not started because recent account payments have failed or your spending limit needs to be increased. Please check the 'Billing & plans' section in your settings"
- **正しい framing**: これは CI が STEP 1987/1988 を実行して verdict を出した記録 **ではなく**、 CI が起動する前に account-level で abort された記録。 test PASS の evidence にも FAIL の evidence にも ならない。

### T1 完了条件 未達 事項

- [ ] CI 上で STEP 1987 (11 件) が PASS した Actions run URL — **未取得**
- [ ] CI 上で STEP 1988 (23 件) が PASS した Actions run URL — **未取得**
- [ ] 意図的に 1 件 壊した branch (`ci-verify-1987-1988-broken-check`) で CI が FAIL する run URL — **未取得** (branch 未作成; billing 解決後に着手)
- [ ] ローカルと CI で件数一致 (11 / 23) verify — **未実施** (CI が起動していないため 実測不能)
- [ ] 実測所要時間 報告 — **未取得** (見積 1.5-3 min/run は 別途 push 発生時 実測で 差替え予定)
- [ ] push + pull_request 二重発火 の 検知/報告 — **未実施** (workflow は 起動していない)

### 藤本さん action item

fc0web account の GitHub Billing 確認 → 支払い方法 更新 or spending limit 引き上げ:
- 確認 URL: https://github.com/settings/billing

**Blocker 解除 後 の 再実行 protocol** (chat-Claude directive 明示):
- **前提誤り修正**: billing 理由で開始されなかった job は queue に残らず即 failure になる — 解決後の 「自動 再実行」 は起きない
- **正しい再実行手順**: `workflow_dispatch` で 手動 trigger、 or 空 commit を push
- **実測報告 必須**: 見積 (1.5-3 min/run) ではなく 実測 wall-clock 時間 と、 push + pull_request が 同 commit で 2 回走るか の観察結果 を report
- **セルフホストランナー**: 無料枠使い切りが 原因だった場合の 代替案として 藤本さん 検討中 — **本 tab は 設定しない** (明示 hold)

## T2 Phase 0 — chat→tab relay 読み取り可否 probe

### 3-category table (this tab の read capability、 list-only、 message body / file content 未読)

| # | 経路 | 判定 | Evidence (実 tool 呼出 結果、 中身未読) |
|---|---|---|---|
| 1 | **Slack** (`mcp__claude_ai_Slack__slack_list_user_channels`, `format=names_only`) | ✅ 読める | 3 channels enumerate: `#チャンネル-サンプル` / `#all-fujimoto` / `#slack-へようこそ` (名前のみ、 message body 未読) |
| 2 | **Google Drive** (`mcp__claude_ai_Google_Drive__list_recent_files`, `excludeContentSnippets=true`) | ✅ 読める | 10 entries enumerate (title + mimeType + IDs): `rei-scout/` folder + `public-report.html` + 8 mp4 videos + 1 Google Form (ファイル中身 未読) |
| 3 | **Gmail** (`mcp__claude_ai_Gmail__list_labels`) | ✅ 読める | 9 system labels (CHAT/SENT/INBOX/IMPORTANT/TRASH/DRAFT/SPAM/STARRED/UNREAD) + counters (INBOX 94,394 messages exist; メッセージ本文 未読) |
| 4 | **Google Calendar** (`list_calendars`, `list_events`, `search_events`) | ✅ 読める (未実測) | Tools loaded + callable、 但し directive 「(A) 一般 capability 探索」 の 範囲で 実呼出は Slack/Drive/Gmail の 3 経路 のみ に留めた |
| 5 | **Claude Docs** (`mcp__claude_ai_Claude_Docs__*`) | ✅ 読める (native、 未実測) | Docs read/create/query tools 提供、 cross-Claude collaboration 用に設計、 実呼出せず |
| 6 | **DataCamp / Learning Commons** (list tools) | ✅ 読める (out-of-scope、 未実測) | Tools available だが 学習 platform 用途、 chat-Claude output relay 目的とは 別 |
| 7 | **Roam Research** (`authenticate`, `complete_authentication` のみ露出) | ⚙️ 要設定 | Content 系 tool は 認証完了後 に 露出する design、 現状 は auth flow only |
| 8 | **EDEN by Basecamp Research** (`authenticate`, `complete_authentication` のみ) | ⚙️ 要設定 | Roam と 同じ pattern |
| 9 | **Direct chat-Claude API** (`mcp__chat_claude_*` or 等価物) | ✗ 読めない | 該当 tool は本 tab の 提供 tool 一覧に 存在しない。 chat-Claude の 会話内容 を 直接 MCP resource として 引ける経路は なし。 必ず 中継 (Slack channel / Drive folder / Gmail thread / Claude Docs) 経由 |

### Pattern 5 差分 — 1 段落

現状 (藤本さん 手動 copy-paste) と 自動経路 の 差分候補は 4 つ考えられる: (a) **原メッセージ ID + timestamp の 機械可読 保存** = 手動 copy では 「chat-Claude 発話時刻」 が 抜けて 「tab 受信時刻 (= 藤本さん paste 時刻)」 に 置換される、 auto relay なら 原時刻 preserve が hash 化 metadata で 実現可能。 (b) **添付ファイル の loss-less 伝達** = 手動 copy は text 限定、 画像・PDF・code block は copy 経由で fidelity 低下、 auto relay (Drive / Slack channel) は binary が そのまま 通る。 (c) **出所 marker の 独立 verify** = 手動時 は 「[via 藤本さん / orig: chat-Claude]」 marker は 藤本さん の 手書き = 藤本さん を信頼 することが 唯一の 出所保証、 auto relay なら 中継 channel の 認証記録 (Slack API 経由 の user_id + timestamp) が 独立 evidence として 残る (549 misattribution の再発予防 に 直接応答可能な 唯一の 差分軸)。 (d) **手間の削減** のみ = 「採用判断は自動化しない」 directive を 満たすには、 tab は 受信 item を list 提示 + 藤本さん explicit go 待ち architecture が 必須、 中継 channel の 「藤本さん accept step」 は 残る限り、 削減 は 「chat 出力 → 中継 channel 到達」 部分 のみ (藤本さん judgment は 残る)。 **判断**: Phase 1 実装は (a) or (b) or (c) の 保証内容が 具体的に cryptographic hash / metadata schema で 事前設計 されない限り、 実質 (d) 手間削減のみ の 機構 に 帰結する risk が 高い。 Pattern 5 予防 discipline に 従い、 Phase 0 report を もって 藤本さん judgment 待ち: 「(a)(b)(c) の 実現方法を 事前設計 + Phase 1 go」 or 「(d) のみ で 十分 = build しない」。

### 制約遵守 (chat-Claude directive 明示)

- **content 未読**: channels/files/labels の 名前 と 種類 のみ enumerate、 メッセージ本文 / ファイル中身 は 一切 呼出さず (`format=names_only` / `excludeContentSnippets=true` / labels のみ)
- **(C) 推定 target 使用せず**: 私 の memory hook 経由で 「rei-scout Drive folder 由来」 等の 推定 target は 呼出さなかった。 `list_recent_files` が 偶然 enumeration で 名前を返しただけ (中身は 読まず)
- **(B) 具体 target 未指定**: (A) 一般探索の結果 を もって 藤本さん が (B) 具体指定 を 提供する 前提

## Honest scope

- CI 実行結果 (STEP 1987/1988 が CI 上で PASS するか、 FAIL branch で FAIL するか) は 本 STEP 時点で **未検証**。 「local で 11 + 23 passed」 は Windows Node 22 tsx の 実測 evidence だが、 ubuntu-latest + `npm ci` + Node 22 の behavior parity は 別途 CI 起動後の 実測が必要
- rei-pl 除去 が package.json + package-lock.json 両方 runner 側で 発生する design が npm ci の hash check を 通るか は 未検証 (local dry run 未実施 for CI script、 workflow 起動後の 実測待ち)
- T2 Phase 0 は 「本 tab (rei-aios-bd) の 読み取り可否」 のみ probe。 chat-Claude 側の write 可否 (Slack post / Drive write / Gmail send / Claude Docs create) は 未検証、 Phase 1 設計時に 対応 audit 要
- 「(a)(b)(c) の 保証」 は 概念的 差分候補 の 提示 のみ。 実際に cryptographic hash / metadata schema を どう設計するかは 別 STEP (Phase 1 実装は 別 STEP、 本 STEP 対象外)

## Failure mode (機械学習用 dataset)

- **What could go wrong (T1)**: CI 起動失敗 (billing / permission / secret 不足) を 「test FAIL」 と 誤解 する report。 「run 35359665517 は failure status」 だけ 見て 「STEP 1987/1988 が壊れた」 と 未来 Claude が 誤読すると root cause (billing) に至らない。
- **Prevention (T1)**: run detail (`gh run view <id>`) の annotation を 必ず 読む + summary 表 で 「CI 判定 vs CI 起動失敗」 を 明示区別 + notepad に abort 原因を 全文引用
- **Recovery (T1)**: billing 解決後、 workflow_dispatch (or 空 commit) で 再実行、 実測時間 と 二重発火有無 を 追記 (別 STEP corrigendum entry)

- **What could go wrong (T2)**: 「読める tool が 多い」 だけ を もって Phase 1 実装を 藤本さん judgment なしに 進めてしまう (Pattern 5 = 削減以外の 差分保証を 事前設計せずに 建てる = 手間削減 のみ の 機構 が 「新機構」 として 見え、 549 misattribution root cause が 残ったまま 中継経路 が 増える = risk 拡大)
- **Prevention (T2)**: 3-category 表 と Pattern 5 差分 1 段落 は 完了条件 の 一部、 Phase 1 実装 go 前 に 藤本さん が (a)(b)(c) の どれを 保証するか + どの schema か 明示決定 を 経由する
- **Recovery (T2)**: 万一 (d) 手間削減のみ で Phase 1 に 進んで 中継経路が 増えた場合、 (a)(b)(c) 未実装 なので 削除しても loss なし = revert 容易

## 詳細参照

- 直前 commit: `db82f4206` (workflow + scripts + sidecar)
- Actions run (起動失敗 record): https://github.com/fc0web/rei-aios/actions/runs/35359665517
- 関連 STEP: STEP 1987 (parser test 起源) / STEP 1988 (e2e test 起源) / STEP 1974 (tool limitation NECESSARY-but-NOT-SUFFICIENT origin) / STEP 1554 (git-atomic-commit pattern) / STEP 1670 (Tab Isolation Protocol v0.1)
- Directive 出所: chat-Claude → 藤本さん relay (未 review) → rei-aios-bd tab、 explicit go 受領 2026-09-18/19
- Defer arc: 「STEP 1987・1988 の test を CI に wire」 (defer 4 件 の 1 件、 本 STEP 時点で **不完全消化** — billing block により 完了条件 未達)

## Cross-reference

- `[[step-2119-ci-wire-1987-1988-blocked]]` (this)
- `[[step-1987-mcp-tool-description-collision]]`
- `[[step-1988-e2e-mcp-invocation]]`
- `[[step-1974-taxonomy-tool-limitation-finding]]`
- `[[step-1554-git-atomic-commit]]`
- `[[step-1670-tab-isolation-protocol-v01]]`
- `[[feedback-pattern-5-prevention]]`
- `[[chat-to-tab-relay-phase-0-2026-09-19]]` (T2 findings、 本 file 内 に embed)

## 未来 corrigendum entry の 予定

Billing 解決 → workflow_dispatch → PASS run URL 取得 → FAIL branch (`ci-verify-1987-1988-broken-check`) 作成 → FAIL run URL 取得 の 順で、 別 notepad entry を 「corrigendum of 2026-09-19T00-02_STEP-2119_...」 として 追加。 本 file は 「blocked 時点 の record」 として 永久 immutable。
