Skip to content

refactor(streaming)!: FrontendEmitter を typed StreamEvent に置き換える - #38

Merged
hitalin merged 1 commit into
mainfrom
refactor/typed-frontend-emitter
Jul 19, 2026
Merged

refactor(streaming)!: FrontendEmitter を typed StreamEvent に置き換える#38
hitalin merged 1 commit into
mainfrom
refactor/typed-frontend-emitter

Conversation

@hitalin

@hitalin hitalin commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

なぜ

notedeck-dev/notedeck#781 Phase 3(本丸)。イベント境界の &str + serde_json::Value を廃止し、「生 JSON は WS 受信境界で死ぬ」という設計確定(issue #781 の設計コメント参照)を実現する。

変更内容

  • StreamEvent enum: 全 11 イベントの typed union。#[serde(tag = "kind", content = "payload")] で Tauri 統合チャネルの歴史的ワイヤ形 { kind, payload } と一致(フロントの raw tap は無修正で互換)
  • FrontendEmitter::emit(StreamEvent) — trait 変更(BREAKING、notedeck 側は rev bump と同時に更新)
  • NoopEmitter / EventBusEmitter / テスト用 emitter を typed 化。SSE の event type 命名(note / chat-deleted / main-{eventType} 等)は sse_event_type() に集約し歴史的命名を維持
  • emit_or_log! / emit_event! マクロ廃止 → emit_both() fn + 直接 emit
  • variant は Box 化(serde/specta とも透過)

テスト

既存 187 件全通過(再接続ループの契約テストは typed match に書き換え)、clippy (--features specta --all-targets) クリーン。

🤖 Generated with Claude Code

notedeck#781 Phase 3。emit(&str, Value) を emit(StreamEvent) に変更し、
生 JSON の寿命を WS 受信境界で終わらせる。

- StreamEvent: 全 11 イベントの typed union。adjacent tagging (kind/payload)
  で Tauri 統合チャネルの歴史的ワイヤ形 { kind, payload } と一致
- kind() / sse_event_type() / payload_value() で命名の正本を enum に集約
  (SSE の歴史的命名 note / chat-deleted / main-{eventType} 等を維持)
- emit_or_log! / emit_event! マクロを廃止し、emit_both() fn + 直接 emit に置換
- variant は Box 化 (serde/specta 透過、clippy::large_enum_variant)

BREAKING CHANGE: FrontendEmitter trait のシグネチャ変更。実装側 (notedeck
TauriEmitter) は同時更新が必要。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hitalin hitalin self-assigned this Jul 19, 2026
@hitalin
hitalin merged commit a59a406 into main Jul 19, 2026
1 check passed
@hitalin
hitalin deleted the refactor/typed-frontend-emitter branch July 19, 2026 22:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant