Skip to content

NDF のスクリプトの結果の JSON・ログ出力・異常系の処理を 1 つの形へ揃える #2334

Open

Description

@takemi-ohama

何を見つけたか

plugins/ndf/scripts のログ出力と異常系の処理が統一されていない(2026-11-01、テストと実験版を除いて数えた)。

観点 実物
結果の JSON(lib/step_result.py) 入口のスクリプト 37 本のうち 24 本が使う。hook の 3 本(hook.py・hook-env.py・wait-notify.py)を除く 10 本が外れる: bundle-close.py・instructions-check.py・mission-close.py・mission-state.py・parallel-measure.py・phase-steps.py・refactor-scope.py・relay.py・usage-report.py・usage-subagent.py(14 行の薄い入口は lib 側で出している可能性があり、1 本ずつ確かめる)
形の強制 全部の入口がこの形で返すことを確かめるテストは無い(tests/test_step_result.py は検査の関数だけ)
ログ出力 logging は 1 ファイル。print(..., file=sys.stderr) 52 ファイル、sys.stderr.write 5 ファイル、独自の log()/info() 4 つ(relay_lib/record.py・relay_lib/run.py・hook_lib/wait_notify.py・lib/proc.py)
終了の仕方 sys.exit(...) の直書き 44 か所、raise SystemExit 11 か所
例外 except Exception 48 か所、except の直後が pass の箇所 49 か所(理由のコメントの有無が混ざる)。裸の except: は 0
シェル 29 本のうち set -euo pipefail は 4 本、25 本は無し

直さないと何が起きるか

外れた入口は、失敗を status で上位へ伝えられず、#2227 が防いだ「失敗を ok と読む」が残る。例外を捨てる箇所と set -e の無いシェルは、途中の失敗が表に出ないまま先へ進む余地がある。

受け入れ条件

  1. hook を除くすべての入口のスクリプトが step_result の形(tool・status・終了コード)で結果を返し、それをテストが入口の一覧から確かめる
  2. 標準エラーへの診断の出力が共通の関数 1 つを通る(新しく足すスクリプトもそれを使う)
  3. except の後に pass だけを置く箇所は、理由のコメントを持つか、例外を stopped として返す
  4. シェルのスクリプトは set -euo pipefail を持つか、持たない理由をファイルの先頭に書く

由来

2026-11-01 の利用者の問い「ndf のスクリプト群では、ログ出力、異常系処理は統一されていますか?」への調査。親は #2335(異常系・ログ・回復を 1 つの実行の核へ集める)。

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