{
  "$comment": [
    "運転台帳 — 1回のオートパイロット実行を1行で表す。**共通実行ID（run_id）が背骨。**",
    "retracted_observations は証拠で否定された誤記の訂正履歴。元の行・確認時刻・実行証拠を保存し、集計用のrunsへは混ぜない。result_unverified は出荷・失敗・復旧のどれも断定しない。",
    "",
    "【なぜ必要か】2026-08-22の外部レビューが指摘したとおり、この運用は",
    "『1つの改善サイクルが完走したか』を機械的に言えなかった。AI完走率・人間介入率・",
    "変更失敗率・改善サイクル時間は、どれも実行を一意に指す識別子が無ければ数えられず、",
    "『手で数えた値』にしかならない。growth/README.md の冒頭が戒めている",
    "『計画は散文の中に住んでいて、散文は手を挙げない』のは、指標についても同じ。",
    "",
    "【何を1行にするか】Issue/レーン選定 → ブランチ → PR → 検証 → 配信 → 費用 → 人間の介入。",
    "run_id は `ap-<YYYYMMDD>-<route>`。GitHub Actions の run id は external_ref に持ち、",
    "実費台帳（data/autopilot-cost.json）とはそのキーで結合する。**費用をここに複製しない**",
    "（同じ数字の出所が2つあると必ず食い違う）。",
    "",
    "【attempted の意味】『着手したか』。秘密鍵未設定によるGateスキップと、",
    "他経路が先行したことによる冪等スキップは attempted=false。**完走率の分母は attempted。**",
    "着手していない回を失敗に数えると、意図した『静かに寝る』設計が失敗率として現れてしまう。",
    "",
    "【outcome の値】",
    "  shipped           … 本番へ出荷（PRがマージされた）",
    "  no_artifact       … 実行したが成果物ゼロ（費用は発生している）",
    "  failed / cancelled… ジョブが落ちた／打ち切られた",
    "  skipped_gate      … 秘密鍵未設定で意図的に寝た（attempted=false）",
    "  skipped_duplicate … 他経路が先行していたので何もせず終了（attempted=false・正常系）",
    "  no_run            … その日どの経路も動かなかった（**これは異常**）",
    "",
    "【source は必ず書く】どの一次資料から起こした行かを残す。後から検算できない行は、",
    "指標としては存在しないのと同じ。",
    "",
    "【interventions.kind — 「何への介入か」で分ける】",
    "  artifact   … **出荷物そのものへの介入**（人が記事を書いた・書き直した）",
    "  infra      … 実行基盤の修理（ワークフロー・Runbook・スクリプト）",
    "  substitute … 全経路が不発で人が代走した",
    "  bootstrap  … 立ち上げ時に人が通しで実演した（一度きり）",
    "  request    … 人に起票しただけ（まだ実行されていない）",
    "",
    "この分類が無いと、YAMLの権限を1行直した日と、人が記事を書き直した日が",
    "同じ『介入あり』になる。**両者はAIの自律性について正反対のことを言っている。**",
    "前者は基盤が脆いという話で、後者は成果物が信用されていないという話。",
    "集計（scripts/autopilot-runs.mjs）は総計と内訳の**両方**を出す。",
    "総計だけ出すと過少評価になり、内訳だけ出すと都合のよい分母選びになる。",
    "",
    "",
    "【failure_stage — 「選択ミスか実行ミスか」を分ける】",
    "**failure_class は「どんな故障か」を言うが、「どの層で死んだか」は言わない。**",
    "2026-09-04 まで、Gateが寝た日と実行が落ちた日と枠が尽きた日が、すべて同じ「失敗」として",
    "台帳に並んでいた。だから『22件の死は選択ミスか実行ミスか』という問いに答えられなかった。",
    "答えられなかったのは記録が足りなかったからで、調べれば分かることではなかった。",
    "",
    "  eligibility … **実行前の判定で止まった**（L1）。Gateが寝た日。棄却が正しいかは別問題",
    "  execution   … **着手して実装の層で死んだ**（L0）",
    "  cost        … **枠・予算で止まった**。実行枠の429・予算上限",
    "  absent      … **経路そのものが存在せず、判定も実行も行われていない**",
    "",
    "**absent は設計ノートの3分類（適格性/実行/コスト）に無い。**足したのは、",
    "2026-08-16〜17 の2行がどれにも入らなかったから。副系Routineが当時そもそも存在せず、",
    "判定も実行もされていない。3つに押し込むと「実行の層で死んだ」と読めてしまい、",
    "**機械が居なかった日と、機械が失敗した日が同じ色になる。**",
    "",
    "eligibility の行はさらに eligibility_verdict を持つ:",
    "  declined_by_design  … 理由が記録された正しい棄却（秘密鍵未設定・当日重複など）",
    "  declined_by_fault   … **判定器または前提が壊れていて着手できなかった**（鍵の失効・API到達不能・判定器の例外）。設計どおりの棄却と混ぜると、鍵が切れた日が「静かに寝た日」として残る",
    "  declined_unrecorded … **寝た理由が台帳から読めない。**沈黙と正常の区別が付かない",
    "  blocked             … L1適格性ゲートの基準で落ちた（scripts/autonomy-eligibility.mjs）",
    "",
    "**declined_unrecorded は 0 を目指す欄。**scripts/autopilot-runs.mjs --check が",
    "2026-09-04 以降の新しい行について gate_code を要求する（過去分は遡って復元できないので免除）。",
    "【failure_class と repair_of — 自己修復のための2フィールド】",
    "  failure_class … 故障の**種別**（permissions / runner-timeout / actor-rejected /",
    "                  route-absent / runbook-gap）。同じ故障の再発を数えるために要る。",
    "                  失敗の自由文（failure_reason）だけでは『前と同じ故障か』が判定できない。",
    "  repair_of     … その実行が修理した run_id の配列。**修理が効いたかを後から追える。**",
    "",
    "この2つで scripts/autopilot-selfheal.mjs が『未修理の故障が残っているか』を判定し、",
    "残っていればその日の最優先アクションをレーンF（自己修復）にする。",
    "同じ failure_class を規定回数直しても再発するなら、**修理をやめて人間に上げる**",
    "（直せないものを毎日直そうとするのが一番たちの悪い無限ループになる）。",
    "",
    "【failed_at / detected_at / resolved_at — MTTRのための3点】",
    "  failed_at   … 故障が起きた時刻",
    "  detected_at … **誰かが気づいた時刻**。ここが無いとMTTRは出せない",
    "  resolved_at … 修理が本番へ出た時刻（PRマージ）",
    "",
    "検知までの時間（detected_at - failed_at）と修理までの時間（resolved_at - detected_at）は",
    "**別の指標**。前者は監視の穴、後者は修理能力の話で、混ぜると改善先を間違える。",
    "実測では 2026-08-16 の無運転が検知まで**50時間**かかっている（副系Routineが",
    "そもそも存在しなかった期間）。一方いったん気づいてからの修理は1時間以内。",
    "**この運用の弱点は修理速度ではなく検知の穴だった、と数字が言っている。**",
    "",
    "推測で埋めない。分からない時刻は書かない（集計は n を明示して出す）。"
  ],
  "seeded": {
    "at": "2026-08-22",
    "coverage": "2026-08-11（運転開始）〜2026-08-22",
    "method": "主系11runはGitHub Actions APIで全数実測。日々の出荷はAUTOPILOT_LOG.mdのエントリとgit logのマージ済みPRを突き合わせて起こした。",
    "known_gaps": [
      "CCR経路の開始時刻が無いため、改善サイクル時間（着手→マージ）はActions経路でしか出せない。",
      "CCR経路の実費は観測手段が無い（スケジュール起動セッションのログは外部から読めない）。cost は null で、0ではない。",
      "1日に2アクション出た回（08-12のC02＝PR #483）は、Runbookが『1セッション1アクション』と定めているため代表1行のみを記録している。"
    ]
  },
  "runs": [
    {
      "run_id": "ap-20260811-manual",
      "date_jst": "2026-08-11",
      "route": "manual",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 470,
      "artifact": "/obsidian/compare/logseq/",
      "source": "autopilot-log+git-log",
      "interventions": [
        {
          "kind": "bootstrap",
          "note": "初回は手動運転で手順を実証（Runbook導入と同時）"
        }
      ],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260812-ccr",
      "date_jst": "2026-08-12",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": "B",
      "action": "refresh",
      "pr": 480,
      "artifact": "/obsidian/compare/logseq/#回答ブロック",
      "source": "autopilot-log+git-log",
      "interventions": [
        {
          "kind": "infra",
          "note": "主系の初回不発を受け、実行基盤をGHA主・CCR副の二重系へ（PR #478）"
        }
      ],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260813-actions",
      "date_jst": "2026-08-13",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "31643630749",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260813-ccr",
      "date_jst": "2026-08-13",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": null,
      "action": "maintenance",
      "pr": 488,
      "source": "autopilot-log+git-log",
      "artifact": null,
      "interventions": [],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260814-actions",
      "date_jst": "2026-08-14",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "31746724152",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260814-ccr",
      "date_jst": "2026-08-14",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": "C",
      "action": "refresh",
      "pr": 501,
      "artifact": "/obsidian/compare/logseq/",
      "source": "autopilot-log+git-log",
      "interventions": [],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260815-actions",
      "date_jst": "2026-08-15",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "31842048839",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260815-ccr",
      "date_jst": "2026-08-15",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": null,
      "action": "maintenance",
      "pr": 502,
      "source": "autopilot-log+git-log",
      "artifact": null,
      "interventions": [],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260816-actions",
      "date_jst": "2026-08-16",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "31909017447",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260816-none",
      "date_jst": "2026-08-16",
      "route": "none",
      "attempted": false,
      "outcome": "no_run",
      "failure_reason": "全経路が不発。副系Routineは当時そもそも存在していなかった（2026-08-20に判明・PR #516）",
      "source": "autopilot-log",
      "interventions": [
        {
          "kind": "infra",
          "note": "2日連続の実行記録ゼロを08-18のセッションが検知。恒久対処として autopilot-health.yml を新設（PR #504）"
        }
      ],
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "external_ref": null,
      "failure_class": "route-absent",
      "failed_at": "2026-08-16T06:00+09:00",
      "detected_at": "2026-08-18T08:43+09:00",
      "resolved_at": "2026-08-19T10:21+09:00",
      "detected_note": "2日連続の実行記録ゼロを08-18のセッションが検知。PR #510 マージが解消時刻",
      "failure_stage": "absent",
      "stage_note": "**その日どの経路も存在しなかった。**判定も実行も行われていないので、選択ミスでも実行ミスでもない"
    },
    {
      "run_id": "ap-20260817-actions",
      "date_jst": "2026-08-17",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "31972997422",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260817-none",
      "date_jst": "2026-08-17",
      "route": "none",
      "attempted": false,
      "outcome": "no_run",
      "failure_reason": "同上",
      "source": "autopilot-log",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "external_ref": null,
      "failure_class": "route-absent",
      "failure_stage": "absent",
      "stage_note": "**その日どの経路も存在しなかった。**判定も実行も行われていないので、選択ミスでも実行ミスでもない"
    },
    {
      "run_id": "ap-20260818-actions",
      "date_jst": "2026-08-18",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "32070691341",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260818-ccr",
      "date_jst": "2026-08-18",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": null,
      "action": "maintenance",
      "pr": 505,
      "source": "autopilot-log+git-log",
      "artifact": null,
      "interventions": [],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260819-actions",
      "date_jst": "2026-08-19",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）",
      "external_ref": "32187173035",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260819-actions-manual",
      "date_jst": "2026-08-19",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "failure_reason": "CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY 未設定のためGateで終了（設計どおり静かに寝る）（workflow_dispatch）",
      "external_ref": "32252996254",
      "source": "actions-api",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "interventions": [],
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_secrets",
      "stage_note": "実行判定が「秘密鍵が無い」で寝た。判定は行われ理由も残っている（設計どおりの棄却）"
    },
    {
      "run_id": "ap-20260819-ccr",
      "date_jst": "2026-08-19",
      "route": "ccr",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 511,
      "artifact": "/obsidian/compare/",
      "source": "autopilot-log+git-log",
      "interventions": [
        {
          "kind": "infra",
          "note": "無記事6日の原因はゲートではなくRunbookのレーンE追記漏れと判明（PR #510）"
        }
      ],
      "failure_reason": null,
      "external_ref": null,
      "repair_of": [
        "ap-20260816-none",
        "ap-20260817-none"
      ]
    },
    {
      "run_id": "ap-20260820-actions",
      "date_jst": "2026-08-20",
      "route": "actions",
      "attempted": true,
      "outcome": "cancelled",
      "failure_reason": "apt がジョブ上限90分を消尽し Claude Code が skipped のまま終了。恒久対処は PR #513",
      "external_ref": "32303452390",
      "source": "actions-api",
      "interventions": [
        {
          "kind": "infra",
          "note": "オーナー指示でフォント導入に時間制限と continue-on-error を入れた（PR #513）"
        }
      ],
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_class": "runner-timeout",
      "failed_at": "2026-08-20T06:21+09:00",
      "detected_at": "2026-08-20T07:00+09:00",
      "resolved_at": "2026-08-20T07:55+09:00",
      "detected_note": "同日のオーナー依頼セッションが検知。PR #513 マージが解消時刻",
      "failure_stage": "execution",
      "stage_note": "着手して実装層で死んだ。apt がジョブ上限を消尽"
    },
    {
      "run_id": "ap-20260820-owner",
      "date_jst": "2026-08-20",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 514,
      "artifact": "/obsidian/what-is-vault/",
      "source": "autopilot-log+git-log",
      "interventions": [
        {
          "kind": "substitute",
          "note": "3経路すべて不発のためオーナー依頼セッションが代走"
        }
      ],
      "failure_reason": null,
      "external_ref": null,
      "repair_of": [
        "ap-20260820-actions"
      ]
    },
    {
      "run_id": "ap-20260821-actions",
      "date_jst": "2026-08-21",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "failure_reason": "claude-code-action が非人間アクターを拒否（allowed_bots）。3秒で failure。恒久対処は PR #522/#523",
      "external_ref": "32419185478",
      "source": "actions-api",
      "interventions": [
        {
          "kind": "infra",
          "note": "allowed_bots: '*' を追加（PR #522）"
        }
      ],
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_class": "actor-rejected",
      "failed_at": "2026-08-21T06:23+09:00",
      "detected_at": "2026-08-21T09:20+09:00",
      "resolved_at": "2026-08-21T10:05+09:00",
      "detected_note": "再試行Routine(09:20)が検知。PR #522 マージが解消時刻",
      "failure_stage": "execution",
      "stage_note": "着手して実装層で死んだ。claude-code-action が非人間アクターを拒否"
    },
    {
      "run_id": "ap-20260821-ccr0920",
      "date_jst": "2026-08-21",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 521,
      "artifact": "/obsidian/plugins/",
      "source": "autopilot-log+git-log",
      "interventions": [],
      "failure_reason": null,
      "external_ref": null,
      "repair_of": [
        "ap-20260821-actions"
      ]
    },
    {
      "run_id": "ap-20260822-actions",
      "date_jst": "2026-08-22",
      "route": "actions",
      "attempted": true,
      "outcome": "no_artifact",
      "failure_reason": "conclusion=success だが permission_denials_count=14 で成果物ゼロ（num_turns=30）",
      "external_ref": "32528028588",
      "source": "actions-api",
      "interventions": [
        {
          "kind": "request",
          "note": "obsidian-autopilot.yml の permissions / additional_permissions / claude_args のツール許可リスト確認を依頼（**人は着手せず、AI自身が PR #526 で直した**。起票そのものが誤りだったが、依頼を出した事実は残す）"
        }
      ],
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_class": "permissions",
      "failed_at": "2026-08-22T06:20+09:00",
      "detected_at": "2026-08-22T07:30+09:00",
      "detected_note": "副系CCR(07:30)が get_job_logs で検知。PR #526（14:00 JST マージ）が claude_args に --allowedTools を足して解消。**翌朝 06:18 JST の主系 run 32599191984 が実際に出荷できたことが、その修理が効いた直接証拠**（ap-20260823-actions）",
      "resolved_at": "2026-08-22T14:00+09:00",
      "failure_stage": "execution",
      "stage_note": "着手したが権限拒否14件で成果物ゼロ。実行の層"
    },
    {
      "run_id": "ap-20260822-ccr0730",
      "date_jst": "2026-08-22",
      "route": "ccr-0730",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 524,
      "artifact": "/obsidian/plugins/dataview/",
      "source": "autopilot-log+git-log",
      "interventions": [],
      "failure_reason": null,
      "external_ref": null
    },
    {
      "run_id": "ap-20260823-actions",
      "date_jst": "2026-08-23",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 538,
      "artifact": "/obsidian/pricing/",
      "failure_reason": null,
      "external_ref": "32599191984",
      "interventions": [],
      "repair_of": [
        "ap-20260822-actions"
      ],
      "source": "actions-api+pr",
      "note": "**主系（GitHub Actions）の初出荷。** 2026-08-12 の導入から12回目の schedule 起動で初めて成果物が出た。run 32599191984 は event=schedule / actor=github-actions[bot] / 06:18→06:36 JST（約18分）。過去11回は10〜90秒で終わっており、所要時間そのものが「回ったが何もしていない」との違いを示す。PR #538 は github-actions[bot] が 06:33 JST にマージ（SEO Validation 通過による auto-merge）。**この行は主系自身が書いていない。** #538 の本文は「台帳に resolved_at と repair_of を記録した」と書いているが、13ファイルの diff に data/autopilot-runs.json は含まれていない。出荷したのに台帳が 0/3 のままだったのはこのため"
    },
    {
      "run_id": "ap-20260824-actions",
      "date_jst": "2026-08-24",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_class": "auth_or_credential",
      "failed_at": "2026-08-24T06:17+09:00",
      "detected_at": "2026-08-25T08:48+09:00",
      "detected_note": "副系v2フォールバック（本セッション）が obsidian-autopilot.yml の実行履歴を遡って発見。台帳に記録が無かった（成果物ゼロで落ちた回は台帳を書く主体がいない構造的な穴）",
      "failure_reason": "Claude Code ステップが result.is_error=true / num_turns=1 / duration_ms=486 / total_cost_usd=0 で即時失敗。実際の作業（ブランチ作成等）に入る前、初回のモデル呼び出し相当の時点で終わっている。full outputはshow_full_output未設定のためActionsログに出ておらず、正確なエラーメッセージは未特定",
      "external_ref": "32667079679",
      "interventions": [],
      "source": "actions-api",
      "failure_class_original": "auth_or_credential",
      "reclassified_at": "2026-08-25T15:40+09:00",
      "reclassified_note": "【2026-08-26 実測・決着】**原因は資格情報だった。版は容疑から外れる。**疑われていた版（claude-code-action c81e3bc6 が入れる Claude Code 2.1.241）を、**現在の有効なトークンで**直接走らせたところ正常に完走した: is_error=false / num_turns=1 / result=\"PROBE_OK\"（run 32919495397 の suspect-2.1.241・実費 $0.04）。同一プロンプト・同一トークンで回した対照 2.1.245 も同じく完走しており、装置側の誤りではない。つまり 2.1.241 × 旧トークン=失敗、2.1.241 × 新トークン=成功で、**動いている変数はトークンだけ。**さらに上流リポジトリの差分を実測すると c81e3bc6→16b3b310 の src/ の違いは `const claudeCodeVersion = \"2.1.241\" → \"2.1.245\"` の1文字列のみで、ラッパーのロジックは同一。版が失敗を説明できる余地がそもそも無かった。**当初の『auth_or_credential』が正しく、08-25 の『版が原因』という訂正のほうが誤りだった。**誤った理由は『失敗runと成功runでSHAが違う』を版の証拠として読んだこと——@v1 はフローティングタグなので、日をまたげばSHAはほぼ必ず違う。**あの対照は当たり前に差を見つける。** 残る留保: 旧トークンが無効だったことを直接観測したわけではない（旧トークンは既に無く、GitHub Secrets のメタデータは admin 権限が要り 403）。これは消去法による結論。また 08-24/08-25 と 08-26 では時刻も違うため、上流側の一時障害を完全には排除していない（ただし2日とも 486ms で完全同一という決定論的な形は、一時障害より資格情報の拒否と整合する）。 ---- 以下は 08-25 時点の記録（誤った結論を含む。経緯として残す） ---- 当初 auth_or_credential と記録したが誤り。版の実測: 失敗した2回はどちらも claude-code-action@v1 → SHA c81e3bc6（upstream の \"bump Claude Code to 2.1.241 / Agent SDK 0.3.241\"・2026-08-23T00:53Z）を引いていた。直前に出荷できた run 32599191984（08-23）は SHA 24dcd50c / CLI 2.1.240。ジョブログの Download action repository 行で直接確認できる。 秘密鍵は一度も変えていない状態で、同じ秘密鍵を使う run 32816234185（08-25 15:16 JST・SHA 16b3b310 / CLI 2.1.245）が通っている。「2日とも完全同一シグネチャだから flake ではない＝認証系」という推論が誤りで、決定的な startup 失敗も同一の数値を出す——**同一シグネチャは依存が固定されていることの証拠**だった。なお GitHub Secrets のメタデータ読み取りは admin 権限が要り HTTP 403 で読めないため、08-24〜08-25 の間に鍵が回っていなかったことまでは repo からは断定できない（Runbook §7-3 と同じ制約）。 【2026-08-25 訂正】この行は当初「秘密鍵は一度も変えていない」を前提にしていたが、**それは誤り。** 本run(32816234185)を起動したCCRセッションの記録によれば、**オーナーは本runの直前に `claude setup-token` を再実行し CLAUDE_CODE_OAUTH_TOKEN を更新している。** したがって最後の失敗(08-25 06:24)と本runの成功(08-25 15:16)の間で **版とトークンの2つが同時に動いており、どちらが効いたかはこの観測からは分離できない。** 版の相関（2.1.240成功 → 2.1.241で2日連続失敗 → 2.1.245成功）は事実で示唆は強いが、排除ではない。決着させるには、新トークンのまま uses: を c81e3bc6 に固定して1回走らせる（落ちれば版が原因で確定・費用$0）。",
      "resolved_at": "2026-08-25T15:40+09:00",
      "reclassified_confidence": "inconclusive",
      "failure_stage": "execution",
      "stage_note": "判定を通り抜けて起動したあと即死。実行の層"
    },
    {
      "run_id": "ap-20260825-actions",
      "date_jst": "2026-08-25",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_class": "auth_or_credential",
      "failed_at": "2026-08-25T06:24+09:00",
      "detected_at": "2026-08-25T08:48+09:00",
      "detected_note": "副系v2フォールバック（本セッション）が obsidian-autopilot.yml の実行履歴を遡って発見。前日分(ap-20260824-actions)と同時に台帳へ追記",
      "failure_reason": "前日(ap-20260824-actions)と同一シグネチャで2日連続失敗: is_error=true / num_turns=1 / duration_ms=486 / total_cost_usd=0。時間・失敗の形が完全一致しており単発のflakeではない。CLAUDE_CODE_OAUTH_TOKEN/ANTHROPIC_API_KEYいずれかの認証エラーが濃厚だが、full outputが伏せられておりログから断定はできない",
      "external_ref": "32779337325",
      "interventions": [],
      "source": "actions-api",
      "failure_class_original": "auth_or_credential",
      "reclassified_at": "2026-08-25T15:40+09:00",
      "reclassified_note": "【2026-08-26 実測・決着】**原因は資格情報だった。版は容疑から外れる。**疑われていた版（claude-code-action c81e3bc6 が入れる Claude Code 2.1.241）を、**現在の有効なトークンで**直接走らせたところ正常に完走した: is_error=false / num_turns=1 / result=\"PROBE_OK\"（run 32919495397 の suspect-2.1.241・実費 $0.04）。同一プロンプト・同一トークンで回した対照 2.1.245 も同じく完走しており、装置側の誤りではない。つまり 2.1.241 × 旧トークン=失敗、2.1.241 × 新トークン=成功で、**動いている変数はトークンだけ。**さらに上流リポジトリの差分を実測すると c81e3bc6→16b3b310 の src/ の違いは `const claudeCodeVersion = \"2.1.241\" → \"2.1.245\"` の1文字列のみで、ラッパーのロジックは同一。版が失敗を説明できる余地がそもそも無かった。**当初の『auth_or_credential』が正しく、08-25 の『版が原因』という訂正のほうが誤りだった。**誤った理由は『失敗runと成功runでSHAが違う』を版の証拠として読んだこと——@v1 はフローティングタグなので、日をまたげばSHAはほぼ必ず違う。**あの対照は当たり前に差を見つける。** 残る留保: 旧トークンが無効だったことを直接観測したわけではない（旧トークンは既に無く、GitHub Secrets のメタデータは admin 権限が要り 403）。これは消去法による結論。また 08-24/08-25 と 08-26 では時刻も違うため、上流側の一時障害を完全には排除していない（ただし2日とも 486ms で完全同一という決定論的な形は、一時障害より資格情報の拒否と整合する）。 ---- 以下は 08-25 時点の記録（誤った結論を含む。経緯として残す） ---- 当初 auth_or_credential と記録したが誤り。版の実測: 失敗した2回はどちらも claude-code-action@v1 → SHA c81e3bc6（upstream の \"bump Claude Code to 2.1.241 / Agent SDK 0.3.241\"・2026-08-23T00:53Z）を引いていた。直前に出荷できた run 32599191984（08-23）は SHA 24dcd50c / CLI 2.1.240。ジョブログの Download action repository 行で直接確認できる。 秘密鍵は一度も変えていない状態で、同じ秘密鍵を使う run 32816234185（08-25 15:16 JST・SHA 16b3b310 / CLI 2.1.245）が通っている。「2日とも完全同一シグネチャだから flake ではない＝認証系」という推論が誤りで、決定的な startup 失敗も同一の数値を出す——**同一シグネチャは依存が固定されていることの証拠**だった。なお GitHub Secrets のメタデータ読み取りは admin 権限が要り HTTP 403 で読めないため、08-24〜08-25 の間に鍵が回っていなかったことまでは repo からは断定できない（Runbook §7-3 と同じ制約）。 【2026-08-25 訂正】この行は当初「秘密鍵は一度も変えていない」を前提にしていたが、**それは誤り。** 本run(32816234185)を起動したCCRセッションの記録によれば、**オーナーは本runの直前に `claude setup-token` を再実行し CLAUDE_CODE_OAUTH_TOKEN を更新している。** したがって最後の失敗(08-25 06:24)と本runの成功(08-25 15:16)の間で **版とトークンの2つが同時に動いており、どちらが効いたかはこの観測からは分離できない。** 版の相関（2.1.240成功 → 2.1.241で2日連続失敗 → 2.1.245成功）は事実で示唆は強いが、排除ではない。決着させるには、新トークンのまま uses: を c81e3bc6 に固定して1回走らせる（落ちれば版が原因で確定・費用$0）。",
      "resolved_at": "2026-08-25T15:40+09:00",
      "reclassified_confidence": "inconclusive",
      "failure_stage": "execution",
      "stage_note": "判定を通り抜けて起動したあと即死。実行の層"
    },
    {
      "run_id": "ap-20260825-actions-force",
      "date_jst": "2026-08-25",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 568,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "32816234185",
      "interventions": [],
      "source": "session",
      "repair_of": [
        "ap-20260824-actions",
        "ap-20260825-actions"
      ],
      "note": "**主系の手動force実行（workflow_dispatch・triggering_actor=simplememofast）。** 同日の schedule run(ap-20260825-actions)が即時失敗した後の再走なので、run_id は route だけでは一意にならず -force を付けている。レーンFで1日を使い、記事は書いていない。修理の内容は claude-code-action を SHA 16b3b310（この run が実際に通した版）へpin したこと。**上流の壊れた版そのものは直せないが、勝手に乗り換える構造は直せる**——ここを固定しない限り、次の版が壊れていれば同じ2日が繰り返される。"
    },
    {
      "run_id": "ap-20260825-ccrfallback",
      "date_jst": "2026-08-25",
      "route": "ccr-fallback-v2",
      "attempted": true,
      "outcome": "shipped",
      "lane": null,
      "action": "maintenance",
      "pr": 548,
      "artifact": "data/autopilot-status.json,docs/obsidian/AUTOPILOT_LOG.md,.github/workflows/obsidian-autopilot.yml,data/autopilot-runs.json",
      "failure_reason": null,
      "external_ref": null,
      "interventions": [],
      "source": "session",
      "$recovered": "**[2026-08-28] 取り残しブランチからの復旧。**この行は当時のセッションが claude/obsidian-auto-20260825 に書いたが、PR #548 のマージ後だったため main に入らなかった（auto-merge は検証済みSHAだけをマージする設計の帰結）。2026-08-28 に取り残し5件を読み直したとき、内容が別経路で着地していない唯一の行だったので拾い上げた。\n\n**AI完走率が 76.2% → 77.3% に上がる追記なので、オーナーの明示の許可を得てから入れた。**数字が有利な方向に動く追記を拾った側の一存で入れない、という原則のため。\n\n元の記録は lane が文字列 \"null\" だった（値としては無意味なので、本来の null にした）。それ以外は当時の記録のまま。"
    },
    {
      "run_id": "ap-20260826-actions",
      "date_jst": "2026-08-26",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 586,
      "artifact": "/obsidian/sync/",
      "failure_reason": null,
      "external_ref": "32900786201",
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260827-actions",
      "date_jst": "2026-08-27",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33026752472",
      "interventions": [],
      "source": "act-reconcile",
      "detected_at": "2026-08-31T23:39:57.061Z",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "stage_note": "**Gate は success で終わったが、寝た理由が台帳に無い。**2026-08-27〜29 はこの形で3日連続沈黙し、セッションが手で起こすまで4日目まで誰も気づいていない"
    },
    {
      "run_id": "ap-20260827-ccr0920",
      "date_jst": "2026-08-27",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "shipped",
      "lane": "C",
      "action": "refresh",
      "pr": 660,
      "artifact": "/obsidian/plugins/",
      "failure_reason": null,
      "external_ref": null,
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260827-owner-session",
      "date_jst": "2026-08-27",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 668,
      "artifact": "/obsidian/sync/icloud/",
      "failure_reason": null,
      "external_ref": null,
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260828-actions",
      "date_jst": "2026-08-28",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33143661940",
      "interventions": [],
      "source": "act-reconcile",
      "detected_at": "2026-08-31T23:39:56.990Z",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "stage_note": "**Gate は success で終わったが、寝た理由が台帳に無い。**2026-08-27〜29 はこの形で3日連続沈黙し、セッションが手で起こすまで4日目まで誰も気づいていない"
    },
    {
      "run_id": "ap-20260828-ccr0920",
      "date_jst": "2026-08-28",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 696,
      "artifact": "/obsidian/sync/official-sync/",
      "failure_reason": null,
      "external_ref": null,
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260829-actions",
      "date_jst": "2026-08-29",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33230445898",
      "interventions": [],
      "source": "act-reconcile-session",
      "detected_at": "2026-08-31T23:27:34Z",
      "detected_note": "Actions API のステップ一覧から起こした。Gate は success だが Checkout 以降が全て skipped ＝ Gate が run=false を出した回（秘密鍵未設定・当日重複のいずれか。ステップの conclusion からはどちらかまでは決まらない）。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "stage_note": "**Gate は success で終わったが、寝た理由が台帳に無い。**2026-08-27〜29 はこの形で3日連続沈黙し、セッションが手で起こすまで4日目まで誰も気づいていない"
    },
    {
      "run_id": "ap-20260829-ccr0920",
      "date_jst": "2026-08-29",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "no_artifact",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "副系が当日ロック（claude/obsidian-auto-20260829）を claim だけ取って、記事もPRも作らずに終わった。**同じ日の主系（ap-20260829-actions・skipped_gate）が何もしなかったのは、これが理由。**Gate はブランチの存在を『進行中/実行済み』と読んでスキップし、3秒で success を返す。**claim を取った側が死ぬと、その日は主系も走らないまま緑になる。**主系側の行だけを見ると『重複でスキップした正常な日』に見えるので、この行を別に立てている",
      "external_ref": null,
      "interventions": [],
      "source": "git: claude/obsidian-auto-20260829 は claim コミット1件のみ（36de90a6・lane: ccr-0920）で main との差分ゼロ。PRは存在しない。主系 run 33230445898 は steps 3〜13 が全て skipped で3秒 success",
      "failure_class": "claim_without_completion",
      "failed_at": "2026-08-29T09:20+09:00",
      "detected_at": "2026-09-01T08:10+09:00",
      "failure_stage": "execution",
      "stage_note": "当日ロックを取ったまま何も作らずに終了。実行の層"
    },
    {
      "run_id": "ap-20260830-actions",
      "date_jst": "2026-08-30",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Claude Code ステップが失敗し、同じトークンでの単独実行も HTTP 429（使用量上限）を返した: \"You've hit your weekly limit · resets Aug 31, 11pm (UTC)\"。**資格情報は失効していない** —— トークンを入れ替えても直らないし、入れ替えれば無事な鍵を捨てることになる。上限がリセットされれば自動で戻る。副系CCRも同じアカウントなので同じ時間帯に同じ形で落ちる。【この行の但し書き】2026-09-01 のセッションが Actions API とジョブログから起こした。当時のワークフローの切り分けステップと interpretRun は2値しか持たず、429 を「資格情報が通っていない。claude setup-token を再実行せよ」と needs_triage なしで書く形だったため、**その誤った断定は台帳に入れていない**（同じPRで両方を直した）。",
      "external_ref": "33279844326",
      "interventions": [],
      "source": "act-reconcile-session",
      "failure_class": "usage_limit",
      "detected_at": "2026-08-31T23:27:44Z",
      "failure_stage": "cost",
      "stage_note": "週次の実行枠（usage limit）。主系・副系が同じアカウントの枠を食うため同日に落ちる"
    },
    {
      "run_id": "ap-20260831-actions",
      "date_jst": "2026-08-31",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Claude Code ステップが失敗し、同じトークンでの単独実行も HTTP 429（使用量上限）を返した: \"You've hit your weekly limit · resets 11pm (UTC)\"。**資格情報は失効していない** —— トークンを入れ替えても直らないし、入れ替えれば無事な鍵を捨てることになる。上限がリセットされれば自動で戻る。副系CCRも同じアカウントなので同じ時間帯に同じ形で落ちる。【この行の但し書き】2026-09-01 のセッションが Actions API とジョブログから起こした。当時のワークフローの切り分けステップと interpretRun は2値しか持たず、429 を「資格情報が通っていない。claude setup-token を再実行せよ」と needs_triage なしで書く形だったため、**その誤った断定は台帳に入れていない**（同じPRで両方を直した）。",
      "external_ref": "33340960317",
      "interventions": [],
      "source": "act-reconcile-session",
      "failure_class": "usage_limit",
      "detected_at": "2026-08-31T23:27:44Z",
      "failure_stage": "cost",
      "stage_note": "週次の実行枠（usage limit）。主系・副系が同じアカウントの枠を食うため同日に落ちる"
    },
    {
      "run_id": "ap-20260831-ccr0920",
      "date_jst": "2026-08-31",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "実行枠（週次）の上限。Routine `trig_01ESF9AHax6buS9X1pdFv657`（09:20 JST・ccr-0920）の起動が 13 秒で FAILED（fired 2026-08-31T00:20:33Z / finished 00:20:46Z / session cse_01VZpZ4oseTMEgbBPzddUSxN）。同セッションの rate_limit_info が `seven_day` / `rejected` / resetsAt 2026-08-31T23:00:00Z を返している。**主系の 429 と同じ事象の副系側**で、同じアカウントなので代走にならなかった。1ターンも回っていないため当日ブランチの占有も無い（claude/obsidian-auto-20260831 は存在しない）",
      "external_ref": "cse_01VZpZ4oseTMEgbBPzddUSxN",
      "interventions": [],
      "source": "act-reconcile-session",
      "failure_class": "usage_limit",
      "failed_at": "2026-08-31T00:20:46Z",
      "detected_at": "2026-09-01T00:14:46Z",
      "detected_note": "list_triggers の last_run を実見（PR #739 のセッション）。**last_run は最新1回しか保持しない**ので、08-30 の同経路は既に上書きされていて確かめられない",
      "failure_stage": "cost",
      "stage_note": "週次の実行枠（usage limit）。主系・副系が同じアカウントの枠を食うため同日に落ちる"
    },
    {
      "run_id": "ap-20260901-actions",
      "date_jst": "2026-09-01",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 749,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33454414490",
      "interventions": [],
      "source": "session",
      "repair_note": "主系（Actions・run 33454414490・09:21→09:39 JST）がレーンFで PR #749「§0-3 の経路を限る」を出荷した回。**この行は 2026-09-02 の配信前日の引き直しで人が起こした。**AUTOPILOT_LOG 09-02 分が「09:00 の reconcile-runs が埋める見込み」と書いて手で足さなかったが、reconcile-runs は成功回を自動追記しない（PR 番号の特定が要るため。scripts/autopilot-act.mjs の handler に明記）ので、待っても埋まらなかった。**artifact は null** —— 公開ページを出していない回（レーンFの慣例）。同日の副系 ccr-0920 は 00:20:49Z に SUCCEEDED したが主系が当日ロックを先に取っていたためスキップ（70秒・$0.42、#749 の本文に記録）。"
    },
    {
      "run_id": "ap-20260902-actions",
      "date_jst": "2026-09-02",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 774,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33568838189",
      "interventions": [],
      "source": "session",
      "repair_of": [
        "ap-20260829-ccr0920"
      ],
      "repair_note": "触ったのは scripts/autopilot-gate.mjs（isAbandonedClaim と run_takeover）/ scripts/autopilot-selfheal.mjs（owner_routed）/ scripts/autopilot-drill.mjs / scripts/property-tests.mjs / docs/obsidian/AUTOPILOT_RUNBOOK.md。**artifact は null** —— 公開ページを出していない回なので（レーンFの慣例。ap-20260825-actions-force と同じ）。\n\n**部分的な修理であることを明記する。**判定（isAbandonedClaim）・Runbook §0-2 の引き継ぎ手順・ドリル4件・性質2件は main へ入るので、Runbook を読む経路（副系CCR・代走）には本日から効く。**主系の bash Gate はまだ旧判定のまま** —— .github/workflows/obsidian-autopilot.yml への push を GitHub が拒否した（fine-grained PAT に workflow スコープが無い）。これは 2026-08-25 の決定どおりの動作で（act-gh-pat-scope-and-rotation: 足すと無人の主系が自分の permissions を書き換えられるため足さない／ワークフローの修理は副系CCRが引き取る）、パッチは AUTOPILOT_LOG.md 本日分に貼って引き継いだ。"
    },
    {
      "run_id": "ap-20260903-actions",
      "date_jst": "2026-09-03",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "A",
      "action": "refresh",
      "pr": 793,
      "artifact": "/obsidian/getting-started/",
      "failure_reason": null,
      "external_ref": "33692832179",
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260903-actions-33706886868",
      "date_jst": "2026-09-03",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33706886868",
      "interventions": [],
      "source": "act-reconcile",
      "detected_at": "2026-09-03T02:44:32.638Z",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "stage_note": "**Gate は success で終わったが、寝た理由が台帳に無い。**2026-08-27〜29 はこの形で3日連続沈黙し、セッションが手で起こすまで4日目まで誰も気づいていない"
    },
    {
      "run_id": "ap-20260904-actions",
      "date_jst": "2026-09-04",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "C",
      "action": "refresh",
      "pr": 846,
      "artifact": "/obsidian/plugins/",
      "failure_reason": null,
      "external_ref": "33815445009",
      "external_ref_note": "2026-09-04に欠けていた結合キーを照合して補記。PR #846 の作成時刻 2026-09-03T23:17:14Z は run 33815445009 の Claude Code step（22:58:03Z〜23:18:35Z）内で、その作成時刻を含む成功runは直近100件中この1件だけ。同runの成果物確認ログが claude/obsidian-auto-20260904 を明示し、PRのhead branchとも一致。出荷・介入・検知者・実施日は変更していない。",
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260905-actions",
      "date_jst": "2026-09-05",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Claude Code ステップが 1169000ms で失敗し、同じトークンでの単独実行が **HTTP 429（使用量上限）** を返した（ワークフローの切り分けステップ）。**資格情報は失効していない —— トークンを入れ替えても直らないし、入れ替えれば無事な鍵を捨てることになる。**上限がリセットされれば自動で戻る。副系CCRも同じアカウントを使うので**同じ時間帯に同じ形で落ちる**（代走は当てにできない）。恒久的に減らすなら上限を上げるか、1回あたりの入力量を下げること（自動判定）",
      "external_ref": "33926832821",
      "interventions": [],
      "source": "act-reconcile-session",
      "failure_class": "usage_limit",
      "failed_at": "2026-09-04T23:05:43Z",
      "detected_at": "2026-09-05T00:24:05.031Z",
      "detected_note": "Actions run 33926832821 を workflow_dispatch で照合。失敗時刻は GitHub step #11「Claude Code（Runbook 1イテレーション実行）」の completed_at。",
      "failure_stage": "cost"
    },
    {
      "run_id": "ap-20260905-actions-33931560258",
      "date_jst": "2026-09-05",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "33931560258",
      "interventions": [],
      "source": "act-reconcile-session",
      "detected_at": "2026-09-05T00:24:05.063Z",
      "detected_note": "Actions run 33931560258 を workflow_dispatch で照合。失敗ステップの確定時刻は未取得。run の作成時刻で代用しない。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_branch_claimed",
      "stage_note": "Gate で止まった（skip_branch_claimed）"
    },
    {
      "run_id": "ap-20260905-actions-33959414641",
      "date_jst": "2026-09-05",
      "route": "actions",
      "attempted": true,
      "outcome": "no_artifact",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "2026-09-05 09:58:55Z開始の実行は20 turns・実費USD0.8407852で終了したが、新しい成果物PRはない。旧成果物検査は当日ブランチの存在のみで成功した。実際のclaude/obsidian-auto-20260905先頭は開始前の2026-09-04 22:53:58Zに作られた宣言コミットa8f319cfb07687f54c1e1f2548e3d96324c8b23eのままで、対象ブランチのPRは全状態で0件。既存PR943の実行ID照合修正後の正常実行は別途確認する。",
      "external_ref": "33959414641",
      "interventions": [],
      "source": "session",
      "failure_class": "no_artifact",
      "detected_note": "GitHub run33959414641の実ログ、ブランチref、先頭commit時刻・変更ファイル、全状態PR一覧を2026-09-06に照合。run conclusion=successをshippedとは扱わない。",
      "failure_stage": "execution"
    },
    {
      "run_id": "sm-20260905-queue-collision",
      "date_jst": "2026-09-05",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "refresh",
      "pr": 923,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "session_015sPuk4aoPzjA99e7wpSiB9",
      "interventions": [],
      "source": "session"
    },
    {
      "run_id": "ap-20260906-actions",
      "date_jst": "2026-09-06",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "GitHub run 33996430959 のSDK結果で error_max_turns / num_turns=251 / total_cost_usd=19.6008722 を確認。資格情報の単独診断は成功。ブランチの履歴と保存ログにはC09の価値契約を4回宣言・取り下げた後、分割sitemapが許可範囲外となり出荷を断念した記録がある。この2つの詰まり（分割sitemapの許可・宣言前の記帳順序）は既存PR #973（a0425806）で修正済み、支出閾値はPR #976で実装済み。モデル・資格情報を根拠なく入れ替えたり同じ修正を再実装しない。修正後の主系正常完走は未確認。後続run 34022754964はskip_branch_claimedでモデル未実行のため復旧証拠にしない。",
      "external_ref": "33996430959",
      "interventions": [],
      "source": "act-reconcile-session",
      "failed_at": "2026-09-05T23:22:58Z",
      "detected_at": "2026-09-05T23:24:43.430Z",
      "detected_note": "Actions run 33996430959 を repository_dispatch で照合。監視起動元run 33996430959、自動起動のAPI検証=false。失敗時刻は GitHub step #12「Claude Code（Runbook 1イテレーション実行）」の completed_at。",
      "needs_triage": true,
      "failure_stage": "execution"
    },
    {
      "run_id": "ap-20260906-actions-34022754964",
      "date_jst": "2026-09-06",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "34022754964",
      "interventions": [],
      "source": "act-reconcile-session",
      "detected_at": "2026-09-06T08:47:34.014Z",
      "detected_note": "Actions run 34022754964 を repository_dispatch で照合。監視起動元run 34022754964、自動起動のAPI検証=false。失敗ステップの確定時刻は未取得。run の作成時刻で代用しない。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_branch_claimed",
      "stage_note": "Gate で止まった（skip_branch_claimed）"
    },
    {
      "run_id": "ap-20260906-owner-credential-ci",
      "date_jst": "2026-09-06",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 1012,
      "artifact": null,
      "failure_reason": null,
      "external_ref": null,
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーの全件修正・デプロイ指示から着手。自律起票として数えない。"
        }
      ],
      "source": "session"
    },
    {
      "run_id": "ap-20260906-owner-session-capacities-recovery",
      "date_jst": "2026-09-06",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 1024,
      "artifact": "/obsidian/compare/capacities/",
      "failure_reason": null,
      "external_ref": "01a07139-6304-7041-bd12-ff18b3019e7a",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーの未公開項目の復旧・追加権限付与を受けた一回の手動復旧。通常の定期実行による自律起票とは数えない。"
        }
      ],
      "source": "session"
    },
    {
      "run_id": "ap-20260907-actions",
      "date_jst": "2026-09-07",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 1051,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "34064655036",
      "interventions": [],
      "source": "session",
      "repair_of": [
        "ap-20260905-actions-33959414641",
        "ap-20260906-actions"
      ],
      "repair_note": "**原因を今日直したのではない。直っていることを今日の完走で確かめた。**修理そのものは既に main にある —— a91a23b8（PR #943・成果物検査を「当日ブランチが在るか」から「この run に紐づく新しいPRが在るか」へ）/ a0425806（PR #973・分割sitemap `sitemap-*.xml` の許可と記帳のコミット順序）/ e320d394（PR #976・宣言した支出閾値を run の中で効かせる）。09-06 の主系 run 33996430959 は 2026-09-05T23:22:58Z に error_max_turns（251 turns）で落ちており、後ろ2本が main に入る約1時間前。後続 run 34022754964 は skip_branch_claimed でモデル未実行。**修正後にモデルが実際に走った定期主系の run は本日の 34064655036 が最初**で、この行がその確認材料。\\n\\nこの run が実際に通した経路: 宣言→実装のコミット順序（health-intake の記帳を stash して宣言だけ先に push・1831da64。09-06 の implementation preceded declaration は再現せず）/ 分割sitemapの許可（decision-monitor --publish-report が触る autopilot/index.html・sitemap-ja.xml・sitemap.xml を touches に入れた契約が boundedness を pass。09-06 に候補を6回作り直しても通らなかった判定）/ 成果物の実行ID照合（PR #1051 がこの run に紐づく新しい記録）/ 支出閾値。\\n\\n**通していない経路:** 新しい公開URLを1本足す形（今日はレーンFで .html を新規追加していない。09-06 のオーナー起動 PR #1024 が /obsidian/compare/capacities/ を分割sitemapごと出荷しているが、それは本 run の証跡ではない）と、副系CCRが同じ修正の上で走ること（09-06 以降、副系の行は台帳に無い）。artifact は null —— 公開ページを出していない回（レーンFの慣例）。"
    },
    {
      "run_id": "ap-20260908-actions-codex-01a07dad-42f9-72e2-897c-221062dc0f2b",
      "date_jst": "2026-09-08",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 1116,
      "artifact": "/obsidian/compare/memos/",
      "failure_reason": null,
      "external_ref": "01a07dad-42f9-72e2-897c-221062dc0f2b",
      "interventions": [],
      "source": "codex-scheduled-thread"
    },
    {
      "run_id": "ap-20260908-actions-codex-01a07dad-83f0-72b2-82db-92ff1a4a89bc",
      "date_jst": "2026-09-08",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": "E",
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "codex:01a07dad-83f0-72b2-82db-92ff1a4a89bc",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "blocked",
      "gate_code": "value_contract_budget_kind_mismatch",
      "stage_note": "engine=codex; automation=obsidian; scheduled_slot=2026-09-08T06:00:00+09:00; preflight run=true. Both article candidates rejected: declared prediction 4.3285265 USD assessed against default analysis cap 1.50 USD; undeclared lane E prediction uses article median. Repair files outside self_repair.may_modify. Local record only; no claim, PR, implementation or publication. Codex actual USD unavailable. Recovered from the scheduled task result and local ledger patch on 2026-09-08; distinct from the successful PR1116 task. PR1120 repairs the classifier, not this past run outcome."
    },
    {
      "run_id": "ap-20260908-ccr-0920-codex-01a07e63-4255-7be2-8623-3ab271db643b",
      "date_jst": "2026-09-08",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Original scheduled Codex turn terminated abnormally; cause needs triage. No business success inferred.",
      "external_ref": "codex:01a07e63-4255-7be2-8623-3ab271db643b",
      "interventions": [],
      "source": "act-reconcile-session",
      "failed_at": "2026-09-08T00:20:32.370Z",
      "detected_at": "2026-09-13T03:00:14.886Z",
      "detected_note": "Codex original turn 01a07e63-44d2-7bb3-a0dc-4cdbf010e08e; transcript SHA256 af56b67601dccc50699d1007dc539a8266f2108611f0d90873d5279e4351299e; observed 2026-09-13T02:55:36.540Z",
      "needs_triage": false,
      "failure_stage": "execution",
      "failure_class": "usage_limit",
      "triage_note": "Structured Codex runtime code usage_limit_exceeded; original turn 01a07e63-44d2-7bb3-a0dc-4cdbf010e08e; receipt SHA256 2a79daea114fcf1f2c46d6aa730d5a55a6adcf968f584d42bca6d0d7124d2938"
    },
    {
      "run_id": "ap-20260909-actions-codex-01a082d3-f05b-79a3-a19b-043b2bdf2d5c",
      "date_jst": "2026-09-09",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_duplicate",
      "lane": null,
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "codex:01a082d3-f05b-79a3-a19b-043b2bdf2d5c",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "reason": "engine=codex; automation_id=obsidian; scheduled_slot=2026-09-09T06:00:00+09:00 (scheduler verified); preflight=skip_primary_running. Related owner-directed task 01a07f2e-a1ba-79f2-98e1-07b11da20d19 confirmed inProgress; conservatively treated as concurrent occupancy, not a second scheduled primary. Daily claim/PR absent; main and production status remain 2026-09-08. No implementation, claim or publication. Original run saved this record locally only. Recovered to the shared ledger on 2026-09-10 from scheduler/preflight/result records; original outcome unchanged."
    },
    {
      "run_id": "ap-20260910-actions-codex-01a087f9-4092-7bc3-8274-69722c79e45b",
      "date_jst": "2026-09-10",
      "route": "actions",
      "attempted": true,
      "outcome": "no_artifact",
      "lane": "E",
      "action": "skip",
      "pr": 1218,
      "artifact": null,
      "failure_reason": "C13 Templater requires actual Obsidian GUI verification; Obsidian.app is absent and unattended new-application execution is not authorized. No content implementation was made.",
      "external_ref": "01a087f9-4092-7bc3-8274-69722c79e45b",
      "interventions": [],
      "source": "codex-scheduled-thread",
      "failure_class": "no_artifact",
      "failure_stage": "execution",
      "stage_note": "Preflight returned run:true and remote daily claim a97d2005 was acquired. Official artifact/version evidence existed from the prior retry, but the quality gate requires operating Templater inside Obsidian. The application is not installed; missing observations were not inferred or written as zero."
    },
    {
      "run_id": "ap-20260910-actions-codex-01a087fa-5c5d-7ef0-ac9a-bb6abf67d499",
      "date_jst": "2026-09-10",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_duplicate",
      "lane": null,
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "codex:01a087fa-5c5d-7ef0-ac9a-bb6abf67d499",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "reason": "engine=codex; automation_id=obsidian; scheduled_slot=2026-09-10T06:00:00+09:00 (scheduler verified). Initial fresh preflight allowed selection. Recheck found a new external daily claim a97d20055a0a26b5e4a0673495d452a60d41456a created 06:08:04 JST; owner task/status unverified. Final preflight rejected unknown execution status. No implementation, declaration push, claim or publication. Local-only ledger. Recovered to the shared ledger on 2026-09-10 from the completed scheduled task and saved ledger; original outcome unchanged. This is distinct from the separate claim-owning no_artifact run recorded in PR1218."
    },
    {
      "run_id": "ap-20260911-ccr-0920-codex-01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a",
      "date_jst": "2026-09-11",
      "route": "ccr-0920",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 1237,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "codex:01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a",
      "interventions": [],
      "source": "codex-automation",
      "repair_of": [
        "ap-20260910-actions-codex-01a087f9-4092-7bc3-8274-69722c79e45b"
      ],
      "repair_note": "前日の C13 は Obsidian GUI が無い実行環境では固有価値を検証できず、claim 後に no_artifact で停止した。本 run は品質ゲートを弱めず、検証不能な候補を pending のまま保留して同一 run 内で実測可能な次候補へ進む Lane E 選定手順を Runbook に追加した。環境が変われば queue 先頭から再評価し、保留候補を done/drop 扱いにしない。"
    },
    {
      "run_id": "ap-20260912-actions-codex-01a09246-247e-7400-bed2-1fb7aa54a052",
      "date_jst": "2026-09-12",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": "Latest repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a cannot be read through read_thread; preflight rejects unknown execution status.",
      "external_ref": "codex:01a09246-247e-7400-bed2-1fb7aa54a052",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "blocked",
      "gate_code": "unknown_execution_status",
      "reason": "engine=codex; automation_id=obsidian; scheduled_slot=2026-09-12T06:00:00+09:00 (scheduler verified); fresh preflight rejected unknown execution status: latest repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a has no readable match through read_thread. Known local scheduled and related owner tasks completed. Prior repair reflected in main/prod Sep11 status, but merged publication is not task completion. No Sep12 claim or PR. No claim, implementation, PR or publication. Local-only ledger. Recovered to the shared ledger on 2026-09-13 from the completed scheduled task and its saved local ledger. Original gate outcome retained; no execution or publication success inferred."
    },
    {
      "run_id": "ap-20260912-ccr-0920-codex-01a092fe-2a4e-7c11-996c-4189040c09d8",
      "date_jst": "2026-09-12",
      "route": "ccr-0920",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": "engine=codex automation=obsidian-2 scheduled_slot=2026-09-12T09:20:00+09:00; preflight rejected unknown execution state: latest repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a unavailable through read_thread. No claim or publication.",
      "external_ref": "codex:01a092fe-2a4e-7c11-996c-4189040c09d8",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "reason": "engine=codex automation=obsidian-2 scheduled_slot=2026-09-12T09:20:00+09:00; preflight rejected unknown execution state: latest repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a unavailable through read_thread. No claim or publication. Recovered to the shared ledger on 2026-09-13 from the completed scheduled task and its saved local ledger. Original gate outcome retained; no execution or publication success inferred."
    },
    {
      "run_id": "ap-20260912-ccr-0920-codex-01a093a1-9764-7d52-945b-1cb09e18e5a5",
      "date_jst": "2026-09-12",
      "route": "ccr-0920",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": "skip",
      "pr": null,
      "artifact": null,
      "failure_reason": "engine=codex; automation_id=obsidian-2; scheduled_slot=2026-09-12T12:20:00+09:00; preflight rejected unknown execution state of repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a; primary and earlier retry completed. No implementation or publication.",
      "external_ref": "codex:01a093a1-9764-7d52-945b-1cb09e18e5a5",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_unrecorded",
      "gate_code": null,
      "reason": "engine=codex; automation_id=obsidian-2; scheduled_slot=2026-09-12T12:20:00+09:00; preflight rejected unknown execution state of repair task 01a08e7c-1a0e-7003-b3af-fb72dfc4ef9a; primary and earlier retry completed. No implementation or publication. Recovered to the shared ledger on 2026-09-13 from the completed scheduled task and its saved local ledger. Original gate outcome retained; no execution or publication success inferred."
    },
    {
      "run_id": "ap-20260913-owner-session-company-os",
      "date_jst": "2026-09-13",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "wiring",
      "pr": 1306,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "01a09937-5f64-7032-9084-650e5bdd6c28",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーのAutonomous Company OS構築指示を受けたGoal実行。自然定期起動・ゼロタッチ起票としては数えない。"
        }
      ],
      "source": "session"
    },
    {
      "run_id": "ap-20260913-owner-session-billing-readiness",
      "date_jst": "2026-09-13",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "wiring",
      "pr": 1314,
      "artifact": "/data/billing-recovery-readiness-20260913.json",
      "failure_reason": null,
      "external_ref": "codex:01a0993f-e639-7733-9fe9-1720c17e90c2",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーが課金回復のテスト済み運用準備を指定した手動セッション。自然起票・無介入の意思決定として数えない。"
        }
      ],
      "source": "session",
      "note": "課金回復の一業務施策。API PR318とiOS PR503の検証・本番監視を経て運用準備を受け入れた。実際の決済回復と案内の寄与は未観測。"
    },
    {
      "run_id": "ap-20260913-owner-session-service-notice-readiness",
      "date_jst": "2026-09-13",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "wiring",
      "pr": 1322,
      "artifact": "/data/service-notice-readiness-20260913.json",
      "failure_reason": null,
      "external_ref": "codex:01a0993f-e639-7733-9fe9-1720c17e90c2",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーが障害案内のテスト済み運用準備を指定した手動セッション。自然起票・無介入の意思決定として数えない。"
        }
      ],
      "source": "session"
    },
    {
      "run_id": "ap-20260914-actions-codex-01a09c93-4c00-78c0-9d0f-f47136880182",
      "date_jst": "2026-09-14",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "E",
      "action": "new",
      "pr": 1342,
      "artifact": "/obsidian/journaling/",
      "failure_reason": null,
      "external_ref": "codex:01a09c93-4c00-78c0-9d0f-f47136880182",
      "interventions": [],
      "source": "codex-automation",
      "reason": "engine=Codex; automation=obsidian; planned_slot=2026-09-14T06:00:00+09:00; actual_task=01a09c93-4c00-78c0-9d0f-f47136880182. C16 manual journaling examples under prospective publishing-day contract. Publication becomes effective only when this PR merges and production matches. Natural collection is separate from business uplift."
    },
    {
      "run_id": "ap-20260915-actions-codex-01a0a1b9-4982-70f3-b2d6-eed77be68e26",
      "date_jst": "2026-09-15",
      "route": "actions",
      "attempted": true,
      "outcome": "no_artifact",
      "lane": "E",
      "action": "skip",
      "pr": 1386,
      "artifact": null,
      "failure_reason": "Initial native preflight admitted this run. C15 prospective measurement was rejected by the active site-wide brand-2026-08-11-entity-merge experiment. No content implementation, declaration or business publication; independent daily collection verified. This is not a preflight skip or a shipped action.",
      "external_ref": "codex:01a0a1b9-4982-70f3-b2d6-eed77be68e26",
      "interventions": [],
      "source": "codex-automation",
      "failure_stage": "eligibility",
      "eligibility_verdict": "blocked",
      "gate_code": "measurement_experiment_overlap",
      "stage_note": "engine=Codex; automation=obsidian; scheduled slot=2026-09-15 06:00 JST; started=2026-09-15 06:01:09.852 JST; initial gate receipt e853083a6b24030a2557cb2eae0144bbcc7c7af0cd8f96bd1c9b08f92c976989. Protected measurement gate and active experiment scopes unchanged.",
      "failure_class": "no_artifact"
    },
    {
      "run_id": "ap-20260916-actions-codex-01a0a6e0-4080-7ec0-953e-cff70fbeaa09",
      "date_jst": "2026-09-16",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Structured Codex runtime code usage_limit_exceeded; original turn 01a0a6e0-4347-7fa1-86d8-c2d630e94bf6; receipt SHA256 474cdfbf4eb846127ea9aaeb9cc987a1dd305afd42c179797a1f1e1318f988ed",
      "external_ref": "codex:01a0a6e0-4080-7ec0-953e-cff70fbeaa09",
      "interventions": [],
      "source": "act-reconcile",
      "failure_class": "usage_limit",
      "failed_at": "2026-09-15T21:01:56.057Z",
      "detected_at": "2026-09-17T14:34:10.102Z",
      "detected_note": "Codex original turn 01a0a6e0-4347-7fa1-86d8-c2d630e94bf6; transcript SHA256 9b9e48811d5a346bd2f1f1c9a17772b31efd7a685b56db609d0f90b55778aaf0; observed 2026-09-17T14:34:10.102Z; automatic detection receipt SHA256 e8bbf11e3eb77ffd28baf58ac3259e0c81f1d8b6c33173a529cd18a748eac1aa",
      "failure_stage": "cost"
    },
    {
      "run_id": "ap-20260916-owner-session-pagespeed",
      "date_jst": "2026-09-16",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "repair",
      "pr": 1426,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "github-pr:1425+1426",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナーのPageSpeed改善・マージ・公開指示による作業。定期起動・自然起票・無介入の成功には数えない。"
        }
      ],
      "source": "session",
      "note": "PR1425と追加PR1426を同じPageSpeed改善サイクルとして1行で回収。2026-09-16に両方公開済み。監査PR1431や未採用実験は出荷数に含めない。ローカルCodex定期タスクの未取得記録・成否は依然不明。",
      "evidence": "docs/perf/owner-session-recovery-20260917.json"
    },
    {
      "date_jst": "2026-09-17",
      "route": "owner-session",
      "attempted": true,
      "lane": "F",
      "action": "repair",
      "artifact": null,
      "source": "session",
      "evidence": "docs/perf/pagespeed-reconciliation-20260918.json",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナー依頼のPageSpeed継続作業。自然定期運転・無介入出荷として数えない。"
        }
      ],
      "run_id": "ap-20260917-owner-session-pagespeed-navigation",
      "outcome": "shipped",
      "pr": 1441,
      "failure_reason": null,
      "external_ref": "github-pr:1441",
      "note": "検証済みのページ内移動修正1441を1サイクルとして回収。不採用動画案1440は出荷に数えない。"
    },
    {
      "date_jst": "2026-09-17",
      "route": "owner-session",
      "attempted": true,
      "lane": "F",
      "action": "repair",
      "artifact": null,
      "source": "session",
      "evidence": "docs/perf/pagespeed-reconciliation-20260918.json",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナー依頼のPageSpeed継続作業。自然定期運転・無介入出荷として数えない。"
        }
      ],
      "run_id": "ap-20260917-owner-session-pagespeed-poster",
      "outcome": "failed",
      "pr": 1443,
      "external_ref": "github-pr:1443+1445",
      "failure_reason": "Poster1443 and rollback1445 both failed their original post-merge Japanese performance budget. Original content was restored; speed recovery and causality are unproven.",
      "failure_stage": "execution",
      "needs_triage": true,
      "note": "ポスター試行とロールバックを1つの失敗サイクルとして保持。成功出荷や今回の1200px候補として計上しない。",
      "failure_class": "post-merge-performance-budget"
    },
    {
      "run_id": "ap-20260918-actions-codex-01a0b12d-3339-76f1-9627-c1add8c8dad1",
      "date_jst": "2026-09-18",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Structured Codex runtime code usage_limit_exceeded; original turn 01a0b12d-3693-7930-80d4-e5dba3e33048; receipt SHA256 2a289ab982118e0d8b92a1d29b5e5f37d8ebbc34687f1e4ae0a0236fc59a2fbf",
      "external_ref": "codex:01a0b12d-3339-76f1-9627-c1add8c8dad1",
      "interventions": [],
      "source": "act-reconcile",
      "failure_class": "usage_limit",
      "failed_at": "2026-09-17T21:02:08.951Z",
      "detected_at": "2026-09-17T21:35:41.289Z",
      "detected_note": "Codex original turn 01a0b12d-3693-7930-80d4-e5dba3e33048; transcript SHA256 c66f86a34f21e40bb749f82a6b537a29b609cfddcb821f24d4154631db6a0f9e; observed 2026-09-17T21:35:41.289Z; automatic detection receipt SHA256 f1645dcab873c2b55d6cd0053b9067d016fa21cee6d219b8cdd0d3d55ba82054",
      "failure_stage": "cost"
    },
    {
      "run_id": "ap-20260918-owner-session-pagespeed-density",
      "date_jst": "2026-09-18",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "repair",
      "pr": 1449,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "github-pr:1449",
      "interventions": [
        {
          "kind": "request",
          "note": "オーナー依頼のPageSpeed継続作業。自然定期運転・無介入出荷として数えない。"
        }
      ],
      "source": "session",
      "repair_of": [
        "ap-20260917-owner-session-pagespeed-poster"
      ],
      "repair_note": "PR #1449 の main 同一SHAで公開後PageSpeed Audit 35318018414が既存性能予算を通過。production-jaは3回 90/91/91、中央値91、LCP中央値3.09秒、score未達0/LCP超過0。9/17のPR1443/1445は中央値89で失敗していたため性能予算の回復は確認できる。旧失敗の根本原因や断続的描画遅延の因果は未確定のまま保持する。",
      "evidence": "docs/perf/pagespeed-recovery-20260919.json"
    },
    {
      "run_id": "ap-20260919-actions-codex-01a0b653-5750-7182-b69e-639d261ab1ac",
      "date_jst": "2026-09-19",
      "route": "actions",
      "attempted": true,
      "outcome": "failed",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Structured Codex runtime code usage_limit_exceeded; original turn 01a0b653-5a26-7eb3-b906-f316e4d8c8dd; receipt SHA256 3672e19feac4250bcec1013e5a08bd786deba929ebcf07ed479072c52b5a95fd",
      "external_ref": "codex:01a0b653-5750-7182-b69e-639d261ab1ac",
      "interventions": [],
      "source": "act-reconcile",
      "failure_class": "usage_limit",
      "failed_at": "2026-09-18T21:01:54.581Z",
      "detected_at": "2026-09-18T21:12:48.997Z",
      "detected_note": "Codex original turn 01a0b653-5a26-7eb3-b906-f316e4d8c8dd; transcript SHA256 7b0896709fd96d7f16658c7d976de54e8e53fe8d9bec98ed595aa02ebe703b91; observed 2026-09-19T01:13:48.121Z; automatic detection receipt SHA256 089352fa4f603d7a8a7923ae08ff28c455488df1d748910ee76013d3753b7cce",
      "failure_stage": "cost"
    },
    {
      "run_id": "ap-20260919-actions-35415451723",
      "date_jst": "2026-09-19",
      "route": "actions",
      "attempted": true,
      "outcome": "shipped",
      "lane": "F",
      "action": "maintenance",
      "pr": 1470,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "35415451723",
      "interventions": [],
      "source": "session",
      "repair_of": [
        "ap-20260915-actions-codex-01a0a1b9-4982-70f3-b2d6-eed77be68e26"
      ],
      "repair_note": "修理したのは「走査の止め方」。2026-09-15 の回は C13→C14→C15 と正しく走査したうえで、C15 の事前計測が brand-2026-08-11-entity-merge の全サイトスコープで拒否された時点で走査ごと止め、C17 以降を1件も見ずに no_artifact で終わった。根拠にしたのは 2026-09-11 に足した「別の未知の前提を新たに調べる必要が出たら、そこで走査を止める」。実験スコープの拒否は growth/experiments/experiments.json と check-experiments.mjs でその場で確定するので未知の前提ではない。Runbook §2 レーンEの停止条件を「同じ不足条件か」から「リポジトリ内で確定するか／外部の未知を新たに調べる必要があるか」へ切り替えた。**今日の修理は規定の訂正であって、同じ形が再発しないことの実測ではない** —— 確かめられるのは、次にレーンEの走査が実験スコープの壁に当たった回。"
    },
    {
      "run_id": "ap-20260920-actions-codex-01a0bb78-4965-7242-bedf-29a93d1b0bf9",
      "date_jst": "2026-09-20",
      "route": "actions",
      "attempted": true,
      "outcome": "no_artifact",
      "lane": null,
      "action": "maintenance",
      "pr": 1504,
      "artifact": null,
      "failure_reason": "engine=codex; automation=obsidian; scheduled06:00JST. Admitted native run; business treatment blocked by complete-scope prospective measurement ownership. Required sitemap and distribution files conflict with existing exclusive page experiments. Daily data and scheduled visibility observations remain separate; no content implementation or business shipment.",
      "external_ref": "codex:01a0bb78-4965-7242-bedf-29a93d1b0bf9",
      "interventions": [],
      "source": "codex-automation",
      "failure_class": "no_artifact",
      "failure_stage": "eligibility",
      "eligibility_verdict": "blocked",
      "gate_code": "measurement_scope_conflict",
      "stage_note": "Initial preflight run:true; scheduled2026-09-20T06:00:00+09:00; actual scheduler start2026-09-20T06:00:17.617+09:00; original task01a0bb78-4965-7242-bedf-29a93d1b0bf9. PR1504 publishes observations/bookkeeping only, not a business treatment."
    },
    {
      "run_id": "ap-20260920-actions",
      "date_jst": "2026-09-20",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "35478113365",
      "interventions": [],
      "source": "act-reconcile",
      "detected_at": "2026-09-20T00:16:21.874Z",
      "detected_note": "Actions run 35478113365 を repository_dispatch で照合。監視起動元run 35478113365、自動起動のAPI検証=true。失敗ステップの確定時刻は未取得。run の作成時刻で代用しない。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "skip_branch_claimed",
      "stage_note": "Gate で止まった（skip_branch_claimed）"
    },
    {
      "run_id": "ap-20260921-actions",
      "date_jst": "2026-09-21",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "35547362544",
      "interventions": [],
      "source": "act-reconcile",
      "failed_at": "2026-09-21T00:20:14Z",
      "detected_at": "2026-09-21T00:25:05.460Z",
      "detected_note": "Actions run 35547362544 を repository_dispatch で照合。監視起動元run 35547362544、自動起動のAPI検証=true。失敗時刻は GitHub step #6「封じ込め（修理上限に達した経路は着手しない）」の completed_at。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "run",
      "stage_note": "Gate で止まった（run）"
    },
    {
      "run_id": "ap-20260921-actions-codex-01a0c09f-441c-7241-b87b-10cd6f5d014b",
      "date_jst": "2026-09-21",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Recorded Codex preflight decision: agent_stopped; receipt SHA256 09077f0a1752c95ec87f9563f1f512d6206688dbb96f9e8c3cdde552eb0cd149",
      "external_ref": "codex:01a0c09f-441c-7241-b87b-10cd6f5d014b",
      "interventions": [],
      "source": "act-reconcile-session",
      "detected_at": "2026-09-22T11:21:37.901Z",
      "detected_note": "Codex original turn 01a0c09f-469e-7e93-a2b5-89c0ee8a5fc6; transcript SHA256 425f313d07c76ba0d575eaf54282c43b9fe757ae01715768cb8c43c0d4f375eb; observed 2026-09-22T10:59:15.763Z",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "agent_stopped"
    },
    {
      "run_id": "ap-20260922-actions",
      "date_jst": "2026-09-22",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": null,
      "external_ref": "35673983920",
      "interventions": [],
      "source": "act-reconcile",
      "failed_at": "2026-09-22T00:57:51Z",
      "detected_at": "2026-09-22T01:02:44.437Z",
      "detected_note": "Actions run 35673983920 を repository_dispatch で照合。監視起動元run 35673983920、自動起動のAPI検証=true。失敗時刻は GitHub step #6「封じ込め（修理上限に達した経路は着手しない）」の completed_at。",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "run",
      "stage_note": "Gate で止まった（run）"
    },
    {
      "run_id": "ap-20260922-actions-codex-01a0c5c5-32d5-7601-93da-85ce4c6df386",
      "date_jst": "2026-09-22",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Recorded Codex preflight decision: agent_stopped; receipt SHA256 d1b06e800205c0b0c68e344a70fefc9b078f5add95e05923d9a32e287602f906",
      "external_ref": "codex:01a0c5c5-32d5-7601-93da-85ce4c6df386",
      "interventions": [],
      "source": "act-reconcile-session",
      "detected_at": "2026-09-22T11:21:37.901Z",
      "detected_note": "Codex original turn 01a0c5c5-3562-7cc0-912f-b94ed0291a6a; transcript SHA256 b684ffa157bc1518d089389e6d2d1e6663d8da4fa59410029305a72666524ba7; observed 2026-09-22T10:59:15.763Z",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "agent_stopped"
    },
    {
      "run_id": "ap-20260922-owner-session-codex-01a0c887-1b38-7d33-8694-32aef889cdca-r2",
      "date_jst": "2026-09-22",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "D",
      "action": "refresh",
      "pr": 1527,
      "artifact": "/obsidian/getting-started/",
      "failure_reason": null,
      "external_ref": "codex:01a0c887-1b38-7d33-8694-32aef889cdca",
      "interventions": [
        {
          "kind": "request",
          "note": "Owner-requested SEO/AIO growth Goal. This is a manual owner-session, not a scheduled autonomous run."
        }
      ],
      "source": "owner-goal"
    },
    {
      "run_id": "ap-20260923-actions-codex-01a0caeb-9b7d-7902-aad2-3b15e256a803",
      "date_jst": "2026-09-23",
      "route": "actions",
      "attempted": false,
      "outcome": "skipped_gate",
      "lane": null,
      "action": null,
      "pr": null,
      "artifact": null,
      "failure_reason": "Recorded Codex preflight decision: agent_stopped; receipt SHA256 7c5683f6ce11d492c85ab333399b3689ea46e998694a348842223be44852809b",
      "external_ref": "codex:01a0caeb-9b7d-7902-aad2-3b15e256a803",
      "interventions": [],
      "source": "act-reconcile",
      "detected_at": "2026-09-22T21:49:11.338Z",
      "detected_note": "Codex original turn 01a0caeb-9e1c-7843-932a-ef0069b5ef64; transcript SHA256 be8179e3268e0877a8d9343fd3aeceeab128332c518463375ef1cfe70c510ea0; observed 2026-09-22T21:49:11.338Z; automatic detection receipt SHA256 d78de7f7cd4707aaeb8596cb0b665ac968e0e7a7dce251525d83eca3cd53ba58",
      "failure_stage": "eligibility",
      "eligibility_verdict": "declined_by_design",
      "gate_code": "agent_stopped"
    },
    {
      "run_id": "ap-20260923-owner-session-codex-01a0c887-1b38-7d33-8694-32aef889cdca",
      "date_jst": "2026-09-23",
      "route": "owner-session",
      "attempted": true,
      "outcome": "shipped",
      "lane": "D",
      "action": "refresh",
      "pr": 1534,
      "artifact": "/note-to-email/",
      "failure_reason": null,
      "external_ref": null,
      "interventions": [
        {
          "kind": "request",
          "note": "Owner requested overnight SEO/AIO implementation and deployment. Manual owner-session; not a scheduled autonomous run."
        }
      ],
      "source": "session"
    }
  ],
  "retracted_observations": [
    {
      "retracted_at": "2026-09-05T12:15:11.788Z",
      "by": "codex-session",
      "reason_code": "missing_steps_misread_as_skip",
      "replacement_status": "result_unverified",
      "previous": {
        "run_id": "ap-20260905-actions-33959414641",
        "date_jst": "2026-09-05",
        "route": "actions",
        "attempted": false,
        "outcome": "skipped_gate",
        "lane": null,
        "action": null,
        "pr": null,
        "artifact": null,
        "failure_reason": null,
        "external_ref": "33959414641",
        "interventions": [],
        "source": "act-reconcile-session",
        "detected_at": "2026-09-05T11:36:27.825Z",
        "detected_note": "Actions run 33959414641 を workflow_run で照合。監視起動元run 33963750152、自動起動のAPI検証=false。失敗ステップの確定時刻は未取得。run の作成時刻で代用しない。",
        "failure_stage": "eligibility",
        "eligibility_verdict": "declined_unrecorded",
        "gate_code": null,
        "stage_note": "Claude Code ステップ未実行。手前のどこで止まったかはステップ情報が無く判定できない（Gate=不明）"
      },
      "evidence": {
        "external_ref": "33959414641",
        "run_created_at": "2026-09-05T09:58:55Z",
        "source_url": "https://api.github.com/repos/simplememofast/simplememo/actions/runs/33959414641/jobs",
        "workflow_path": ".github/workflows/obsidian-autopilot.yml",
        "primary_job": "autopilot",
        "observed_at": "2026-09-05T12:15:11.764Z",
        "model_step": {
          "name": "Claude Code（Runbook 1イテレーション実行）",
          "status": "completed",
          "conclusion": "success",
          "number": 11,
          "started_at": "2026-09-05T09:59:36Z",
          "completed_at": "2026-09-05T10:04:39Z"
        }
      }
    }
  ]
}
