Notes
この環境が今の形になっている理由。
1 本につき 1 つ、理解するまでに時間がかかった問題と、それに対して今どう対処しているかを扱います。ここに置いているのは、答えが設定・スクリプト・CI にまたがっていて、そのどれもが説明の置き場所として適切でないためです。
数値はすべて実測です。ほとんどは測定に使っているマシンのもので、別の環境で測ったものは、その記事に環境を書いてあります。
8 GB では用途ごとに別のモデルを選ぶことになる
GPU に全部載れば 73〜113 tok/s、1 層でもはみ出せば 7〜21 tok/s。どちら側になるかを決めるのは重みの大きさではなく KV キャッシュの伸び方で、長い文脈に強いモデルはツールを呼べなかった。
PATH の予算
Windows の PATH は 8191 文字が上限で、その大半を mise が使う。使い切ると、インストール済みのコマンドが「存在しない」と言われる。
shim をやめて symlink で起動する
mise の shim はコマンド 1 つにプロセスを 3 個使い、しかもツールが終わるまで端末との間に挟まったままになる。プロセス生成のたびに検査が入る環境では 15 ms のツールが 127 ms になり、bat と zi はプロンプトを返さなくなっていた。
アイコン 1 個で以降の桁が全部ずれる
Neovim が計算する文字幅は Unicode の East Asian Width から来る。端末が実際に描く幅はフォントから来る。Nerd Font はその 2 つがずれる位置にグリフを置くので、setcellwidths で font 側の答えを教える。
コマンド行を見るガードは、コマンド行にしか効かない
コミットメッセージから特定の行を締め出したい。ツール呼び出しの直前に検査を挟むと、-m で書いた場合だけ止まる。-F でファイルから渡した場合、--amend の場合、他のマシンで書かれて pull されてきた場合はすべて素通りする。
レジスタは 1 つ、外の実装は 5 つ
`+` に yank したものがどこへ行くかは、WSL か Windows か Wayland か X11 かで別々のコマンドが決める。同じツールに、コピーとペーストで逆の改行変換を頼む必要もある。
可視なのに描かれないウィンドウを見つける
GlazeWM は非アクティブなワークスペースを DWM の cloak で隠す。クラッシュやモニターの脱着で cloak だけが残ると、可視で、画面内に矩形を持ち、どのワークスペースにも属さないウィンドウができる。
取り返しのつかない操作は、会話の「はい」では通らない
エージェントが push や削除を実行しようとすると、承認の分類器に落とされる。チャットで同意を得ていても変わらない。AskUserQuestion で選ばせた結果だけが承認として通り、これは push 固有ではなかった。
生成しなければならない設定
GlazeWM は 1 ファイルしか読まず include も無い。一部を公開リポジトリから外すには、ウィンドウマネージャが見る前にファイルを組み立てるしかない。
切れるマウスと、絞り込みを間違えた話
着脱イベントがログに 1 件も無いことで、ケーブル・ポート・コネクタは候補から消えた。残るのは無線リンクと電源ポリシーの 2 つ。同じ日に Windows Update が入っていたので後者を選んだが、原因は前者だった。
不変条件は 1 か所、走らせ方は 2 通り
設定は正しいのに Neovim が固まる、という壊れ方がある。原因がリポジトリではなくマシンの状態にあるので、lint では出ない。検査本体を 1 モジュールに置いて、:checkhealth と headless CI の両方から呼んでいる。