diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3efa0279b8..68525c3ab5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@
- Enhance: ウィジェットの表示設定をプレビューを見ながら行えるように
- Enhance: ウィジェットの設定項目のラベルの多言語対応
- Enhance: 画面幅が広いときにメディアを横並びで表示できるようにするオプションを追加
+- Enhance: センシティブチャンネルの投稿が多くの場所で畳まれるようになりました
- Enhance: パフォーマンスの向上
- Fix: ドライブクリーナーでファイルを削除しても画面に反映されない問題を修正 #16061
- Fix: 非ログイン時にログインを求めるダイアログが表示された後にダイアログのぼかしが解除されず操作不能になることがある問題を修正
@@ -55,6 +56,7 @@ v2025.12.0で行われた「configの`trustProxy`のデフォルト値を`false`
- Fix: デッキUIでメニュー位置を下にしているとプロファイル削除ボタンが表示されないのを修正
- Fix: 一部のUnicode絵文字のリアクションがボタンにならない問題を修正
+
### Server
- Enhance: Misskey内部でのIPアドレスペースでのレートリミットを無効化できるように
- リバースプロキシやCDNなど別のレイヤで別途レートリミットを設定する場合や、ローカルでのテスト用途等として利用することを想定しています。
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 45d2efdf35..713543ea01 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -840,6 +840,8 @@ emailNotification: "メール通知"
publish: "公開"
inChannelSearch: "チャンネル内検索"
useReactionPickerForContextMenu: "右クリックでリアクションピッカーを開く"
+collapseSensitiveChannel: "センシティブチャンネルの投稿を隠す"
+collapseSensitiveChannelDescription: "そのチャンネル内・通知・ホームタイムラインなど、一部の場所では引き続き表示されます。"
typingUsers: "{users}が入力中"
jumpToSpecifiedDate: "特定の日付にジャンプ"
showingPastTimeline: "過去のタイムラインを表示しています"
@@ -1282,6 +1284,7 @@ backToTitle: "タイトルへ"
hemisphere: "お住まいの地域"
withSensitive: "センシティブなファイルを含むノートを表示"
userSaysSomethingSensitive: "{name}のセンシティブなファイルを含む投稿"
+userSaysSomethingInSensitiveChannel: "{name}のセンシティブチャンネルでの投稿"
enableHorizontalSwipe: "スワイプしてタブを切り替える"
loading: "読み込み中"
surrender: "やめる"
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index c78cc44425..895e2e3c0b 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -169,6 +169,13 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+
+
+
+
+
+
@@ -261,6 +268,9 @@ const emit = defineEmits<{
(ev: 'removeReaction', emoji: string): void;
}>();
+// for some timelines, like home timeline which only shows the following channels,
+// we never collapse sensitive channel notes so we allow inject to override the preference
+const collapseSensitiveChannelContext = inject(DI.collapseSensitiveChannel, true);
const inTimeline = inject('inTimeline', false);
const tl_withSensitive = inject[>('tl_withSensitive', ref(true));
const inChannel = inject('inChannel', null);
@@ -330,9 +340,9 @@ const pleaseLoginContext = computed(() => ({
/* eslint-disable no-redeclare */
/** checkOnlyでは純粋なワードミュート結果をbooleanで返却する */
function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly: true): boolean;
-function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly?: false): Array | false | 'sensitiveMute';
+function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly?: false): Array | false | 'sensitiveMute' | 'sensitiveChannel';
-function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly = false): Array | boolean | 'sensitiveMute' {
+function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array | undefined | null, checkOnly = false): Array | boolean | 'sensitiveMute' | 'sensitiveChannel' {
if (mutedWords != null) {
const result = checkWordMute(noteToCheck, $i, mutedWords);
if (Array.isArray(result)) {
@@ -352,6 +362,20 @@ function checkMute(noteToCheck: Misskey.entities.Note, mutedWords: Array v.isSensitive)) {
return 'sensitiveMute';
}
diff --git a/packages/frontend/src/di.ts b/packages/frontend/src/di.ts
index f09782ea38..0069713f38 100644
--- a/packages/frontend/src/di.ts
+++ b/packages/frontend/src/di.ts
@@ -18,4 +18,5 @@ export const DI = {
mfmEmojiReactCallback: Symbol() as InjectionKey<(emoji: string) => void>,
inModal: Symbol() as InjectionKey,
inAppSearchMarkerId: Symbol() as InjectionKey][>,
+ collapseSensitiveChannel: Symbol() as InjectionKey,
};
diff --git a/packages/frontend/src/pages/channel.vue b/packages/frontend/src/pages/channel.vue
index 0879aa72be..1874c1b5b1 100644
--- a/packages/frontend/src/pages/channel.vue
+++ b/packages/frontend/src/pages/channel.vue
@@ -71,7 +71,7 @@ SPDX-License-Identifier: AGPL-3.0-only
]