Skip to content

根の追跡: 症状単位で閉じてきた 20 件は 4 つの根に還元できる #176

Description

@kappaseijin

type: Epic
title: "根の追跡: 症状単位で閉じてきた 20 件は 4 つの根に還元できる"

経緯

2026-08-26、ユーザーから次の指摘を受けた。

昨夜から課題を作ったり解決したり作ったりを繰り返しています。根治していない印象です。

breaker が 2026-08-24 以降にクローズした 17 件と、オープン 3 件を分類した。

断定: ユーザーの見立ては当たっている。

20 件は 4 つの根に還元できる。Issue は根ではなく症状の単位で立ち、症状ごとに閉じている。

4 つの根

R1 — 試験ハーネスが実環境から隔離されていない

該当: #171(storage)、#174AGMSG_AGENT_PID)、#148(回帰試験欠落)、#151 / #164 / #88(回数・sleep で待つ試験と実装)

ローカルの状態・プロセス祖先・タイミングが試験へ漏れ、
「ローカルで落ちる / CI で落ちる」が毎回別の穴から出る。

R2 — 失敗経路で理由が消える

該当: #164(gate の 2>/dev/null)、#168(診断へ到達しない)、#169rm の残留不明)、
#135(拒否が exit 0)、#156(121 秒無出力)、#245 試験(stderr 捨て)

落ちた理由が残らないので、毎回「診断を足す PR」から始めて 1 往復余計にかかる。

R3 — 代理指標が unknown を具体状態へ丸める

該当: #138--source recent の 0)、#144#159#162metadata_mismatch → false)、#175(未設定 → off)

「確認できなかった」を「確認できた」として扱い、運用判断を誤らせる。

R4 — 配備と source の乖離・配備のたびに watcher が止まる

該当: #143、および install.sh --update が本セッションで watcher を 24 回停止させた(全席)

PR ごとに配備 → 全席の受信停止 → 席が反応しない → 新たな症状、を 1 日 20 回繰り返している。
R4 は開発速度そのものが症状を生んでいる点で、他の 3 つを増幅している。

「根治を避けた」わけではない

breaker の断定:

診断を入れて初めて根が見えた段階に来た。
しかし今後も症状単位で続ければ、同じ根から Issue が出続ける。

根治の一手(各 1 PR = 1 主張、横断)

一手
R1 test_helper.bashsetup_test_env で環境を全部 pin する 1 箇所(AGMSG_STORAGE_PATHAGMSG_AGENT_PID=''SKILL_DIRrun/HOMEHERDR_* / TMUX_*LC_ALL)。加えて**「試験実行中に実環境のパスへ解決されていない」ことを検査する 1 test(負の対照)**。#174 はこの中の 1 項目として吸収し、試験 1 本の修正で閉じない
R2 lib の失敗契約を規約化 — return 1 の前に理由を stderr(watch_log)へ出す、試験は watcher の stderr を捨てない。既存の 2>/dev/nulltests/ から走査(grep で列挙 → 各 1 行)。#169 の evidence-first 設計はこの型で、そのまま子にする
R3 delivery.sh status の全フィールドを三値(確認できた true/false と unknown)に監査し、unknown を off / false / live に丸めている箇所を列挙して直す。#175 は子
R4 配備の頻度を変える運用決定(ユーザー)。 watcher 停止は仕様(fujibee#963 / fujibee#965)なので直さない

着手順(breaker 断定)

  1. delivery.sh status が「未登録」を mode: off として報告する #175 — 小、1 PR。席が monitor mode に入っていない運用実害を直ちに止める。R3 の子として、同時に他の丸め箇所を列挙だけする
  2. R1 横断 PRtest_reset.bats の actas lock 契約試験が AGMSG_AGENT_PID を pin していない #174 を吸収。次に同型が出る前に塞ぐ。効果が最大
  3. windows runtime (#567): 試験は通るが teardown の rm が Device or resource busy で失敗する #169 — 続行。R2 の子
  4. R2 の tests/ 走査、R3 の残り

Issue 運用の変更(breaker 断定)

分割そのものは正しい(#164 で効いた)。誤っていたのは「症状を単位に閉じる」こと。
#171 を 1 本直して閉じ、同じ症状の #174 が翌日出たのが証拠。

  • 新規 Issue に**「属する根(R1〜R4)」を必須項目にする。** 属するなら子 Issue。
    属さないなら新しい根の候補として breaker へ回す
  • 症状 Issue の close 条件に**「同じ根の走査(他に同じ穴が無いか、grep / 列挙で)」を加える。走査せずに閉じない**
  • 「1 日 18 件マージ」は速度の証拠であって根治の証拠ではない。
    今後の指標は**「同じ根から出た新規 Issue の数」が減ること**

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions