lifecycle record は log line ではない
llama.cpp b11401 は 2026年10月5日に公開されたプリリリースです。関連する pull request #29895 は10月3日に作成され、10月4日 UTC 23:59 にマージされました。router mode における parent server と child model server の通信を変えます。child は stdout を state command 用に確保し、通常の stdout 出力を log とともに stderr へ向けます。router は二つの stream を別々に読み、command stream からだけ state framing を受け取り、stderr を log として転送し、想定外の stdout line を警告します。
この PR の作者によれば、以前は state command と log が一つの pipe を共有していました。改行のない log write や color-reset sequence が command の前に来ると、router は lifecycle update を state ではなく text として扱う可能性があります。作者は download 中に model が停止したように見える状態につながり得たと報告しています。マージされた commit a7fb71f は child lifecycle でこの分離を明示し、combined output の subprocess option を別々の output pipe に置き換えています。これは作者による実装・再現根拠であり、独立した可用性、安全性、クロスプラットフォームの検証結果ではありません。
- 1Child の state record
- 2確保した stdout
- 3router の command reader
- 4lifecycle handler
- 1Child の log/progress text
- 2stderr
- 3router の log forwarder
- 4運用者の表示
- 1command stream の想定外 text
- 2警告し state transition しない
- 1stdout と stderr を再び混ぜる process wrapper
- 2framing 境界を失う
- 3採用しない設計
この patch は trailing newline の前へ terminal color reset を移し、行ごとに ANSI state が閉じるようにもします。Windows では colors が有効で console が描画できる場合にだけ virtual-terminal processing を有効にします。これらは実装に固有の表示詳細です。すべての terminal、pipe、process wrapper、OS で同じ挙動を保証するものではありません。
POSIX.1-2024 の write() specification は、この区別の古い仕組みを示します。pipe は byte stream であり、他の writer と混ざらないことが要求されるのは {PIPE_BUF} 以下の write です。任意の read が一つの log line や一つの record と等しいことは保証しません。buffered な stderr writer でも一行を複数の write に分けることがあります。b11401 は router command と log の stream 間の混線をなくしますが、child と parent には各 stream 内で bounded な incremental framing がなお必要です。この標準ページは 2024 edition ですが、正確な発行日はここでは確認できませんでした。
child 作成時から control channel を守る
process 境界には狭い契約が必要です。この変更では child が通常の server 出力より先に stdout を確保し、そこへ framing された state notification を出し、log は stderr へ送ります。parent は pipe ごとの partial-line buffer を保持し、両方を待ち、stdout の期待した command prefix だけを state record と扱います。これにより progress message が control record の parse を妨げません。
その child の周囲に stdout と stderr を一つに統合する wrapper を置いてはいけません。それはこの patch が取り除く曖昧さを戻します。また、機械可読な制御データと機微を含み得る運用 log を混ぜることにもなります。source は download text を敵対的入力と主張せず、この分離が完全な secret-handling 機構とも述べていません。任意の text を state command として扱う危険は本稿の推論です。実際の deployment には別途 access control、log の秘匿化、model/artifact の provenance、network isolation が必要です。
以下はローカル process supervisor 一つだけの、未実行 N=1 fixture です。
- 隔離したローカル環境で一つの固定した b11401 candidate を使います。解決した commit、parent/child command line、OS、wrapper の有無、期待する state record prefix を記録します。credential、public listener、tool、信頼できない model download は与えません。
- stderr に改行のない synthetic progress line を送り、確保した stdout に構文上正しい state record を一つ、その後に改行を送ります。各 pipe を別々に、bounded buffer と短い timeout で捕捉します。期待する結果は一つの parsed state event と保存された log fragment であり、model download の試験ではありません。
- state record が stderr から来る、想定外 stdout line が lifecycle state を変える、buffer が定めた上限を超える、pipe が予期せず閉じる、manifest が変わる場合は不合格です。失敗した byte を非機微の diagnostic evidence として残します。stream を統合したり別 supervisor で retry したり、log prefix から state を推測したりしません。
リポジトリの MIT license はコードに適用され、model file、log、production supervisor には適用されません。security policy は router を含む一部 server 機能を untrusted environment に推奨していません。この policy は b11401 の安全性を認定するものではありません。本稿の作成時に process の起動、fixture の実行、Windows/macOS/Linux の独立検証は行っていません。
router mode の範囲に主張を閉じる
本稿は router child の lifecycle framing を扱います。K-tail の記事 の x86 matrix-shape 条件を変えるものではなく、model inference の性能も示しません。state が lifecycle action を動かすなら、専用で bounded な機械可読 channel を与え、すべての wrapper を通して分離を保つ。ここでの判断はそれだけです。
MENTAL MODEL / 考える順序
発表から、自分の判断へ。
発表の主張と、論文・公式ドキュメントの条件を並べて読む。
出典
公開日は資料の日付、確認日は内容を参照した日です。コミュニティの観測は公式の確定事項と区別します。