削除されたノートのリプライ関係を保持するようにする
What
削除されたノートのリプライ関係とリモートの url を保持するようにします。
これにより、削除されたノートを挟んで会話を追うことができるようになります。
~~また、RemoteNoteCleaning によって削除されたノートについても remote で見ることができるようになります。~~ ~~リモートからの新しいノートの配送によって Note Cleaning によって削除されたノートが復活する際には同じ id を使用するようにしています。~~
~~Fixes https://github.com/misskey-dev/misskey/discussions/16232#discussioncomment-13796134~~
また、この uri => id の保持機構を使用して、管理者が削除したリモートのノートが復活することがないようにしました。
Fix #11437
Related #7342
Why
これにより、削除されたノートを挟んで会話を追うことができるようになります。
意図した挙動が保持されることだから。 see https://github.com/misskey-dev/misskey/issues/10659#issuecomment-3135607521 and related comments
~~また、RemoteNoteCleaning によって削除されたノートについても remote で見ることができるようになります。~~
~~リンク切れを避けるため。~~
この uri => id の保持機構を使用して、管理者が削除したリモートのノートが復活することがないようにしました。
モデレーションの理由。 #11437 また、別 id で同じ uri のノートが存在するとDeletedNoteテーブルの index 制約を将来的に違反して削除に失敗する可能性があるため。
Additional info (optional)
Checklist
- [x] 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
このPRによるapi.jsonの差分 差分はありません。 Get diff files from Workflow Page
Codecov Report
:x: Patch coverage is 49.74093% with 194 lines in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 62.81%. Comparing base (988f5ab) to head (5c34fd4).
Additional details and impacted files
@@ Coverage Diff @@
## develop #16352 +/- ##
===========================================
- Coverage 62.96% 62.81% -0.15%
===========================================
Files 1150 1151 +1
Lines 115223 115548 +325
Branches 7921 7906 -15
===========================================
+ Hits 72549 72585 +36
- Misses 40514 40802 +288
- Partials 2160 2161 +1
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
:rocket: New features to boost your workflow:
- :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
- :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
もはや論理削除(noteテーブルでisDeletedを立てるの)でいいのではと思ったりするけど
実装のシンプルさではnoteにdeletedAtみたいなカラム新設する方が優れてそうだけど、別にテーブルを作る実装にした理由ってあるかしら
テキストとかを物理的に消すっためというのと、多くの場合は削除されているノートに対して操作を受け付けないので、すべての場所で削除されたノートかどうかのチェックを追加するより、限られた場所 (今回だとPackとendpoint2箇所の合計3箇所) でdeleted_noteにフォールバックするほうがミスも少ないと考えたためです。
https://nekolobby.niri.la/notes/aaz3h07ugg
deleted_noteを呼び出ししたいの、ノートを直接見るページのエンドポイント (つまり note/show と note/conversation くらいだと思う、漏れあったらsry) と、 Pack の detailed くらいで、削除チェックを回す必要があるのはすべてのタイムラインとすべてのノートの操作系のエンドポイント (fav clip reply renote reaction他) なので多くの場合は使わないなぁと
ほむん
大きめだから2025.9.0かも
機能の性質上、CASCADE削除無効化と同時に投入した方が良い感じはしますけれど…(後からmigrationとかでは対応出来ないような)
レビュー力が回復するまで一ヶ月くらいかかりそう
ノート作成のたびに、過去に削除されてないかチェックするのは無駄に感じるから、「管理者都合で削除したノートを復活させない」目的では別の仕組みで実現する方が良さそうな気がしている 例えばノートにも「凍結」(仮称)のような機能(何らかのフラグを追加して実質論理削除のようにする)を追加し、管理者は通常の削除か凍結かを選べるとか 凍結されたノートはDB上には(URIなど最低限の情報だけ)残っているため、ノート作成時のチェックが無くてもURIのユニーク制約に違反するため復活することがない
また、別 id で同じ uri のノートが存在するとDeletedNoteテーブルの index 制約を将来的に違反して削除に失敗する可能性があるため。
なのでモデレーションの話は副作用として実装がすぐできたから実装したという感じです
レビュー力が回復するまで一ヶ月くらいかかりそう
そういえばこれどうなったかしら(入らないなら入らないなりに別の方法をトライするなどができそうだけど、話が止まっていそう)
conflict resolved
Backend Memory Usage Comparison
| Metric | base | head | Diff |
|---|---|---|---|
| RSS | 359.01 MB | 361.02 MB | 2.01 MB (.56%) |
EmNote.vue, EmNoteDetailed.vueへの対応が不足していそうです