diff --git a/docs/push-pipeline-fix-plan.md b/docs/push-pipeline-fix-plan.md
index 23e469d2..d1be457f 100644
--- a/docs/push-pipeline-fix-plan.md
+++ b/docs/push-pipeline-fix-plan.md
@@ -3,6 +3,11 @@
> **このファイルの寿命**: 本計画の全タスクが完了 (実装 or 明示的却下) した時点で、
> 本ファイル自体を削除する (§8 削除条件)。恒久ドキュメントではない。
> 先行例: `file-length-enforcement-plan.md` の削除条件パターン。
+>
+> **⚠ 残作業の管理は後継ファイルへ移行済み (2026-07-18)**: 本ファイルのサイズ超過に伴い、
+> 残作業 (R1〜R6) は [push-pipeline-fix-plan2.md](push-pipeline-fix-plan2.md) で管理する。
+> 本ファイルは T0〜T13 の詳細記録 (方針・実施結果・判定根拠) の参照用として残し、
+> **以後の追記は行わない**。削除は plan2 の R6 (旧 T99) で**両ファイル同時**に行う。
## 1. 背景 (2026-07-16 調査の要約)
@@ -1131,15 +1136,30 @@ T1 を最優先とする理由: 以降の全 PR の dogfood push が速くなり
1. quality_gate 失敗時の出力 truncate 改善: `run_cmd_shell_capped_reporting`
(truncate 明示 variant) + cap 引き上げで cargo test の失敗一覧が消えないようにする。
+ **→ 採用 (2026-07-18, ユーザー判定)**: 実施待ち。失敗時診断の全量確保は T5 の
+ 「失敗経路は診断を落とさない」原則の残り半分で、主眼 (失敗時の人間介入コスト削減) に直結。
2. gate グループ失敗時の early-abort: いずれかのグループが失敗したら他グループを
打ち切り即失敗表示 (`stages/quality_gate.rs` の join 待ち改善)。
+ **→ 却下 (2026-07-18, ユーザー判定)**: 失敗時のみ数十秒の短縮に対し、全 group の失敗を
+ 一括把握して 1 回で直せる現挙動を失う逆トレードオフ。docs-only routing (T11) 後は
+ 最長 group ~50s で期待効果も縮小済み。
3. `pre-push-review.yaml` の loop_monitor `judge.model: sonnet` → `haiku`
(2 択判定のみ。post-pr-review.yaml に haiku 前例あり)。
+ **→ 採用 (2026-07-18, ユーザー判定)**: 実施待ち。config 1 行 + haiku 前例ありでローリスク。
4. `fix.md` の過去レポート参照 (Glob + 2 ファイル読み) を Step Iteration 1 では skip する追記。
+ **→ 却下 (2026-07-18, ユーザー判定)**: 効果が fix 発生時のみ数秒〜数十秒と小さく、
+ T12 の fix.md 改訂で前提が変化しており再調査コストが効果を上回る。
5. pr-monitor の gh 直列 4-5 呼び出し削減 (初回 push では PR 不在が自明のケース)。
+ **→ 却下 (2026-07-18, ユーザー判定)**: monitor 立ち上がり数秒の短縮に対し、
+ PR 存否判定を触る退行リスク (PR ありを不在と誤判定 = 監視の silent 欠落) が釣り合わない。
6. `advance_jj_bookmarks` の二重実行 (stage 1 と stage 8) の統合検討。
+ **→ 却下 (2026-07-18, ユーザー判定)**: 実害なし (冪等)。bookmark 操作は T8/ADR-011 で
+ 慎重に扱ってきた領域で、統合リファクタの退行リスクが drift 予防効果を上回る。
7. 同一 checkout での `pnpm push` 並走ガード (pipeline lock は advisory のまま、
push 同士のみ相互排他にするか検討。ADR-025/ADR-045 との整合を確認)。
+ **→ 様子見 = 条件付き却下 (2026-07-18, ユーザー判定)**: 同一 checkout 並走は
+ ADR-045 (workspace 分離) の運用下ではレアケースで、advisory の pipeline lock も既存。
+ 再評価トリガー: 同一 checkout での push 並走に起因する事故の実観測。
8. ~~`push_was_refused` の `contains` 誤爆厳格化 (T5 に含めなかった場合)。~~
**却下 (2026-07-17, T5 で判定)**: リスクが非対称なため厳格化しない。誤検知は出力表示で
気付いて再実行できるが、検知漏れは「リモート未反映のまま exit 0」= T5 が防ぐ事故そのもの。
@@ -1178,6 +1198,9 @@ T1 を最優先とする理由: 以降の全 PR の dogfood push が速くなり
方針案: `drain_pipe_*` は行単位で読むので「UTF-8 として不正な行のみ CP932 で再デコード」の
フォールバックが素直 (正常な UTF-8 出力 = cargo/pnpm は不変)。`encoding_rs` 依存の追加要否を
判断すること。規模 S。
+ **→ 却下 (2026-07-18, ユーザー判定)**: 当分 PC を変更せず派生プロジェクトを作る予定も
+ ないため、主な発生シナリオ (クローン直後・配布先での exe 欠落) が当面存在しない。
+ PC 更改または派生プロジェクト作成の予定が生じたら再評価する。
12. **`vitest` を devDependency に固定する** (T3 の型チェック範囲決定から分離、2026-07-17。
**ユーザー承認済みの分離**)。`pnpm test` = `npx vitest run` だが vitest は
devDependencies に無く、npx が実行時に自動 DL する = **バージョン非固定**。
@@ -1188,6 +1211,10 @@ T1 を最優先とする理由: 以降の全 PR の dogfood push が速くなり
exclude を外してテストも型チェックできる。`markdownlint-cli2` は既に devDep +
`npx --no-install` になっており、その規約に揃える形。規模 XS〜S (版固定で
既存テストが落ちないかの確認を含む)。
+ **→ todo 移管 (2026-07-18, ユーザー判定)**: 既存の docs/todo-summary.md **順位 16**
+ (「`vitest` を devDependencies に固定 (PR #88 T2-3)」todo3.md) と同内容のため、
+ 新規起票せず順位 16 で管理する (二重登録回避)。本項の T3 由来の補足
+ (テストを型チェック対象に含められない TS2307 との接点) は順位 16 着手時に本欄を参照。
13. **保護ファイル guard に「新規作成」の抜け道が無い** (T3 の実施中に遭遇、2026-07-17)。
`hooks-pre-tool-validate` の `PROTECTED_CONFIG_FILES` (`src/hooks-pre-tool-validate/
src/protected_files.rs`) は `tsconfig.json` 等をハードコードで拒否する。guard の意図は
@@ -1200,6 +1227,10 @@ T1 を最優先とする理由: 以降の全 PR の dogfood push が速くなり
方針案: (a) ファイル不在 = 新規作成のときは block せず警告に落とす、
(b) config に `unprotected_files` 除外リストを足す、(c) 現状維持 (承認フローで足りる)。
ADR-042 (ルール vs 仕組み化の境界基準) の観点で判断すること。規模 S。
+ **→ 様子見 = 条件付き却下 (2026-07-18, ユーザー判定)**: 実害は「正当な新規作成が
+ block された」摩擦 1 回で、承認フロー経由の回避で足りている。#286 feedback report
+ (Tier2 #4) も様子見を推奨。再評価トリガー: guard が正当な操作を再度 block した時、
+ または保護対象を拡げる設計変更を行う時。
## 7. スコープ外 (本計画では実施しない)
@@ -1243,3 +1274,4 @@ T1 を最優先とする理由: 以降の全 PR の dogfood push が速くなり
| T11 | 実装済 (本 PR) | 2026-07-18 | PR 範囲 (`master..@`) が docs-only (ADR-035 path 基準) のとき quality_gate の `rust-lint-test` group (実測 ~50s = gate 律速) を決定論的に skip。**takt は skip しない (ユーザー承認済み)**: path から「Rust テスト結果不変」は演繹できるが「レビュー不要」は演繹できない (docs の cross-ref / trust boundary / 事実は誤り得る。ADR-035 §適用 criteria + ADR-056 T10 で reviewer が docs の事実誤りを検出した実績)。JS 系 (`pnpm lint:docs`) も維持。**⚠ 期待効果を実測で下方修正 (T1/T2 同型)**: 「-6〜8 分」は §1 stale ベースライン由来で、実測は rust group ~50s = **-~50s**。**ADR-035 path 基準を新 crate `lib-docs-policy` に集約** — pre-push (本 stage) と post-PR (`cli-pr-monitor` gate) の 2 箇所が判定を要するため単一実装化 (判定分散は ADR-035 が防ごうとした drift の再生産)。`cli-pr-monitor` の重複実装 + テスト 7 本を撤去して置換。判定範囲は PR 範囲 `..@` (単一コミット `@` では祖先の code 変更を見逃す)。**空 diff** 部分は既存 `DiffResult::Empty` 経路が担うため本タスクは docs-only の quality_gate skip のみ実装。**ADR-039 3 点セット**: `[docs_only_routing]` default OFF / env `DOCS_ONLY_ROUTING_DISABLE=1` kill-switch / 本 repo `enabled = true` で dogfood。`default_branch` は `[pr_size_check]` と論理同一値を保つ義務を両 section に明記 (ADR-051)。**回帰テスト**: lib-docs-policy 8 + docs_only_routing stage 9 + quality_gate skip 3 (対照付き) + config 4。**サンドボックス実機 before/after** (配布 exe、`C:\t11\repo`): docs-only=skip・exit 0 完走 / code=実行・exit 1 / kill-switch=bypass / disabled=routing なし の 4 scenario で確認。副産物として、実 repo は `master` が remote-tracking のため bookmark advance が master を動かさず `master..@` が正しく PR 範囲を指すことも確認 (sandbox の local master は `trunk()` alias で同じ除外を再現)。新規 **ADR-057** (判定期限 2026-08-15、効果検証と誤 skip 観測を引き継ぎ)。**exe 再ビルド必要** (Rust 変更あり、`pnpm build:cli-push-runner` 実施済み)。**実施順**: 計画の推奨順どおり T10 の次に実施 |
| T7 | 実装済 (PR #284) | 2026-07-17 | `hooks-stop-quality` の `main` 冒頭で cwd をプロジェクトルートへ正規化 (`normalize_cwd_to_project_root`)。**ルート導出は (b) exe パス**: 方針が両論併記だったため実測し、VSCode 拡張環境で **`CLAUDE_PROJECT_DIR` が空** = ADR-005 (2026-03-17) の不安定性が現在も再現することを確認して (a) を却下。既存規約 (順位 287 / ADR-010、`config_path()` / `pipeline_lock::exe_claude_dir()` / `lib_telemetry::exe_dir()`) と同形。判断根拠は**本計画が削除予定のため ADR-005 に追記**して恒久化した。**⚠ 方針の前提が 1 つ誤っていた (ユーザー承認のうえ逸脱)**: リスク欄は「正規化が takt subsession 判定に影響しないか確認が必要」「判定ロジックは元 cwd を使う形が安全」としていたが、`takt_subsession_active` は **cwd 依存で既に壊れていた** (cwd = `.takt/runs` だと `.takt/runs/.takt/runs` を探して空振り → active run 未検出 → ADR-004 § takt subsession skip が効かず edit: false の subsession に「直せ」を返す = PR #221 の事故が再発しうる)。元 cwd 維持は「安全」ではなく既知不具合の温存のため、**両症状に効く main 冒頭 1 回の正規化**を採用。回帰テストで修正前に実際に失敗することを確認済み (推測ではない)。**実装**: `project_root_from_exe` は ADR-010 の配置 (`/.claude/.exe`) を満たすときのみ `Some` を返し、`target/debug/` 等では正規化を skip (cwd 書き換えは全 step の実行位置を変えるため、推測でルート扱いせず従来挙動に倒す)。ルート特定不能・`set_current_dir` 失敗は警告のみで継続 = fail-open (`pipeline_is_running` と同じ線引き、ADR-043: Stop 時点は助言層で本物のゲートは push pipeline 側)。**lib-subprocess は無変更** — プロセス単位の正規化で `cmd /c` の子が継承するため、共有 `run_cmd_shell_*` への cwd 引数追加 (variant 増殖) を回避できた。**ファイル分割 (T7 に付随、T1 と同型)**: `main.rs` が 712 行 → 追記で 804 行となり 800 行上限に触れたため takt 判定を `takt_subsession.rs` へ切り出し (main 532 / takt_subsession 290)。**T7 が直している file-length gate に T7 自身が引っ掛かった** = gate が機能していることの副次的実証。**回帰テスト**: `tests/t7_cwd_independence.rs` E2E 5 本 + unit 2 本 (26 → 33 passed)。**exe を `/.claude/` に staging して spawn** するのが要点 — `target/debug/` の exe を直接起動すると exe-relative のルート導出を素通りして実配置を検証しない。`normalize_cwd_to_project_root()` の呼び出しを外すと **bad 2 本がちょうど失敗し good 3 本は通る**ことを確認済み (failure は incident の逐語再現)。good 側に「実失敗する step は cwd に依らず block する」= 正規化がゲートを骨抜きにする最悪の退行ガードを含む。**実機検証 (before/after、本リポジトリの実 config)**: cwd = `.takt/runs` で before = block + `**file-length** failed:` + 文字化け / after = 出力なし (通過)。root cwd と深い cwd も通過。**方針の記述も実機で裏付け**: before で失敗したのは `file-length` step のみで pnpm 系 5 step + `cargo clippy` は通っていた (pnpm/cargo は設定ファイルを上方探索する) = **ルート相対パスを書いた step だけが壊れる**非対称が症状をまだらにし発見を遅らせていた。**CP932 デコードフォールバック (方針 2) は §6 backlog 11 へ分離 (ユーザー承認済み)**: 影響先が共有 lib (push-runner / merge-pipeline) のため §2 原則 4 に従う。cwd 修正で incident の文字化けは消えるが、exe 欠落時 (ADR-005 Negative の既知事象) 等で経路自体は残るため却下ではなく backlog。**発見 (本タスク外)**: T7 は cwd drift silent 故障の 3 例目で、順位 281 (Tier 1、lint rule) / 順位 287 (Tier 3、convention 明文化) が先行 todo 化済み。ただし T7 は「config 解決」でなく「**step 実行の cwd**」の別カテゴリのため既存 lint rule 案では捕捉できず、281 着手時に検出対象拡大を検討する価値がある (本計画スコープ外 = todo13.md 管理)。**post-PR 修正 (CodeRabbit Major 1 件を採用)**: `run_hook` が `wait_with_timeout_safe` の戻り値を捨てており、hook が非 0 exit でも stdout が空なら `block_reason == None` をすり抜ける = **`None` を期待する 3 本 (bad 2 + good 1) が false green** になる穴。「block されないこと」を期待する回帰テストは hook が黙って死ぬと合格してしまうため、指摘は妥当。`cli-pr-monitor` の takt auto-fix が exit code assert を追加したが**指摘の「失敗時は stderr を出す」部分が未達**だったため補正した — メッセージに stdout を渡しており、かつ `stderr.join()` より前に呼ばれるため構造上 stderr を出せなかった。本 hook の診断は `eprintln!` = stderr にしか出ず、指摘が想定する「stdout が空の失敗」では stderr だけが手掛かりになる。**guard が空振りでないことを実証**: staged exe を `where.exe` (非 0 exit・stdout 空) に差し替えると 5 本すべてが `exit code Some(2)` で失敗する (導入前なら `None` 期待の 3 本は素通りしていた)。**実施順**: 計画の推奨順どおり T6 の次に実施 |
| T12 | 実装済 (本 PR) | 2026-07-18 | takt 実行後に `post_takt_regate` stage を追加し、fix が作業コピーを書き換えた場合のみ quality_gate 全 group を再実行して block する (虚偽ではないが検証不足の `fully_resolved` = PR #224 型を pre-push でも遮断)。post-PR gate (ADR-037 §Mitigations) の pre-push 版。あわせて `fix.md` (共有 facet / ADR-020) の workspace 全体 + `--ignored` 自己申告義務を撤去し影響 crate の `build -p` + `test -p` に縮小、検証を決定論 gate へ委譲。**変化検出は diff snapshot 前後比較 (ユーザー承認済み)**: Stage 1.5 の diff を takt 前に保持し takt 後に再取得して比較。**commit_id + diff 二段構え (ADR-021 原則 1 字面) は不採用** — それには `capture_commit_id`/`diff_is_empty` の lib-jj-helpers 移設 + cli-pr-monitor 移行が要り PR 肥大化 (§2 原則 4)。diff snapshot 前後比較は metadata のみの変化に構造的に不感 (ADR-021 § commit_id 単独比較の限界) で共有対象が発生しない。判定は pure fn + closure 注入 (ADR-021 原則 3)。**fail 方向は gate 系 fail-closed** (判定不能 → 実行)、ADR-021 原則 4 の repush 系 fail-safe (判定不能 → 何もしない) とは逆向き。**再ゲート範囲は quality_gate 全 group (ユーザー承認済み)**: 文言どおり全 group、docs-only skip は fix 後は非適用 (fail-closed)。**方針 3 は充足済み = post-pr 側変更不要**: cli-pr-monitor gate は `rust-lint-test` group (`--ignored` 含む) を既に実行しており両経路で `--ignored` が担保される。**ADR-039 3 点セット**: `[post_takt_regate]` default OFF / env `POST_TAKT_REGATE_DISABLE=1` / 本 repo `enabled = true`。新規 **ADR-058** (判定期限 2026-08-15、ADR-057 と同期) + **ADR-037 追記**。**回帰テスト**: post_takt_regate 11 本 (decide_regate 全 5 分岐 + 統合の block/pass/skip) + capture_diff_snapshot 2 本 (215 → 250 passed)。中核は変化検出 + gate FAIL → block、無変更なら失敗 gate でも実行せず skip。**サンドボックス実機 before/after** (配布 exe、`C:\t12\repo`、takt は自作 `pnpm.exe` stub で代役): 同一の破壊的 fix に re-gate ON=block/exit 1 (A) vs OFF=PUSH 到達/exit 0 (B、従来挙動) で因果を分離、C=無変更 skip (marker 存在下でも gate 非実行の証跡)、D=kill-switch skip の 4 scenario。stub は Rust の `Command::new("pnpm")` が `.cmd` を拾わないため `pnpm.exe` (rustc 自作) にした。**効果 (fix execute 短縮 / block 実績) は 1 PR で測れず** ADR-058 bounded lifetime + T99 after 計測に引き継ぎ。**exe 再ビルド必要** (`pnpm build:cli-push-runner` 実施済み)。**実施順**: 計画の推奨順どおり T11 の次に実施 (最終タスク) |
+| T13 | 処置判定済 (2026-07-18、採用 2 件は未実装) | 2026-07-18 | ユーザー判定で全 13 項目の処置を確定 (各項目の判断根拠は §6 の追記を参照)。**採用 (実施待ち)** = 1 (gate 失敗時出力の truncate 改善)・3 (loop_monitor judge の haiku 化)。**todo 移管** = 9 (順位 324、PR #290)・10 (順位 323、PR #290)・12 (既存順位 16 に紐付け、新規起票なし)。**却下** = 8 (T5 で判定済)・2 (early-abort は全 group 一括把握を失う逆トレードオフ)・4 (効果小 + T12 の fix.md 改訂で前提変化)・5 (効果小 + PR 存否判定の退行リスク)・6 (実害なし、bookmark 領域の退行リスク > 予防効果)・11 (PC 更改・派生プロジェクト作成の予定なし = 発生シナリオ不在。予定が生じたら再評価)。**様子見 = 条件付き却下** = 7 (再評価トリガー: 同一 checkout での push 並走事故の実観測)・13 (再評価トリガー: guard が正当な操作を再度 block した時。#286 feedback report Tier2 #4 も様子見)。T13 の完了 (§8 条件 2 充足) は採用 2 件の実装マージをもって成立 |
diff --git a/docs/push-pipeline-fix-plan2.md b/docs/push-pipeline-fix-plan2.md
new file mode 100644
index 00000000..a69cb461
--- /dev/null
+++ b/docs/push-pipeline-fix-plan2.md
@@ -0,0 +1,128 @@
+# push パイプライン改善 残作業計画 (push-pipeline-fix-plan.md の後継)
+
+> **本ファイルの位置付け**: [push-pipeline-fix-plan.md](push-pipeline-fix-plan.md) (以下「旧計画」、
+> 約 1300 行) のサイズ超過に伴い、**残作業のみ**を分離した後継ファイル (2026-07-18 分離)。
+> 実装済みタスクの詳細記録 (方針・実施結果・逸脱の経緯) は旧計画 §4/§5/§8 に残るが、
+> **本ファイルのみで「何を実装してきたか / 何が残っているか」を把握できる**ことを編集方針とする。
+> 残タスクは 1 PR 1 タスクで進める。
+>
+> **最終目標: 全残作業完了時に旧計画と本ファイルを同一 PR で削除する** (R6)。
+
+## 1. これまでに実装した内容 (2026-07-16〜07-18、全 PR マージ済み)
+
+背景: `pnpm push` (= cli-push-runner → quality_gate → takt pre-push-review → jj git push →
+cli-pr-monitor) の遅延 (コード変更 push 最大 14.6 分) と不具合の一掃。2026-07-16 調査の結論は
+「主因は (1) gate 内の Ollama eval 毎 push 実行、(2) takt builtin policy の過剰 REJECT →
+5〜8 分の fix iteration 誘発、(3) fix step 内の workspace 検証重複」。(1) は実測で小口
+(-42s) と判明し、(2)(3) が本丸だった。
+
+| タスク | PR | 実装内容 (1 行) |
+|---|---|---|
+| 計画 doc | #277 | 旧計画ファイルの追加 |
+| T0 | #278 | stage 別所要時間ログ `stage= elapsed=<秒>s` を追加 (**stderr のみ・非永続** → R3 で解消) |
+| T1 | #279 | Ollama eval (assert ゼロ・計測専用) を env `LINT_SCREEN_EVALS` opt-in 化し gate から除外 (-42s/push) |
+| T8 | #280 | 空 `@` 時の bookmark_check 誤誘導を修正 (`jj edit @-` 案内 + 空 `@` でも中断維持) |
+| T4 | #281 | refute facet の dogfood 開始 (`refute_enabled = true`。ADR-047、判定期限 7/31) |
+| T5 | #282 | push 拒否検知を 40 行 truncate 出力から全量出力に切替 (silent-failure push 防止、`run_cmd_shell_unlimited` 追加) |
+| T6 | #283 | diff stage の timeout 追加 (60s、失敗経路は join せず detach。「timeout テストは経過時間を assert する」教訓) |
+| T7 | #284 | Stop hook file-length step の cwd 依存修正 (exe パス基準でプロジェクトルートへ正規化) |
+| T3 | #285 | `pnpm build` 形骸ゲートを `npx --no-install tsc --noEmit` で実体化 (`\|\| true` 除去、fail-closed 実測) |
+| T2 | #286 | 旧 cli-push-pipeline crate (dead code 316 行) を削除、workspace 22 → 21 crate |
+| T10 | #287 | takt builtin 8KB checklist policy を anomaly 設計の project policy `review-anomaly` (-37%) で shadow (ADR-056、判定期限 7/31) |
+| T11 | #288 | docs-only PR (ADR-035 path 基準) の rust gate 決定論 skip。`lib-docs-policy` 新設 (ADR-057、判定期限 8/15) |
+| T12 | #289 | fix 後の決定論再ゲート `post_takt_regate` + fix.md 自己検証義務の縮小 (ADR-058、判定期限 8/15) |
+| T13 | #290 + 判定 | backlog 13 項目の処置確定: **採用 2 (→ R1/R2)**、todo 移管 3 (項目 9→順位 324 / 項目 10→順位 323 / 項目 12→既存順位 16)、却下 6 (項目 2/4/5/6/8/11)、条件付き却下 2 (項目 7/13、再評価トリガー付き)。判断根拠は旧計画 §6/§8 |
+
+### 実測の現在地 (2026-07-18 時点)
+
+| 指標 | before (2026-07-16 baseline、直近 20 run) | 現在 |
+|---|---|---|
+| takt 部分 中央値 | 3.8 分 | T10 後 4.9 分 (n=4・全て fix なし。diff サイズの交絡があり判定保留) |
+| fix iteration 発生率 | ~45% (9/20) | T4 後 19% (3/16) → T10 後 0% (0/4)。n 不足のため ADR-056/058 判定に持ち越し |
+| fix あり run 所要 | 5.5〜14.6 分 | T10 後は fix 発生なし (データ待ち) |
+| quality_gate (rust 系) | 269s (T1 前) → ~50s (T1 後) | docs-only push は 3.0s (T11 skip、PR #290 push で実測) |
+| docs-only push 総計 | - | 168s / 231s (takt 160〜225s が支配項) |
+
+- **計測方法 (永続データ)**: `.takt/runs//meta.json` の startTime/endTime と `trace.md` の
+ iteration ヘッダ (takt 部分・fix 発生の判定)。refute run の抽出は `meta.json` の
+ `"piece": "pre-push-review-refute"` 基準 (run ディレクトリ名では判別不可、ADR-047 に記載)。
+- **stage 別 (gate/push 等) は T0 ログが stderr のみで非永続** — R3 (順位 325) が解消する。
+- ⚠ **旧計画 §8 の目標「docs-only push 1 分台」は総時間としては達成不能の見込み**:
+ T11 で「docs-only でも takt レビューは skip しない」(docs の事実誤り検出実績があるため) を
+ ユーザー承認済みであり、takt が支配項として残る。R6 の after 計測で目標を gate 部分
+ (実測 3.0s) に再解釈するか、未達理由を記録すること (旧計画の学び「見積も目標も実測で見直す」の適用)。
+
+## 2. 進め方の原則 (旧計画 §2 の要約継承)
+
+1. **1 PR 1 変更** (`pr_size_check` warning 800 / block 1500 行)
+2. **不具合修正は再現テスト先行**。timeout 系の回帰テストは **経過時間を assert する** (T6 教訓)
+3. **実験的機能は ADR-039 3 点セット** (config opt-in / kill-switch / bounded lifetime)、
+ gate 系は ADR-043 fail-closed (判定不能→フル実行)
+4. **Rust 変更時は exe 再ビルド** (`pnpm build:`。`.claude/*.exe` が実行される配布物)
+5. **dogfood 注意**: 各 PR の push は修正対象のパイプライン自身を通る。壊すと自分の push が通らない
+6. **workflow 設定を触るときは「今どの経路が実際に走るか」を config から再確認**
+ (T10 教訓: `refute_enabled = true` のため実際に走るのは `pre-push-review-refute.yaml`)
+
+## 3. 残タスク (1 PR 1 タスク、推奨順)
+
+### R1: gate 失敗時出力の truncate 改善 (T13 項目 1 採用分) — XS
+
+- **内容**: quality_gate の step 失敗時、cargo test の失敗一覧が 40 行 truncate で消え
+ 診断できない問題の解消。`run_cmd_shell_capped_reporting` (truncate 明示 variant) + cap
+ 引き上げ、または失敗経路のみ全量表示 (T5 の「失敗経路は診断を落とさない」原則の残り半分)。
+- **対象**: `src/cli-push-runner/src/stages/quality_gate.rs` + `lib-subprocess` の必要 variant
+- **受け入れ基準**: 失敗 step の出力が truncate されず表示されることの回帰テスト。
+ 成功経路の表示は現状維持 (cap あり) で退行なし。
+
+### R2: loop_monitor judge の haiku 化 (T13 項目 3 採用分) — XS
+
+- **内容**: loop_monitor の `judge.model: sonnet` → `haiku` (2 択判定のみ。post-pr-review.yaml に前例)。
+- **対象**: `pre-push-review.yaml` と `pre-push-review-refute.yaml` の**両方** (原則 6 参照。
+ 片方だけ変えると効果ゼロで気付けない = T10 で実際に起きた罠)。
+- **受け入れ基準**: 実 push で judge が haiku で完走。fix iteration 発生 run での遷移時間を
+ 記録できれば尚可 (R3 未実装の間は push ログの手動保存)。
+
+### R3: push per-run メトリクスの JSONL 永続化 (todo 順位 325) — S
+
+- **内容**: run 終了時に stage 別 elapsed / docs_only 判定 / post_takt_regate 判定 /
+ pr_size 行数 / takt run slug / total / exit code / os を 1 行 JSONL で `.claude/telemetry/` へ
+ append。lib-telemetry (ADR-055) を再利用。**詳細仕様と作業計画は docs/todo13.md 順位 325 が canonical**。
+- **位置付け**: R5/R6 の計測基盤。harness-improvement-plan セクション 3 (Linux 対応) 着手前に
+ 入れると、同作業の push (8〜15 回見込み) が自動的に after 計測コーパスになる。
+- **完了時**: todo13.md エントリ + todo-summary.md 順位 325 行を削除 (todo 側の運用に従う)。
+
+### R4: ADR-047 / ADR-056 の採否判定 — 判定期限 2026-07-31 (doc PR)
+
+- **ADR-047 (refute facet)**: `meta.json` の `piece` 基準で refute run を集計し、FP 起因
+ fix iteration の削減効果と verify step の実動を評価 → 採用/廃止/延長をステータス更新。
+- **ADR-056 (policy shadow)**: 受け入れ基準「simplicity execute 203s → 150s 以下 (5 run)」と
+ REJECT 率で評価。T4 refute と期間が重なるため効果の帰属に注意 (ADR-056 に記載済み)。
+- 2 判定を 1 doc PR にまとめてよい (どちらも ADR ステータス更新のみ)。
+
+### R5: ADR-057 / ADR-058 の採否判定 — 判定期限 2026-08-15 (doc PR)
+
+- **ADR-057 (docs-only routing)**: 誤 skip 0 の確認 + docs-only push の gate 実測 (すでに
+ 3.0s の実測 1 件あり = PR #290)。
+- **ADR-058 (post-takt re-gate)**: fix 発生 run での block/pass 実績 (fix 無変更 skip の
+ 実測は PR #290 で 1 件あり)。
+- R3 実装済みならメトリクス JSONL で機械集計。未実装なら `.takt/runs` + push ログの手動記録。
+
+### R6 (旧 T99): after 計測 + 両計画ファイル削除 PR — 最終タスク
+
+- **after 計測**: §1「実測の現在地」を最終更新し、baseline との 3 点比較
+ (takt 中央値 / fix あり run / docs-only push) を PR 本文と関連 ADR に記録する。
+ docs-only 目標の再解釈 (§1 の ⚠) もここで確定する。
+- **全タスク対応表**: §1 の表を最終更新して PR 本文に転記 (旧計画 §8 の削除 PR 要件を継承)。
+- **削除**: `docs/push-pipeline-fix-plan.md` と `docs/push-pipeline-fix-plan2.md` を**両方削除**。
+ 他ドキュメントから両ファイルへの参照が残っていないことを `pnpm lint:docs` / grep で確認する。
+- **前提**: R1〜R5 完了。
+
+## 4. 完了条件
+
+1. R1〜R5 がすべて「マージ済み」または「判定記録済み」(R4/R5 は ADR ステータス更新をもって完了)。
+2. R6 の削除 PR が after 計測結果と全タスク対応表を含み、両計画ファイルを削除している。
+3. 順位 323 (lib-subprocess timeout) / 順位 324 (pr-monitor push 拒否検知) は **todo 系列で継続管理**
+ であり本計画の完了条件ではない (旧計画 §8 条件 2 は「移管」で充足済み)。ただし R3 (= 順位 325)
+ のみ R5/R6 の計測品質に直結するため本計画の残タスクに含めている。
+4. 本計画から見て未決の長期判断が残っていない (refute / policy shadow / docs-only routing /
+ re-gate の採否はすべて各 ADR の bounded lifetime に引き継ぎ済み → R4/R5 で消化)。