Skip to content

next.misskey.ioで起こった色々なバグを修正 - #1463

Closed
mattyatea wants to merge 43 commits into
next-mainfrom
fix/MSKY-204-child-tasks
Closed

next.misskey.ioで起こった色々なバグを修正#1463
mattyatea wants to merge 43 commits into
next-mainfrom
fix/MSKY-204-child-tasks

Conversation

@mattyatea

@mattyatea mattyatea commented Apr 28, 2026

Copy link
Copy Markdown
Member

What

  • scheduledNoteLimit が削除されました
    • scheduleNoteLimit とまんまかぶっているので...

Why

Additional info (optional)

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

Summary by CodeRabbit

リリースノート

  • Bug Fixes

    • ワード検索ミュート機能が空白を含むキーワードを正しく処理するよう改善
    • グローバルタイムラインの返信処理を改善
  • UI改善

    • モーダルウィンドウのクローズボタン表示ロジックを改善
    • ノートのミュート解除時のイベント伝播制御を強化
    • フォーカストラップのインタラクション処理を改善
  • Other Changes

    • 複数言語の国際化対応を更新

github-actions Bot and others added 24 commits February 1, 2026 19:37
2025.4.1-io.12a
2025.4.1-io.12b
2025.4.1-io.13
normalizeDimensionの境界条件を修正(<=0から<0に)して、
dimension=0を許容するようにしました。
初回読み込みのAPI結果とストリーミング更新で返信の除外条件がずれていたため、リロード後だけ見える返信がありました。stream 側の追加フィルタを外して表示条件を揃えます。
アンテナ編集ダイアログの更新結果を列ヘッダーへ反映していなかったため、古い名前が残っていました。updated イベントで timelineNameCache を更新します。
ユーザーページ概要タブの notes リクエストで withChannelNotes が渡っておらず、チャンネル投稿だけ除外されていました。all タブでは channel notes も含めて取得します。
投稿フォームのアカウント切替アイコンで生の img を使っていたため、デコレーションが表示されていませんでした。MkAvatar を使って通常表示と同じ描画経路に揃えます。
予約投稿の権限がないユーザーにも導線が見えていて、実行時にだけ失敗していました。投稿フォームの表示・復元・実行を canScheduleNote に合わせて制御します。
アップロード中の終了確認をキャンセルした経路で投稿フォームの readonly 状態が戻らず、絵文字入力などが効かなくなっていました。キャンセル時に textAreaReadOnly を解除します。
共通ヘッダだけに閉じる操作を依存していて見つけづらかったため、コンテンツ内にも明示的な close ボタンを追加して閉じやすくします。
空文字や空白だけのキーワードが混ざるとワードミュート判定が崩れていました。キーワード正規化を加え、ミュート解除クリックの伝播も止めて意図しない開閉を防ぎます。
投稿失敗時の再オープン処理が空の composer を開き直していたため、channel 投稿が失われて通常投稿に戻っていました。元の props を引き継いで再オープンするようにします。
ミュート語のプレースホルダをクリックしたときに soft mute だけ解除され、hard mute 側が残って false 表示になることがありました。展開時に両方のミュート状態を解除して本体ノートへ切り替えます。
@semanticdiff-com

semanticdiff-com Bot commented Apr 28, 2026

Copy link
Copy Markdown

Review changes with  SemanticDiff

Changed Files
File Status
  packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue  100% smaller
  packages/frontend/src/utility/check-word-mute.ts  75% smaller
  packages/backend/test/e2e/streaming.ts  60% smaller
  packages/backend/src/misc/check-word-mute.ts  26% smaller
  packages/frontend/src/components/MkPostForm.vue  18% smaller
  packages/frontend/src/ui/deck/antenna-column.vue  11% smaller
  packages/frontend/src/utility/focus-trap.ts  10% smaller
  packages/frontend/src/components/MkNote.vue  9% smaller
  packages/frontend/src/ui/deck/role-timeline-column.vue  5% smaller
  packages/frontend/src/ui/deck/channel-column.vue  5% smaller
  packages/misskey-js/src/autogen/types.ts  1% smaller
  locales/ca-ES.yml  0% smaller
  locales/en-US.yml  0% smaller
  locales/es-ES.yml  0% smaller
  locales/index.d.ts  0% smaller
  locales/it-IT.yml  0% smaller
  locales/ja-JP.yml  0% smaller
  locales/ko-KR.yml  0% smaller
  locales/pt-PT.yml  0% smaller
  locales/th-TH.yml  0% smaller
  locales/zh-CN.yml  0% smaller
  locales/zh-TW.yml  0% smaller
  package.json  0% smaller
  packages/backend/src/core/RoleService.ts  0% smaller
  packages/backend/src/models/json-schema/role.ts  0% smaller
  packages/backend/src/server/api/stream/channels/global-timeline.ts  0% smaller
  packages/backend/test-federation/compose.a.yml  0% smaller
  packages/backend/test-federation/compose.b.yml  0% smaller
  packages/backend/test/unit/misc/check-word-mute.ts  0% smaller
  packages/frontend/.storybook/fakes.ts  0% smaller
  packages/frontend/src/components/MkModalWindow.vue  0% smaller
  packages/frontend/src/components/MkNoteDetailed.vue  0% smaller
  packages/frontend/src/components/MkNoteScheduledDialog.vue  0% smaller
  packages/frontend/src/components/MkNoteSub.vue  0% smaller
  packages/frontend/src/components/MkPostFormDialog.vue  0% smaller
  packages/frontend/src/components/MkStreamingNotesTimeline.vue  0% smaller
  packages/frontend/src/pages/admin/roles.editor.vue  0% smaller
  packages/frontend/src/pages/admin/roles.vue  0% smaller
  packages/frontend/src/pages/user/index.timeline.vue  0% smaller
  packages/frontend/test/focus-trap.test.ts  0% smaller
  packages/misskey-js/etc/misskey-js.api.md Unsupported file format
  packages/misskey-js/package.json  0% smaller
  packages/misskey-js/src/consts.ts  0% smaller

@snyk-io

snyk-io Bot commented Apr 28, 2026

Copy link
Copy Markdown

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
packages/frontend/test/focus-trap.test.ts (1)

31-36: afterEach のDOMクリアは replaceChildren() に寄せるのがおすすめです。

innerHTML 書き換えの静的解析ノイズを避けつつ、意図も明確になります。

差分案
 afterEach(() => {
 	for (const release of releases.splice(0).reverse()) {
 		release();
 	}
-	document.body.innerHTML = '';
+	document.body.replaceChildren();
 });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/frontend/test/focus-trap.test.ts` around lines 31 - 36, Replace the
DOM clearing in the afterEach block to use document.body.replaceChildren()
instead of setting document.body.innerHTML = ''; update the afterEach (the
teardown that iterates releases.splice(0).reverse() and calls release()) so that
after running the release callbacks it calls document.body.replaceChildren() to
clear children; this avoids innerHTML static-analysis noise while preserving the
same teardown semantics in focus-trap.test.ts.
packages/frontend/src/utility/focus-trap.ts (1)

72-83: 同一条件の canInteractWithSibling 呼び出しは1回にまとめられます。

分岐前に結果をキャッシュすると、読みやすさと微小な実行コストの両方を改善できます。

差分案
 			if (!siblingEl) return;
 			if (ignoreElements.includes(siblingEl.tagName.toLowerCase())) return;
+			const canInteract =
+				highestZIndexElement != null &&
+				canInteractWithSibling(siblingEl, highestZIndexElement.el, highestZIndexElementAllowsInteraction);
 			if (
 				(
 					siblingEl === el ||
 					highestZIndexElement == null ||
-					canInteractWithSibling(siblingEl, highestZIndexElement.el, highestZIndexElementAllowsInteraction)
+					canInteract
 				)
 			) {
 				siblingEl.inert = false;
 			} else if (
 				highestZIndexElement != null &&
-				!canInteractWithSibling(siblingEl, highestZIndexElement.el, highestZIndexElementAllowsInteraction)
+				!canInteract
 			) {
 				siblingEl.inert = true;
 			} else {
 				siblingEl.inert = false;
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/frontend/src/utility/focus-trap.ts` around lines 72 - 83, The two
identical calls to canInteractWithSibling should be computed once and reused:
before the if, compute a boolean (e.g., siblingCanInteract) using siblingEl,
highestZIndexElement.el and highestZIndexElementAllowsInteraction when
highestZIndexElement is not null (default to true/appropriate fallback when
null), then replace both canInteractWithSibling(...) calls in the conditional
branches with that cached siblingCanInteract; this keeps the existing logic that
sets siblingEl.inert = false when siblingEl === el or siblingCanInteract, and
the else branch when siblingCanInteract is false.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/frontend/src/utility/focus-trap.ts`:
- Around line 72-83: The two identical calls to canInteractWithSibling should be
computed once and reused: before the if, compute a boolean (e.g.,
siblingCanInteract) using siblingEl, highestZIndexElement.el and
highestZIndexElementAllowsInteraction when highestZIndexElement is not null
(default to true/appropriate fallback when null), then replace both
canInteractWithSibling(...) calls in the conditional branches with that cached
siblingCanInteract; this keeps the existing logic that sets siblingEl.inert =
false when siblingEl === el or siblingCanInteract, and the else branch when
siblingCanInteract is false.

In `@packages/frontend/test/focus-trap.test.ts`:
- Around line 31-36: Replace the DOM clearing in the afterEach block to use
document.body.replaceChildren() instead of setting document.body.innerHTML = '';
update the afterEach (the teardown that iterates releases.splice(0).reverse()
and calls release()) so that after running the release callbacks it calls
document.body.replaceChildren() to clear children; this avoids innerHTML
static-analysis noise while preserving the same teardown semantics in
focus-trap.test.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: af20de16-7400-4f77-a2d2-84953dd8ecba

📥 Commits

Reviewing files that changed from the base of the PR and between d2e2105 and 75bfffe.

📒 Files selected for processing (8)
  • locales/index.d.ts
  • packages/backend/src/core/FanoutTimelineEndpointService.ts
  • packages/backend/src/misc/check-word-mute.ts
  • packages/backend/test-federation/compose.a.yml
  • packages/backend/test-federation/compose.b.yml
  • packages/frontend/src/components/MkNoteDetailed.vue
  • packages/frontend/src/utility/focus-trap.ts
  • packages/frontend/test/focus-trap.test.ts
💤 Files with no reviewable changes (1)
  • locales/index.d.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/backend/src/misc/check-word-mute.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/frontend/src/utility/focus-trap.ts`:
- Around line 73-78: The conditional that allows a siblingEl === el to bypass
the highestZIndexElement check is enabling released subtrees to become
interactive again; update the logic in the release flow (the block referencing
siblingEl, el, highestZIndexElement, and canInteract) to remove the special-case
check for siblingEl === el so the highestZIndexElement/null and canInteract
checks take precedence (i.e., only allow making elements interactive when
highestZIndexElement is null or canInteract is true), ensuring stacked
focus-traps are released in correct order and inert state is preserved.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4a2694ac-cd15-4291-a7e2-0e1aed693e18

📥 Commits

Reviewing files that changed from the base of the PR and between 75bfffe and c3b4403.

📒 Files selected for processing (8)
  • packages/backend/src/misc/check-word-mute.ts
  • packages/backend/test/unit/misc/check-word-mute.ts
  • packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
  • packages/frontend/src/components/MkModalWindow.vue
  • packages/frontend/src/components/MkPostForm.vue
  • packages/frontend/src/components/MkStreamingNotesTimeline.vue
  • packages/frontend/src/utility/focus-trap.ts
  • packages/frontend/test/focus-trap.test.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/frontend/src/components/MkModalWindow.vue
  • packages/frontend/src/components/MkStreamingNotesTimeline.vue
  • packages/backend/src/misc/check-word-mute.ts
  • packages/frontend/test/focus-trap.test.ts

Comment thread packages/frontend/src/utility/focus-trap.ts Outdated
Copilot AI review requested due to automatic review settings May 3, 2026 08:09

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

next.misskey.io で発生していた複数の不具合を、フロントエンド/バックエンド/SDK/翻訳/テストまで跨いで修正・整備するPRです。

Changes:

  • ワードミュートのキーワード正規化(空文字・空白の扱い)をフロント/バックで改善し、テストを追加
  • Streaming(特に globalTimeline)の返信扱いと、Deck/Timelineの dimension 連携を改善
  • モーダル/ノート表示まわり(focus trap、ミュート解除クリック、クローズボタン等)のUI挙動を改善し、関連テストを追加

Reviewed changes

Copilot reviewed 39 out of 41 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/misskey-js/src/consts.ts rolePolicies から scheduledNoteLimit を削除
packages/misskey-js/src/autogen/types.ts API型更新(replyUserId追加、scheduledNoteLimit削除等)
packages/misskey-js/etc/misskey-js.api.md 公開API定義の rolePolicies 更新
packages/frontend/test/focus-trap.test.ts focusTrap の回帰テストを追加
packages/frontend/src/utility/focus-trap.ts focus trap の相互作用/解除ロジック改善
packages/frontend/src/utility/check-word-mute.ts ワードミュートのtrim・空要素除外
packages/frontend/src/ui/deck/role-timeline-column.vue role TL に dimension を渡す
packages/frontend/src/ui/deck/channel-column.vue channel TL に dimension を渡す
packages/frontend/src/ui/deck/antenna-column.vue アンテナ編集をダイアログ化してキャッシュ更新
packages/frontend/src/pages/user/index.timeline.vue users/notes に withChannelNotes を追加
packages/frontend/src/pages/admin/roles.vue scheduledNoteLimit の設定UI削除
packages/frontend/src/pages/admin/roles.editor.vue scheduledNoteLimit の設定UI削除(詳細)
packages/frontend/src/components/MkStreamingNotesTimeline.vue streaming接続/ページングに dimension を追加
packages/frontend/src/components/MkPostFormDialog.vue postError時に props を維持して post を呼ぶ
packages/frontend/src/components/MkPostForm.vue スケジュール投稿の可否判定・UI制御の見直し等
packages/frontend/src/components/MkNoteSub.vue ミュート解除クリックの伝播制御
packages/frontend/src/components/MkNoteScheduledDialog.vue closeボタン表示を有効化
packages/frontend/src/components/MkNoteDetailed.vue ミュート解除クリックの伝播制御
packages/frontend/src/components/MkNote.vue ミュート表示ロジック整理(表示条件/文言分岐)
packages/frontend/src/components/MkModalWindow.vue closeボタン表示条件を修正
packages/frontend/src/components/MkCustomEmojiDetailedDialog.vue モーダル呼び出しの微調整
packages/frontend/.storybook/fakes.ts scheduledNoteLimit をfakeから削除
packages/backend/test/unit/misc/check-word-mute.ts 空/空白キーワードのテスト追加
packages/backend/test/e2e/streaming.ts globalTimelineの返信挙動テストを修正
packages/backend/test-federation/compose.b.yml federationテストのDB volume mount変更
packages/backend/test-federation/compose.a.yml federationテストのDB volume mount変更
packages/backend/src/server/api/stream/channels/global-timeline.ts globalTimelineの返信除外ロジック削除
packages/backend/src/models/json-schema/role.ts scheduledNoteLimit をschemaから削除
packages/backend/src/misc/check-word-mute.ts 正規化・ACキャッシュ改善、判定関数抽出
packages/backend/src/core/RoleService.ts scheduledNoteLimit をポリシーから削除
locales/zh-TW.yml scheduledNoteLimit 文言削除
locales/zh-CN.yml scheduledNoteLimit 文言削除
locales/th-TH.yml scheduledNoteLimit 文言削除
locales/pt-PT.yml scheduledNoteLimit 文言削除
locales/ko-KR.yml scheduledNoteLimit 文言削除
locales/ja-JP.yml scheduledNoteLimit 文言削除
locales/it-IT.yml scheduledNoteLimit 文言削除
locales/index.d.ts scheduledNoteLimit 型定義削除
locales/es-ES.yml scheduledNoteLimit 文言削除
locales/en-US.yml scheduledNoteLimit 文言削除
locales/ca-ES.yml scheduledNoteLimit 文言削除

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/backend/test-federation/compose.a.yml
Comment thread packages/backend/test-federation/compose.b.yml
Comment thread packages/frontend/src/utility/focus-trap.ts Outdated
Comment thread packages/frontend/src/components/MkNote.vue
@mattyatea
mattyatea changed the base branch from next to next-main May 9, 2026 11:24
@mattyatea
mattyatea force-pushed the fix/MSKY-204-child-tasks branch from f1476e6 to 97583d2 Compare May 9, 2026 22:31
@sonarqubecloud

sonarqubecloud Bot commented May 9, 2026

Copy link
Copy Markdown

@u1-liquid

Copy link
Copy Markdown
Member

あまりにもおかしい状態になってるのでcloseします

@u1-liquid u1-liquid closed this May 23, 2026
@u1-liquid
u1-liquid deleted the fix/MSKY-204-child-tasks branch May 23, 2026 07:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants