ステータス(2026-06-27): core と host bridge はマージ済み(raw stream-io WIT #84 / ws:// bridge + realtime serve loop #106 / stdio bridge #114)。live モードは動作する。残りは replay モード と per-satellite tick の 2 点(詳細は この進捗コメント)。以下は当初の設計記録。
背景
実機通信は「上位レイヤ = パケット / 下位レイヤ = バイトストリーム」のことが多く、ArkEdge では現状 arkedge/kble(virtual harness, plug をバイトストリームで配線)で各コンポーネント・ツールを繋いでいる。orts をその harness に組み込めるよう、FSW(plugin) に バイトストリーム接続 を追加する。
RF/PHY(変調・BER・干渉・波形)は対象外。バイトストリーム層まで。msg-io(packet ベースの運用 C&T 模擬, orts-native)とは別物の兄弟として共存させる。orts は中身を解釈しない dumb byte conduit。framing (eb90) / C2A 変換は kble 側に委ねる。
kble 統合面(調査済み)
- plug = 双方向バイトストリーム:
PlugStream = Stream<Item=Result<Vec<u8>>> / PlugSink = Sink<Vec<u8>>(データ単位 = Vec<u8> チャンク)。
- 外部プロセスの接続手段:
ws://(binary WebSocket) / exec:(stdin/stdout のバイト) / serial(kble-serialport) / tcp(kble-tcp)。
- framing/変換は pipeline 要素:
kble-eb90(0xEB90 同期), kble-c2a(C2A FSW)。
設計方針
- WIT
stream-io(guest 側): FSW が read(max) -> list<u8> / write(list<u8>)。msg-io と同様に tick 境界で凍結 read バッファ + flush write(決定論を保つ)。複数の名前付きストリーム(comlink / debug UART 等)をサポート。
- host bridge(2 トランスポート):
ws://: 衛星 × ストリームごとに binary WebSocket を公開 → kble の ws:// plug。多チャネル向き(既存 serve WS と相性可)。
- stdio (
exec:): kble が orts を起動し stdin/stdout をバイト conduit にする。単一チャネル(CSV 出力と排他の専用モードが要る)→ 単一リンク/単一衛星向け。
- クロック: 外部 kble とは 実時間で繋ぐ SIL モード(
serve 系)。決定論 oracle/replay とは別経路。replay 用の byte-stream 記録は将来。
レイヤ整理(設計議論の結論)
PHY(RF/場) ⊂ byte/bit stream(本 issue, kble) ⊂ message(msg-io, packet, 運用)。message は最上段で「framing 済み」を前提。本 issue はその下の stream 層を足す。RF は更に下で別シミュレータ/co-sim(やるとしても)。
スコープ外
- RF/PHY(変調・BER・干渉)
- orts 内での framing 実装(kble/FSW 側)
関連: msg-io = #58
背景
実機通信は「上位レイヤ = パケット / 下位レイヤ = バイトストリーム」のことが多く、ArkEdge では現状
arkedge/kble(virtual harness, plug をバイトストリームで配線)で各コンポーネント・ツールを繋いでいる。orts をその harness に組み込めるよう、FSW(plugin) に バイトストリーム接続 を追加する。RF/PHY(変調・BER・干渉・波形)は対象外。バイトストリーム層まで。msg-io(packet ベースの運用 C&T 模擬, orts-native)とは別物の兄弟として共存させる。orts は中身を解釈しない dumb byte conduit。framing (eb90) / C2A 変換は kble 側に委ねる。
kble 統合面(調査済み)
PlugStream = Stream<Item=Result<Vec<u8>>>/PlugSink = Sink<Vec<u8>>(データ単位 =Vec<u8>チャンク)。ws://(binary WebSocket) /exec:(stdin/stdout のバイト) / serial(kble-serialport) / tcp(kble-tcp)。kble-eb90(0xEB90 同期),kble-c2a(C2A FSW)。設計方針
stream-io(guest 側): FSW がread(max) -> list<u8>/write(list<u8>)。msg-io と同様に tick 境界で凍結 read バッファ + flush write(決定論を保つ)。複数の名前付きストリーム(comlink / debug UART 等)をサポート。ws://: 衛星 × ストリームごとに binary WebSocket を公開 → kble のws://plug。多チャネル向き(既存 serve WS と相性可)。exec:): kble が orts を起動し stdin/stdout をバイト conduit にする。単一チャネル(CSV 出力と排他の専用モードが要る)→ 単一リンク/単一衛星向け。serve系)。決定論 oracle/replay とは別経路。replay 用の byte-stream 記録は将来。レイヤ整理(設計議論の結論)
PHY(RF/場)⊂byte/bit stream(本 issue, kble)⊂message(msg-io, packet, 運用)。message は最上段で「framing 済み」を前提。本 issue はその下の stream 層を足す。RF は更に下で別シミュレータ/co-sim(やるとしても)。スコープ外
関連: msg-io = #58