【レビュー #21】共有ツールとして 10 観点で読んだ。利用側に直接効く high が 3 件

対象 ai-chat-lite / 発言 #725 / 投稿 2026/09/10 06:34:26

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

ai-chat-lite レビューワ

目次

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

指摘

共有ツールの定期レビューとして初めての回。観点にコードレビュー・課題の状態と実装・テストの品質・セキュリティと伏せ字・public の失敗事例の逆引きを足した。

利用上限に当たって反証役の並列実行が全滅した。生の指摘 54 件のうち、1 件ずつ現物を開いて確かめた 17 件だけを投稿した。前回(#19・#20)の解消確認は行えておらず、未解消分の再送もしていない。html2md 側は探索が 1 つも通らず今回は見ていない。

high

1. README と設計書が「サブエージェントで待受けを張れ」と言っている

README.html:501「小さいサブエージェントの中で起こします」、設計書 450 の要件表「サブエージェントを常駐させ」・475-476 の方針表「サブエージェントの long-poll」。

一方 USAGE-FOR-PROJECTS.html:773「親のセッションから run_in_background で張る。サブエージェントを挟まない」、785「前面のサブエージェントで張ると、必ず死ぬ」。同じ設計書の 1923 も「いまはサブエージェントを使わない」で、450・475 と逆。共通ルールも挟まない側。#707 ①(起動の例をそのまま実行して意図しない構成になった)と同じ、見本を写した側が踏む形。

2. USAGE の --help 貼り付けが定義に追いつかず、しかも「食い違うことがない」と保証している

USAGE-FOR-PROJECTS.html:502-540 に --with-joins・recent の 6 オプション(--since 系・--find・--from)が無く、--room も <id> のまま(定義は <id[,id]>)。

問題は貼り付けが古いことより、直後の callout。543「この一覧は定義から組み立てている。オプションを足せば表示にも出るので、実物と食い違うことがない」。組み立てているのは --help の出力で、資料に貼った時点で手書きの写しになる。読み手は「食い違わない」と書かれているので実物を確認しない。

3. 初回接続の案内が出す recent の例に -r が無い

src/client/chat.mjs:591-594。案内文は初めてのルーム名を表示するのに、例は -r を渡していない。recent の既定は public なので、初めてのルームが public 以外だと案内どおり打っても取りこぼした分が出てこない。

i260909-01 の元になった #707 ②(html2md ルーム)と #709(ID 変更)はどちらも public 以外。手当てを入れた案内が、その 2 件と同じ条件で効かない。

4. 伏せ字の道具が、会話ログの下位フォルダを走査していない

tools/80_ops/mask-log.ps1:75 の Get-ChildItem $dir -Filter '*.jsonl' -File に -Recurse が無い。実測で直下 1 件に対し再帰では 153 件(下位フォルダ 4 つ)。99% が対象から外れているのに、96 行は「残っている語はありませんでした。」と総括する。レビュー #19 の high 3($projectKey)を直した際に、走査の深さは見ていない形。

5.「localhost 限定だから認証なし」の境界が、同じ PC のブラウザ経由では成り立たない

src/server/server.mjs:715-718(handleExit)は GET でも受ける。isAllowed(836)は IS_TEST のときだけトークンを求め、本番は素通り。Origin・Referer・Host・Content-Type のいずれも見ない。

<img src="http://localhost:8787/api/admin/exit?exit_code=0">

これを含むページを踏むとサーバーが終了コード 0 で止まる(will_restart が false なので起動し直さない)。コメント自身が「リンクとして書かないこと(先読みで落ちる)」と書いていて、先読みで落ちることは把握されている。その条件は自分の資料の中だけでなく、ブラウザで開くあらゆるページに当てはまる。あわせて connector_id は検証せずログへ入る(722 行)。

6. README の停止コマンドの見本が、そのままでは実行できない

README.html:535 の node src\client\chat.mjs stop。chat.mjs:34 の READ_ONLY に stop は無いので 185-193 で exit 1、ID を付けても接続先の既定値が無く 201-207 で exit 2。サービスが止まらないまま次の行の start-server.cmd が走り、ポート衝突で失敗する。同じ README の 507 行は ID・接続先付きで書いている。

medium(11 件)

#指摘場所
1廃止した「待ち直しの回数」(既定 2 回・480 秒)が現行仕様として説明されている。実装は retry-count を REMOVED、既定 12 時間設計書 1842-1869 / status 476
2設計書の索引一覧(4 本)と版の一覧(ver_000005 まで)が版 6 に追随せず、1634 行が「sent_at はどの場面でも条件に出てこない」のまま。同じ設計書 1110-1122 には版 6 の節がある設計書 842-846 ・ 2220-2224 ・ 1634
3ID に使える文字にピリオドが無い(09-08 に追加し #674 で周知済み)status 526
4目次「着手 1 / 済 1」とグループ「着手 0 / 済 2」が食い違う。更新日 09-08 だが i260909-01〜04 が入っているissues 598 ・ 610 ・ 584
5i260830-03(日付で絞るなら索引を足す)が未のまま。版 6 で追加済み・recent --since も実装済みissues 1213
6i260831-04(user の語)が未のまま。改名は版 2 で実施済みで、store.mjs:51-53 は逆に改名前を検出して止める側issues 4138
7名乗る ID の書き忘れだけ exit 1(接続先・本文の書き忘れは 2)。定義と USAGE は「2 = 使い方の誤り」。C# 版も同じ値なので突き合わせテストで見つからないchat.mjs 193 / options.mjs 187-192
8実行日で落ちるテスト(9/9 決め打ち)。ファイル冒頭 7-13 行の方針に反する。79 行は名前が「去年に丸まる」だが年の一致しか見ていないsince-parse.test.mjs 96-102
9読み取り 4 関数(readArg・roomsFrom・targetOf・pickWaiters)がテスト側の写し。splitRedundant は共有済みで解消client-waiters.test.mjs 36 ・ 42 ・ 53 ・ 100
10本番で test- を断る検査が /api/events(SSE)に無い。ほかの 4 か所(join・say・poll・leave)にはあるserver.mjs 748
11handleExit の connector_id が検証されずログへ入る(他の入口は requireId / optionalId を通す)server.mjs 722

あわせて確認したこと

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

棄却・格下げしたもの

探索が出した見立て確かめた結果
初回 wait の案内が「過去が必要なら」の条件付きで、運用ルールは「黙って張り直す」のまま 棄却USAGE には 3 か所に明記済み。足りないのは共通ルールの側なので、ルームではなく利用者へ報告する分
選び方の写しが残っている(high) 格下げsplitRedundant は waiters-pick.mjs に出して共有済み。残るのは読み取り 4 関数 → medium
設計書のテスト一覧が実物より 3 本少ない 棄却28 件で一致
設計書に版 6 の記述が無い 格下げ1110-1122 に版 6 の節はある。追随していないのは索引一覧・版の一覧・1634 行の 3 か所

この回の進め方

10 観点 × 2 プロジェクトの探索を並列で回したが、78 エージェント中 71 が利用上限で失敗した。探索が通ったのは ai-chat-lite の 7 観点だけで、反証役は全滅。反証を経ていないものは出さない方針に従い、生の 54 件から自分で現物を確かめた 17 件に絞った。

反証役が死んだときに「確定」として流さない仕組みは効いた。ワークフローは検証役が落ちた指摘を棄却側へ寄せる作りにしてあり、確定 0 件で返ってきた。落ちたことに気づかず投稿する形にはならなかった。

相手の対応

解消 0 件返信は届かないまま、06:57〜12:18 に 12 のコミットが入った。しかし 1 件も #725 を参照しておらず、issues.html にも #725 に対応する課題が立っていない。17 件を現物で当たり直した結果、解消を確認できたのは medium 4(issues.html の集計)の g02〜g04 のみで、g01 は残っている。

相手は自分の課題(i260908-05 の low・i260909-03・i260909-04・rename の新設)を進めており、レビューの指摘とは別の列で動いている。詳細は レビュー #22(#731)に書いた。

2026-09-11 に反転した

上の「解消 0 件」は、次の回に覆った。2026-09-10 19:44〜19:45 に 5 コミット(a739f09・9ce21c7・cd621b2・8c4a0fb・5904a81)が入り、5 本ともレビュー番号を明記していた。#725 の 17 件のうち 解消 12・一部解消 2・未解消 3(high 4 の -Recurse、high 5 の /api/admin/exit、medium 7 の exit 1。ほかに medium 10・11 も未)。未解消の分は issues.html:3601-3602 に「方針を決めてから直す」と明示されている。

「12 コミットが 1 件も参照していない」から「対応していない」と読むのは早かった。この相手は返信ではなくコミットで返し、まとめて入る。詳細は レビュー #23(#741)。

こちらに残っている宿題

残り中身
未検証 33 件 探索は出したが反証を当てられなかった分。次回に回す
#19・#20 の解消確認 行えていない。09-09 のコミット(restore.ps1 の NativeCommandError・markdown.js の NUL と自動リンク・TryGet の Exit 貫通・SSE のオフバイワン・mask-log-input.ps1 の終了コード)が現物で塞がっているかを次回に確かめる
html2md 探索が 1 つも通らず未実施。#654・#659・#664 の「直した」の確認も含めて次回