v0.28.4.ja.md
docs/i18n/release-notes/v0.28.4.ja.md
Tesserae v0.28.4 — 残りのアカウントは一度も使われていなかった
<!-- translations:start -->
English · 한국어 · 中文 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-07-31 · PyPI · GitHub release · pip install --upgrade tesserae==0.28.4
Tesserae はログイン済みの CLI アカウントを順に切り替える。レート制限に達したアカウント が次へ引き継ぐことで、実行の残りすべてが決定論的抽出に落ちないようにするためだ。その ローテーションが無効になっていた——しかも Tesserae が最もよく使われる形で。
環境変数ひとつが仕組み全体を止めていた
CLAUDE_CONFIG_DIR または CODEX_HOME を設定すると、検出されたアカウント一覧がその 1ディレクトリで置き換えられていた。Claude Code セッションが生成するすべての プロセスは CLAUDE_CONFIG_DIR を継承するため、コンパイルは自分を起動したセッションの アカウントしか使えず、それが尽きるとローテーションには行き先がなかった。
本プロジェクト自身のグラフで、1日のうちに計測された結果:
- あるコンパイルは1アカウントの5時間制限を使い切り、1,531件の文書を決定論的抽出に 落とした。その間、ログイン済みの他2アカウントは満額のクォータを残して遊んでいた。
- 後の実行では、隣に健全なアカウントがありながら、1アカウントの期限切れ OAuth で さらに 1,590件を失った。
グラフは約13,000ノードから5,155ノードへ静かに縮んだあとで、ようやく気づかれた。
環境変数はいま、最初に試すアカウントを指すだけで、唯一試せるアカウントを意味しない。
どのアカウントを消費するかは利用者が決める
llm_claude_config_dirs と新しい llm_codex_homes(ローテーション順のリスト)は、 設定されていればそれが最終的な権威となる。リスト外は一切試されず、選ばれたのではなく 継承された周囲の環境変数よりも優先される。
{
"llm_codex_homes": ["/Users/you/.codex-work", "/Users/you/.codex-personal"]
}
プロバイダごとにキーが分かれているのは、Claude CLI の設定ディレクトリと Codex ホームが ディスク上で別物だからだ。Codex の検出はさらに auth.json を要求するようになった。ある 実機ではこの条件が散らばった ~/.codex-*.log を24個除外した——それらは文書ごとに失敗 確定の codex exec を1回ずつ浪費させていた。
尽きたアカウントのために文書ごとのプロセスを払わない
クォータはアカウントの事実であり、文書の事実ではない。設定済みの全アカウントが上限を 報告したあとも、実行は残りの文書ごと・アカウントごとに CLI の子プロセスを起こして同じ 答えを聞いていた。この判定はいま、実行の残りのあいだ記憶される。
誤発火しにくいよう意図的に厳しくしてある: 試したすべてのアカウントが確認済みの行き止まり であり、かつ少なくとも1つが「you've hit your … limit」と明言している必要がある。1つでも タイムアウトなら実行は試行を続ける——一時的障害は枯渇ではない。判定はクライアント単位 なので、長寿命のデーモンが制限リセット後も止まったままになることはない。
概念レイヤーを失ったコンパイルは、そう告げる
Compiled project wiki: processed=2492 skipped=0 fallbacks=1531 nodes=… edges=…
WARNING: 1531 of 2492 document(s) (61.4%) fell back to deterministic extraction —
their concept layer is missing from this graph.
fallbacks=N は機械可読なサマリ行に載るので CI がこれでゲートでき、人間向けの行は 50% を超えると note: から警告に上がる。どちらも復旧方法を示し、その復旧にコーパス全体の 再コンパイルは不要だ:
tesserae compile --changed-only --retry-fallbacks
これが #92 だ。上のすべてのバグを 1日のあいだ見えなくしていたのは、この沈黙だった。終了コードは変えていない——compile を スクリプトで包むすべてに対する契約変更であり、独立した判断に値する。
その他
Claude 抽出器はもう --max-turns 1 を渡さない。このフラグが数えるのは応答ではなく ツール呼び出しなので、MCP サーバーが設定されたマシンではモデルの最初のツール呼び出しが 唯一のターンを使い切り、CLI は JSON を出す前に終了していた。ワンショットの意図が実際に 必要とするのは --strict-mcp-config だ。
@jokerized/tesserae は npm の OIDC トラステッドパブリッシングにより GitHub Actions から 公開されるようになった。リリースには来歴証明が付き、長命な npm トークンはもう存在しない。
v0.28.3 からのアップグレード
そのまま差し替えられる。API・スキーマの変更はない。llm_codex_homes は追加のキーで、 単数形の llm_codex_home も引き続き動作する。
複数アカウントを使っているなら再コンパイルを。 以前のバージョンで劣化した文書を新しい 実行が回収でき、キャッシュのおかげでコストがかかるのは影響を受けたファイルだけだ:
tesserae compile --changed-only --retry-fallbacks