# reflection_log 2026-09-09

## 1915-A 学校アカ「失効」を3回誤診（本体→Lv5→一次データで真因確定＝authuser indexズレ）

### 事象
jarvis起動 手順7 で `google_tasks_read --account school`(headful) が u/1→u/0 フォールスルーで AUTH_REQUIRED。診断が3段階で二転三転した：
1. **本体（初手）**：「経路差＝#41既知未解決」で深追い停止しようとした＝9/07 1926-A（スクリプト出力を実体確認せず鵜呑み）の再演。
2. **Lv5(Opus a811701a)**：「両スクリプトは同一embed/fullscreen URL・矛盾2結果の未突合。relogin ALREADY_OK は既知偽陽性・AUTH_REQUIRED(真失効)が正」と反証。→ 本体は一次コード確認でrelogin `tasks_u1_ok` の着地authuser未検証バグを特定し `/u/1/`着地チェックを追加、実re-login をbg実行→ STILL_BLOCKED。
3. **一次データ（read-only診断 diag_school_auth.py）＝真因確定**：`myaccount?authuser=1` 表示アカ＝2023s0047（学校本人）、`tasks u/1`着地u/0 のtodo＝「物理テスト復習 絶対/数学の宿題/服探す/簿記」＝学校の3リスト（個人ritsuha1021のtasksは#54で空）。→ **学校セッションは生存・u/0スロットに居る・学校todo実取得可**。「失効」は google_tasks_read/relogin の u/1固定＋wrong-account guard による誤判定だった。Lv5の「真失効」も本体の「経路差」も真因（index ズレ）を外していた。

### 真因
- **スロット番号(u/1)を学校アカの固定住所と仮定**していた。実際は authuser index が流動（学校アカが u/0 に来る）。失効判定を「/u/1/ に着地するか」で切ったため、u/0 の生きた学校アカを失効と誤判定。
- 9/07夜に「u/0＝個人todo(服探す/簿記)」とラベルしたのも誤り（#54で個人tasksは空＝あれも学校todoだった）。誤ラベルが wrong-account guard の設計前提を汚染し、以後の誤診を連鎖させた。
- 本体が起動中に急いで入れた relogin `/u/1/`チェックは、u/0学校アカ状況で**偽陰性（生存を失効判定→空振りrelogin 4分）**を生む方向違いの修正だった。

### 是正（本ターン）
- REMINDER #41 に真因（index ズレ・失効でない・学校todo u/0で生存）＋恒久解を永続化。
- 恒久解＝google_tasks_read.py / relogin_school.py の学校スロット判定を「u/1固定」→「email(2023s0047)照合でスロット特定 or u/0..u/3走査＋アカ検証」へ（#41周期失効の根本）。中規模改修＝ユーザー判断に上げる（本体が同ターンで2回誤診したため3度目のthrash回避に確認を挟む）。

### 恒久ルール
- 🛡 マルチアカの生死は**スロット番号でなく「実operational経路（狙ったアカのデータが実際に取れるか）＋email照合」**で判定する（[[feedback_google_school_reauth_verify_operational]] / [[feedback_end_to_end_real_arrival_before_done]]）。authuser index はGoogle都合で流動する前提。
- 🛡 read-only診断（表示アカ・実データ内容）を最優先の一次ソースにする。スクリプトの ok/NG フラグも Lv5 の断定も、実データで再検証する（9/07 2001-C 双方向裏取りの実践）。
- 🛡 起動シーケンス中に認証コアへ急ぎのロジック修正を入れない（今回 `/u/1/`チェックが状況を悪化させた）。真因を一次データで固めてから直す。

### 関連既往
- [[feedback_school_auth_headless_artifact]]（9/07・headless artifact＝別の誤診パターン）
- [[feedback_grep_whole_repo_not_file_scope]] / 9/07 1926-A（スクリプト出力鵜呑み）
- [[feedback_subagent_always_opus]]（Lv5 Opusが本体の初期誤診を反証・ただしLv5#1も真因は外した＝双方向裏取りの必要性）

## 1940-B 因果ラベル「indexズレ」もLv5#2独立プローブで反証（3回目の誤命名・proxy早合点）

### 事象
1915-A で「真因＝authuser index ズレ（学校が u/0 にシフト）」と結論したが、Lv5#2(Opus a9eea6b0)が**自前の独立プローブ probe_slots.py を実走**し反証：u/0/u/1/u/2 全要求が u/0 着地・表示email＝2023s0047のみ・**personal(ritsuha1021)はどのスロットにも不在**。→ 真の状態は「indexシフト」でなく「**personalアカが共用Profileに未ログイン・学校が唯一アカとしてu/0残存**（本ターン時点）」。u/1/u/2 は存在しないスロット→唯一アカへフォールバックしていただけ。

### 真因（本体の3つ目の誤命名）
- 経路差→真失効→indexズレ と**同一現象に3つ目のフレーミング**を当て、いずれも一次確認前の断定だった。今回の飛躍＝`myaccount?authuser=1 が学校を表示`という**代理シグナルで「u/0=学校」を推定し、personalの在否(myaccount?authuser=0の表示アカ)を直接確認しなかった**＝[[feedback_self_check_visual_proof]]（proxy判定禁止・数値変化=動いてる と同型）の非視覚版。
- さらに「#41周期失効の単一根本原因＝これ」と再断定＝9/07 overclaim（headless artifactを唯一根本と宣言）の反復。実際は≥2モード併存（headless artifact＋personal未ログイン単独u/0）＋過去に真cookie失効も混在しうる。

### 是正（本ターン）
- REMINDER #41 の因果ナラティブを訂正（indexズレ→personal未ログイン・学校単独u/0／単一根本原因の断定撤回／2モード併存明記）。
- 恒久解の実装注意を反映：email照合は tasks embed にemail出ない公算大→**myaccount/Docsで authuser0..3走査→emailで学校index確定→そのindexでtasks開く2段構え**。長期解＝Tasks API(OAuth・Google OAuthはclaude -p/SDK禁止の対象外)。
- 操作的結論（学校セッション生存・u/0でtodo実取得可・u/1固定が誤判定源・恒久解=スロット走査+email照合）は病名不問でロバスト＝FIX方向は不変。

### 恒久ルール
- 🛡 **代理シグナルで病名を断定しない**。「u/0=学校」を言うなら u/0 を直接開き、かつ personal の在否も反対スロットで確認してから（end-to-endは操作だけでなく因果ラベルにも適用＝[[feedback_end_to_end_real_arrival_before_done]]）。
- 🛡 **「単一根本原因が判明した」と宣言しない**（9/07・9/09で2回反復）。再発性の高い事象は複数モード併存を既定とし、FIXは病名不問でロバストに組む。
- 🛡 誤命名を3回重ねても操作的FIX（実データが取れる経路）が正しければ実害は出ない＝**因果ラベルよりoperational検証を優先**する設計が正しかった点は維持。
