Skip to content

Release v1.1.3#620

Merged
hitalin merged 13 commits into
mainfrom
develop
Jun 11, 2026
Merged

Release v1.1.3#620
hitalin merged 13 commits into
mainfrom
develop

Conversation

@hitalin

@hitalin hitalin commented Jun 11, 2026

Copy link
Copy Markdown
Owner

2026-06 構造監査に基づく内部品質改善のリリース。ユーザー向け機能追加はなし(修正・パフォーマンス・リファクタリング)。

Changes

  • fix: ACTIVE_STREAMS の lock poisoning を回復可能に
  • perf: MkReactionPicker を defineAsyncComponent で遅延ロード化
  • feat: untilId カーソルページング共通化の usePaginatedList を追加
  • refactor: 死にリスナー pip:open-note を削除
  • refactor: debounce 永続化タイマーを createDebouncedPersist に共通化
  • refactor: ミュート 4 ストアを useMutesStore に統合
  • refactor: 残りのカーソルページング 4 箇所を usePaginatedList に移行
  • refactor: UserProfileContent の 5 タブを usePaginatedList に移行
  • refactor: Tauri イベントを型付きレジストリに統一
  • refactor: ハードコード z-index をレイヤートークンに統一
  • refactor: tasks↔taskRunner の循環依存を解消
  • chore: bump version to 1.1.3
  • chore: regenerate openapi.json for 1.1.3

🤖 Generated with Claude Code

hitalin and others added 13 commits June 11, 2026 15:17
コマンドパレット登録を leaf モジュール (commands/taskCommands.ts) に
切り出し、tasks ストアから taskRunner / commandStore への依存を除去。
未使用だった TASK_COMMAND_PREFIX の再エクスポートも削除。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CommandPalette: 2549/2550 → 未使用だった --nd-z-palette を本来の
  用途で使用 (パレットは最上位 UI レイヤーという設計意図に整合)
- MkDraftsPicker: portal される menu backdrop 2000 → --nd-z-popup
  (他の portal メニューと同層に)
- DevFrameOverlay: 999999 → 新トークン --nd-z-dev (ladder に明文化)

コンポーネント内ローカル stacking (z-index: 0〜100) は対象外。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
静的 import していた 3 箇所 (MkPostForm / DeckChatColumn /
NoteReactionPickerPopup) を非同期化し、1945 行の emojilist.ts を
メインバンドルから分離。ピッカー初回表示時のみロードされる。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
src/utils/tauriEvents.ts にイベント名 → payload 型のレジストリ
(TauriEventPayloads) と listenTauri / emitTauri ラッパーを導入し、
nd:* / deck:* / pip:* / stream-* の文字列リテラル散在を解消。
emit と listen の payload 型対応をコンパイル時に保証する。

- StreamEventEnvelope の重複定義 (streaming.ts / useUnreadCounter.ts)
  を統合
- StreamChatReactionPayload を DeckChatColumn からレジストリへ移動
- deckProfile の emitSync ヘルパーは emitTauri 直呼びに置換
- 動的イベント名 nd:query-response-<id> のみ対象外 (apiBridge)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
poisoned Mutex を if let Ok で黙殺していたため、ストリームタスクが
panic すると以後 register/cancel が silent no-op になり、abort 不能な
zombie task が残る構造だった。into_inner() で回復する active_streams()
ヘルパーに集約。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
UserProfileContent のタブ群や Deck*Column に 15 箇所以上重複している
「isLoading/hasMore ガード → at(-1) → fetch → 追記」パターンを吸収する
composable。TDD (13 テスト) で実装。

- pageSize 比較 / 空打ち切り (reactions 型) の両対応
- initialHasMore でページング非対応 API (clips/list) を表現可能
- 初回 load 失敗時は retry 可能

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
reactions / pages / play / gallery / clips タブの重複していた
loadXTab + loadMoreX 実装 (約 150 行) を usePaginatedList に置換。
destructuring で旧変数名を維持しテンプレートは無変更。

- reactions: 削除ノートのフィルタで件数比較不能のため pageSize なし
- clips: 自プロフィール (clips/list ページング非対応) を
  initialHasMore で表現
- lists タブはページングなしのため対象外

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- usePaginatedList に maxItems (上限打ち切り) と onError (toast /
  ウィンドウエラー連携) オプションを追加 (テスト 13→17)
- UserProfileContent: notes タブ (タブ切替リロード + highlight 非ページ
  ング + MAX_PROFILE_NOTES) と files タブを移行
- ClipDetailContent / FollowListContent を移行 (follow リストの
  relations 取得副作用は fetch ラッパー内に保持)

調査の結果、残る loadMore 実装 3 箇所は移行不適:
- DeckFederationColumn (offset ベース)
- DeckSearchColumn (複数ソース merge + アカウント別カーソル)
- DeckNotificationColumn (cross-account merge + dedup)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
mutes / renoteMutes / instanceMutes / wordMutes はほぼ同型の
shallowRef + triggerRef 実装が 4 ファイルに重複していた。per-account
Set の共通ヘルパー (createAccountSet) を持つ単一ストアに統合し、
useNoteVisibility が 4 ストアを並列参照していた構造を解消。

- API は種別を明示: isUserMuted / isRenoteMuted / isInstanceMuted /
  matchesHardWord / matchesSoftWord 等
- 旧 3 ストアと tests/stores/wordMutes.test.ts は削除 (β方針)、
  テストは tests/stores/mutes.test.ts に統合 (+renote/instance 追加)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8 ストア (tasks / performance / keybinds / emojis / recentEmojis /
settings / postForm / deck-navbar / deckProfile) に重複していた
「persistTimer + schedulePersist」パターンを utils/debouncedPersist に
吸収 (テスト 5 件付き)。

- settings の flush (ペンディング時のみ書込) はユーティリティ側で提供
- postForm / deckProfile の flushPersist (無条件即時書込) は
  cancel + persistNow の組で維持
- 同期 persist は timer 内で同期実行 (fake timer テスト互換)
- aiSessions はセッション ID 別のキー付き debounce のため対象外

調査の結果、監査指摘のうち以下は誤検出と判断 (変更なし):
- theme の localStorage compiled CSS → FOUC 防止キャッシュと明文化済み
- plugins/widgets の localStorage 併用 → ファイルが SoT、localStorage は
  高速起動キャッシュとして意図された設計

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PiP 初期実装 (314bd8b) の「ノートクリックでメインウィンドウに詳細表示」
経路の残骸。30adbfd8 の全面改修で emit 側が削除され、PiP 内の派生
ウィンドウは新規 PiP OS ウィンドウで開く設計 (#374) に置換済みのため、
リスナー側 (App.vue onOpenNote / listenPipEvents / イベントレジストリ)
も削除する。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@hitalin hitalin merged commit f3ba8fa into main Jun 11, 2026
3 checks passed
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