Skip to content

queue --resume の --from が、強制終了した前の起動が残っていると無視され、前の途中のステップから続く #2325

Open

Description

@takemi-ohama

何が起きたか

2026-11-01 08:40 JST、スプリント m26-2 の検査のプラン(6-check.json)が test-all で止まった(#2317 の待ち)ため、キュー(queue-8)を強制終了して supervise.py queue --resume .ndf/tmp/sprint-m26-2/done-1.json --from check=ready を打った。

ところが ready からではなく、強制終了した前の起動の途中(test-all)から続き、同じ待ちでまた止まった。ログ(.ndf/tmp/sprint-m26-2/queue-9.log):

supervise-queue: .ndf/tmp/sprint-m26-2/6-check.json を ready から続ける(--from)
[ndf supervise] 落ちた前の起動の queue-3df23b8c56d1-8 を続ける(済んだステップは流し直さない)

原因

supervise_lib/queue.py の queue は durable.resolve(prefix) が continue(前の起動が PENDING のまま残っている)を返すと、args["starts"] を渡しても新しい実行の回を作らず、前の耐久ワークフローを回復する。回復した側は前の起動の入力(--from check=review)で動くため、新しい --from が効かない。launch_queue の fresh は「プランの並びが変わったとき」だけ真になり、--from が変わったときは真にならない。

回避

DBOSClient(system_database_url="sqlite:///$HOME/.local/state/ndf/dbos/queue-<鍵>.sqlite").cancel_workflow(<id>, cancel_children=True) で途中の耐久ワークフローを取り消してから打ち直すと、--from のとおり ready から流れた(queue-10)。

受け入れ条件

  • queue --resume ... --from <プラン>=<ステップ> を打ったとき、前の起動が途中で残っていても、--from のステップから新しい実行の回で流れる(前の途中の耐久ワークフローは子ごと止める)
  • --from も --only も無い打ち直しは、今までどおり前の起動を続ける
  • 上の 2 つを確かめるテストがある

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions