Repository navigation
4 status
Codex の席が利用上限で止まっている間も、部屋の発言を預からずその席の端末へ打つようにした(#401 で Claude の席から外したのと揃えた)。制限中に打った入力は、Codex が会話に user の発言として残してターンを利用上限で終える——捨てない(2026-10-12、ローカルの rollout で確認)。解除の確認(account/rateLimits/read)と止まったときの部屋への知らせは今までどおりである。解除を確かめたら、席を占めている起動が再開の指示(#389)を一度だけ打ち、まとめは付けない。打った後にターンが始まるか終われば応答とし、利用上限で終われば新しい停止として次の解除でもう一度打つ。どちらも 120 秒無ければ部屋へ一度だけ「端末を見てください」と知らせて打ち直さず、その席が後でターンを正常に終えたら戻ったことを一度だけ知らせる。受け箱は「止まっている印」だけになった(id を持たない)。預かり(CodexLimits::hold)、受け箱からのまとめ(digest・mailbox)、預かった発言での問い合わせの繰り上げ(#377 の HELD_GAP)、limit_recovery、許可待ちの列から利用上限の預かりへ移す経路(to-limit)は無くなった(「Codex の席が利用上限で止まったとき」)。
確かめた範囲: crates/mcp-config/src/codex/limit.rs のテストが、止まり・問い合わせの予定・解除の確認、再開の指示への応答(ターン・利用上限・120 秒の無応答)、知らせが預かりを言わないこと、印のファイルの読み書き(#403 前の id 付きのファイルを同じ印として読むこと)を確かめる。status.rs のテストがターンの始まりを一度だけ渡すこと、prompt_hold.rs のテストが再開の指示を許可待ちの後に打ち、別の起動へ持ち越さないことを確かめる。src-tauri のコンパイルは通っている。
未確認(実機では確かめていない): 止まっている Codex の席に部屋の発言が打たれ、そのターンが利用上限で終わっても部屋への停止の知らせが重ならないこと。解除後に再開の指示が一度だけ打たれ、席が作業を再開すること。止まったまま起動し直した席に、解除後に指示が打たれること。ログイン切れなどで止まった席に「別の原因」の知らせが一度だけ出ること。
Claude の親が利用上限で止まっている間も、部屋の発言を預からずその席の端末へ打つようにした。解除予定時刻の 30 秒後には、その時刻に席を占めている端末へ「再開して」の指示を一度打つ。止まった時の起動との照合(topic・account・nonce・PTY)と、合図を部屋の通知として本人だけ預かりを迂回させる経路(#399 / #400)は取り除いた。端末がいなければ打たず、親記録の答えられていない拒否を印として、次の起動で打つ。打った後に制限エラーなら打ち直し、どちらの答えも無ければ別の原因として部屋へ一度だけ知らせて打ち直さず、その席が後で正常に応答したら戻ったことを一度だけ知らせる。止まったときの知らせは今までどおり出す。判断ごとに logs\claude-resume.log へ一行書く(「解除予定時刻に親の再開を試す」)。Claude の受け箱(*.claude-mailboxes.json)と解除後のまとめ・再開入力(#389 の Claude 側)は無くなった。
確かめた範囲: crates/mcp-config/src/claude_resume.rs のテストが、解除予定の 30 秒後に一度だけ打つこと、解除予定が分からなければ打たないこと、指示より前の拒否を答えに数えないこと、指示の後の拒否で次の時刻を決めて打ち直しの印を付けること、答えが無ければ「別の原因」を一度だけ返して以後打たないこと、「別の原因」を知らせた席だけが、その席の正常な応答で一度だけ戻った知らせを受けること(Stalled)、次の拒否でまた始まること、回復で予定が消えること、起動時に読み直した印で起動直後か解除予定に一度だけ打つこと、指示の文面、記録の一行の形を確かめる。claude_notice.rs のテストが、止まったときの知らせが解除予定を言い、どの知らせも預かりを言わないこと、打つときと別の原因のときの文面を確かめる。prompt_hold.rs と limit_recovery.rs の利用上限の預かりのテストは Codex の預かりで確かめるようにした。src-tauri のコンパイルは通っている。
未確認(実機では確かめていない): 止まっている Claude の席へ、解除予定時刻の 30 秒後に指示が一度だけ打たれ、送信されて再開すること。制限中に Pullcept を起動し直した席に、起動直後か解除予定時刻に指示が打たれること。端末を閉じていた席を後で開いたときに打たれること。ログイン切れや選択画面で止まった席に「別の原因」の知らせが一度だけ出て、打ち直さないこと。その席を直した後に「再開しました」の知らせが一度だけ出ること。claude-resume.log に各判断の行が残ること。2026-10-11 11:50 の Lin の停止の原因は未解明のままで、次に起きたときにこの記録で切り分ける。
部屋の MCP サーバに読むだけの道具 my_usage を足した。呼んだ席自身の 5 時間の枠と週の枠の使用率とリセット時刻、その値をアプリが受け取った時刻を返す(「席が自分の利用上限を読む」)。値はアプリがパネル用に持っているもので、受け取った時刻はこのために足した。ほかの席の分は返さない。サイドカーと部屋の protocol は 10 に上げた。
確かめた範囲: crates/mcp-config/src/usage.rs のテストが、席(トピック, アカウント)ごとに自分の値だけを引くこと、新しい報告が丸ごと置き換えること、値の無い窓をキーごと省き 0 にしないこと、何も届いていない席の答えが受け取った時刻を持たないこと、トピックを消すとその値も消えることを確かめる。codex/status.rs のテストが、Codex の席の rollout で枠の値を読んだことを、値が変わらなくても一度だけ知らせ、別の枠の値では知らせないことを確かめる。sidecar/test/round-trip.test.mjs が、道具の一覧と説明、usage フレームがどの席も名指さないこと、ほかの読み出しへの答えで決まらないこと、床に何も載せないこと、返す文(窓ごとの一行とリセットの現地時刻、not reported、受け取った時刻と何分前か)、まだ届いていないときの答え、部屋が error を返したときの失敗を確かめる。src-tauri のコンパイルは通っている。
未確認(実機では確かめていない): Claude Code の席と Codex の席が実際に my_usage を呼び、パネルと同じ数字と、最後の報告の時刻が返ること。Claude Code の席で呼ぶときに許可の確認が出るか。席が上限の近さを見て、作業を区切ったり部屋に引き継ぎを頼んだりするか。
入力欄のテキストエリアを、エディターの部品(Tiptap と lowlight)に置き換えた。``` を打つとその行がコードの枠になり、枠の左上の言語ボタン(最初は自動判定、検索して選べる)で言語を選べ、打っているあいだも色分けされる。送った後の発言の枠も同じ色で描く。キー操作は Codex に合わせた——Enter はいつでも送信(変換中は除く)、Shift+Enter は改行、下矢印で枠を抜け、上矢印で枠へ戻り、枠の最後の空の行の Backspace で行を枠の外へ出し、空の枠の Backspace で枠を消す。#353 の「空の行の Enter で枠を抜ける」は取り除いた。送る中身は今までと同じ Markdown の文字列である(「入力欄はコードを書けるエディターである」)。使うライブラリの著作権表示とライセンス本文は THIRD-PARTY-NOTICES.txt にまとめ、インストーラーに同梱する。
確かめた範囲: sidecar/test/composer.test.mjs が src/composer.ts をページなしで読み込み、エディターの中身と送る文字列の行き来(行と枠、言語名、自動のときの裸の ```、空の行、コードに ``` の行があるときに長いフェンスで囲むこと、読み戻して同じ文字列になること)、貼り付け(枠の外では枠と空の行を保って入り、枠の中ではそのまま入る)、コピーの文字列、Shift+Enter・下矢印・上矢印・Backspace のそれぞれの動きと、動かない場面を、エディターがキーに結んでいるコマンドそのもので確かめる。sidecar/test/code-fence.test.mjs は枠の判定を src/composer.ts から読み、添付: の読み分けを src/main.ts から取り出して確かめる。sidecar/test/third-party-notices.test.mjs が、THIRD-PARTY-NOTICES.txt がロックファイルの版と各パッケージの LICENSE から作った内容と一致すること、src/composer.ts が読み込むパッケージがすべて一覧の起点と依存にあること、インストーラーの同梱物にあることを確かめる。画面の型検査とビルドは通っている。Vite の開発サーバーを Chrome で開き(Tauri なし)、``` で枠になること、色分けと自動判定の表示、Shift+Enter、下矢印で枠を抜けて上矢印で戻ること、最後の空の行の Backspace、空の枠の Backspace、先頭の枠の上矢印、言語ボタンの一覧の検索と選択で色分けが変わること、Enter で送ろうとして(Tauri が無いため失敗して)本文が言語ごと戻ることを操作して見た。
未確認(実機では確かめていない): Pullcept の画面(WebView2)での一通りの操作。とくに日本語入力——枠の外と枠の中での変換、変換を確定する Enter で送られないこと、枠の中で変換中に色分けが描き直されても変換が崩れないこと。宛先の候補(@)が枠の外と中で開き、名前が入ること。画像の貼り付けとファイルのドロップ。送れなかったときと床に拒まれたときに本文が戻ること。文字サイズを変えたとき。ダークテーマでの色の読みやすさ。長いコード(数千行)を貼ったときの重さ。インストーラーに THIRD-PARTY-NOTICES.txt と NOTICE.txt が入ること(tauri build は走らせていない)。
入力欄の Enter で枠を抜ける動きは #354 で取り除いた。
開く ``` の後ろが一語の言語名(英数字と - _ + . #)のときだけ言語名として札にし、それ以外の文は枠の一行目の中身として描くようにした。入力欄では、閉じていない枠の中の空の行で Enter を押すと、その行が閉じる ``` になって枠を抜け、次の Enter で送れるようにした(「三つのバッククォートで囲んだ部分はコードの枠で出る」)。送る本文は打ったとおり(自動で入った ``` を含む)である。
確かめた範囲: sidecar/test/code-fence.test.mjs が、src/main.ts の関数を取り出して、言語名とみなす語(ts・c++・c#・objective-c など、前後の空白)と、そうでない文(```あ。。。・```python title・記号の混じった語・CRLF)が一行目の中身になること、そのような枠も同じ行で閉じ、Enter が改行になり、添付: をコードのまま残すこと、空の行(空白だけの行を含む)での Enter が閉じる ```(開いたときと同じ数のバッククォート)と改行に置き換わり、カーソルが枠の外に出て次の Enter で送ること、文字のある行・開く行・下で閉じている枠・枠の外ではその書き換えをしないことを確かめる。画面の型検査とビルドは通っている。
未確認(実機では確かめていない): Pullcept の画面(WebView2)で、```あ。。。 の発言が「あ。。。」を一行目にした枠で出ること。入力欄で、閉じていない枠の空の行での Enter が ``` を入れて枠を抜け、後ろの枠の層がすぐ描き直され、次の Enter で送れること。日本語入力の変換を確定する Enter では書き換えが起きないこと。書き換えの後の Ctrl+Z(元に戻す)の振る舞い——setRangeText は WebView2 の元に戻す履歴に載らない場合がある。
入力欄の部分(後ろの層の枠・等幅の書体・枠の中の Enter)は #354 でエディターに置き換えた。
発言の本文で ``` で囲んだ部分を等幅の文字の枠で描き、入力欄では ``` で囲んだ行に枠を敷き、枠がある間は入力欄全体を等幅の書体にするようにした(Master 判断、案 B)。開いた ``` の中では Enter が改行になる(「三つのバッククォートで囲んだ部分はコードの枠で出る」)。送る本文・部屋の記録・端末へ打つ文字は変えていない。
確かめた範囲: sidecar/test/code-fence.test.mjs が、src/main.ts の関数を取り出して、枠の始まりと終わりの判定(文の途中や一行の中の ``` を枠にしないこと、開いたより少ないバッククォートでは閉じないこと、閉じていない枠が最後まで続くこと、言語名がコードに入らないこと、CRLF)、Enter が改行になる位置(カーソルより前だけでなく本文全体で決め、``` suffix の行では枠が開いたままであること)、閉じていない枠の中の 添付: の段がコードのまま残り、枠の外の段は今までどおり添付になることを確かめる。枠の外の文は #349 の linkifyText を通り、枠の中は通らない。画面の型検査とビルドは通っている。ヘッドレスの Chrome で、styles.css と同じ関数で描いた発言と入力欄をライトとダークの両方で写し、枠の位置がテキストエリアの行と重なること(スクロールバーが出てスクロールした状態を含む)、自分の吹き出しが長いコードの行で部屋の幅を超えないこと、枠のある入力欄が等幅になり枠と行が揃うことを見た。
未確認(実機では確かめていない): Pullcept の画面(WebView2)で、枠を打った瞬間と消した瞬間に入力欄の書体が切り替わること、入力欄の枠がテキストエリアの行と重なり続けること——とくに日本語入力の変換中、宛先の候補で名前を入れた後、文字サイズを変えた後、入力欄の高さを手で変えた後。開いた ``` の中の Enter が改行になり、閉じた後の Enter で送れること。
利用上限で止まった Claude の親の席へ、解除予定時刻の 30 秒後に Pullcept が再開の合図を一回打つようにした(「解除予定時刻に親の再開を試す」)。正常な親応答を読めば「再開しました」と知らせて預かった発言のまとめを渡し、また拒否を読めば「まだ制限中」と次の時刻を知らせて打ち直す。
確かめた範囲: crates/mcp-config/src/claude_resume.rs のテストが、解除予定の 30 秒後に一回だけ打つこと、解除予定が分からなければ打たないこと、合図より前の拒否を答えに数えないこと、合図の後の拒否で次の時刻を決めること(1 分を下回らず、15 分で頭打ち、先の解除予定ならその時刻)、答えが無ければ自動の試行を止め、次の拒否でまた始まること、回復で予定が消えること、合図が一行で作業を求めないこと、会話の記録の行を #342 の保留で読んだとき、合図を打つことや予定時刻では保留が外れず、席の正常な答えでだけ外れることを確かめる。claude_notice.rs のテストが、停止・再開・まだ制限中・応答なしの文面と、末尾の (返信不要) を本文に重ねないことを、crates/room-floor のテストが、本文の途中の全角括弧があっても (返信不要) が一度だけ付くことを確かめる。src-tauri のコンパイルは通っている。
未確認(実機では確かめていない): 止まっている Claude の席へ、解除予定時刻の 30 秒後に合図が一回だけ打たれ、送信されること。まだ止まっている席で、合図への拒否が会話の記録に書かれ、「まだ制限中」の知らせが出ること(合図に拒否が書かれることは #342 の 15:03 の拒否から見込んでいるが、合図そのものでは確かめていない)。戻った席が合図に一言だけ答え、作業を始めず部屋へも書かないこと。「再開しました」の後にまとめが一度だけ届くこと。
Claude Code の席が許可の画面で止まっている間、部屋の発言をその席の端末へ打たずに預け、待ちが終わってから一度だけ打つようにした(「許可待ちの席には投稿を打ち込まない」)。あわせて、部屋が待った許可の要求ごとに、どう終わったかを logs\permission-requests.log へ一行ずつ書くようにした。押したボタンには、画面がクリックから読んだ押し方(マウスかキーか)を添える。
確かめた範囲: crates/mcp-config/src/prompt_hold.rs のテストが、待っていない席にはすぐ打つこと、待っている席の発言を預かり、待ちの後に届いた順で一度だけ渡すこと、待ちが終わってから渡し始めるまでと渡している途中に来た発言が前の発言を追い越さないこと、渡している途中に待ちが始まれば止まり残りが待つこと、渡しは一度に一つであること、端末が受け付けなかった発言を先頭へ戻して失わないこと、起動し直しで持ち越すこと、許可待ちと利用上限の重なり(待ちの途中で上限が始まり、待ちの終わりにまだ止まっている席では打たずに利用上限の預かりへ移し、解除で一度だけ渡ること。上限の後に待った席では列が何も持たないこと。待ちの間に来た解除のまとめを預かって待ちの後に打つこと。まとめは後の上限でも利用上限の預かりへ戻さないこと)を確かめる。hook_activity.rs のテストが、本体とサブエージェントのどちらの待ちでも any_waiting になり、それぞれの終わり方で外れることを確かめる。permission_prompt.rs のテストが、記録の一行の形(押し方の読み方、ほかで片付いたときの合図、一行に収まること)を確かめる。src-tauri のコンパイルと画面の型検査は通っている。
未確認(実機では確かめていない): 手動モードの席が許可の画面で止まっている間に部屋で発言しても、カードが閉じず、端末の画面も選ばれないこと。端末かカードで答えた後、預かった発言が届いた順に一度だけ打たれること。待ちの終わりから渡し始めるまでの 1.5 秒で、続けて出る許可(並列のツール)に打ち込まずに済むこと。hook が待ちの終わりを取りこぼしたとき(終わりの合図が来ない待ち)は、次の合図まで発言が預かったままになる。2026-10-09 の三回の allow(19:16:08・19:21:55・19:23:04、いずれも say_to_room)がどう押されたかは、この版の記録で次に起きたときに確かめる。
Claude Code の席が許可の画面で止まったとき、部屋にカードを出し、画面の人が 拒否 / 常に許可 / 一度だけ許可 を返せるようにした(「許可の確認に部屋から答える」)。PermissionRequest の hook を最長 180 秒開けたまま待ち、この hook だけ timeout を 190 秒にした。Codex の席の承認は対象外。
確かめた範囲: 答えの形(hookSpecificOutput.decision の behavior・message・updatedPermissions)、permission_suggestions を updatedPermissions としてそのまま返せること、PermissionRequest に tool_use_id が無く mcp_server が付くこと、http hook の timeout の既定が 600 秒で、時間切れの出力は捨てられ、接続の失敗は止めないエラーであることは、公式 docs code.claude.com/docs/en/hooks(2026-10-08 に読んだ)で照合した。hook を待たせている間も端末の許可の画面が出ることは、2026-10-08 23:01 の実機で確かめた(#336)。crates/mcp-config/src/permission_prompt.rs のテストが、Bash の要求の中身と 常に許可 の規則、MCP のツール名の分け方(サーバ名に __ を含む場合も)、サブエージェントの要求、読めない本文・別の出来事の本文にカードを出さないこと、長い値と多い項目の切り方、制御文字の落とし方、addRules・allow 以外の提案を 常に許可 にしないこと、三つの答えの形、待つ時間が hook の timeout より短く 600 秒より短いこと、を確かめる。lib.rs のテストが PermissionRequest だけ timeout 190、ほかは 5 であることを、hook_activity.rs のテストが待ちを続ける条件(Activity::waiting)を確かめる。
未確認(実機では確かめていない): 実機でカードが出て、三つのボタンがそれぞれ効くこと(常に許可で規則が書き込まれ、次から聞かれないこと)。端末で先に答えたとき、まだ動いている hook を CLI がどう扱うか(打ち切って接続を閉じるのか、待ち続けるのか、後から来た答えを捨てるのか)——アプリは答えのキーを見たらすぐ {} を返すので、待ち続ける場合も止まらないはずだが、確かめていない。CLI が要求を送り終えた後に接続の片側を閉じないこと(閉じると、アプリはそれを「CLI が待つのをやめた」と読み、カードがすぐ終わる)。並列のツールの許可で、別のツールの PreToolUse が先に来てカードが早く終わることがあるか。背景のサブエージェントの許可でカードが出ること。
Claude Code の席について、起動の --settings に載せた http 型の hook(PreToolUse・PostToolUse・PostToolUseFailure・PermissionRequest・SubagentStart・SubagentStop・Stop・UserPromptSubmit)から、「許可待ち」「ツール」「委任中」(サブエージェント)を参加者パネルの札と会話面の下の一行に出すようにした(「Claude Code の席は hook で様子を言う」、「Claude Code の席は自分の様子を hook で知らせる」)。#325 の試しの記録(logs\hook-probe.log)はこれに置き換えて外した。
確かめた範囲: hook の本文の欄の名前(hook_event_name・tool_use_id・tool_name・agent_id・agent_type、PermissionRequest に tool_use_id が無いこと、Stop の background_tasks[].type)は公式 docs code.claude.com/docs/en/hooks と sub-agents(2026-10-08 に読んだ)で照合した。--settings 経由の http hook が実機の席から届くことは、#325 で PreToolUse について確かめた(2026-10-08)。読み方は crates/mcp-config/src/hook_activity.rs のテストが、hook の本文を与えて出る語を確かめる——ツールの名前を出し引数を出さないこと、並列のツールの集合、許可待ちがツールに勝ちそのツールの終わりで消えること、拒否されたツールが次の呼び出しで待ちと一緒に消えること、Stop・UserPromptSubmit での片付け(本文が読めない場合も)、切れた PostToolUse / PostToolUseFailure で動いているツールと待ちが全部消えること、ほかの出来事の切れた本文を数えないこと、パスと違う出来事の本文を読まないこと、サブエージェントの始まりと終わり・その中のツールが本体のツールにならないこと・Agent ツールを数えないこと、内部のエージェントを数えないこと、サブエージェントの許可待ち、background_tasks にサブエージェントがある間は Stop でも消さないこと、事象の形が Codex の席と同じであること、本体の許可待ちが答えのキー(Enter・Esc・数字・y / n)で閉じ、待っていたツールも外れて「ツール」と言わないこと、矢印・フォーカスの報告・貼り付け・ほかの文字では閉じないこと、サブエージェントの待ちはキーで閉じないこと。
未確認(実機では確かめていない): 実機の席で、ツール・許可待ち・サブエージェントの札が出て、終わると消えること(issue の完了の条件)。とくに、SubagentStart / SubagentStop が届くこと(#325 では SubagentStart の到着をまだ見ていない)、背景のサブエージェントが走っている間の Stop の background_tasks に type: "subagent" が載ること、許可を拒否した後の流れ、並列のツールの一つが許可を待つ間に別のツールの PreToolUse が来るかどうか(来れば、待ちと待っているツールが早く消える)、hook を八つに増やしたことでツールごとに返事を待つ時間が目に見えるかどうか。Claude Code の許可の画面に答えるキーが本当に Enter・Esc・数字・y / n で足りるか、許可した後の札が「許可待ち」から「出力中」または「待機」に替わること。
codex_cli の保存・種別選択・起動/再開・起動の行での MCP 定義(#297 からファイルには書かない)・初回 ID 通知を実装した。Claude の argv 回帰、設定と hook の保持、秘密の非表示、起動/アカウント/トピック照合、履歴消失と I/O 不明の区別、複数登録の排他は crate/sidecar テストが持つ。
実 CLI/実モデルで確認した範囲: Windows の隔離 Codex CLI 0.160.0 と専用 CODEX_HOME で、通常の folder trust と専用 handler の個別信頼を操作した。実会話の callback が root native UUID を返し、改行を含む札と応答中の追加入力を受けた。停止後に同じ UUID を明示 resume し、前の合言葉を保持したまま read_room_history と say_to_room を呼び、当時の MCP 追加キャラクター指示 TESTCHAR: を付けて応答した(この旧経路は #276 で撤去)。HTTP callback と WebSocket の相手は fixture であり、Pullcept 本体の listener ではない。
追加モデル呼出しなしで確認した範囲: standalone、独立 Git root、nested cwd、別 Git root への --cd、profile ファイルの markers を adapter 経由の native config/read で確認した。これは dotted profile 名の runtime 受理を示すものではなく、0.160.0 の runtime はその名前を拒否する。独立 root と linked root/nested は、通常の folder trust 後に hooks/list で対応する project handler を列挙した。linked worktree の local config layer と hook scope は異なり、正式に対応する root checkout へ登録することで一致した。独立 root の handler は個別信頼後の trusted、linked nested の新 handler は untrusted として列挙され、自動信頼していない。
#276 のモデル不要実測: 隔離0.160.0と一時 CODEX_HOME で、指示なしの sentinel 判定、global/plain-name profile-v2/未信頼 project 除外/信頼済み project 優先、--cd と手動 -c の優先、Lin/Lay の一つだけと共通原文の保持、設定原本のバイト保持を確認した。patched portable-pty の ConPTY → cmd /C call → native exe/空白入り .cmd で、日本語・CRLF・引用符・%PATH%・&|()・バックスラッシュ・絵文字が実 developer input_text と完全一致した。thread/turn は作らずモデルを呼んでいない。選択後の実モデル遵守は未検証であり、旧 MCP 指示の実会話証拠とは区別する。
未確認: Codex アカウント作成から停止・再開までの Pullcept 実 GUI/実 listener 操作、Claude と Codex の実アプリ内同時往復、人間の打ちかけ時の保留/解放を Codex の実 GUI で通す操作。打ちかけの判定と改行・送信キーの分離は既存 terminal-input テスト、保留列は共通 PTY 実装に依存する。fixture の結果を実 GUI の確認へ読み替えない。
アカウントごとの切り替え「app-server 方式」を実装した(「Codex の席を app-server 経由で起動する」)。2026-10-06 時点では既定は切(hook 方式)だった。2026-10-17 に新規と設定値の欠落を app-server 方式へ変更し、明示保存された false は維持する。起動オプションの振り分け、hook を止める -c の組み立てと拒否、hooks/list の照合、thread/start・thread/resume・thread/inject_items の引数、答えの照合、端末の行は crates/mcp-config(codex::app_server)のテスト、本文の取り出しと照合は sidecar のテストが持つ。
モデルを呼ばずに確かめた範囲(2026-10-06、Codex CLI 0.160.1、隔離 CODEX_HOME): Li+ の codex-output-style.py の写しと、Li+ の hook 三つ(cold-start・output style・Trigger Check Gate に見立てた物)を信頼した試しの project で、次を実測した。
-
codex-style.mjsのbodyが、helper のhookから選んだキャラの本文と、止める hook の鍵一つを返した。 - Pullcept が組み立てた server の行(
--yolo -c model_reasoning_effort=low -m gpt-5.2を含む)で server が立ち、listening on:から港を読めた。トークンの無い接続と違うトークンの接続は HTTP 401 で拒まれ、正しいトークンで繋がった。行にトークンの値は無かった。 - その server の
hooks/listで、output style の hook だけがenabled: false、他の二つはenabled: trueのまま、三つとも信頼済みのままだった。 -
thread/startの答えが modelgpt-5.2・承認never・sandboxdangerFullAccess・effortlowだった。 -
thread/inject_itemsの後、rollout の先頭の developer の発言がキャラの本文であり、既定のキャラの本文は rollout のどこにも無かった。 - 端末の行(
resume <id> --remote … --remote-auth-token-env PULLCEPT_CODEX_REMOTE_TOKEN --no-alt-screen)で本物の TUI が server に繋がった。隔離 CODEX_HOME には認証が無いため、TUI はログインの画面で止まった。会話の画面まで進むことは、認証のある環境での確認に残る。環境変数が無ければ TUI は起動せず、違うトークンでは 401 で繋がらなかった。 - 作った会話は
thread/deleteで消し、server の木を止めた後にプロセスが残っていないことを確かめた。
実機確認と既定変更(2026-10-17): #423 / #427 / #429 適用後、本番 Luna が元の会話を app-server 方式で再開し、部屋へ応答した。履歴 DB の起動確認は #426 の記録 にある。同日、マスターがスマホから同じ会話へ投稿し、Luna が受信して部屋へ返信したため、#299 の既定切り替えの判断待ちは解消した。この PR の検証は設定互換と画面・プレビュー経路の回帰試験であり、実行中の席の再起動やリモート登録は行っていない。
残る確認範囲: 新規席の最初の応答、五欄(#283)、利用上限の回復、--no-alt-screen(#295)、部屋 MCP(#298)の全 GUI 組合せを、この変更で再検証したとは扱わない。Desktop との共存と登録競合も別の課題として残る。
app-server 方式の Codex の席で、スレッドが idle と分かっているときは、端末に文字が届いていても札を「待機」(利用上限なら「制限中」)にした。何もしていない Luna の席が「出力中」のまま消えなかったためである(Master、2026-10-08)。seat-activity の事象に thread_status(idle/active/null)を足し、画面は接続中で idle のときだけ端末の合図を見ない。thread_status は、起動・再開の答えの thread.status も、ターンの前の thread/status/changed の idle も、受け取ったときにそのまま送る(#368、2026-10-10。それまでは、ターンがこの接続に届くと示す知らせを一度受け取るまで null としていた)。active で語が無いとき、様子をまだ受け取っていないとき、切断(「様子不明」)は今までどおりである(「走っているアカウントが何をしているか」)。hook 方式の Codex の席と Claude Code の席は変えていない。
確かめた範囲: crates/mcp-config/src/codex/activity.rs のテストが、起動・再開の答えの idle と active をすぐに送ること、ターンの前の idle の知らせで idle になること、起動の idle の後に turn/started で active、turn/completed で idle になること、語の無い active のターン、様子の知らせを受けていない席が null のままであること、ターンの終わりで idle になること、systemError・notLoaded・スレッドの終わりで null に戻ること、切断で null と connected: false になること、別のスレッドのターンで動かないこと、記録の一行が method 名と状態だけを持つことを確かめる。画面の順は src/main.ts の activityNote にある。
記録: 席の接続に届いた知らせごとに、method 名とスレッドの状態(params.status.type、無ければ -)、席(トピック id・アカウント id)、UTC 時刻を logs/codex-activity-probe.log に一行ずつ追記する。本文・コマンド・引数・文章は書かない(形は「Codex の席は自分の様子を app-server の知らせで知らせる」)。
確かめた(2026-10-10、#368): 端末(--remote の TUI)が始めたターンの知らせが、アプリの接続にも届くこと(#326 から持ち越した仮説)。codex-activity-probe.log で、Luna の端末に打ち込んだ文字で始まったターンが、12:39:03Z に turn/started としてアプリの接続に届いている。それまでは届くかが分からないとして起動の答えの idle を信じなかったため、12:28:40Z に席を起動し直した後、12:28:41Z に idle の知らせが来ていても、そのターンまで札は「出力中」のままだった(Master「Lunaが出力中で10分以上たってる?」2026-10-10)。そこで、起動・再開の答えとターンの前の idle をそのまま送るようにした。TUI の描き直しが端末を黙らせない、という見立ては仮説のままである。
app-server 方式の Codex の席について、席の server がアプリへ送る知らせから「許可待ち」「答え待ち」と、いま動いている仕事の種類(実行中・編集中・ツール・検索中・要約中・画像生成・画像参照)を参加者パネルの札と会話面の下の一行に出すようにした(「走っているアカウントが何をしているか」、「Codex の席は自分の様子を app-server の知らせで知らせる」)。hook 方式の Codex の席と Claude Code の席は今の語のままである。
確かめた範囲: 知らせの名前と形は、インストール済みの Codex CLI 0.160.1 が生成したスキーマ(codex app-server generate-json-schema の通常版と --experimental 版)で照合した(thread/status/changed の activeFlags、item/started / item/completed の item.type、turn/started / turn/completed、thread/closed、thread/start / thread/resume の答えの thread.status)。読み方は crates/mcp-config/src/codex/activity.rs のテストが、知らせの JSON を与えて出る語を確かめる——許可の flag が先に始まった item に勝つこと、並列の item、ターン終了と idle での消去、待機中の切断と仕事の途中の切断の両方で connected: false の事象が送られること(画面はそれを「様子不明」と出し、「待機」に戻さない)、スレッドが決まる前に届いた知らせを失わないこと、別のスレッドの知らせを読まないこと、コマンドの本文や引数を出さないこと。
未確認(実際の席では確かめていない): 実際の席で知らせが届く順序と間合い。特に、item/started から許可の flag が立つまでの間に「実行中」が一瞬出るかどうか、端末(--remote の TUI)が始めたターンの知らせが、別のクライアントであるアプリに実際に届くこと(仕様とスキーマでは届く形だが、配信は実測していない)、サブエージェントのスレッドの知らせがアプリに届くかどうか。モデルを呼ばず、稼働中の席へ RPC もしていない。
部屋の一文(room_system_prompt)を種別に依らない一つの本文にし、部屋の詳しい作法の在り処(部屋の MCP サーバの instructions)を指す一文を足した。Claude の席は従来どおり --append-system-prompt で、app-server 方式の Codex の席は developerInstructions のキャラの本文の後で、thread/start と毎回の thread/resume に受け取る(「席は部屋の道具の名を起動時に受け取る」)。hook 方式の Codex の席には渡さない(同じ節に理由)。本文が両方の種別で同じであること、行に載せられる文字だけであること、長さ、キャラの本文が先頭にそのまま残ること、開始と再開で同じ合成になることは crates/mcp-config のテストが持つ。
2026-10-08 時点の未確認範囲(後続の再開・返信の確認は上の #299 の 2026-10-17 記録を参照): 実モデルの一往復。app-server 方式の Codex の席が、新しく起動した直後の最初の部屋の発言に say_to_room で答えること、MCP の instructions が届いた後にその作法に従うこと。Claude の席で一文が変わった後の振る舞いも実機では見ていない。この変更では Codex の app-server を起動しておらず、合成した本文が rollout の developer の発言に載ることは #299 の実測(キャラの本文が載った)からの導出である。
アカウントの窓の「キャラクター」の項目に、キャラのファイルの本文の欄とフルパスを置いた(「キャラクターの本文はアカウントの窓で直す」)。場所の組み立て、名前の検査、作業ディレクトリの外へ出る junction の拒否と中の junction の書き通し、新規作成とフォルダーの作成、空の本文で作らないこと、変わらない本文を書かないこと、開いた後の変更を上書きしないこと、改行と BOM の保持、128 KiB の上限、UTF-8 でないファイルの拒否、frontmatter の name: の読み、同じファイルを着る他のアカウントの判定は crates/character-file のテストが持つ。
未確認(実機):
- Claude Code のアカウントで既存のキャラを開いて直し、決定した後の次の起動でその本文が効くこと。
- Codex CLI のアカウントで同じこと(hook 方式と app-server 方式の両方)。
- まだ無い名前で新規作成し(
output-stylesが無い作業ディレクトリを含む)、次の起動でそのキャラが立つこと。 - 種別・作業ディレクトリ・キャラクターを変えたときの読み直しと、保存していない変更があるときの「読み直す」の表示を画面で見ること。
- 同じファイルを着る別のアカウントがあるときに名前が出て、二度目の決定で保存されること。
- 長い本文で欄が中でスクロールし、狭い窓でも崩れないこと。
- Tauri 2 による Windows デスクトップアプリの基盤
- Rust の PTY コマンド(起動 / 入力 / リサイズ / 終了)
- アカウント設定とセッションデータの JSON 永続化
- MCP サーバ(Node サイドカー、
sidecar/。#195 から channel を宣言しない) - 部屋ソケット(Rust、
127.0.0.1任意ポート、Bearer トークン必須) - サーバの
.mcp.json登録(既存内容はマージして保持、登録鍵はアカウントと部屋の組ごと、前回起動のエントリは掃除)と、成立条件を満たす CLI 起動フラグの適用 - 部屋の作法(
instructions)の初版 - 発言の宛先(部屋 →
post.to→ 端末へ打つ札のto、送信はsay_to_roomのto。#204 から名前の並びで、複数の宛先を持てる)と、それを判定材料として名指しするinstructions - 順番の作法(先に届いた答えを読んでから決める、送信直前の読み直し。#273 から
say_to_roomの説明に置く。protocol もツールも増やしていない) - 作法の長さ(#273。名前を差し込んだ
instructionsを 1024 字以内に収めること——#333 で 1792 字に改めた——、道具を呼ぶときにだけ要る作法をsay_to_room/read_room_historyとその引数の説明へ移したこと、足した三つの作法——誰の担当でもない仕事は名乗って返事を待つ、ターミナルにしか出ない物は場所を書く、本文に自分の名前を付けない) - 作法の英語化(#333。
instructionsと道具の説明を英語にし、部屋の発言は日本語で書くことを作法に明記。合計トークンを o200k_base で 1240 → 1026 に減らした) - 作法の短い書き直し(#337。
instructionsと道具・引数の説明を、逐語訳から AI 向けの短い書き方——文の断片、=や->、どのモデルにも通じる語と記号——に改めた。規則は落とさず足さない。合計トークンを o200k_base で 1026 → 833 に減らした) - 床(
say_to_roomのlast_seenとpost_result、既存ロック内での判定と刻印、見落としがあるときの拒否と返却。ツールは 1 本のまま。配達の返答に載せる自分の発言のmessage_id(#267)、拒否された発言を一つだけ持つ下書きとcontentを省いた出し直し(#268)) - 拒否が返した発言の描画(画面。
message_idによる重複除去、返ってきた最新への透かしの前進、発言に載せて運ぶ宣言色、描いた分だけを述べる状況表示) - 部屋のログ(
logs/main/{トピック}.jsonlへの追記、床の判定と同じロック内での書き込み、保存する六欄(accountは #193)、hueとownを持ち込まない写像、追記の失敗の画面への通知、トピックを指定する読み出しコマンド、参加者への再配信をしないこと) - トピック(手動の区切り、起動時の新規トピックと遅延生成、索引とディレクトリの照合、最初の発言からの命名とその場での変更、既存
logs/main.jsonlの移行) - トピックごとの部屋(#141。部屋ごとの床と席と配送とログと読み出し、
helloのroom、トピックを離れても止めないセッション、(トピック, アカウント)を鍵にする席の台帳と端末と再読み込みの引き取り、トピックの切り替えに追随する端末・タブ・セッションの値・名簿、一覧の走っている印、id を配らない起動でもトピックを実体化すること) - トピックの削除(行の
❌、確認のダイアログ、ファイルと索引の項目の両方の削除、そのトピックで走っているセッションの終了、開いているトピックを消したときの新しいトピックへの移動、題の無い行も消せること) - トピックの再開(アカウントの再開コマンド、
{session_id}の置換、トピックへのセッション id の記録、再開の前に会話が実在するかを見ること、実在しない記録のその場での取り消し、再開できない席の新規着席、名簿に現れないまま終えた再開の記録の取り消し、いずれも状態行での通知) - 参加者からの読み出し(サイドカーの
read_room_history、history/history_resultフレーム、pull のみ、ページとbeforeの巻き戻し) - 席が自分の利用上限を読む道具(#364。サイドカーの
my_usage、usage/usage_resultフレーム、呼んだ席自身の分だけ、5 時間と週の使用率とリセット時刻と受け取った時刻、値の無い窓は「無い」、Codex の席で承認を求めないこと) - 文脈を持たないまま着いた席への通知(起動時の
PULLCEPT_UNSEEN_HISTORY、サイドカーの「前を見る」の分岐、再開しなかった席という境界、件数を持たないこと、代理で呼ばないこと) - トピックの一覧(会話面の左の列、新しい順、一覧の外に固定の「新規」(#225 から見出しの横の +)と索引に無い現在のトピックでのその選択状態、選択による部屋への読み戻し、参加者パネルと対の寸法、名前から導く色)
- 参加者モデル(統一
postフレーム、発言者以外の全セッションへの配送、接続同一性による自分の発言の抑止と名簿の同一性、人間を含む名簿) - アカウント(作成・編集・削除、種別、名前と色と作業ディレクトリと起動オプション、リストでのオフライン表示、一つのアカウントは一つの部屋に一席まで、
config.jsonからの移行) - 種別が持つ CLI の作法(#156 / #147。
admin/Claude Code/Codex CLI/CLI(汎用)の CLI 作法(mcpの宣言は #193)、種別ごとのセッション id の渡し方・再開の一行(起動オプションを後ろに載せ、--session-idは載せない。#167)・--settingsの報告・会話の在り処・部屋の道具の名乗り、その人が足すものだけを書く起動オプションの欄、汎用の種別では出さないステータスラインと名乗り、起動コマンドから見分ける既存アカウントの移行と再開コマンド・--session-idの扱い) - アカウントのキャラクター(output style の
name:を持つ欄、起動時の--settingsによる選択、ファイルを書き出さない形、起動オプションの--settingsとの併記の拒否、宣言しないアカウントは既定のまま) - アカウントの環境変数(#163。
名前=値を一行ずつ書く一つの欄、DPAPI による値の暗号化、CommandBuilder::envによる受け渡し、命令文とプレビューに載せないこと、先頭と末尾だけの表示、出たままの行が元の値を保つこと、値を囲む引用符の除去と片側だけの引用符の拒否、隠し表示を書き換えた値の拒否(#165)、アプリ自身が設定する名前の拒否、復号できない値での起動の拒否) - 他のアカウントの部屋サーバを起動しないこと(
--settingsのdisabledMcpjsonServers、名指しの出所は.mcp.jsonの実物、止めるものが無ければ素通し) - 起動したアカウントと登録のアカウントが違うサイドカーは部屋に入らないこと(#208。起動した CLI のプロセスに載せる
PULLCEPT_LAUNCHED_AS、サイドカーでのPULLCEPT_ACCOUNT_IDとの突き合わせ、断ったサイドカーは道具も作法も出さず stderr に理由を残すこと、アプリが起動していない CLI が読んだ登録も入らないこと、アカウントの環境変数の欄での名前の拒否) - 起動した CLI のプロセスに載せる部屋 id(#264。
PULLCEPT_ROOM_ID、登録のenvと同じ名前と値、アカウントの環境変数の欄での名前の拒否) - セッションの様子の報告(#155 / #152。起動する行の
statusLine、sidecar/src/status.mjsが JSON をそのまま/hooks/status/<トピック>/<アカウント>へ送り端末へ 1 行返す形、アドレスが名指す席、cmd.exeが反応する文字を載せないこと、環境から解決するトークン、行に載せる語の文字集合の判定と通らないときの不掲載、パネルのモデル・エフォート・5 時間・週次・コンテキストの五欄、欠けた値の「—」、動いたときだけの更新) - Codex CLI の席の利用上限(#294、「Codex の席が利用上限で止まったとき」。rollout の
task_completeのusage_limit_exceededで止まりを読むこと、パネルの「制限中」を使用率でなくその判定から出すこと(session-statsのlimited)、止まった時点で一度 app-server に解除予定を聞き部屋へPullcept/appで一通知らせること、止まっている間その席の端末へ部屋の発言を打たず預かること(#403 で外した)、止まっている席だけを解除予定の 30 秒後から間を空けてaccount/rateLimits/readで聞くこと、ordinaryUsageAllowed: trueだけを解除とし繋がらなければ止まったままにすること、解除で部屋へ一通・席へ要約の一通(席宛ての発言だけ本文付き)を打つこと(#403 で再開の指示だけにした)、止まっている席の受け箱(#312。#403 で止まっている印だけにした。預かった発言の id の並びを預かるたびにトピックの記録の隣のファイルへ書き足すこと、起動した席は受け箱があれば止まった状態から始まり、rollout を待たずにすぐ問い合わせ、「制限中」を一度送ること、解除のときに受け箱の id の発言を記録から読んで件数とまとめにし、受け箱を消すこと、席を閉じていたあいだの発言は入れないこと、トピックを消せば受け箱も消えること。#310 の記録からの数え直しはこれに置き換えた)、問い合わせをcodex app-serverの stdio で行うこと、Claude Code の席を変えないこと) - Codex CLI の席の五欄(#283、「Codex の席は自分の様子を rollout で知らせる」。rollout の
turn_contextとtoken_countの行から読むこと、Claude Code の席と同じsession-statsで画面へ渡すこと、末尾の追記分だけを読むこと、壊れた行・知らない行・欠けた欄・長すぎる行で止まらず読めない欄を「—」のままにすること、窓の長さによる 5 時間と週次の見分けとcodex以外の枠を採らないこと、再開では起動時点のファイル長から読むこと、新規起動で id とファイルの出現を待って探し直すこと) - Codex CLI の席の代替画面を使わない起動(#293、「Codex CLI の起動と再開」。新規起動と再開の行の末尾に
--no-alt-screenを足すこと、起動オプションが--no-alt-screenまたは鍵tui.alternate_screenの-c/--configを持つときは足さないこと、Claude Codeの行は変えないこと) - Codex CLI の部屋の MCP を起動の行だけで渡すこと(#297、「Codex CLI の起動と再開」。
.codex/config.tomlに書かないこと、有効 cwd に.codexフォルダーを用意すること、以前の版が書いたアプリの欄を起動時に消し他の欄・キー・コメントを残すこと、行に他の席の名前を載せないこと、Claude の席の.mcp.jsonを変えないこと) - 使用率から出す「制限中」(#161。5 時間または週次の使用率が 100% 以上、
>=判定、報告が下がれば自動で消えること、「考え中…」「出力中」への譲り。#149 / #151 / #153 のStopFailurehook の経路は撤去済み) - 人が書いた値の起動の行への載せ方(#154。キャラクター・起動オプション・command の三経路、
line_safe_textとconsole_safeの使い分け、載せられない値を載せずに起動すること、command と再開コマンドだけは起動の拒否、起動オプションは欄ごと落ちること、モーダルが保存の前に出す知らせ) - 参加の時点の名乗り(人間側。種別
adminのアカウントの名前と色) - 宣言色(
helloのhue/room_joinのhue。宣言 > 自分の accent > 名前からの導出) - 部屋が運ぶアカウント id(
hello/room_joinのaccount_id、Participant.account。任意であり、判定には使わない) - チャットルーム UI(メッセージ一覧、発言者表示、入力欄、入力欄の
@で参加者から選ぶ宛先。#204 から複数可) - 会話面の文字サイズ(
#roomと入力欄の本文(#input、#354 まではテキストエリア)、参加者パネルの丸印(#260)、離散の梯子と上下限、localStorage保持、Ctrl+=/-/0と設定メニューのピッカー、既定は現状維持) - 参加者パネル(一つのリスト、種別ごとのグループと件数、参加者ごとの色、オフラインの薄い表示、部屋ソケット、セッションの生死と終了コード、索引が記録するセッション ID とそのコピー、接続方法・起動コマンド・作業ディレクトリ・開始時刻・ウィンドウ、セッション自身が知らせるモデル・エフォート・5 時間・週次・コンテキスト、走っているアカウントが何をしているか)
- 5 時間・週次のリセット(#306、#320、「セッションは自分の様子をステータスラインで知らせる」。Claude Code の席はステータスラインの
rate_limits.five_hour.resets_at/seven_day.resets_at、Codex の席は rollout の同じ窓のresets_atから読むこと、行をパネルの全幅に広げ、1 行目の左に名前、右に文言と % を並べ、2 行目にバーを全幅で出すこと(Claude デスクトップと同じ並び。コンテキストの行も同じ並び)、5 時間は「4時間10分後にリセット」の形、週次は「2:00 (月) にリセット」の形(曜日つきの現地時刻)で出すこと、分の切り上げと 1 日以上での分の省略、分が変わるたびの書き直し、幅が足りないときは文言が「…」で縮み % は縮まないこと、リセット時刻を過ぎたら消すこと、届いていない窓と「—」の行には出さないこと、「制限中」の札を変えないこと) - アカウントのモーダル(作成・編集・削除、決定と取消、2 クリックの削除、走る行の表示、#304 から横のメニューで分けた項目)
- アカウントごとの端末(リストの行で選ぶ、行からの終了、切り替えで残るスクロールバック)
- 画面の再読み込みに耐えるセッション(席の台帳が起動の記録を持ち、画面が席を見て端末を購読し直す。スクロールバックは戻らず、繋ぎ直した端末は切れた位置を 1 行書いてから開く)
- 行の操作の記号表示(開始 ▶ と同じ列に替わって出る終了 ■(#239、#241 から開始と同じ色) / メニュー
⋯、#221 から絵文字ではなく線画、語はaria-labelとtitle、幅を固定した列)と、終了の確認ダイアログ(webview 内の<dialog>、取消に焦点、Escape は取消) - 行のメニュー(#224。行の右クリックと
⋯で開く同じメニュー、端末を開く・編集・色を変える・区切り線の下の開始(#239、#241 で先頭から移した)または危険色の終了、使えない項目を出さないこと(開始と終了は行えない方を出さない)、面を開く「端末を開く」、モーダルを「色」の欄で開く「色を変える」、矢印・Home/End・Escapeの操作、外を押す・パネルのスクロール・窓の変化で閉じること) - アプリの終了時のセッションの後始末(走っているセッションがあれば確認のダイアログ、承認で一括終了してから閉じる、取消で閉じない、走っているものが無ければ確認を出さずに閉じる)
- サイドバーの開閉(ヘッダ左右のボタン、同じ図形を CSS で裏返した鏡像のアイコン、幅 0 で畳む形、
config.jsonへの保持、Ctrl+Bは左の面のみ、端末に焦点がある間はキーを端末へ渡す) - 診断面(アカウントごとの CLI の端末表示と入力)
- 診断面のヘッダ(窓の名前「端末」、開いている端末のタブ、行との連動、面を畳む
✕)と、面全体の角丸・一つの地・詰めた枠の余白。終了した端末はタブの✕で捨てる - 発言の端末への入力(#183 / #195。
deliver()の後段で、起動の台帳から引いた発言者以外の各セッションの端末へ一行目の札と本文を打ち、間を置いて\rを別に送ること、札のrole(画面のコマンドだけがadmin、通知はmcp、アプリ自身の知らせはapp(#294)、ソケットは名乗ったアカウントの種別でadminとmcpはunknown)、部屋からpostフレームを送らないこと、送信キーを持たない本文、一本の列で順に打つこと、端末ペインのキーから打ちかけを読み保留した発言を届いた順に打つこと、札とroleの重みと二行目以降の札の形を本文と読むことを述べる作法、サイドカーの channel の宣言と起動の行の--dangerously-load-development-channelsを外したこと) - webhook の通知(#169。同梱の
github-webhook-mcpブリッジをアプリ自身の MCP クライアントとして起動、標準入力の終わりで終わる起動形、イベントが届くまで道具を呼ばない待ち受け、AI セッションの座る部屋すべてへの一件ずつのpost、席を取らない発言者(#193 からはサーバのmcpアカウント)、床が問わないこと、座る部屋が無いときに出さないこと、イベントに印を付けないこと(#180)、連なりを一つにまとめて畳む表示) - 書き手の署名(#270 / #269。GitHub に本文つきで書くときに最終行へ
— <名前>を置くよう言う作法の一項と、署名の無い書き込みの扱い、本文を今書いた種類と action の通知だけをget_eventで読み直すこと、署名を読めた通知の先頭の署名: <名前>、読めないときの目印の無い通知、5 秒で区切る読み待ちと届いた順を保つこと、mark_processedしないこと) - 既読を促す一行(#410。部屋に流すすべての通知に
If this is your own operation, mark it processed now: event_id=<id>を URL の行の直前、URL が無ければ末尾に一度だけ付けること。署名の行は先頭のまま) - ローカル MCP サーバを種別
mcpのアカウントとして持つこと(#193。エントリごとのアカウントの作成とその id、config.jsonのserverによる対応、サーバのアカウントとしての通知の発言、発言とログが運ぶアカウント、種別による畳みと #193 より前の行の名前による畳み、パネルのMCPの見出しと行の語、サーバの節のアカウントの窓への移動、決定でのサーバの欄の保存、エントリが在る間の削除の拒否、起動の拒否、項目の無い設定メニュー) - フォームから作る
mcpアカウント(#200。作成時にだけ出る種別MCP サーバ、作成の窓のサーバの欄、決定でのエントリの書き込みとアカウントの保存とサーバの起動、アカウントの名前から決めて使われている名前と id を避けるエントリの名前、削除でのエントリの取り外しとサーバの停止と持っていた状態の破棄、作成後に種別を変えられないこと) - 設定メニューの表示の項目(#194 / #66。会話の文字サイズ・端末の文字サイズ・UI の大きさの三つのピッカー、画面上の寸法の操作はここだけであること(#209 でヘッダの二つを外した)、キーで変えた会話の値がピッカーに出ること、変えた時点で効くこと、
:rootの--ui-scaleとfont-sizeによる UI の大きさ、会話面の寸法の割り戻し、80%〜150%の梯子、localStorage(pullcept.ui-scale)保持、既定は現状維持) - 設定メニューとローカル MCP サーバ(#172。タイトルバーの「設定」と同一 webview 内のダイアログ、
mcp-servers.jsonの Desktop の形、ファイルが無いときの既定の書き出し、起動時の全サーバの起動、一覧と実行状態、コマンド・引数・環境変数の編集と保存(他の欄とエントリを残す書き込み)、ファイルから読み直す再起動、再起動で効くことの表示、標準エラーとアプリ自身の行を持つサーバごとのログ、設定ファイルを開くリンク) - 画面の人の発言の右寄せ(#185。画面の名前との一致による判定、ライブと読み戻しと拒否が返した発言に共通の規則、通知の畳みは左のまま。色の線と見出しの右寄せは #225 で丸印も名前も持たない吹き出しに代わった)
- 画面の人の発言の背景色(#187。発言者の色
--speakerをページ背景に薄く混ぜた吹き出し。ライトとダークの両方で本文の文字色が読める明度に留め、ライブと読み戻しで同じ色。AI と webhook の行は背景なしのまま) - ゴーストボタン(#221。画面のボタンを枠も塗りも無い線画のアイコンにし、カーソルの下でだけ
--hoverの塗りを出す形、名前とキーのツールチップ、選択を--selectedの塗りで言う形、塗るのは送信だけであること、欄とダイアログの語のボタンは枠を残すこと、線画をsrc/main.tsの一か所に持つこと) - 入力欄の囲み(#222。本文と操作列を一つの角丸の箱に収める形、枠を箱が持ち焦点で
--accentに変わること、左のゴーストボタンと右の塗りの送信、@を打つだけの宛先のボタン、添付のボタンの置き場所(#223 で埋まった)、一行に収めて末尾から落とすキーの案内、placeholder から案内を外したこと) - 添付(#223。添付のボタン・入力欄へのドロップ・文字を持たないクリップボードの
Ctrl+Vの三つの入口、本文の上に並ぶ名前の札と✕、送るときにトピックの下へ保存すること、ドロップしたファイルの写し、本文の後ろの添付:とパスの行、保存の失敗と床の拒否で札が戻ること、送り直しで保存し直さないこと、届く名前の整え方と同じ名前の番号付け、トピックの削除で添付も消えること) - 会話面・トピックの一覧・参加者パネルの見た目(#225。発言の色線に代わる頭文字の丸印、広げた行間、日の区切り線と時刻だけの行、続けて送った自分の発言の一塊と最後の一つだけの時刻、タイトルバーの開いているトピック名と人数、見出し横の + になった「新規」、ホバーと焦点の間だけの
✕、今日 / 9月28日 の短い日付、状態の札と--ok、数と棒の使用率、「詳細」に畳んだ起動の値と待ち受けていないときの見出しの危険色) - 設定・添付・送信の線画(#234。タイトルバーの「設定」の歯車・斜めのクリップ・紙飛行機、Tabler Icons の三つを 16 の格子へ写した形、
NOTICE.txtのライセンス表記) - 最新の発言へ戻るボタン(#243。一番下から 40px より上を読んでいる間だけ出ること、新しい発言の追従と同じ判定、押すと一番下へ移って消えること、会話面の下端の中央に浮かせて会話面と入力欄の高さを変えない形、地と枠と影を持つ丸いボタン、Tabler Icons の
chevron-downを 16 の格子へ写した線画、語はaria-labelとtitle) - アカウントの画像(#236。アカウントの窓の「画像」の欄と「選ぶ」「外す」、画面の側で中央を正方形に切り抜き 128×128 の PNG にすること、png・jpeg・webp・gif を読むこと、決定まで書かないこと、
avatars/に id をファイル名にして置くこと、config.jsonのavatarの有無だけの欄、発言の行と通知の畳みの丸印に行のアカウント id で引いて出すこと、読めない画像は黙って頭文字に戻すこと、アカウントの削除で画像も消すこと) - 参加者パネルの丸印(#253。行の名前の前の点を会話面と同じ関数で描く丸印に置き換えること、席が宣言したアカウント・居ない行ではリストのアカウントで画像を引くこと、ゲストは頭文字、
mcpは通知の畳みと同じ丸印、オフラインの行は名前と同じだけ薄くすること、直径をremで取り UI の倍率に連れること(#253 ではおよそ 1.4rem、#258 で 2.31rem・頭文字 1.2375rem。#260 で会話面の文字サイズの 2.31 倍・頭文字 1.2375 倍に移し、会話面の丸印の 1/1.15 をどの設定でも保つ)、画像は会話面と同じ一度読んだものを使うこと) - 画面の人の色のその場での反映(#189。画面の人の行が指す部屋の一つの値、アカウントの保存と起動時にその値を書くこと、読み戻した行もアカウントの色で出ること、この後の発言は席の宣言し直しで新しい色になること)
- アプリのアイコン(#246。透明地に青
#1e9be8の吹き出しと白い三つの点、元にするsrc-tauri/app-icon.svgとその根のcolorの一か所にある色、tauri iconで作るsrc-tauri/icons/の全部、bundle.iconが指す名前を変えないこと、PNG とicon.icoの透明地) - 窓の題を残すこと(#246、#248。題は
Pullceptで、タスクバーのサムネイルと Alt+Tab が読む。#248 のWTNCA_NODRAWCAPTIONで最上部の文字だけを描かせない処理は、標準の枠が無くなった #252 で外した) - タイトルバーを窓の最上段にすること(#252。
decorations: falseで標準の枠を外すこと、帯の高さを変えないこと、地を--surfaceにすること、左端のsrc-tauri/app-icon.svgのアイコン、右端の最小化・最大化(元に戻す)・閉じるの線画のボタンとカーソルの下で赤くなる閉じる、窓の大きさが変わるたびに問い直す最大化の名前と絵、data-tauri-drag-region="deep"で帯を掴んで動かすこととダブルクリックの最大化、閉じるがcloseで今の終了の問いを通ること、core:window:allow-close・allow-minimize・allow-toggle-maximize・allow-start-draggingの権限、windowsクレートの依存を外したこと) - アプリ自身の発言の丸印(#340、「会話面の見た目」。部屋が
app_originから刻むfrom_appの印をRoomMessage・拒否が返す発言・ログの行に載せること、ログと拒否ではtrueのときだけ書くこと、その印で丸印にsrc-tauri/app-icon.svgを余白付きで出すこと、名前Pullceptでは決めないこと) - Windows CI(
npm ciと Rust コンパイル確認)、Release 公開時の CD
確かめた者と日付を項目ごとに残す。Master が画面を見て確かめたものと、AI が操作して確かめたものは分けて書く。 前者は使う側にそう見えたことであり、後者は操作した側が経路を辿れたことである。同じ機能でも証拠の種類が違うため、混ぜると何が確かめられたのかが読めなくなる。分ける軸は操作した者と画面を読んだ者の組み合わせであり、この二つに尽きるとは限らない——一方が操作し他方が読んだ場合は、そのまま第三の見出しとして立てる。上の「実装済み」に載っていることは、この節に載る条件ではない——実装されていることと、実機でそう動いたことは別である。
確かめた者は記録に残っていない。この分け方は 2026-08-24 から始めたものであり、遡って当てはめない。
-
1 往復が成立した。 部屋の入力欄からの発言が channel notification としてセッションへ届き、セッションが
say_to_roomを呼び返し、その内容が部屋のメッセージ一覧へ並んだ。CLI 側へ追加入力は与えていない。 -
channel サーバを 2 つ同時に読み込んだ状態で成立した。 部屋のサイドカー(
pullcept-room)とgithub-webhook-mcpの双方が同一セッションで機能した。#90 の premise は--channels併記による二重登録の失敗のみを確定させており、複数の channel サーバを同時に有効化できることはここで初めて実測された。
未計測: 往復の所要時間。成立の可否のみを確認しており、秒数は取っていない。参考値として #90 の実測では push から返信 tool 呼び出しまで約 10 秒(モデル思考時間込み)。
-
床を入れた後の同時発話(#47)。 2 セッションでの実機観測。未実装節の最も古い未計測項目がこれで閉じる。 2026-08-22 の実測(互いの発言を受け取らない / どちらも
Claude Codeを名乗る)は #39 と #40 の修正前、2026-08-23 の二重応答は床の実装前のものであり、修正後の再計測がここまで済んでいなかった(「床」)。 - 「考え中…」が出た。 会話の途中で、走っている行の note として現れた(「走っているアカウントが何をしているか」)。
- 「出力中」が CLI 内部の動きを映していた。 語が指しているのは端末に届くバイトであり、そのとおりに出た。部屋へ発言が来ることまでは言わない——それは受容したトレードオフであり、同節に書いてある。
- 操作の地色(#75)。 タイトルバー・入力欄・参加者の行・端末ヘッダ・アカウントのモーダルの操作と、選択中の端末タブが窓の地色で出ている(「二つの地色」)。
-
端末の下辺の帯(#77)。
.xterm-viewportを描画から外した後の見た目。黒い帯とネイティブのスクロールバーの矢印が WebView2 上で消えている(「診断面」)。 - 参加者パネルの見出しの語(#78)。 見出しが「アカウント」で出ている(「参加者パネル」)。
- 診断面のヘッダの三点(#68 の実機指示)。 ヘッダに色を敷かないこと、窓の名前が「端末」であること、枠と端末の間の余白が詰まっていること。指示が戻ったのと同じ日に、反映後の見た目まで確認している(「診断面」)。
-
「出力中」と沈黙 1 秒での消失(#82)。
/statusの出力中に現れ、約 1 秒の沈黙で消えた。 -
再読み込み後の引き取り(#84)。
Ctrl+Rで再読み込みし、状態行に「〈名前〉 の端末に繋ぎ直しました。再読み込みより前の出力は残っていません。」が出て、行に❌が戻った。端末の 1 行目の告知は読めなかった——訂正は「画面の再読み込みに耐える」に書いた。 -
終了の確認ダイアログ(#71)。 Escape で取消し、セッションは生き残った。
終了で終了した。取消ボタン自身は押していない(下記「未実装」)。 -
終了したタブの
✕(#68)。 押すと端末が捨てられ、席が解放されて行が▶️へ戻った。
この日の操作では不具合も見つかっている(#89、その後修正済み)。修正後の窓は 2026-08-25 に入口から出口まで実機で辿られており(下記)、この日の記録が残していた欠けはそこで埋まっている。ただしこの領域を計り終えたとは読まないこと——窓の長さは取っておらず、一度部屋に入った後に接続を失う経路は通っていない。下記「未実装」を見る。
上の二つのどちらでもない組み合わせである。押したのは Master——使う側が実際に辿った経路であり——、その画面を AI が直接読んでいるため、ここに入っているのは伝聞ではなく画面の literal である。証拠の種類が違うので行を分ける。
-
起動から部屋に入るまでの行の語(#89)。
▶️を押し、CLI が--dangerously-load-development-channelsの確認プロンプト(Enter to confirm)で止まっている間、Claude Lay の行は note が「起動中」、ライフサイクルの列が❌であった。同じ瞬間、Claude Lin の行は note が「未起動」、ライフサイクルの列が▶️である。走っているセッションと起動していないアカウントが、実機で別の語を出している——#89 が直そうとしていたのは、この二つが同じ「未起動」を出し、区別がボタンの側にしか残っていない状態であった。❌が同じ行に並んでいることも同時に見えており、語を入れ替えて終了の手段を落とす形にはなっていない。 - 行と状態パネルが同じ瞬間に同じ語を出していた。 状態パネルは「セッション Claude Lay 起動中」「開始時刻 18:54」である。#89 の修正は、一つの画面に「走っている」の定義を二つ持たない形へ行をパネルへ合わせるものであり(「参加者パネル」)、その趣旨が二面の語の一致として実機に出ている。行が独立に正しい語を出したことではなく、二面が食い違わなくなったことがここでの観測である。
未計測: この観察には部屋に入った後の側が入っていない。観測の時点で端末はまだ確認プロンプトで待っており、セッションは部屋の名簿に現れていないためである。その先は同日の AI の操作で辿っている(下記)。語が出るまでの時間と窓の長さは、どちらの観察でも取っていない。
-
起動から部屋に入るまでの行の語の三段階(#89)。 同一セッションで連続して見ている。押す前、Claude Lay の行は note が「未起動」、点は輪郭、行は薄く、ボタンは
▶️であった。▶️を押した直後、note は「起動中」、ボタンは❌へ変わり、状態パネルは「セッション Claude Lay 起動中」「開始時刻 18:56」、端末は--dangerously-load-development-channelsの確認プロンプトで止まっている。確認プロンプトにEnterを返して CLI が部屋に入った後、note は消えた——点は塗りへ変わり、行の薄さも取れ、ボタンは❌のままである。状態パネルは「Claude Lay 起動中」のままであった。 - 在室中の行が何も言わない形は壊れていない(#82)。 上の段階 3 がそれである。#89 は行の判定を状態パネルへ合わせる修正であり、語を増やした分だけ在室中の行が黙らなくなる余地があった。名簿に現れた時点で note が消えるため、走っている間の様子だけが同じ場所に出る形(「走っているアカウントが何をしているか」)はこの経路で保たれている。
-
起動していない行は三段階を通して動かない。 段階 2 と 3 のいずれでも、Claude Lin の行は「未起動」と
▶️のままであった(拡大して確認)。窓の間だけ二つの行が別の語を出すのではなく、片方が遷移していく間もう片方が据え置かれることまで見えている。 -
行の
❌でプロセスの木が落ちる(#85 関連)。 セッションを起こして行の❌で終了し、プロセスの一覧を PID で確認している。pullcept (14044)の下にいたcmd.exe (28792)と、そのさらに下のclaude.exe (11380)が、いずれも終了後には消えていた。孤児の有無を画面ではなくプロセスの一覧で見た観測はこれが最初である——画面の側は席が空いたことしか言えず、#85 が閉じようとしているのは画面から見えなくなった後のプロセスだからである。落ちる仕組みはTerminateProcessではなく、PTY の項目が捨てられて master が閉じ、ConPTY に繋がったプロセスが道連れになる経路である(「アプリの終了」)。
未計測: 語が出るまでの時間と窓の長さ。三段階の順序と各段階の見え方だけを確認しており、秒数は取っていない。一度部屋に入った CLI が接続を失った場合に note が「起動中」へ戻るかも、この経路を通っていないため見ていない。
未計測: アプリの終了の一括 kill の経路そのものは通っていない。 上で確認したのは行の ❌ の経路であり、一括の側が同じ結果になることはコードの読みによる推論である——どちらも PTY の項目を捨てる形を通るため同じ drop に落ちる、という導出であって、実機で見た値ではない。確認のダイアログも実機では出していない。この二つは翌 2026-08-26 に通している(下記)——この段落はその日までの状態の記録である。
-
cmd.exe /Cを経由して--settingsの JSON 文字列が引数のまま届く(#99、「アカウントはキャラクターを持つ」)。 実際に走った行はcmd.exe /C claude --dangerously-load-development-channels server:pullcept-room-… --settings "{\"outputStyle\":\"character_Lin\"}"であり、子のclaude.exeが受け取っている引数も同一であった。引用符を含む引数がこの一段を素通りすることは、それまでコードの読みによる推論であった——Windows でこのアプリが挟む一段であり、ここで壊れればキャラクターの欄は実機で効かない。 -
共有した作業ディレクトリで、宣言したキャラクターの人格が立った(#99)。 共有ディレクトリ
C:\Users\smile\Claudeからcharacter_Linを宣言したアカウントを起動し、そのセッションが Lin として発話している(端末の出力にLin:の名乗りと口調)。欄の編集と保存、走る行の表示への反映も同日に確認した。 -
後から起動したセッションが、先行の登録を名指して止めている(#103、「セッションは自分以外の部屋の登録を起動しない」)。 共有ディレクトリで Claude Lay → Claude Lin の順に起動している。
claude.exe 8904(Lay、先)の--settingsは{"outputStyle":"character_Lay"}のみ、claude.exe 7096(Lin、後)の--settingsは{"disabledMcpjsonServers":["pullcept-room-2d8f9a1a-…"],"outputStyle":"character_Lin"}であった。先発の側に名指しが無いのは止める相手が居ないためであり、前回起動の登録は死んだアドレスを持つため名指しの対象に入らない(「.mcp.jsonの登録単位」の掃除と同じ述語である)。 -
部屋型サイドカーの本数が 1 本落ちた(#103)。 各セッション 2 本である。修正前は Lin 側が 3 本であり、余計な 1 本が消えた。残る 2 本目は
pullcept-room接頭辞ではない古い登録であり、名指しの対象外である——死んだアドレス宛のため部屋には入らない。 - 名簿の重複が消えた(#103)。 AI は 2 行であり、Lay と Lin が一人ずつである。同じ参加者が二人現れる状態(「セッションは自分以外の部屋の登録を起動しない」)が、この経路で閉じている。
- 止める一覧を持つ側の部屋の往復が生きている(#103)。 マスターから Claude Lin へ投げ、返答が届いた。自分の部屋の登録まで止めてしまえば沈黙として現れる経路であり、本数と名簿とは別の軸として確認した。
-
アプリの終了の確認ダイアログが出た(#85、「アプリの終了」)。 #97 の修正を実機で確認した操作の中で辿っている。走っているセッションがある状態でウィンドウを閉じ、
Claude Lay のセッションが走っています。…が出た。 - 取消でアプリもセッションも残った(#85)。 ウィンドウは在り、当該セッションは「起動中」のままであった。
-
承認した後に CLI のプロセスが残っていない(#85)。
pullcept (24408)→cmd.exe (28032)→claude.exe (6408)の三つとも消えたことを PID で確認した。一括の側を実機で通したのはこれが最初である——2026-08-25 に PID で見たのは行の❌の経路であり、一括が同じ drop に落ちることはコードの読みによる推論であった(上記)。ここで取ったのは推論ではなく実機の値である。 - 走っているセッションが無ければ確認は出ず、そのまま閉じた(#85)。
未計測: 先に起動した側(Lay)が Lay の人格で発話するところは見ていない。この側について確認したのは、走る行に character_Lay の --settings が載っていることと、名簿に Lay が一人現れることまでである。共有したディレクトリで 2 アカウントがそれぞれの人格で立つことのうち、発話まで辿ったのは後発の Lin の側だけである。
- 締め出しを起こしていたのは webview の再読み込みであった(#108、#84)。 PC のスリープから復帰した直後、部屋は空であった。状態行は「Claude Lay、Claude Lin の端末に繋ぎ直しました。再読み込みより前の出力は残っていません。」であり、席の引き取り(「画面の再読み込みに耐える」)が走ったことをアプリ自身が言っている。「床」が描けない原因として並べた二つ——スリープと webview の再読み込み——のうち、実機で当たったのは後者である。
- 拒否が返した発言がその場で描かれた(#108)。 一通目の投稿が拒否され、取りこぼしていた 2 件が部屋に並んだ。状態行は「送っていません。書いている間に届いた発言 2 件を下へ描きました(Claude Lay、Claude Lin)。読んでから送るか決めてください。」であり、述べている件数は画面に並んだ行数と一致している。 入力欄の本文も保持されていた。
-
描かれた行が宣言した色で出た(#108)。 当該の 2 アカウントはいずれも
hueに250.0を宣言しており、二行とも同じ青で並んだ。拒否が色を運ばず名前から引き直す形であれば、名前の違う二人は別々の色になる——「床」の「色は発言に載せて運ぶ」が、ここで実機の値になった。 - 読み直した後の二通目が通った(#108)。 部屋にマスターの発言が載り、Claude Lin が返答した。描けなかった → 透かしが進まない → 拒否される → 描く機会が来ない(「床」)の閉路から、他の参加者の新しい発言を待たずに抜けている。
未計測: 保持窓(512 件)から溢れた場合の挙動。この日の取りこぼしは 2 件であり、溢れる経路は通っていない。
main(97920a0)を焼いて操作している(#118、#122、「サイドバーの開閉」)。
-
panels欄を持たない既存設定がそのまま読めた(#118)。 当時のconfig.jsonはアカウント 3 件のみを持ち、panelsを持っていなかった。起動すると両方の面が開いた状態で出て、アカウント 3 件も残っている。この欄を持たない設定は両方とも開いた状態として読む(「サイドバーの開閉」)が、#[serde(default)]の移行経路として実機の値になった。 -
アイコンが鏡像で出た(#118)。 縦線の入った角丸の四角であり、左のボタンは縦線が左、右のボタンは縦線が右である。高さは文字サイズの
<select>と端末ボタンに揃っている。同じ図形を CSS の一行で裏返す形(決定4)が、Windows でその向きに出ている。 - 畳んだ面に帯が残らなかった(#118)。 左右いずれも幅 0 であり、部屋が窓の端まで広がる(決定2)。
- 畳んだ状態でもボタンがヘッダに残った(#118)。 左右とも残っている。畳んだ面には押すものが無いため、これが無ければ開く手が消える。
-
Ctrl+Bが左の面だけを開閉した(#118)。 右の面は動かない(決定3、AI 判断6)。 -
発言欄に焦点がある状態でも
Ctrl+Bが効いた(#118)。 面が開閉し、入力中の文字は壊れていない。 -
端末に焦点がある間、面が動かなかった(#118、AI 判断5)。 キーの購読は
windowに付いており、素のCtrl+Bが途中で降りる道は端末ガードの一本しかないため、面が動かないことがガードの発火を意味する。一つ上の項目との対照で、違いはフォーカスの位置だけである。 -
再起動後に開閉が保持された(#118)。
history: true/participants: falseの非対称な状態を作って再起動し、そのまま復元されている。押すたびにconfig.jsonへ書く形(決定1)が実機の値になった。 -
面の開閉を保存した後もアカウント 3 件が残った(#122)。
saveAccountsをsaveConfigへ広げた変更が狙っていた箇所であり、片方しか知らない保存が互いを落とす事故は起きていない。
未計測: シェル側が ^B をどう受けたか。CLI が起動直後の確認プロンプトで止まっており、そこでは Ctrl+B が何も描かない。この半分は xterm の attachCustomKeyEventHandler の性質であって、#118 が書いた側ではない。
main(592c726)の実機である。被験体は Claude Lin であり、トピック「ハロ〜」は 52,517 B の発言を持ち、索引に Lin のセッション記録は無い——再開の線に入らず、発言のあるトピックへ座る、という #133 の対象が素で成立している。仕込みは無い。
-
引き金が立った(#133)。 起動後の
.mcp.jsonで、Lin の登録欄がPULLCEPT_UNSEEN_HISTORY="1"を持っていた。同じファイルに前回起動の Claude Lay の欄は残っておらず、登録が起動のたびに丸ごと書き直される形も同時に見えている(上記「伝える口は起動ごとの env である」)。 -
状態行は通常起動であった。 「Claude Lin を起動しました。… に登録済み。」であり、再開の線には入っていない。判定は解決後の行に
resumed_fromが無いことであり(上記「伝える条件は…(AI 判断1)」)、この起動はその条件の側に立っている。 -
セッションが自分から引いた。 端末へ置いたのは「この部屋、もう話が進んでるみたいだね。今どういう流れ?」の一つであり、道具の名前は出していない。 transcript(
4a1f4f71-…)の tool_use は二件で、順にToolSearch(select:mcp__pullcept-room-…__read_room_historyほか)とmcp__pullcept-room-e31e04e9-…__read_room_historyの{"limit": 50}であった。呼べと言われずに呼んでいる。 アプリが代理で呼ばない形(上記「アプリがread_room_historyを代理で呼ばない」)のまま、引く判断がセッションの側で起きている。 -
読んだのであって、書いてはいない。 トピックのログは前後とも 52,517 B で不変であり、
say_to_roomは呼ばれていない。読み出しが発言しない道具であること(上記「読み出しの道具はsay_to_roomの隣に置く」)が実機の値になった。 -
返答が部屋の中身を含んでいた。 Li+ の update status(
build-2026-08-26.1→build-2026-08-29.1)、liplus-language の issue #1819、05:44 の Master の「update は保留」。いずれも新規セッションの文脈には無く、読み出し以外の入手経路が無い。
この回は CLAUDE_CODE_CHILD_SESSION を環境から外して起動している。付いたままだと子の CLI で transcript の保存が無効になり、上の tool_use の証跡が残らない。また Lin の起動オプションは --session-id {session_id} を宣言していないため、Lin にはセッション id が配られず索引にも記録されない——判定は resumed_from が無いことであって記録の有無ではないため観測の成立条件ではないが、Lin がそもそも再開の線に入り得ないアカウントであることは残しておく。
未計測: 一度の観測であり、言えるのは「引いた」であって「常に引く」ではない。 置いた問いは道具を名指していないが、文脈が欠けていること自体は露骨に示している。引き金を受けた席が、そうと示さない問いに対しても引くかは、この回では計れていない。
-
頼んだ終了で端末ペインが開かず、エラーにならなかった(#121)。 行の
❌からセッションを終了させた(「診断面」の言う行の終了)。畳まれていた端末ペインは開かず、終了はエラーとして出なかった。確かめたのはこの一つの経路だけである——トピックの削除とアプリの終了による終了、CLI が自分で終わった場合、開いていたペインが閉じないことは通っていない。下記「未実装」を見る。 -
▶️ で起動しても端末ペインが開かなかった(#215)。 ペインを畳んだまま▶️ で起動し、ペインは畳まれたままであった。後でペインを開いたとき、表示は崩れていなかった(「診断面」)。開いていたペインが開いたまま残ることは、この確認の範囲に含まれていない。下記「未実装」を見る。
- 行の ▶ がセッションの起動で ■ に替わり、メニューが行の状態に合った方を出した(#239、「参加者パネル」)。 止まっている行のメニューは「開始」を、動いている行のメニューは「終了」を出している。証拠は Master が貼った実機の画面写真二枚である。
- 最新の発言へ戻るボタン(#243、「最新の発言へ戻るボタン」)。 Master の言葉は「いい感じ!」である。
- 窓の大きさ変え・最大化・左右の並べ(#252、「タイトルバーは窓の最上段である」)。 AI が頼んだ三つ——窓の右下の角を引いて大きさが変わること、帯の空きのダブルクリックで最大化と元に戻すが切り替わること、Win+← / Win+→ で左右に並べられること——への Master の返事は「全部問題なくできたぞ。」である。確かめたのはこの三つであり、右下以外の辺と角、帯を掴んだ移動、三つのボタン、画面の端へ引くスナップは含まれていない。
- アカウントの画像を「選ぶ」で設定できた(#236、「アカウントは画像を持てる」)。 Master が Lay・Lin などに画像を設定していたことを、AI が編集の画面と会話面で見ている。設定の操作そのものは Master であり、選んでから決定するまでの画面(切り抜きと縮小の見本)はこの観測に含まれていない。
-
窓の題が残っている(#248、のち #252、「窓の枠は画面が描き、題は残す」)。 タスクバーのボタンにカーソルを乗せ、サムネイルに
Pullceptが出た。Alt+Tab はこの観測に含まれていない。 - 新しいアイコンが出た(#246、「アプリのアイコン」)。 窓の左上とタスクバーに、新しい吹き出しのアイコンが出ている。
- 帯が窓の最上段の一段である(#252、「タイトルバーは窓の最上段である」)。 帯は一段で、左にアイコン、右端に最小化・最大化・閉じるが並び、地がサイドバーと同じ色であった。見たのはライトだけである。
- 参加者パネルの行に画像の丸印が出た(#253、「参加者パネル」)。 画像のあるアカウント(admin・Claude Code の二人・mcp)の行に、画像の丸印が出ている。
- メニューの「開始」が区切り線の下の最後に出た(#241)。
- アカウントの編集の窓が設定済みの画像を読み戻した(#236)。 アプリを起動し直した後、編集の窓に「画像」の欄と見本の丸が出て、設定済みの画像が入っていた。
-
Codex CLI の席の五欄(#283、「Codex の席は自分の様子を rollout で知らせる」)。 新規起動の Codex の席で、パネルのモデル・エフォート・5 時間・週次・コンテキストに値が出た。モデル・エフォート・5 時間・週次は同じ席の Codex の
/statusと一致した。停止して再開した席は、最初のターンまで「—」で、ターンの後に値が出た。コンテキストだけがずれた——パネルは 11%、/statusは93% left (29.1K used / 258K)(使用率に直すと 7%)。アプリがtotal_tokens÷model_context_windowをそのまま割っていたためであり、#285 で Codex と同じ式に直した(「Codex の席は自分の様子を rollout で知らせる」)。直した後のコンテキストの値は、実機ではまだ見ていない。
- Claude Code の席の様子(#331)の実機確認。実際の席で、ツール・許可待ち・サブエージェントで札と会話面の下の一行が変わり、終わると消えること(上の「Claude Code の席の様子」の未確認)。
- app-server 方式の Codex の席の待機(#329)の実機確認。何もしていない Luna の席が「待機」になること、端末から始めたターンの知らせが
codex-activity-probe.logに出ること(上の「Codex の app-server の席の待機」の未確認)。 - app-server 方式の Codex の席の様子(#326)の実機確認。実際の席で、許可を求めるコマンド・ファイル変更・MCP の道具・答えを求める問いで札と会話面の下の一行が変わり、ターンの終わりで消えること(上の「Codex の app-server の席の様子」の未確認)。
- Codex の app-server 方式(#299)の新規席・五欄・利用上限・画面・部屋 MCP の全 GUI 組合せ。再開した会話とスマホからの往復は 2026-10-17 に確認済み(上の「Codex の app-server 方式の検証範囲」)。
- 順番の付与(弾くだけでなく「あなたは N 人め」を返す形)。戻り値の形は段差を残していないが、二重計算が痛むと測れてから判断する。
- アカウント面の実機確認。作成・改名・削除、オフライン表示、二重起動の拒否、改名後の
.mcp.json登録の追随はいずれも実装済みで、CI の型検査とテストは通っているが、実機での操作は未確認である。 - 頼んだ終了の言い方の実機確認のうち、行の
❌による終了を除く分(#121、「診断面」)。トピックの削除とアプリの終了で状況行が「◯◯ を終了しました。」になりエラーにならないこと、端末ペインが開いていれば閉じないこと、CLI が自分で終わった場合は従来のエラーの文面と面の表示が残ることは、実装済みで CI の型検査と Rust のコンパイルは通っているが、実機での操作は未確認である。行の❌で終了させたとき、畳まれた端末ペインが開かずエラーにならないことは、上記 2026-09-28 に Master が画面で確かめている。 - 端末の WebGL 描画の実機確認の残り(#278、「診断面」)。マスコットの体を横切る格子線は WebGL の描画で消えた(2026-10-05、Master の実機確認)。両目の上に残った 1 ピクセル幅の縦線は、ブロック要素の四角を整数ピクセルの縁で塗るパッチで消える見込みであり、実装済みで CI は通っているが、実機の画面では未確認である。線が消えたかどうかは実機の画面でしか確かめられない。
- アカウントごとの端末と終了の実機確認。2 セッションでの出力の分離、入力の宛先、切り替え後のスクロールバック、終了したアカウントの再起動はいずれも実装済みであり、CI の型検査は通っているが、実機での操作は未確認である。終了そのものと席の解放は 2026-08-24 に確認済みである(上記「実機で確認済み」)。
- アカウントの窓の項目分け(#304)の実機確認。横のメニューでの切り替え、切り替えても書きかけの欄が残ること、見えていない項目の欄で決定が止まったときにその項目へ移ること、種別ごとの項目の出し分け、狭い窓での上のタブの列は実装済みで CI の型検査とビルドは通っているが、実機での操作は未確認である。
- 一つのリストとアカウントのモーダルの実機確認。種別ごとのグループと件数、オフラインの表示、モーダルの決定と取消、本人のアカウントへの移行はいずれも実装済みで、CI の型検査とテストは通っているが、実機での操作は未確認である。
helloのaccount_idが実際の部屋で名簿へ届くところも未計測である。行からの終了は 2026-08-24 に確認済みである。 - 会話面の文字サイズのうち、再起動後の保持、上下限の実機確認。いずれも実装済みで CI の型検査は通っているが、実機での操作は未確認である。キー操作(
Ctrl+=/-/0)と、効く範囲が参加者パネル・診断面・端末へ及ばないことは 2026-08-24 の実機観察で確認済みである。この観察は入力欄が動かないことも併せて記録していたが、それは当時の形についての記録であり、#81 が判断を改めた——入力欄の本文(当時のテキストエリア、#354 からは#input)は会話面の軸に入り、動くのが正しい。動くようになった後の実機確認は未了である。webview 自身のズームが閉じていることは変わらない——キーを受ければ寸法は無条件に動くため、動いたこと自体は既定動作を止められた証拠にならないが、参加者パネル・診断面・端末と入力欄の操作(宛先と送信)が一緒に動かなかった以上、webview のズームは走っていない。 - 診断面のヘッダの実機確認。タブと行の連動、
✕で面が畳まれセッションが残ること、端末の文字サイズの梯子と再起動後の保持、桁数と行数がセッションへ伝わることはいずれも実装済みで CI の型検査は通っているが、実機での操作は未確認である。ヘッダの見た目の三点と、終了したタブの✕での破棄は 2026-08-24 に確認済みである(上記「実機で確認済み」)。 - 行の記号表示と終了の確認ダイアログの実機確認。三つの記号が Windows のフォントで揃って出ること、幅を固定した列で本人の行の名前が出ること、ダイアログの取消ボタンはいずれも実装済みで CI の型検査は通っているが、実機での操作は未確認である。Escape と
終了は 2026-08-24 に確認済みであり、▶️と❌が実際に出ることも同日の操作で見えている。 - 画面の再読み込みに耐えるところの実機確認。繋ぎ直した端末へ出力と入力が戻ること、繋ぎ直した端末の開始時刻・起動コマンド・作業ディレクトリが起動時の値であることは実装済みで、CI の型検査と Rust のコンパイルは通っているが、実機での操作は未確認である。席を持つ行が
❌を出すことは 2026-08-24 に確認済みであり、端末の 1 行目の告知は同日に確認して読めないことが分かった(「画面の再読み込みに耐える」)。 - 走っているアカウントの様子のうち、パネル 16.5rem の中で本人の行の名前が押し出されないことの実機確認(#82、「走っているアカウントが何をしているか」)。実装済みで CI の型検査は通っているが、寸法の側は未確認である。「考え中…」「出力中」と沈黙 1 秒での消失は 2026-08-24 に確認済みである。Claude Code が確認プロンプトで待っている間に出力を止めるかどうかは依然として未計測である——止めないのであれば、待っている行に「出力中」が立ち続ける。「出力中」がその場合でも literal に正しい語であることがこの語を選んだ理由だが、それは待機と稼働を見分けられるという意味ではない。同じ理由で、確認プロンプトの間に「待機」が出るかどうかも未計測である(#148)。「待機」の出現そのもの(沈黙 1 秒で出ること、次の出力で「出力中」へ戻ること)も実機では未確認である。
- セッションの様子の報告の実機確認(#155、「セッションは自分の様子をステータスラインで知らせる」)。実装済みで CI の型検査・Rust のコンパイル・
crates/mcp-configと sidecar のテストは通っているが、実機では一度も走らせていない。未計測は五つある。一つは--settingsのインラインで渡したstatusLineが利用者・プロジェクトの設定の同じ欄より優先すること——公式 docs の precedence の記述を読んでの判断であり、走らせて確かめてはいない。二つめは Windows でステータスラインのコマンドを実際に走らせるのが Git Bash(不在なら PowerShell)であり、node C:/…/status.mjs <URL>の三語がそのどちらでも同じに通ること。docs の Windows の節を読んでの判断である。三つめは呼ばれる頻度で、docs は引き金の一覧(セッションの開始、アシスタントの発言の到着、/compactの完了、許可モードの変更、refreshInterval)を持つが、実機で数えてはいない——issue #155 の未決の一つめはここに残っている。四つめはrate_limitsが実際にこのアカウントの JSON へ載ること。docs は claude.ai の Pro / Max か spend limit のゲートの内側でのみ来ると言っており、来なければ五欄のうち二つは「—」のままである。五つめはPULLCEPT_ROOM_TOKENがステータスラインのコマンドまで届くこと。起動した CLI の環境に在り、子プロセスは環境を継ぐ、という一般の性質に乗っている。CLI がこのコマンドのために環境を落とす場合は受け口が 401 を返し、五欄は「—」のままになる。 - Codex の席の利用上限(#294、「Codex の席が利用上限で止まったとき」)の実機確認。実装済みで、CI の Rust のコンパイルと
crates/mcp-config(codex::limitの読み方・状態・文面)・crates/terminal-inputのテストは通っている。app-server への問い合わせの行(initialize・initialized・account/rateLimits/read)は、同じ三行を 0.160.0 のcodex app-serverへ送ってordinaryUsageAllowedがfalse(2026-10-05 22:19、解除予定 22:45 の前)とtrue(解除後、2026-10-06)の両方で返ることを確かめた。アプリに組み込んだ形では一度も走らせていない。未確認は次のとおりである。止まった Codex の席のパネルが「制限中」になること。部屋にPullceptの停止の知らせが一通だけ出て、解除予定が現地時刻で正しいこと、その席の端末には打たれないこと。止まっている間の部屋の発言がその席の端末へ打たれず、他の席(Claude Code)へは今までどおり打たれること。解除予定の 30 秒後ごろに解除が確かめられ、部屋に解除の知らせが一通出て、席に要約の一通(件数と、席宛ての発言の本文)が打たれ、「制限中」が消えること。席がその一通の後のsay_to_roomで弾かれないこと。止まった席を閉じて(または Pullcept を起き直して)から開いたとき、席が「制限中」で始まり、すぐ問い合わせて、上限が外れていれば解除の知らせと、止まっていたあいだに預かった発言だけのまとめが届くこと(#312。crates/mcp-configのテストで受け箱の読み書きとまとめを確かめているが、実機では未確認)。問い合わせのcodex app-serverが残らず終わること。 - Codex の部屋の MCP を起動の行だけで渡すことの実機確認(#297、「Codex CLI の起動と再開」)。実装済みで、CI の Rust のコンパイルと
crates/mcp-configのテストは通っている。-cだけで渡した定義が二道具の承認ごと効くことは、0.160.0 のcodex mcp list --jsonと app-server のconfig/readを、config.tomlの無い一時のフォルダーと一時のCODEX_HOMEで走らせて確かめた(2026-10-06、モデルは呼んでいない)。.codexフォルダーだけで project layer が返ることも同じ形で確かめた。未確認は、アプリから起動した Codex の席が部屋に入り、二道具を確認なしで使えること、停止後の再開でも同じであること、同じフォルダーの別の Codex の席が重ねて名簿に出ないこと、既存の.codex/config.tomlからpullcept-room-…の欄だけが消えて他が残ることである。 - 使用率から出す「制限中」の実機確認(#161、「走っているアカウントが何をしているか」)。実装済みで CI の型検査・Rust のコンパイル・
crates/mcp-configと sidecar のテストは通っているが、実機では一度も出していない。未計測は二つあり、どちらも上の項目に乗っている——rate_limitsがこのアカウントの JSON へ実際に載ること(載らなければ「制限中」は永久に出ない)と、100% に達した回の報告が実際に届くこと。100% を跨ぐ瞬間に報告が来る保証は無く、来るのはセッションが動いたときだけである(受容したトレードオフ)。 - リセットまでの残り時間(#306)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・
crates/mcp-configのテスト(秒の読み方と Codex の窓ごとの読み分け)は通っているが、実機では見ていない。未確認は三つある。一つは Claude Code の席の JSON にresets_atが実際に載り、パネルの残り時間が Claude デスクトップの表示と一致すること。二つめは Codex の席の残り時間が Codex の/statusのリセット時刻と一致すること。三つめは時刻を過ぎたときに行が消え、Claude Code の席では次の報告で使用率が「—」か新しい値に変わること——Claude Code がリセット時刻を過ぎた窓を落としてステータスラインを走らせ直すという docs の記述に乗っている。 - アカウントの環境変数の実機確認(#163、「アカウントは環境変数を持つ」)。解析・マスク・DPAPI の往復・出たままの行の保持は
crates/account-envのテストが Windows の CI で走らせているが、モーダルの欄からの保存と、起動した CLI が変数を受け取るところ(ghがそのGH_CONFIG_DIRで動くこと、cmd.exe /Cの下の子へ届くこと)は実機で未確認である。 - 席が受け取る部屋の道具の名乗りの実機確認(#147、「席は部屋の道具の名を起動時に受け取る」)。実装済みで
crates/mcp-configのテストは通っているが、実機では一度も起動していない。未計測は三つある。一つは--append-system-promptが--settingsおよび--dangerously-load-development-channelsと同居できること——CLI のオプション表に--printの但し書きが無く(同じ表の--append-subagent-system-promptは持つ)、排他として名指されているのは--append-system-prompt-fileだけであることを、導入済みの CLI の文字列(v2.1.273)から読んでの判断であり、走らせて確かめてはいない。二つめは、その一文を読んだセッションが実際に 1 ターン目からmcp__…__say_to_roomを引けること——遅延読み込みは名前を伏せるのであって道具を消すのではない、という導出に乗っている。三つめは 100 トークン前後という見積もりであり、数えてはいない。 - 起動から部屋に入るまでの行の語(#89)の窓の計測。不具合そのものは修正済みである(「参加者パネル」)。実機で見つかった窓であり(2026-08-24、AI が操作)、
▶️を押した後、CLI が--dangerously-load-development-channelsの確認プロンプトで止まっている間、行の note は「未起動」のままで、同じ行のライフサイクルの列は❌を出していた——終了できるものが未起動だと言っている状態である。行の「走っている」の定義が部屋の名簿に居ることであってプロセスが在ることではないために起きる窓であり、row.participantが null の間は「走っているアカウントが何をしているか」の三語も出ない。窓の長さは CLI の起動時間そのもので、確認プロンプトで止まれば数分続く。#82 より前から在る経路であり、#82 は空だった枝を埋めただけである。行の語そのものは 2026-08-25 に入口から出口まで確認済みである(上記「実機で確認済み」)——押す前の「未起動」、押した後の「起動中」と❌の並存、名簿に現れた後の消失という三段階を、起動していない行が据え置かれたまま辿っている。残る未計測は二つ。一つは窓の時間で、語が出るまでの時間も窓の長さも取っていない——窓の長さが CLI の起動時間であることは上の導出であって、実機で計った値ではない。もう一つは、一度部屋に入った CLI が接続を失った場合に note が「起動中」へ戻るかである。この経路は通っておらず、実機では見ていない。 - サイドバーの開閉のうち、シェル側が
^Bをどう受けたかの計測。ヘッダ左右のボタン、鏡像のアイコンが Windows でその向きに出ること、畳んだときに帯が残らないこと、再起動後の保持、Ctrl+Bが左の面だけを開閉すること、端末に焦点があるときに面が動かないことは 2026-08-28 に確認済みである(上記「実機で確認済み」)。残るのはキーを端末へ譲った先であり、譲っていることは「アプリの面が動かない」という不在でしか見えず、シェル側がその一打をどう受けたかまで見て初めて確かめられる。当日の CLI は起動直後の確認プロンプトで止まっており、そこではCtrl+Bが何も描かない——この半分は xterm のattachCustomKeyEventHandlerの性質であって、#118 が書いた側ではない。 - クラッシュした場合の後始末(#85 の範囲外)。job object へ入れれば OS が落とすが、確認を挟む形とは別の軸であり、実装していない。正常終了の経路を閉じた後も、この経路からは孤児が生まれうる。
- 孤児の引き取り(#85 の範囲外、#84 関連)。起動時に前回の孤児を見つけて繋ぎ直す形。pty id が Rust のメモリにしか無いため持続化の話になる。
- CLI の出力から状態を読む形(「ツール使用中」の粒度)。#82 は段階 1 として出力を読まない二つの合図だけを採り、この形は実測してから別 issue で判断すると決めた。
- 部屋のログとトピックの実機確認。追記されること、再起動後に左の列へトピックが並ぶこと、部屋の本文が空から始まること、選んだトピックが本文へ戻ること、名前の自動生成とその場での変更、二つの面の寸法が揃うことはいずれも実装済みで CI の型検査と Rust のコンパイルは通っているが、実機での操作は未確認である。追記の失敗の経路(
room-log-error)はそもそも失敗を作り出す必要があるため、実機でも未観測である。 - 既存
logs/main.jsonlの移行の実機確認。移動と索引への採録は実装済みで、対象は現時点で 2 行だが、実機では未実行である。 - トピックの再開の実機確認。
--session-idで配った id が実際にclaude --resumeで戻るところは未計測である。CLI の選択肢の存在は 2026-08-27 に確認しているが(#115 の前提)、往復そのものは辿っていない。同じ id を二度--session-idで渡した場合の CLI の挙動も未計測であり、この実装はその経路へ入らない——記録が在るときは、新規起動側でも新しい id を配り直す。 - 戻れなかった再開先を外すところの実機確認(#127、「トピック」)。再開の線で起動して名簿に現れないまま終えた回で記録が外れること、状態行がそう述べること、次に押すと通常起動で立つことは実装済みで、CI の型検査・Rust のコンパイル・
crates/topic-indexのテストは通っているが、実機での操作は未確認である。この経路を実機で作るには、確認プロンプトで止まった起動を id が記録された状態で終える必要がある——#123 の実機確認がそれを起こした回であり、狙って再現する手順としては未確認である。 - 会話が実在するかを起動の前に見るところの実機確認(#131、「トピック」)。スラッグの規則は 2026-08-29 に実機の
~/.claude/projects/から確定し、crates/mcp-config/のテストが持っているが、記録の在るトピックを開き直して実際に再開が選ばれること、記録だけが残った組で通常起動へ落ちて状態行がそう述べることは、実機では未確認である。前者は上記「トピックの再開の実機確認」と同じ往復であり、そちらが未計測である以上こちらも未計測である。 - 文脈の不足を示さない問いに対して
read_room_historyが引かれるかの実機確認。実際のセッションが自分から引くところと、#133 の引き金が着いた席へ届いて実際に引かれるところは、いずれも 2026-08-30 に確認済みである(上記「実機で確認済み」)——「押し付けないと引かれない」という懸念は、少なくともこの経路では実測で否定された。残っているのは問いの形の側である。その回に置いた問いは道具を名指していないが、文脈が欠けていることは露骨に示しており、そうと示さない問いでも引くかは未計測である。一度の観測であるため、頻度の側も取っていない。 - トピックごとの部屋と端末(#141)の実機確認。二つのトピックで同じアカウントを同時に走らせ、切り替えで端末・タブ・セッションの値・名簿がそのトピックのものに替わること、離れたトピックのセッションが止まらず出力を続けること、発言とその配送と
read_room_historyがトピックごとに分かれること、一覧の走っている印、再読み込み後に各トピックの端末が戻ることは、いずれも実装済みで CI の型検査・Rust のコンパイル・crates/mcp-configと sidecar のテストは通っているが、実機での操作は未確認である。 - トピックからの引用操作。読み戻した行は部屋の本文に在るが、行を選んで入力欄へ持っていく経路は持たない。
- webhook の通知(#169、「webhook の通知」)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・
crates/webhook-bridgeのテスト・sidecar のテスト(公開版ブリッジを立てた偽の Worker に繋ぎ、channel push がmeta.message_idを運ぶこと、WebSocket を張ったまま標準入力の終わりで終わること)は通っているが、実機では一度も走らせていない。本物の Worker からイベントが届くこと、AI セッションの座る部屋へ入り fan-out でセッションへ届くこと、畳みとその連なりのまとまり、部屋へ出したイベントも出せなかったイベントも未処理のまま残ること(#180)は未確認である。 - 設定メニューの表示の項目(#194、「表示」)の実機確認。実装済みで CI の型検査は通っており、Tauri を模した呼び出しで開いた画面で、既定で寸法が変わらないこと、UI の大きさを
150%にしてもタイトルバーが13.6pxから20.4pxへ動き会話の本文が16pxのまま動かないこと、会話の段を変えれば UI の倍率によらずその段の実寸になること、ヘッダと設定のピッカーが揃うこと(ヘッダのピッカーは #209 で外した)、再読み込みで保持されることを見ている(AI、2026-09-28)。実機のアプリでは開いていない。端末は模した画面に無いため、UI の大きさで端末の文字が動かないこと、枠が縮んだときに桁数と行数がセッションへ伝わること、実機の窓の幅での会話面の残り方は未確認である。 - 設定メニューとローカル MCP サーバ(#172、「設定」)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・
crates/mcp-serversのテストは通っているが、実機では一度も開いていない。既定のファイルが書き出されること、ブリッジがそこから立って webhook が今までどおり届くこと、WEBHOOK_WORKER_URLを書いて再起動すると接続先が変わること、ログが流れること、再起動で前の実行が終わりプロセスが残らないこと、「設定ファイルを開く」が既定のアプリで開くこと、ダイアログの寸法と配置は未確認である。 - ローカル MCP サーバのアカウント(#193、「ローカル MCP サーバ」)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・
crates/mcp-servers/crates/room-floor/crates/topic-indexのテストは通っており、画面は Tauri を模した呼び出しで開いて、MCPの見出しと行の語、サーバごとの畳み、窓のサーバの節、決定でのサーバの欄の保存、削除の拒否、項目の無い設定メニューまでを見ている(AI、2026-09-28)。実機のアプリでは開いていない。既存のmcp-servers.jsonから最初の起動でアカウントが並ぶこと、通知がそのアカウントの名前と色で届きログにアカウントが残ること、改名と色の変更が次の通知から効くこと、再起動とログが窓で今までどおり働くこと、窓の寸法は未確認である。 - フォームから作る
mcpアカウント(#200、「ローカル MCP サーバ」)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・crates/mcp-serversのテスト(エントリの名前の決め方、エントリだけを外す取り外し)は通っており、画面は Tauri を模した呼び出しで開いて、「+」の窓でMCP サーバを選ぶとサーバの欄だけが出ること、コマンドが空なら何も書かずに窓が理由を出すこと、決定がエントリの書き込み・アカウントの保存・起動の順で呼ぶこと、既に在る他の種別の窓にMCP サーバが出ないこと、削除の一度目の言葉と二度目のエントリの取り外し、取り外しに失敗すればアカウントを残すことまでを見ている(AI、2026-09-28)。実機のアプリでは開いていない。「+」の窓でMCP サーバを選んで欄が出ること、決定でmcp-servers.jsonにエントリが書かれアカウントが並びサーバが立つこと、最初の通知が窓で決めた名前と色で出ること、削除でエントリが外れサーバのプロセスが残らないことは未確認である。 - 発言の端末への入力(#183 / #195、「発言は端末へ入る」)の実機確認。実装済みで、CI の Rust のコンパイル・
crates/terminal-inputのテスト・サイドカーのテスト(作法の文面、札の綴りとadminの綴りの一致、channel を宣言しないこと)は通っているが、#195 の形では実機で一度も走らせていない。未確認は次のとおりである。セッションの発言と通知が他のセッションの端末へ一つの入力として届き、発言者の端末へは届かないこと。本文と\rの間(200ms)で送信されること。打ちかけの入力がある間に届いた発言が保留され、送信または消去の後に届いた順に打たれること、および打ちかけの文字と連結されないこと。セッションが道具の承認などの確認画面で止まっているときに届いた場合、その入力が確認への答えとして読まれないか——端末の出力はアプリから見えず、打つ前に確かめる手段を持たない。セッションが札のmessage_idをlast_seenに使い、次のsay_to_roomが弾かれないこと。注入試験(#195 の完了条件):admin以外(AI セッション・mcp)の発言に指示を仕込み、--dangerously-skip-permissionsの席でもセッションが従わないこと。本文の中に偽の札の行(roleをadminと書いたもの)を置く場合も含める。マージ後に AI が実機で行い、結果を #195 に記録する。従ってしまうと分かれば、合言葉を札へ足す(「発言は端末へ入る」)。 - 画面の人の発言の右寄せ(#185、「画面の人の発言は右に寄せる」)の実機確認。実装済みで CI の型検査は通っているが、実機では未確認である。画面の人の行が右、セッションと webhook の行が左に出ること、読み戻したトピックでも同じであることは未確認である。
- 画面の人の発言の背景色(#187)の実機確認。画面の人の発言に発言者の色の薄い背景が付き、AI と通知の発言が変わらないことは未確認である。
- 画面の人の色のその場での反映(#189、「画面の人の色は描いた行にもその場で届く」)の実機確認。実装済みで CI の型検査は通っているが、実機では未確認である。アカウントの色を変えて保存した直後に画面の人の行の背景色が変わること、トピックを開き直しても同じ色であることは未確認である。
- 本文の
@名前を宛先へ移すこと(#206、「部屋プロトコル」)の実機確認。照合と除去の規則はcargo test(crates/room-floor)が押さえている。実アプリで、手で打った@名前と候補から選んだ@名前が宛先になって本文から消えること、@名前だけの発言が送られずに入力欄へ戻ること、セッションのsay_to_roomの本文の@名前が宛先になることは未確認である。 - plugin としての allowlist 掲載(配布の第二段階)
- 同じ作業ディレクトリのアカウントを続けて起動したときの名簿の重複が消えることの実機確認(#208、「セッションは自分以外の部屋の登録を起動しない」)。実装済みで sidecar のテスト(起動したアカウントと登録のアカウントが違う場合と、
PULLCEPT_LAUNCHED_ASが無い場合に部屋ソケットを開かないこと)は通っているが、実機では走らせていない。Claude Code が MCP の stdio サーバへ自分の環境変数を受け継ぐことは--mcp-config経由の起動で測っており(2026-09-28、Claude Code 2.1.283)、.mcp.json経由の起動も同じ経路と見ているが、そちらは測っていない。 ▶️ で起動しても端末ペインを開かないこと(#215、「診断面」)の実機確認のうち、開いていた面が開いたまま残ること。実装済みで CI の型検査は通っている。畳んだまま起動して面が開かないこと、後で面を開いたときに表示が崩れないことは、上記 2026-09-28 に Master が画面で確かめている。後で開いたときに PTY の寸法が面と合っていることは、画面の見た目としてしか確かめておらず、寸法の値は取っていない。畳んだ面を一度だけ開いて測り同じ処理の中で畳み直す形が、開いてから測ったときと同じ桁数と行数を出すことは、ブラウザで xterm を面の中に置いて確かめている(1280×800 の窓で、どちらも 98×24。AI、2026-09-28)。- ゴーストボタン(#221、「二つの地色」)の実機確認。実装済みで CI の型検査は通っており、ブラウザで静的に描いた画面(ライトとダーク)で枠の無いボタン・ホバーの塗り・選択の塗り・塗った送信は見えている(AI、2026-10-02)。WebView2 での見え方、線画がアイコンとして読めること、ツールチップが出ることは未確認である。
- 添付(#223、「添付は保存したファイルのパスで届く」)の実機確認。実装済みで、CI の型検査・Rust のコンパイル・
crates/topic-indexのテスト(名前の整え方、番号付け、トピックの索引に拾われないこと、削除で一緒に消えること)は通っており、ブラウザで静的に描いた画面で札が本文の上に並び長い名前が省略されることは見えている(AI、2026-10-02)。実機ではまだ一度も走らせていない。未確認は次のとおりである。画像を添付した発言をセッションが開けること(#223 の完了条件)。 三つの入口がそれぞれ札を作ること——ドロップの位置が入力欄の上と判定されること(Tauri が知らせる位置を物理ピクセル、webview の左上起点として読んでいる)、画面のファイルの窓が WebView2 で開くこと、スクリーンショットのCtrl+Vが札になり文字のコピーは今までどおり文字として貼られること。保存先の作業ディレクトリ外のファイルを、--dangerously-skip-permissionsを持たない席の CLI が確認で止まらずに読めるか(止まるなら保存先をセッション側へ移す)。cli種別など Claude Code 以外の CLI が同じ形で読めるか。 - 会話面・トピックの一覧・参加者パネルの見た目(#225、「会話面の見た目(#225)」)の実機確認。実装済みで CI の型検査は通っており、ブラウザで静的に描いた画面(ライトとダーク)で丸印・日の区切り線・自分の発言の一塊・上の帯・+ と隠れる
✕・短い日付・状態の札・使用率の棒・「詳細」の折りたたみは見えている(AI、2026-10-02)。WebView2 での見え方、ライブの発言と読み戻しが同じ区切りと塊で描かれること、日をまたいで開いたままのときの区切り線の言い直し、上の帯の人数が名簿に追随することは未確認である。 - アカウントの画像(#236、「アカウントは画像を持てる」)の実機確認。実装済みで CI の型検査と Rust のコンパイルは通っている。「選ぶ」で画像を設定できること、設定した画像が会話面に出ること、起動し直した後に編集の窓へ読み戻されることは、上記 2026-10-03 に確かめている。切り抜きと縮小が見本に出ること、決定で
avatars/にファイルができること、発言の行と通知の畳みの丸印のそれぞれに出ること(会話面に出ていたことは見ているが、二つを分けては確かめていない)、ファイルを消したときに頭文字に戻ること、外す・削除でファイルが消えることは未確認である。 - 参加者パネルの丸印(#253、「参加者パネル」)の実機確認。実装済みで CI の型検査は通っている。行の点が丸印に代わり、画像のあるアカウント(admin・Claude Code の二人・mcp)が画像で出ることは、上記 2026-10-03 に AI が確かめている。画像の無いアカウントとゲストが頭文字で出ること、
mcpの行が通知の畳みの見出しと同じ丸印になること、オフラインの行で丸印が名前と同じだけ薄くなること、行の高さと操作の列が崩れないこと、会話面の文字サイズに連れて大きさが変わり UI の倍率では変わらないこと(#260)、どの設定でも会話面の丸印より一段小さく見えること(#260)は未確認である。 - 設定・添付・送信の線画(#234、「二つの地色」)の実機確認。実装済みで CI の型検査は通っている。WebView2 で歯車・斜めのクリップ・紙飛行機が試作と同じ形に読めること、塗った送信の上で紙飛行機が読めることは未確認である。
- 入力欄の囲み(#222、「入力欄(#222)」)の実機確認。実装済みで CI の型検査は通っており、ブラウザで静的に描いた画面(ライトとダーク)で一つの箱・焦点での枠の色・操作列・幅が足りないときに末尾から落ちるキーの案内は見えている(AI、2026-10-02)。宛先のボタンが
@を打って候補を開くことは、ブラウザでは Tauri が無く起動処理が途中で止まりボタンの登録まで届かないため、同じ処理を画面上で再現して確かめただけである。WebView2 での見え方と、実機でボタンから候補が開き名前を選べることは未確認である。 - アプリのアイコン(#246、「アプリのアイコン」)の実機確認。実装済みで、出したファイルが透明地のまま各サイズそろっていることは確かめてある。窓の左上とタスクバーに吹き出しが出ることは、上記 2026-10-03 に AI が確かめている。インストーラーに吹き出しが出ること、小さいサイズ(16・24・32)で三つの点が読めること、タスクバーの地の色の上で透明地が浮かないことは未確認である。
- タイトルバーを窓の最上段にすること(#252、「タイトルバーは窓の最上段である」「窓の枠は画面が描き、題は残す」)の実機確認。実装済みで、CI の型検査と Rust のコンパイルは通っており、ブラウザで静的に描いた画面(ライトとダーク)で帯の高さが変わらないこと(43px)、地がサイドバーと同じ色であること、アイコンと三つのボタンの並び、閉じるがカーソルの下で赤くなることは見えている(AI、2026-10-03)。実機では、上記 2026-10-03 に次を確かめている——Master の操作で、右下の角を引いて大きさが変わること、帯の空きのダブルクリックで最大化と元に戻すが切り替わること、Win+← / Win+→ で左右に並べられること。AI の操作で、ライトで帯が一段であり左にアイコン・右端に三つのボタンが並び地がサイドバーと同じ色であること、タスクバーのサムネイルに
Pullceptが出ること(#248 から持ち越していた分)。帯を掴んだ移動・三つのボタン・Win+↑ / Win+↓・画面の端へ引くスナップは、Tauri と tao のソースで確かめただけである。ダークでの見え方、右下の角以外の辺と角で大きさを変えられること、Windows 11 で角が丸く影が出ること、上と縁の 1 ピクセルの色がダークで浮かないこと、最大化したときに帯が画面の上端からはみ出さずタスクバーを覆わないこと、最大化の名前と絵が切り替わること、走っているセッションがあるときに閉じるで終了の確認が出ること、Alt+Tab にPullceptが出ることは未確認である。 - アプリ自身の発言の丸印(#340、「会話面の見た目」)の実機確認。実装済みで、
crates/room-floorとcrates/topic-indexのテストが、拒否とログの読み戻しで印が残ること、trueのときだけ書くことを確かめている。画面の型検査とビルドは通っている。Codex の席が利用上限で止まったときの知らせの丸にアイコンが出ること、トピックを選び直して読み戻した行にも出ること、ライトとダークで吹き出しが丸からはみ出さず欠けもしないこと、Pullceptと名乗る参加者の行が頭文字のままであることは未確認である。