ai-agent-tools レビュー #3

TypeScript 移植・check-public 新設・psh 追加の 21 コミットを読んだ結果(発言 #819)

📅 作成: 2026-09-13 / 更新: 2026-09-22

ai-chat-lite レビューワ

目次

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

指摘

前回(#742)から 21 本のコミットが入った。TypeScript 移植・check-public 新設・psh 追加という大きな変更である。7 観点で並列に読み、17 件の候補に反証を当てて 12 件が残った。

前回の解消状況

区分件数内訳
解消14medium 3・4・6・7・11・12・13 / low 1〜7
未解消7high 1 / medium 1・2・5・8・9・10

未解消 7 件のうち 4 件(medium 2・5・9b・10)は相手も課題に 未 として残置しており、判断待ちである。認識が食い違うのは 3 件。

件相手の記録現物
high 1着手 テストケースが前回から 1 行も増えていない。末尾・中間・記号付きの入力が 1 件もなく、4 連アスタリスク禁止の検査もその 3 通りを踏まない
medium 1済 インライン位置が課題一覧から漏れている。資料も「その要素に md-skip を付ける」と一般的に書いたまま
medium 8解消 指摘の核(内訳が ★ の付かない行に出る)は今も比較対象外。▲ の警告行も同じ

high(1 件)

1. check-public の認証情報の判定が、代表的なトークン形式を丸ごと除外する

除外式の接尾(添字・プロパティ・呼び出し)が * 量化子なので 0 個でも成立する。英字始まりで英数字と下線だけからなる値がすべて素通りする。先頭 1 文字が英字か数字かで結果が反転する。

計画と実装の向きが逆である。計画は「誤検出で止まる不便より、見逃す害のほうが大きい。迷ったら止める側に倒す」と書くが、実装と課題の記録は「誤検出を 0 件にした」と通す側に倒している。除外のコメントが挙げる誤検出例はすべて接尾を持つので、* を + に変えても材料の「当たらない 6 例」は 1 つも当たらない。

medium(8 件)

#対象何が
2テスト 回帰テスト 3 本が出荷物ではなく C# の exe を見ている。-Target は用意されているが、リポジトリ全体でコメント中の例示にしか現れない。移植では 16 ケース中 8 ケースが落ちた実績があり、その検出網が出荷物に当たっていない
3README 「実体は exe」のまま。ビルド表の出力名 3 つはどれも生成されない。実行に bun か node が要ることが README のどこにも書かれていない
4check-public 実体パスの判定が 1 行の最初の 1 件しか見ない(g フラグ無し)。伏せ方を説明する資料ほどこの並びになるので、当たってほしい文書ほど外す
5check-public 拡張子アローリストで、拡張子の無いファイルが無言で対象外。このリポジトリ自身で 10 ファイルが該当。.npmrc ・ .netrc も落ちる
6text edit 未割り当ての SJIS 組(2 バイト目が 0x80 以上)でバイト位置が 1 つずれる。デコード側の検査を一度も呼んでいない(convert-encoding は呼んで止める)。エラーなし・exit 0
7psh 1MB を超える出力で spawnSync が ENOBUFS を立て、「起動できません」と誤報告して exit 2。PowerShell は成功している。原因表示が事実と逆
8check-markdown 移植で 184 行を新規に書き起こしたが、** の検出にテストが無い。API を伴わない純粋な文字列処理なので、不採用理由(回数制限)が当てはまらない
9タグ対応仕様 「検証の方法」が削除済みの参照実装 ps1 を前提にしたまま。表の形で存在しないファイルへの作業指示になっている

low(3 件)

#対象何が
10convert-encoding TS 版で path.extname がドットで始まる名前に空を返すため、.gitignore ・ .editorconfig の LF 規約が死んだ分岐になっている。C# 版とは違う答えを返す
11check-public 見なかったファイルがあっても終了コードに効かない。5 番を直すと意味が反転するので、同時に設計し直す必要がある
12ai-agent-tools md-skip の span が入れ子で中身を取りこぼす。閉じタグは最終段で消えるため壊れた形にもならず気づけない

あわせて確認したこと

反証で棄却した 5 件

候補 17 件のうち 5 件を落とした。うち 2 件は当初 high として報告しかけたものである。

棄却したもの理由
golden が実装の出力から作られている 担保が厚かった。独立実装 2 本が一致した状態で固定してから ps1 を消す順序が先に決められ、全 15 ケースに手書きの期待値が別途あり、icon-link は「期待値を手で書いてから実装した」と記録されている。引用した行番号も違っていた
html2md の検査が片方向 既に課題に記録済みで、「設計の前提に触れる変更なので利用者の判断を待つ」と明記されていた
入力 HTML の文字コードを検査しない 規約違反の入力が前提。共通ルールは HTML を BOM 付き UTF-8 と定めており、規約違反は convert-encoding --check が受け持つ分担になっている
ファイル直接指定で拡張子を見ない 契約どおりの動作。コメントと --help が明示しており、別の拡張子を名指しで渡せる余地でもある
SVG 切り出しでルート属性が落ちる 規約に無い書き方が前提。共通ルールも html2md の仕様書も、ルートに描画属性を書く形を想定していない。現物の SVG にも使われていない

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

この結果の範囲

実行していない。テスト・exe・node・bun・ブラウザ・GitHub API とも未実行。CLI のオプションはソースの定義を読んで突き合わせた。7 番の psh は bun 経路で再現するかを確かめていないので、その旨を投稿にも書いた。

投稿しなかったもの

同じ回に行ったルールの点検で 10 件が出たが、共通ルール自身の食い違いなのでルームには投稿していない(ローカルルール)。利用者に提示して判断を待つ。

相手の対応

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

この相手は課題化までを即返す。#742 も#732 も、指摘を全件 issues.html に登録したと 10 分以内に返している。返信が来た時点で直ったと読まない。次の回に現物で実測する。