Skip to content

lifecycle owner 不在: 配送役の残置物が 5 層に散らばる (棚卸し + gc/manifest 提案) #8

Description

@orangewk

経緯

2026-07-06、orange がゾンビプロセス懸念で PC を再起動。2 つの Claude セッションで独立に調査した結果、生きているゾンビは 0 件(再起動直後のため)だが、配送役を生む制御プレーンの残置物が複数層に散らばっており、lifecycle owner が不在であることを確認した。

観測値

セッション A(再起動前後の調査)

  • mathdesk-desktop チーム内の全 agent が mode=off(安全側に倒す措置を実施済み)
  • Windows Scheduled Task 残置 ×2(いずれも Disabled):
    • agmsg-watch-once-eijipowershell ... C:\tmp\agmsg-watch-once-gate.ps1 -Name Eiji(1 分間隔、Last Run 2026-06-29)
    • agmsg-watch-once-eiji-probewscript ... C:\tmp\agmsg-watch-once-probe-eiji.vbs(Last Run 2026-06-30)
  • Codex automation 残置 ×1: agmsg-hub-relay-collector(kind=heartbeat, FREQ=MINUTELY, status=PAUSED)— Hub relay PoC の collector/dispatcher

セッション B(本スレ、2026-07-06 23 時台)

  • ~/.agents/skills/agmsg/run/ に 2026-06-27 の stale artifacts: codex-app-server.*(pid/port/version/log)×2 セット + codex-bridge.mathdesk-desktop.dogfood-eiji.*(pid/meta/log 等)。pid 42232 等は全て死亡確認済みなのに pidfile が残置 — 誰も看取っていない証拠
  • bridge log は armed のまま途切れており、正常終了の形跡なし
  • ~/.claude/settings*.json に agmsg hook の登録なし(SessionEnd cleanup の配線がグローバルには存在しない)
  • C:\tmp に実験残骸 約 40 件: watch-once 系 ps1/vbs/log、conditional-waker state(eiji/junoma/deneb、最新 7/4)、tray-notifier、manual-monitor 系 sh、hub-relay state、backup dir、設計 doc 等
  • conditional-waker(7/4 実行痕跡)は Scheduled Task にも scripts にも定義が見つからず、セッション内アドホック実行の残骸と推定

構造診断

  • 作成⇔破棄がペアになっていない。プロセス / pidfile / Scheduled Task / Codex automation / C:\tmp スクリプト・state の 5 層それぞれで、作る経路はあるが破棄する経路がない(または人間の記憶頼み)
  • delivery.sh set off のスコープは自プロジェクトの watch.sh のみ。別セッションの Task / automation / app-server は管理外
  • Codex / Claude の「セッション終了・アーカイブ」と OS 側の寿命が同期していない → 「会話は終わったが配送役だけ残る」「配送役だけ消えて気づかない」の両方が起きうる
  • codex-app-server は設計自体が「起動 or 再利用」の常駐 daemon で、参照カウントも idle shutdown もない

実施済みの応急対処(2026-07-06)

  • 全 agent mode=off(セッション A)
  • Disabled Scheduled Task ×2 削除
  • PAUSED Codex automation agmsg-hub-relay-collector 削除(~/.codex/automations/ から)
  • run/ の stale artifacts 一掃
  • C:\tmp の実験残骸 約 40 件は未処理(設計 doc 等の価値物が混在するため別途判断)

提案

  1. gc(reap-on-startup): run/ の pidfile を走査し、pid 死亡なら artifacts 削除、pid 生存だが対応セッション消滅なら kill。session-start / whoami の冒頭で毎回実行(cron 不要、使うたび掃除)
  2. codex-app-server に idle TTL: 最後の bridge が detach して N 分でセルフシャットダウン
  3. spawn 系の manifest 義務化: プロセス起動・Scheduled Task 登録・Codex automation 作成など「配送役を生む操作」は全て単一 manifest(例 run/manifest.jsonl)に記録し、despawn / gc が manifest を読んで層横断で一掃できる形にする。lifecycle owner を「manifest を書いた者 = agmsg 自身」に一本化
  4. 実験スクリプトの置き場規約: C:\tmp 直置きをやめ、gc 対象となる管理下 dir に置く

1〜2 が即効、3 が本丸(今回の「4 層に散らばって誰も知らない」の再発防止)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions