Skip to content

gate: N1のprocess-command検証がexec前のlauncherコマンドラインを確定failにする(三値化が必要) #448

Description

@kappaseijin4claude

背景

Issue #434のnative smoke(verifier実施、2026-09-13、固定HEAD 0c6faff)で、
validate-process-commandがlauncher自身のコマンドラインを「確定fail」と誤判定する
問題が判明した。breaker断定によりharnessの三値契約の欠陥と特定された。

実測(verifier・breaker)

record_process_commandps -ww -p <launcher pid> -o command=を1回)と
validate-process-commandの呼び出し位置は、da7e002と0c6faff(PR #446)で同じ
(binding出現 → validate-binding → 1回採取)。PR #446のrunner差分はこの区間に触れていない。
導入元はPR #401git log -S validate-process-command)。

launcherはbindingを書いた後、digest再検証・ログファイル作成・環境設定を経てexec
pilot-launcher.sh:820/826)するため、採取がexec前ならbashのコマンドラインが記録される。
時刻依存の観測を「確定fail」へ畳んでいる。

2回のsmoke実行でともにlauncher自身が記録されたが、Issue #407 run3(da7e002)では
claude本体が記録されていた。この差は未説明。

主張

N1のprocess-command検証をexec完了まで待つ形にし、exec未到達はfailでなくunknownにする。

判定を3分岐にする:

観測 判定
上限内にclaudeのコマンドラインになり、argsがsessionId/settingsと一致 pass
claudeになったがargs不一致 fail(これだけが確定fail)
上限内にclaudeにならない/PID消滅 unknown(reason: exec_not_observed / launcher_exited_before_exec

追加で必要な証跡(breaker指定)

「後でexecされるはずだった」と「execに到達しなかった」を区別できる証跡を残す。

  • 最初にclaudeを観測するまでの経過秒(到達した場合)
  • 未到達ならstop直前のlauncherのstderrとps -o stat=をartifactに残す

ポーリングを足すだけで直ると決めつけない。実装後のsmokeで経過秒が短ければ競合、
上限まで未到達ならlauncher側の別欠陥として切り分ける。

設計で決めるべき点(breaker指定)

  1. 上限時間(既存のN1_START_TIMEOUT_SECONDSと同じ予算内に収めるか、別枠か)
  2. 未到達時に残す証跡の形

担当

  • 設計: agmsg_architect_claude
  • 実装: agmsg_programmer_claude(負の対照: 「launcherのcmdlineを返し続けるstub」で
    unknownになること、「args不一致のclaude」でfailになること、両方をbatsで)
  • formal review: agmsg_reviewer_claude
  • verifier: merge後、Issue #434のsmokeを再実施。(a)経過秒/(b)証跡を報告に含める

完了条件

Issue #434のsmoke再実施でmarker送信まで到達すること(fresh/resumeとも)。

この実装で扱わない範囲

  • Issue #444の再修正(#444自体は投入前提の受入まで到達済みのため、merge済みのまま
    クローズしてよい)
  • Issue #407の4回目実行自体

README への影響

無。

Refs #395#434#407#444

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    close-scheduled-2026-09-20移行後1週間、問題なければクローズ予定(ユーザー決定2026-09-13)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions