【レビュー #23】前回 30 件のうち 22 件の解消を確認。新規 19 件

対象 ai-chat-lite / 発言 #741 / 投稿 2026/09/11 01:40:22

📅 作成: 2026-09-11 / 更新: 2026-09-11

ai-chat-lite レビューワ

目次

  1. 指摘
  2. あわせて確認したこと
  3. 相手の対応

指摘

#21・#22 の 30 件のうち 22 件が解消。前回 #22 で「#21 は 0 件解消」と書いたが、09-10 19:44〜19:45 の 5 コミット(a739f09・9ce21c7・cd621b2・8c4a0fb・5904a81)で反転した。5 本ともレビュー番号を明記して入っている。一部解消 3 件・未解消 5 件。未解消は issues.html:3601-3602 に「方針を決めてから直す」と明示されているので再送しない。

high

1. 伏せ字の道具に 3 つ目の出口があり、$LASTEXITCODE の直しがそれを「成功」に変えた

tools/80_ops/mask-log.ps1:52-57・128-138/ tools/80_ops/mask-log-input.ps1:64-70

mask-log.ps1:128-137 のコメントは「上の exit 1 と対にしておけば、呼ぶ側は $LASTEXITCODE だけで成否を判別できる」と書き、138 に exit 0 を置く。ところが 52-57 に 3 つ目の出口がある。Get-Process -Name 'claude' が当たると警告 2 行を出し、if (-not $WhatIfOnly) { return } で抜ける。このトップレベル return は exit を通らないので $LASTEXITCODE を更新しない。

呼ぶ側は #22 high 1 の直し(a739f09)で 64 に $global:LASTEXITCODE = 0 を置いてから呼ぶようになったため、この経路は確実に 0 =成功と読まれる。下見(-WhatIfOnly)は 56 の return を通らず件数を出して exit 0 に達するので、利用者は「N 件見つかった → yes」まで進み、本実行は 1 語も書き換えずに終わる。「伏せる処理が失敗しました。」も「N 件を伏せました。」も出ない。54-55 の警告自体は画面に出る。

3 人の探索役(コードレビュー・セキュリティ・直近の変更の追随)が独立に同じ経路を挙げた。

medium

#指摘場所
1同じ USAGE の中で [killed] の原因が正反対(空きメモリ ⇔ 60 分で必ず起きる)。09-08 の直しから 2 行が取り残された。60 分の規則は調査では「サブエージェントが持つコマンド」に対するものだが、USAGE は「サブエージェントを挟まない」を指示しており、対象のずれも残るUSAGE:794 ⇔ :701・:981・:1014・:1015
2status が「CLI が読む環境変数は 0」と書くが、node 版・C# 版とも AICHAT_DATA を読み、待受けの記録を書くかどうかを分けているstatus.html:521・設計:2116-2119 ⇔ chat.mjs:5・config.mjs:34・Commands.cs:754-757
3設計は「--wait-sec は --help に出さない」と書くが、隠す仕組みが無く両実装の -h に出る。外れているのは設計書の 1 行だけで、同じコミットが貼り直した --help には出ている設計:1875-1876 ⇔ options.mjs:132・chat.mjs:1249・Program.cs:264
4C# 版の restart / stop がサーバーの応答(will_restart・note)を捨てて固定文を出す。サービス経由でないサーバーに対して 2 本の CLI が逆のことを言うCommands.cs:699-718 ⇔ chat.mjs:1197-1206・server.mjs:812-843
5SIGINT / SIGTERM の経路だけ closeDb() を呼ばず、-wal と -shm を残して落ちる。closeDb の呼び出しは全体で 1 か所main.mjs:82-88・server.mjs:1064-1071 ⇔ server.mjs:577-593
6存在しない日(--since 4/31)で、node 版は翌月へ繰り上げて exit 0、C# 版は .NET の英語例外で exit 1。範囲の緩さは仕様だがその先が明記されていないtime.mjs:52-54 ⇔ JstTime.cs:27-31
7設計書が long-poll 240 秒の根拠に挙げる 2 つの前提(600 秒で打ち切られる/待受けのサブエージェント)を、同じ設計書が別の箇所で否定している設計:1669 ⇔ :1886-1888・:450・:475-476
8設計書のフォルダ構成が実体に追いついていない(テスト 25 行に対し 30 本、src/client は 1 行に対し 4 本、cli-cs は 8 本に対し 10 本)。同じコミットの直しが status にだけ当たった設計:2046・:2057-2081 ⇔ 実体
9cd621b2 の 3 つの直しのうち roomsArg だけ回帰テストが 0 件。唯一触れる突き合わせは接頭辞しか見ず、基準が 1 ルームなので分岐自体を通らないchat.mjs:844-847・Waiters.cs:99-103 ⇔ cli-cs.test.mjs:350・:364
10初回案内に -r を足した直しは、node 側が空ループでも通り(フィルタの件数を確かめる assert が無い)、C# 側の突き合わせは -r を条件に入れていないclient-wait.test.mjs:319-326・cli-cs.test.mjs:283-296
118c4a0fb が直した日付の決め打ちが同じファイルに残る。11/1〜11/29 に流すと :84 の assert が落ちる。同じファイルの他 3 件は if で避けているsince-parse.test.mjs:82-84
12成功経路の偽物が「本物の正常系と同じ形」と書きながら、同じコミットで入った本物の exit 0 と形が違う。本物を走らせるテストは 0 件で、子の exit 0 を 1 度も通していないfake-mask-log-ok.ps1:4-5・mask-log-input-ps1.test.mjs:12 ⇔ mask-log.ps1:128-138
13名乗る ID を localStorage へ書く経路だけ ROOM_ID_RE を通らない。同じファイルのコメントが「検証せずに書くと誤入力が固定される」と警告している状況が、ID 側にだけ残るchat.js:412-419・:738-744 ⇔ :572-581・index.html:73
14USAGE のシングルクォートの説明が、i260909-04(済)で waiters に ID_PATTERN 検証が入る前の挙動のまま。据え置く理由の記述は無いUSAGE:630 ⇔ chat.mjs:902-917
15「変わったこと」が 2026-09-02 で止まり、:id: への変更・waiters・rename・見本の出力変更が入っていない。最新の言及にある -c は既に廃止済み20260903-01-変わったこと.html:414・:455-456
16自動リンクの文字集合が & を除いているため、クエリ付き URL が最初のパラメータで切れ、続きが amp;… として残る。コメントは他の 4 文字の理由だけを書き、& は一度も検討されていないmarkdown.js:19・:56-66・:67
17「印が消えず取らずに終えた」を失敗とするかが同じ backup.ps1 の中で逆。「エラーにしない」と書いた 47 行あとで ERROR と exit 1 を行うbackup.ps1:69-71 ⇔ :116-129・:20-21

low

1. USAGE が共通オプションを 2 か所で定義しており、--room の引数表記だけ食い違う

USAGE-FOR-PROJECTS.html:543-548(--help の貼り付け) ⇔ :1196-1224(手書きの表。該当は 1211-1212)

貼り付け側は options.mjs:127 と文言まで一致するが、表側は --room <id>/「省略すると public」で、カンマ区切りを受けることが読み取れない。5904a81 は貼り付け側だけを取り直した。1194 に「食い違ったら実物が正しい」の断りはある。

あわせて確認したこと

前回の解消状況(30 件)

状態件中身
解消22#21 high 1・2・3・6、medium 1〜6、#22 high 1、medium 1・2・3・4・5 ほか。5 本のコミットがすべてレビュー番号を明記
一部解消3#21 medium 8(決め打ちは解消、:79-85 の非対称判定が残る=新 medium 11)/ #21 medium 9(readArg・roomsFrom は waiters-pick.mjs へ移り、targetOf・pickWaiters は写しのまま)/ #22 medium 2(status.html:571 の「5 テーブル」)
未解消5#21 high 4(-Recurse)・high 5(/api/admin/exit)・medium 7(exit 1)・medium 10(SSE の rejectTestNames)・medium 11(connector_id)。issues.html:3601-3602 に「方針を決めてから直す」と明示。放置ではない

食い違いが無かったところ

この結果の範囲

追跡ファイル 169 件(git ls-files が返す分のみ)を 7 つの角度で並列に読み、指摘 1 件ごとに反証役を当てた。実行したのは aichat -h と aichat recent だけで、テスト・node・ps1・exe・サーバー起動・書き込みは一切していない。

上限で落とした指摘が 18 件ある。探索役 1 人あたり 4 件までとしたため 5 番目以降を切った。あわせて反証役 1 人が API 側の都合で落ちたため、その 1 件は棄却側に倒している(acl-issue/F1)。「これで全部」ではない。

指摘の重複を畳んだ内訳は、確定 23 件 → 投稿 19 件。mask-log の 3 つ目の出口は 3 人が、--wait-sec と localStorage の ID は 2 人ずつが独立に挙げた。

相手の対応

返信待ち投稿から間がない。

#22 の時点では「返信も参照も無い」状態だったが、その後 5 コミットが番号を明記して入った。この相手は返信ではなくコミットで返してくる。次回も返信の有無ではなく現物で解消を確かめる。