🔖(minor) release version 0.5.0#593
Conversation
📝 WalkthroughWalkthroughThis PR releases version 0.5.0: bumps package versions, updates CHANGELOG.md, and updates localization files (fr, nl, ru, uk). It also adds a small frontend behavior change in thread-accesses-widget to handle self-removal cleanup. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/frontend/public/locales/common/ru-RU.json`:
- Line 238: The translation for the "End date" key is using the dative case
("Дате окончания"); update the JSON value for the "End date" key to the
nominative form "Дата окончания" so the label reads correctly (locate the "End
date" key in src/frontend/public/locales/common/ru-RU.json and replace its
value).
- Around line 493-494: The Russian translations for the keys "Split thread" and
"Split thread from here" use the plural "обсуждения" but should be singular;
update the JSON values so "Split thread" => "Разделить обсуждение" and "Split
thread from here" => "Разделить обсуждение с этого места" to ensure correct
grammatical number for single-thread actions (edit the entries for the keys
"Split thread" and "Split thread from here" in
src/frontend/public/locales/common/ru-RU.json).
- Line 501: The "Start day" translation is identical to "Start date" and should
be differentiated; update the JSON entry with key "Start day" (currently "Дата
начала") to the suggested "День начала" so it matches the Ukrainian distinction
and the scheduling UI semantics.
In `@src/frontend/public/locales/common/uk-UA.json`:
- Line 287: The translation value for the "Friday" key contains a backtick
instead of an apostrophe; locate the "Friday" JSON entry (currently "П`ятниця")
and replace the backtick with a proper apostrophe character so the value becomes
"П'ятниця" to fix rendering and search/sort issues.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 73207565-09e8-4b62-a71c-d4a3f66c4a7f
⛔ Files ignored due to path filters (5)
src/backend/uv.lockis excluded by!**/*.locksrc/e2e/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/package-lock.jsonis excluded by!**/package-lock.jsonsrc/mta-in/uv.lockis excluded by!**/*.locksrc/mta-out/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (10)
CHANGELOG.mdsrc/backend/pyproject.tomlsrc/e2e/package.jsonsrc/frontend/package.jsonsrc/frontend/public/locales/common/fr-FR.jsonsrc/frontend/public/locales/common/nl-NL.jsonsrc/frontend/public/locales/common/ru-RU.jsonsrc/frontend/public/locales/common/uk-UA.jsonsrc/mta-in/pyproject.tomlsrc/mta-out/pyproject.toml
| "Edit Widget": "Настроить виджет", | ||
| "Email address": "Адрес электронной почты", | ||
| "EML, MBOX or PST": "EML, MBOX или PST", | ||
| "End date": "Дате окончания", |
There was a problem hiding this comment.
Grammatical error: wrong case in "End date" translation.
"Дате окончания" uses dative case but should be nominative "Дата окончания" to match the label context.
🔤 Suggested fix
- "End date": "Дате окончания",
+ "End date": "Дата окончания",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "End date": "Дате окончания", | |
| "End date": "Дата окончания", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/frontend/public/locales/common/ru-RU.json` at line 238, The translation
for the "End date" key is using the dative case ("Дате окончания"); update the
JSON value for the "End date" key to the nominative form "Дата окончания" so the
label reads correctly (locate the "End date" key in
src/frontend/public/locales/common/ru-RU.json and replace its value).
| "Split thread": "Разделить обсуждения", | ||
| "Split thread from here": "Разделить обсуждения с этого места", |
There was a problem hiding this comment.
Incorrect plural form for single-thread action.
"Split thread" refers to splitting a single thread, but the Russian translation uses plural "обсуждения" (threads). Should be singular "обсуждение" (thread) for grammatical consistency.
🔤 Suggested fix
- "Split thread": "Разделить обсуждения",
- "Split thread from here": "Разделить обсуждения с этого места",
+ "Split thread": "Разделить обсуждение",
+ "Split thread from here": "Разделить обсуждение с этого места",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "Split thread": "Разделить обсуждения", | |
| "Split thread from here": "Разделить обсуждения с этого места", | |
| "Split thread": "Разделить обсуждение", | |
| "Split thread from here": "Разделить обсуждение с этого места", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/frontend/public/locales/common/ru-RU.json` around lines 493 - 494, The
Russian translations for the keys "Split thread" and "Split thread from here"
use the plural "обсуждения" but should be singular; update the JSON values so
"Split thread" => "Разделить обсуждение" and "Split thread from here" =>
"Разделить обсуждение с этого места" to ensure correct grammatical number for
single-thread actions (edit the entries for the keys "Split thread" and "Split
thread from here" in src/frontend/public/locales/common/ru-RU.json).
| "Start date": "Дата начала", | ||
| "Start date is required": "Необходимо ввести дату начала", | ||
| "Start date must be before end date": "Дата начала должна быть до даты завершения", | ||
| "Start day": "Дата начала", |
There was a problem hiding this comment.
"Start day" translated identically to "Start date".
Both "Start day" (Line 501) and "Start date" (Line 498) translate to "Дата начала", making them indistinguishable. The Ukrainian locale correctly differentiates these as "День початку" vs "Дата початку". For consistency with the scheduling UI semantics, "Start day" should be "День начала".
🔤 Suggested fix
- "Start day": "Дата начала",
+ "Start day": "День начала",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/frontend/public/locales/common/ru-RU.json` at line 501, The "Start day"
translation is identical to "Start date" and should be differentiated; update
the JSON entry with key "Start day" (currently "Дата начала") to the suggested
"День начала" so it matches the Ukrainian distinction and the scheduling UI
semantics.
| "Forced signature": "Обов'язковий підпис", | ||
| "Forward": "Переслати", | ||
| "Forwarded message": "Переслане повідомлення", | ||
| "Friday": "П`ятниця", |
There was a problem hiding this comment.
Typographical error: backtick instead of apostrophe in "Friday" translation.
The Ukrainian word for Friday should use a proper apostrophe (') character, not a backtick (`). This affects text rendering and may cause search/sort inconsistencies.
🔤 Suggested fix
- "Friday": "П`ятниця",
+ "Friday": "П'ятниця",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "Friday": "П`ятниця", | |
| "Friday": "П'ятниця", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/frontend/public/locales/common/uk-UA.json` at line 287, The translation
value for the "Friday" key contains a backtick instead of an apostrophe; locate
the "Friday" JSON entry (currently "П`ятниця") and replace the backtick with a
proper apostrophe character so the value becomes "П'ятниця" to fix rendering and
search/sort issues.
Invalidate thread list when the user deletes its own access to a thread to prevent buggy situation where the user still display a thread that has no more access..
Update all version files and changelog for minor release.
22402d0 to
0bdeb06
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/frontend/public/locales/common/nl-NL.json (1)
46-47: Pre-existing issue: Plural form uses singular noun.Note: While not part of this PR's changes, the existing key at line 47
"{{count}} threads selected_other"incorrectly uses singular "thread" instead of plural "threads" in the Dutch translation. Both_oneand_otherforms have identical text, which defeats the purpose of pluralization.Consider fixing in a follow-up:
- "{{count}} threads selected_other": "{{count}} thread geselecteerd", + "{{count}} threads selected_other": "{{count}} threads geselecteerd",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/frontend/public/locales/common/nl-NL.json` around lines 46 - 47, The Dutch pluralization for the key pair "{{count}} threads selected_one" and "{{count}} threads selected_other" uses the singular "thread" for both forms; update the "_other" form "{{count}} threads selected_other" to use the plural "threads" (e.g., "threads" in Dutch: "threads" may be left or use "threads geselecteerd" vs "thread" → change to "threads geselecteerd" or the correct Dutch plural "threads geselecteerd"/"threads geselecteerd" as appropriate) so the _one and _other forms correctly differ and reflect singular vs plural for the keys "{{count}} threads selected_one" and "{{count}} threads selected_other".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/frontend/public/locales/common/uk-UA.json`:
- Line 108: The Ukrainian translation for the JSON key "Are you sure you want to
delete this auto-reply? This action is irreversible!" uses the adverb
"безповоротно" but must use an adjective that agrees with the feminine noun
"дія"; change the ending to an adjective such as "незворотна" (e.g., "Ви дійсно
хочете видалити цей автовідповідач? Ця дія незворотна!") so the grammar agrees
with "дія" and matches other strings like "незворотна" in the file.
In
`@src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsx`:
- Line 31: The hook-level onSuccess passed into useThreadsAccessesDestroy (where
mutate is aliased to removeThreadAccess) causes duplicate invalidation; remove
the mutation:onSuccess option from the useThreadsAccessesDestroy call and
instead perform all cache invalidation inside the mutate-level onSuccess passed
to removeThreadAccess (the existing onSuccess that constructs the
{type:'delete', metadata:...} payload and calls invalidateThreadMessages()).
This consolidates invalidation for both self-removal and other removals and
prevents double-refetch.
---
Nitpick comments:
In `@src/frontend/public/locales/common/nl-NL.json`:
- Around line 46-47: The Dutch pluralization for the key pair "{{count}} threads
selected_one" and "{{count}} threads selected_other" uses the singular "thread"
for both forms; update the "_other" form "{{count}} threads selected_other" to
use the plural "threads" (e.g., "threads" in Dutch: "threads" may be left or use
"threads geselecteerd" vs "thread" → change to "threads geselecteerd" or the
correct Dutch plural "threads geselecteerd"/"threads geselecteerd" as
appropriate) so the _one and _other forms correctly differ and reflect singular
vs plural for the keys "{{count}} threads selected_one" and "{{count}} threads
selected_other".
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: c0faac56-7033-4359-b04e-6b482979e265
⛔ Files ignored due to path filters (5)
src/backend/uv.lockis excluded by!**/*.locksrc/e2e/package-lock.jsonis excluded by!**/package-lock.jsonsrc/frontend/package-lock.jsonis excluded by!**/package-lock.jsonsrc/mta-in/uv.lockis excluded by!**/*.locksrc/mta-out/uv.lockis excluded by!**/*.lock
📒 Files selected for processing (11)
CHANGELOG.mdsrc/backend/pyproject.tomlsrc/e2e/package.jsonsrc/frontend/package.jsonsrc/frontend/public/locales/common/fr-FR.jsonsrc/frontend/public/locales/common/nl-NL.jsonsrc/frontend/public/locales/common/ru-RU.jsonsrc/frontend/public/locales/common/uk-UA.jsonsrc/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsxsrc/mta-in/pyproject.tomlsrc/mta-out/pyproject.toml
🚧 Files skipped from review as they are similar to previous changes (5)
- src/frontend/package.json
- CHANGELOG.md
- src/frontend/public/locales/common/fr-FR.json
- src/mta-in/pyproject.toml
- src/mta-out/pyproject.toml
| "Archive {{count}} threads_other": "Архівувати обговорення ({{count}})", | ||
| "Archives": "Архіви", | ||
| "Are you sure you want to close this dialog? Your upload will be aborted!": "Ви впевнені, що хочете закрити це діалогове вікно? Вивантаження буде перервано!", | ||
| "Are you sure you want to delete this auto-reply? This action is irreversible!": "Ви дійсно хочете видалити цей автовідповідач? Ця дія безповоротно!", |
There was a problem hiding this comment.
Grammatical error: adverb used instead of adjective.
The word "безповоротно" is an adverb, but the sentence requires an adjective to agree with the feminine noun "дія" (action). Compare with similar strings in the file (lines 110-114) that correctly use adjective forms like "незворотна" or "є незворотною".
🔤 Suggested fix
- "Are you sure you want to delete this auto-reply? This action is irreversible!": "Ви дійсно хочете видалити цей автовідповідач? Ця дія безповоротно!",
+ "Are you sure you want to delete this auto-reply? This action is irreversible!": "Ви дійсно хочете видалити цей автовідповідач? Ця дія є безповоротною!",📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "Are you sure you want to delete this auto-reply? This action is irreversible!": "Ви дійсно хочете видалити цей автовідповідач? Ця дія безповоротно!", | |
| "Are you sure you want to delete this auto-reply? This action is irreversible!": "Ви дійсно хочете видалити цей автовідповідач? Ця дія є безповоротною!", |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/frontend/public/locales/common/uk-UA.json` at line 108, The Ukrainian
translation for the JSON key "Are you sure you want to delete this auto-reply?
This action is irreversible!" uses the adverb "безповоротно" but must use an
adjective that agrees with the feminine noun "дія"; change the ending to an
adjective such as "незворотна" (e.g., "Ви дійсно хочете видалити цей
автовідповідач? Ця дія незворотна!") so the grammar agrees with "дія" and
matches other strings like "незворотна" in the file.
| const [searchQuery, setSearchQuery] = useState(""); | ||
| const { selectedMailbox, selectedThread, invalidateThreadMessages } = useMailboxContext(); | ||
| const { selectedMailbox, selectedThread, invalidateThreadMessages, invalidateThreadsStats, unselectThread } = useMailboxContext(); | ||
| const { mutate: removeThreadAccess } = useThreadsAccessesDestroy({ mutation: { onSuccess: () => invalidateThreadMessages() } }); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Find generated destroy hook implementation =="
rg -n -C5 --type=ts 'useThreadsAccessesDestroy|useMutation|onSuccess' src/frontend/src/features/api/gen
echo
echo "== Find all call sites of useThreadsAccessesDestroy =="
rg -n -C3 --type=tsx '\buseThreadsAccessesDestroy\b' src/frontend/src
echo
echo "== Inspect this widget's invalidation calls =="
rg -n -C3 --type=tsx 'invalidateThreadMessages|removeThreadAccess' src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsxRepository: suitenumerique/messages
Length of output: 50424
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Find thread-accesses-widget component =="
find . -name "*thread-accesses-widget*" -type f | head -20
echo
echo "== Inspect the component file around lines 31 and 100-103 =="
cat -n src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsx | sed -n '25,110p'Repository: suitenumerique/messages
Length of output: 4523
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Find getThreadsAccessesDestroyMutationOptions implementation =="
rg -n -C 10 'getThreadsAccessesDestroyMutationOptions' src/frontend/src/features/api/gen/thread-access/thread-access.ts
echo
echo "== Find all call sites of useThreadsAccessesDestroy (excluding def) =="
rg -n 'useThreadsAccessesDestroy' src/frontend/src --type-list -g '!gen'
echo
echo "== Check how useMutation is called with options =="
rg -n -B5 -A5 'return useMutation' src/frontend/src/features/api/gen/thread-access/thread-access.ts | tail -20Repository: suitenumerique/messages
Length of output: 1731
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Get full getThreadsAccessesDestroyMutationOptions implementation =="
rg -n -A 30 'export const getThreadsAccessesDestroyMutationOptions' src/frontend/src/features/api/gen/thread-access/thread-access.ts
echo
echo "== Find all useThreadsAccessesDestroy call sites =="
find src/frontend/src -name '*.tsx' -o -name '*.ts' | xargs grep -l 'useThreadsAccessesDestroy' | grep -v genRepository: suitenumerique/messages
Length of output: 1563
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Get COMPLETE getThreadsAccessesDestroyMutationOptions implementation =="
sed -n '737,800p' src/frontend/src/features/api/gen/thread-access/thread-access.ts
echo
echo "== Check React Query merge behavior by looking at similar hooks =="
grep -A 40 'export const getThreadsAccessesCreateMutationOptions' src/frontend/src/features/api/gen/thread-access/thread-access.ts | head -50Repository: suitenumerique/messages
Length of output: 3538
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Check React Query documentation on callback merging behavior =="
# Let's check if there are any comments or test files showing how callbacks are merged
find src/frontend/src -name '*.test.*' -o -name '*.spec.*' | xargs grep -l 'onSuccess' 2>/dev/null | head -5
echo
echo "== Search for other similar patterns in the codebase =="
rg -n 'useThreadsAccesses.*{ mutation.*onSuccess' src/frontend/src --type tsx | head -10
echo
echo "== Check if invalidateThreadMessages can handle being called twice =="
rg -n -B3 -A15 'const invalidateThreadMessages' src/frontend/srcRepository: suitenumerique/messages
Length of output: 135
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Search for patterns of onSuccess at multiple levels =="
rg -n 'mutation.*onSuccess.*mutate.*onSuccess' src/frontend/src -U --multiline
echo
echo "== Check invalidateThreadMessages function definition =="
rg -n -B2 -A10 'invalidateThreadMessages.*=' src/frontend/src/features/layouts/components/thread-view
echo
echo "== Search for useMailboxContext to understand invalidation =="
rg -n -A40 'export.*useMailboxContext' src/frontend/srcRepository: suitenumerique/messages
Length of output: 124
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Find useMailboxContext definition =="
find src/frontend/src -name '*.tsx' -o -name '*.ts' | xargs grep -l 'useMailboxContext' | head -5
echo
echo "== Get the context file =="
find src/frontend/src -name '*mailbox*context*' -o -name '*MailboxContext*'
echo
echo "== Search for invalidateThreadMessages in context =="
rg -n 'invalidateThreadMessages' src/frontend/src/features/layouts/contextsRepository: suitenumerique/messages
Length of output: 728
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Search for useMailboxContext definition =="
rg -n 'export.*useMailboxContext|export const useMailboxContext' src/frontend/src
echo
echo "== Find the actual mailbox context file =="
find src/frontend/src -type f \( -name '*.tsx' -o -name '*.ts' \) -exec grep -l 'export.*useMailboxContext' {} \;
echo
echo "== Look at the exact line in thread-accesses-widget import =="
head -30 src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsx | grep -E '^import|^export'Repository: suitenumerique/messages
Length of output: 1104
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Find invalidateThreadMessages definition in mailbox context =="
rg -n -B5 -A10 'invalidateThreadMessages' src/frontend/src/features/providers/mailbox.tsx | head -50
echo
echo "== Check how React Query useMutation merges callbacks =="
# React Query composition behavior - checking if there are examples in tests
find src/frontend/src -type f -name '*.test.ts*' | xargs grep -l 'mutate.*onSuccess' 2>/dev/null | head -3Repository: suitenumerique/messages
Length of output: 2455
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Get full invalidateThreadMessages implementation =="
rg -n -B2 -A25 'invalidateThreadMessages.*=' src/frontend/src/features/providers/mailbox.tsx | grep -A25 'invalidateThreadMessages.*='
echo
echo "== Check if there are multiple invalidations that could cause issues =="
rg -n 'invalidateThreadMessages' src/frontend/src/features/providers/mailbox.tsx
echo
echo "== Look at the exact invalidate call to understand parameters =="
sed -n '400,500p' src/frontend/src/features/providers/mailbox.tsx | grep -B3 -A10 'invalidate'Repository: suitenumerique/messages
Length of output: 5722
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== Check if createThreadAccess and updateThreadAccess have same pattern =="
rg -n 'useThreadsAccessesCreate|useThreadsAccessesUpdate' src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsx -B2 -A2
echo
echo "== Check if there are handlers for create and update with additional onSuccess =="
sed -n '52,76p' src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsxRepository: suitenumerique/messages
Length of output: 2153
Consolidate thread access removal invalidation to avoid double-refetch on self-removal.
Both hook-level onSuccess (line 31) and mutate-level onSuccess (lines 94–107) fire when removeThreadAccess succeeds. On self-removal, this triggers invalidateThreadMessages() twice—once with no arguments and again with {type: 'delete', metadata: {...}}, causing redundant cache invalidation and potential UI flicker.
Remove the hook-level initialization and handle all invalidation in the mutate-level onSuccess callback:
Suggested fix
- const { mutate: removeThreadAccess } = useThreadsAccessesDestroy({ mutation: { onSuccess: () => invalidateThreadMessages() } });
+ const { mutate: removeThreadAccess } = useThreadsAccessesDestroy();Then consolidate invalidation logic in the onSuccess handler to cover both self-removal and other cases.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const { mutate: removeThreadAccess } = useThreadsAccessesDestroy({ mutation: { onSuccess: () => invalidateThreadMessages() } }); | |
| const { mutate: removeThreadAccess } = useThreadsAccessesDestroy(); |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@src/frontend/src/features/layouts/components/thread-view/components/thread-accesses-widget/index.tsx`
at line 31, The hook-level onSuccess passed into useThreadsAccessesDestroy
(where mutate is aliased to removeThreadAccess) causes duplicate invalidation;
remove the mutation:onSuccess option from the useThreadsAccessesDestroy call and
instead perform all cache invalidation inside the mutate-level onSuccess passed
to removeThreadAccess (the existing onSuccess that constructs the
{type:'delete', metadata:...} payload and calls invalidateThreadMessages()).
This consolidates invalidation for both self-removal and other removals and
prevents double-refetch.
Purpose
Update all version files and changelog for minor release.
Release version 0.5.0
Added
oidc_autojoinandidentity_syncflags in provisioning APIChanged
Customize thread panel bulk actions according to selection state
Rename usage API params to be more generic ♻️(metrics) rename usage API params to be more generic #589
Remove per-message starred in favor of thread-level starred 🔥(frontend) remove starred from here #588
Use
url_permalinkfrom Drive and limit requests to Drive resource server ✨(drive) use url_permalink and limit request to drive resource server #587Fixed
mailbox.idfrom metricsSummary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores