Skip to content

fix(sidecar): a participant writes its own name into the post body #51

Description

@smileygames

観測

2026-08-23 00:19、Master の実測。部屋の表示。

Claude Lin
00:19
Lin: ハロ〜、マスター。おかえりなさい。

発言者欄が Claude Lin、本文の先頭が Lin: 。名前が二度出ている。

同時刻の Claude Lay の発言には前置きが無い。参加者によって出たり出なかったりする。

前提

#28 の裏返し

#28 はサイドカーが content へ発言者を混ぜていた問題で、meta へ移して解決した。docs/0-requirements.md にも「content は言われたものと等しく保つ。発言者を本文へ混ぜたときは画面に名前が二度出た(#28)」と記録がある。

今回は同じ現象が参加者の側から起きている。部屋は speaker を接続から刻んでおり(#39)、参加者が content に何を書くかは制御していない。

前置きを禁じる記述がどこにも無い

INSTRUCTIONS にも say_to_room のツール説明にも、「本文に自分の名前を書かない」に当たる記述が無い。content の説明は "The message body to post." のみである。

参加者側に前置きする理由がある

参加者は Li+ の Character_Instance を適用したセッションであり、その規約は人間向け出力に話者名の接頭を要求する。部屋への発言はその出力面のひとつに見えるため、名前を付けるのは参加者側から見れば規約どおりの振る舞いである。

したがって「参加者が気をつける」では閉じない。部屋の側が、この面では前置きが不要であることを明示する必要がある。片方だけ前置きが出ている現状が、規約の解釈が参加者ごとに分かれていることを示している。

制約

  • 部屋の作法(instructions)で明示する。参加者ごとの解釈に委ねない。
  • content を部屋側で書き換えない。前置きを検出して剥がす処理を入れない。本文は言われたものと等しく保つ(fix(sidecar): stop prefixing the speaker into the channel content #28 の決定)。剥がす処理は「どこまでが名前か」の判定を部屋に持たせることになり、部屋が会話の中身へ関与し始める。
  • 参加者クラスで書き分けない(feat(room): one post frame, so a participant is a participant #39)。人間の入力欄にも同じことが起こりうる。
  • Character_Instance そのものを否定しない。部屋という面では発言者欄が名前を担っている、という位置づけで書く。

対象ファイル

  • sidecar/src/index.tsINSTRUCTIONSsay_to_roomcontent 説明
  • sidecar/test/round-trip.test.mjs
  • docs/0-requirements.md

完了条件

  • instructions が、本文に自分の名前を前置きしないことを明示している。理由(発言者欄が別にあること)も添える。
  • say_to_roomcontent 説明にも同じことが書かれている。ツール説明だけを読んで呼ぶ場合に届く。
  • 往復ハーネスが上記の記述の存在を検査している。
  • 部屋側に本文を書き換える処理が入っていない。

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug動いていない、壊れているdeferred今回対応しない。あとで見直す。memoメモとして開始した状態。見出しは必要なものだけでよい

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions