Skip to content

Fix: ndf-next を出さずに終えるレーンが自分のラッパーを止める(#2436 の保留 2 件) - #2462

Merged
takemi-ohama merged 1 commit into
sprint/p2436from
fix/lane-stop-p2436
Nov 3, 2026
Merged

takemi-ohama merged 1 commit into
sprint/p2436from
fix/lane-stop-p2436

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

何を直したか

課題 #2436 のスプリント PR #2452 の cross-review で保留した 2 件は、根が同じだった。ndf-next を出さずにセッションを終えても対話の claude が入力待ちで残るため、ラッパー(relay)が running のまま止まらない。判断 fca6fe464619 で選んだ (a)「レーンが終わるときに relay.py stop で自分のラッパーを止める」を、終わり方が 3 つある箇所すべてに入れた。

箇所 対応
一時レーンの helper-done 起動の 1 行(parallel_run.helper_spawn)の /goal の「終わり」に python3 <relay.py> stop <一時レーンの名前> を入れた。配布と保留の周回のどちらの起動も同じ。名前が決まっているので $NDF_RELAY_NAME を頼らない。手順書(parallel.md の手順 4)も合わせた
問いで保留した 1 スプリントのレーン・一時レーン 問いの hook が返す保留の手順(ask_guard.hold_text)の最後に停止の 1 行を足した
待ちだけで止まったループのレーン 止まった結果(sprint_loop_record.stopped_result)に metrics.stop_self を付けた。並列の計画のレーンか一時レーンのときだけ返すので、利用者の端末で動くラッパーは止めない(loop.md)
起こす要否の判定(parallel.py の _owner_restart) ラッパーの状態ではなく、レーンの側の待ちの記録で決める(parallel_lane.lane_waits)。ループのレーンは記録が waiting_only で止まっていること、1 スプリントのレーンは引継ぎ文書に依頼の id があること、記録を持たない一時レーンはラッパーが止まっていることで決める

保留 2 件との対応

  • 「一時レーンが helper-done の後もラッパーを残し、続きの一時レーンの起動が同じ名前か上限で断られる」→ 一時レーンの起動の 1 行の「終わり」と保留の手順
  • 「問いで保留したレーンが running のまま残り、answer が restart の 1 行を返さない」→ 保留の手順の停止と、_owner_restart をレーンの側の記録で決める判定(止め損ねても起こし損ねない)

検証

  • uv run --frozen --project . --all-extras pytest . -q -n 4: 11284 passed, 4 skipped
  • 足したテスト: 一時レーンの起動の 1 行が自分を止める(test_parallel_run.py)、レーンの側の記録で起こす(test_parallel_run.py)、waiting_only のレーンだけが stop_self を返し、レーンでないラッパーでは返さない(test_sprint_loop.py)、保留の手順の停止(test_ask_guard.py)
  • CI の検査を手元で実行し、すべて 0 で通った: check-doc-line-limit・instructions-check・check-required-checks(--branch sprint/p2436)・check-lint・check-script-structure・build-runtime-plugins --check・check-skill-frontmatter・check-ndf-contracts・check-skill-repo-assumptions・check-skill-shell-vars・check-service-boundary・check-markdown-links・glossary check(structure と all)・validate-runtime-plugins

🤖 Generated with Claude Code

https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK

… fca6fe464619 の (a))

ndf-next を出さずにセッションを終えても対話の claude が入力待ちで残り、ラッパーが running のまま止まらなかった。
終わり方が 3 か所とも「最後に relay.py stop で自分のラッパーを止める」になるようにした。

- 一時レーン: 起動の 1 行(helper_spawn)の「終わり」に relay.py stop <一時レーンの名前> を入れた(配布と保留の周回の両方)
- 問いで保留した 1 スプリントのレーン・一時レーン: 問いの hook が返す保留の手順の最後に停止の 1 行を足した
- 待ちだけで止まったループのレーン: 止まった結果に metrics.stop_self を付けた。並列の計画のレーンのときだけ返し、
  利用者の端末のラッパーは止めない
- 答えの後に持ち主を起こす要否(parallel.py の _owner_restart)を、ラッパーの状態でなくレーンの側の待ちの記録で決める
  (ループは waiting_only で止まった記録、1 スプリントのレーンは引継ぎ文書の依頼の id、一時レーンはラッパーの状態)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KYHP826qdiDahV9gSeoGPK
@takemi-ohama
takemi-ohama merged commit ea0452b into sprint/p2436 Nov 3, 2026
24 checks passed
@takemi-ohama
takemi-ohama deleted the fix/lane-stop-p2436 branch November 3, 2026 15:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant