rebrand: docker image mattfly/obsidian -> mattfly/obby#229
rebrand: docker image mattfly/obsidian -> mattfly/obby#229matheusfillipe wants to merge 10 commits into
Conversation
|
Warning Review limit reached
More reviews will be available in 10 minutes and 47 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (53)
📝 WalkthroughWalkthroughThis PR renames branding and CI artifacts to Obby, adds macOS bundle entitlements/Info.plist entries, refactors HTTP media probing to avoid trusting failed HEAD responses, updates ChatArea placeholder formatting and regenerates locale catalogs, adds a PDF error boundary and integrates it into media previews, implements copy-as-markdown for chat selections, adds a RawLogViewer modal and related UI wiring, and hardens connection timeouts and telemetry. ChangesDocker Hub image branding update
macOS app permissions and entitlements
Media probe refactoring
ChatArea placeholder and localization updates
PDF rendering error boundary and integration
Chat selection copy-as-markdown
Raw log viewer and branding module
Connection timeouts and IRC telemetry
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
Poem
✨ Finishing Touches🧪 Generate unit tests (beta)
|
|
Automated deployment preview for the PR in the Cloudflare Pages. |
There was a problem hiding this comment.
Actionable comments posted: 2
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🟡 Minor comments (23)
src/locales/de/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winGerman catalog still ships English placeholders for the new channel-message keys.
deusers will see mixed language (Message ...) for chat input placeholders. Please add Germanmsgstrentries for the three newMessage {0}variants insrc/locales/de/messages.poand regenerate this catalog.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/de/messages.mjs` at line 1, The German locale is missing translations for three new "Message {0}" placeholders causing English text to appear; add German msgstr entries for the three keys (referenced in the compiled catalog as the message IDs "mH+wEJ", "pqr+oY" and "z0DY9w") into src/locales/de/messages.po with appropriate German strings (e.g. "Nachricht {0}" variants matching context), then regenerate the de messages catalog so src/locales/de/messages.mjs is rebuilt.src/locales/cs/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill Czech translations for new channel placeholder keys.
These three entries have empty
msgstr, so Czech users will see English input placeholders after this change.💡 Proposed translation patch
msgid "Message {0}" -msgstr "" +msgstr "Zpráva {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Zpráva {0} (Enter pro nový řádek, Shift+Enter pro odeslání)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Zpráva {0} (Shift+Enter pro nový řádek)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/cs/messages.po` around lines 1377 - 1390, The three placeholder entries in src/locales/cs/messages.po (msgid "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)") have empty msgstr; update each msgstr with the Czech translations (e.g. "Zpráva {0}", "Zpráva {0} (Enter pro nový řádek, Shift+Enter pro odeslání)", and "Zpráva {0} (Shift+Enter pro nový řádek)") so Czech users see localized placeholders in ChatArea.tsx.src/locales/es/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSpanish catalog still contains English strings for new channel placeholders.
The new
Message {0}variants are left in English in the Spanish catalog payload, which creates inconsistent UI language.Please translate these in
src/locales/es/messages.poand recompile catalogs (rather than editing this generated.mjsdirectly).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/es/messages.mjs` at line 1, The Spanish catalog contains untranslated English placeholders for "Message {0}" (see message keys "pqr+oY" and "z0DY9w" which currently map to ["Message ",["0"]]); fix this by updating the translations in src/locales/es/messages.po (replace the English "Message {0}" variants with the Spanish equivalent), then recompile the locale catalogs with the project's locale build/compile step so the generated src/locales/es/messages.mjs is rebuilt (do not edit the .mjs directly).src/locales/de/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill the new German translations instead of leaving them empty.
These new entries are currently untranslated (
msgstr ""), so German users will see fallback text for these placeholders.💡 Suggested translations
msgid "Message {0}" -msgstr "" +msgstr "Nachricht {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Nachricht {0} (Enter für neue Zeile, Shift+Enter zum Senden)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Nachricht {0} (Shift+Enter für neue Zeile)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/de/messages.po` around lines 1377 - 1390, The three German msgstr entries for the placeholders in the PO file are empty; update the msgstr for each msgid to proper German translations: set msgstr for "Message {0}" to something like "Nachricht {0}", for "Message {0} (Enter for new line, Shift+Enter to send)" to "Nachricht {0} (Enter für neue Zeile, Shift+Enter zum Senden)", and for "Message {0} (Shift+Enter for new line)" to "Nachricht {0} (Shift+Enter für neue Zeile)"; edit the corresponding entries referenced by the msgid strings in the file so German users no longer see fallback text.src/locales/es/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winComplete the new Spanish translations before shipping.
Line 1380, Line 1385, and Line 1390 are empty
msgstrvalues for newly introducedMessage {0}variants. This will surface English strings in the Spanish UI.Suggested translation patch
msgid "Message {0}" -msgstr "" +msgstr "Mensaje {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Mensaje {0} (Enter para nueva línea, Shift+Enter para enviar)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Mensaje {0} (Shift+Enter para nueva línea)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/es/messages.po` around lines 1377 - 1390, Three new Spanish translations for the message placeholders are missing: fill the empty msgstr entries for the three msgid values ("Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)") in the PO file so the Spanish UI doesn't fall back to English; provide accurate Spanish translations that preserve the {0} placeholder and keyboard instructions (for example, "Mensaje {0}", "Mensaje {0} (Enter para nueva línea, Shift+Enter para enviar)", and "Mensaje {0} (Shift+Enter para nueva línea)") and save the updated msgstr values corresponding to each msgid.src/locales/fi/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill the new Finnish translations for channel message placeholders.
Line 1380, Line 1385, and Line 1390 are currently untranslated. Users will see English fallback text in Finnish locale.
Suggested translation patch
msgid "Message {0}" -msgstr "" +msgstr "Viesti {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Viesti {0} (Enter = uusi rivi, Shift+Enter = lähetä)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Viesti {0} (Shift+Enter = uusi rivi)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/fi/messages.po` around lines 1377 - 1390, Add Finnish translations for the three msgid placeholders used in ChatArea.tsx (selectedChannel.name): set msgstr for "Message {0}" to "Viesti {0}", for "Message {0} (Enter for new line, Shift+Enter to send)" to "Viesti {0} (Enter uudelle riville, Shift+Enter lähettää)" and for "Message {0} (Shift+Enter for new line)" to "Viesti {0} (Shift+Enter uudelle riville)"; update the msgstr entries in src/locales/fi/messages.po so Finnish users see localized placeholders when ChatArea.tsx renders selectedChannel.name.src/locales/fr/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFrench catalog still ships English
Message {0}placeholders.The new channel placeholder entries are untranslated in this compiled catalog, so French users will see English text.
Suggested target translations
-"Message {0}" +"Message {0}" → "Message {0}" -"Message {0} (Enter for new line, Shift+Enter to send)" +"Message {0} (Entrée pour nouvelle ligne, Maj+Entrée pour envoyer)" -"Message {0} (Shift+Enter for new line)" +"Message {0} (Maj+Entrée pour nouvelle ligne)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/fr/messages.mjs` at line 1, The compiled French messages blob exported as messages contains leftover English placeholder strings for new-channel/message placeholders; open the exported JSON in src/locales/fr/messages.mjs (export const messages) and replace the untranslated English entries (search for strings containing "Message {0}", "Message to", "Message …" or other English words with placeholder arrays) with their proper French translations while preserving the placeholder array structure (e.g. keep [,["0"],] or [,["channel"],] tokens intact), then save/regenerate the compiled JSON so the keys in the messages object (the existing identifiers like "ApSx0O", "CHVRxG", etc.) map to French text.src/locales/it/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd Italian translations for the new channel placeholder strings.
Line 1379, Line 1384, and Line 1389 have empty
msgstr, which causes English fallback in Italian for these ChatArea placeholders.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/it/messages.po` around lines 1377 - 1390, Add Italian translations for the three empty msgstr entries corresponding to the ChatArea channel placeholder strings; locate the msgid entries "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)" (placeholder {0}: selectedChannel.name, referenced in src/components/layout/ChatArea.tsx) and fill each msgstr with the appropriate Italian text (e.g., "Messaggio {0}", "Messaggio {0} (Invio per nuova riga, Shift+Invio per inviare)", "Messaggio {0} (Shift+Invio per nuova riga)") ensuring plural/format placeholders remain intact.src/locales/fr/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill missing French translations for new channel message placeholders.
Line 1379, Line 1384, and Line 1389 introduce new
msgids but keepmsgstr "", so French users will see English fallback for these inputs.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/fr/messages.po` around lines 1377 - 1390, The French locale file has three untranslated msgid entries for the chat input placeholders—"Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)"; open src/locales/fr/messages.po and replace the empty msgstr "" values for those msgids with proper French translations (e.g. "Message {0}" → "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)" → "Message {0} (Entrée pour nouvelle ligne, Maj+Entrée pour envoyer)", and "Message {0} (Shift+Enter for new line)" → "Message {0} (Maj+Entrée pour nouvelle ligne)") or other approved copy, ensuring placeholders {0} remain intact.src/locales/it/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winItalian catalog ships English strings for the new
Message {0}placeholders.Line 1 includes untranslated values (e.g.,
Message {0}and its Enter/Shift+Enter variants), so the Italian UI regresses to English for these prompts. Please add Italianmsgstrvalues in the PO source and regenerate this catalog.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/it/messages.mjs` at line 1, The Italian catalog contains English placeholders for "Message {0}" variants—update the PO source with proper Italian msgstr entries for the message keys found in the generated catalog (e.g., "pqr+oY", "mH+wEJ", "z0DY9w") and then regenerate the JSON catalog (messages) so those keys render Italian strings such as "Messaggio {0}" and the correct Enter/Shift+Enter variants.src/locales/ja/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winJapanese catalog contains untranslated English for new ChatArea placeholders.
Line 1 includes English text for the new
Message {0}variants, so Japanese users will see mixed-language input placeholders. Please translate in source PO and regenerate the catalog.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ja/messages.mjs` at line 1, The JA catalog still contains English for the new "Message {0}" placeholders (keys mH+wEJ, pqr+oY, z0DY9w — and any similar "Message ",["0"] entries); update the source PO to provide Japanese translations for those message strings (e.g. translate "Message {0} (Enter for new line, Shift+Enter to send)" and "Message {0} (Shift+Enter for new line)" and the bare "Message {0}") and then regenerate the messages.mjs so the JSON entries for mH+wEJ, pqr+oY, z0DY9w (and any other Message... keys) contain the Japanese text.src/locales/ko/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd Korean translations for the new channel placeholder prompts.
Line 1380, Line 1385, and Line 1390 are empty
msgstr, which leaves these UI strings untranslated in Korean.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ko/messages.po` around lines 1377 - 1390, The three Korean translations for the channel placeholder prompts are missing; open the PO entries corresponding to the msgid strings "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)" (referenced from src/components/layout/ChatArea.tsx) and populate their msgstr values with appropriate Korean translations matching the placeholders (keep {0} intact) so the UI shows localized placeholder text.src/locales/ja/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill the new Japanese placeholder translations before shipping.
Line 1380, Line 1385, and Line 1390 have empty
msgstr, so these prompts will fall back to English in the Japanese UI.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ja/messages.po` around lines 1377 - 1390, The three Japanese translation entries for the ChatArea placeholder strings are empty—populate the msgstr for the msgid values "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)" in src/locales/ja/messages.po so the Japanese UI doesn't fall back to English; preserve the {0} placeholder and the keyboard-instruction text (Enter/Shift+Enter) in natural Japanese while keeping the context (these are used by src/components/layout/ChatArea.tsx).src/locales/nl/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winDutch catalog still ships English for the new
Message {0}placeholders.The new channel input placeholder keys are currently untranslated in this locale payload, so Dutch users will see English text for those prompts.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/nl/messages.mjs` at line 1, The Dutch locale still contains English "Message " entries; locate the message keys "mH+wEJ", "pqr+oY" and "z0DY9w" in the messages JSON and replace the English literal "Message " with the Dutch translation "Bericht " while preserving the surrounding placeholder arrays (e.g. ["0"], "(Enter for new line, Shift+Enter to send)", etc.); ensure you update only the string values for those keys and keep the JSON structure intact so channel input placeholders render in Dutch.src/locales/nl/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill the new Dutch ChatArea placeholder translations.
Line 1380, Line 1385, and Line 1390 are empty, so these prompts will fall back to English in the Dutch locale.
💬 Proposed translation patch
msgid "Message {0}" -msgstr "" +msgstr "Bericht {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Bericht {0} (Enter voor nieuwe regel, Shift+Enter om te verzenden)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Bericht {0} (Shift+Enter voor nieuwe regel)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/nl/messages.po` around lines 1377 - 1390, Add Dutch translations for the three empty msgstr entries in src/locales/nl/messages.po corresponding to the ChatArea placeholders: "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)". Edit the msgstr lines directly under each msgid and provide concise Dutch equivalents that preserve the placeholder {0} and the keyboard hints (e.g., "Bericht {0}", "Bericht {0} (Enter voor nieuwe regel, Shift+Enter om te verzenden)", "Bericht {0} (Shift+Enter voor nieuwe regel)"), ensuring punctuation and placeholders remain unchanged.src/locales/pl/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd Polish translations for the new channel placeholder strings.
Line 1380, Line 1385, and Line 1390 are empty, so Polish users will see English for these input placeholders.
💬 Proposed translation patch
msgid "Message {0}" -msgstr "" +msgstr "Wiadomość {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Wiadomość {0} (Enter — nowa linia, Shift+Enter — wyślij)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Wiadomość {0} (Shift+Enter — nowa linia)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/pl/messages.po` around lines 1377 - 1390, Fill the three empty msgstr entries in src/locales/pl/messages.po for the ChatArea placeholders (msgid "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)") with Polish translations so the UI shows Polish to users; for example set them to "Wiadomość {0}", "Wiadomość {0} (Enter — nowa linia, Shift+Enter — wyślij)", and "Wiadomość {0} (Shift+Enter — nowa linia)" respectively, ensuring the placeholders ({0}) are kept intact and saved in the file.src/locales/ru/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRussian catalog still ships English for the new
Message {0}placeholders.The compiled payload includes English strings for the three new channel placeholder variants, so RU users will not get localized text for this path.
Please add Russian translations for these three entries in
src/locales/ru/messages.poand regenerate the compiled catalog.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ru/messages.mjs` at line 1, The compiled RU catalog still contains English for the new "Message {0}" variants; update src/locales/ru/messages.po to add Russian translations for the keys mH+wEJ, pqr+oY and z0DY9w (the message placeholders that render "Message {0}" / "Message {0} (Enter/Shift+Enter...)" ) and then regenerate the compiled catalog so src/locales/ru/messages.mjs contains the localized Russian strings.src/locales/ro/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill missing Romanian translations for new channel placeholder strings.
msgstris empty (Line 1380, Line 1385, Line 1390), so Romanian users will see English fallback for these prompts.💡 Suggested fix
msgid "Message {0}" -msgstr "" +msgstr "Mesaj {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Mesaj {0} (Enter pentru linie nouă, Shift+Enter pentru trimitere)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Mesaj {0} (Shift+Enter pentru linie nouă)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ro/messages.po` around lines 1377 - 1390, The three new placeholder msgid strings used by ChatArea.tsx ("Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", "Message {0} (Shift+Enter for new line)") lack Romanian translations (empty msgstrs); open the locale PO entries for those msgid values and provide appropriate Romanian msgstr values that preserve the placeholder {0} and the keyboard instructions (e.g., translate "Message" and the parenthetical guidance), ensuring plural/placeholder formatting is unchanged and saving the updated msgstr lines for each corresponding msgid.src/locales/tr/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winTurkish compiled locale includes English fallback for new message placeholders.
Line 1 currently maps the new channel placeholder keys (
pqr+oY,mH+wEJ,z0DY9w) to English text, which will surface mixed-language UI fortr.Please add Turkish translations in the source
.pocatalog and regenerate this.mjsbundle.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/tr/messages.mjs` at line 1, The compiled Turkish bundle still contains English fallbacks for keys pqr+oY, mH+wEJ and z0DY9w; update the Turkish source .po catalog with proper Turkish translations for those message IDs (and any new placeholders), then re-run the message build/regeneration step that produces src/locales/tr/messages.mjs so the JSON.parse(...) output includes the Turkish strings instead of English fallbacks.src/locales/sv/messages.mjs-1-1 (1)
1-1:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winSwedish bundle still ships English fallback for new “Message {0}” placeholders.
In Line 1, the compiled map includes English values for the new channel placeholder keys (
pqr+oY,mH+wEJ,z0DY9w). This causes mixed-language UI insv.Please populate the Swedish translations in
src/locales/sv/messages.poand regenerate this bundle.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/sv/messages.mjs` at line 1, The sv bundle contains English fallbacks for the new message placeholders pqr+oY, mH+wEJ and z0DY9w; open src/locales/sv/messages.po, add proper Swedish translations for those message ids (the channel/message placeholders), then re-run the locale compile/regeneration step you use to produce src/locales/sv/messages.mjs so the JSON.parse map includes the Swedish strings instead of the English fallbacks.src/locales/sv/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd Swedish translations for the new channel placeholder strings.
Line 1380, Line 1385, and Line 1390 are empty, so Swedish users see English text in the input placeholder.
Suggested fix
msgid "Message {0}" -msgstr "" +msgstr "Meddelande {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Meddelande {0} (Enter för ny rad, Shift+Enter för att skicka)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Meddelande {0} (Shift+Enter för ny rad)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/sv/messages.po` around lines 1377 - 1390, The Swedish .po file is missing translations for three new channel placeholder msgids used by src/components/layout/ChatArea.tsx; add appropriate Swedish text into the corresponding msgstr entries for "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)" so the placeholders are shown in Swedish instead of English.src/locales/ru/messages.po-1377-1390 (1)
1377-1390:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill missing Russian translations for new ChatArea placeholders.
Line 1380, Line 1385, and Line 1390 have empty
msgstr, so RU users will see English fallback in the message input placeholder.Suggested fix
msgid "Message {0}" -msgstr "" +msgstr "Сообщение {0}" msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Сообщение {0} (Enter — новая строка, Shift+Enter — отправить)" msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Сообщение {0} (Shift+Enter — новая строка)"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/ru/messages.po` around lines 1377 - 1390, The Russian .po file has three empty translations for ChatArea placeholders—fill the msgstr for each msgid ("Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)") with correct Russian equivalents preserving the {0} placeholder (e.g., "Сообщение {0}" and variants that include the keyboard hints in Russian), ensuring punctuation and placeholder placement match the original strings so ChatArea.tsx displays localized placeholders.src/locales/tr/messages.po-1377-1391 (1)
1377-1391:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winProvide Turkish translations for channel message placeholders.
The three new message entries for channel input placeholders are currently untranslated (empty
msgstrvalues), which will cause Turkish users to see English text or the message ID in the chat input field.For consistency and a fully localized experience, follow the pattern established for private message placeholders at lines 1392-1406. Suggested translations:
Message {0}→{0} kanalına mesajor{0}'a mesajMessage {0} (Enter for new line, Shift+Enter to send)→{0} kanalına mesaj (yeni satır için Enter, göndermek için Shift+Enter)Message {0} (Shift+Enter for new line)→{0} kanalına mesaj (yeni satır için Shift+Enter)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/tr/messages.po` around lines 1377 - 1391, Fill the empty msgstr values for the three channel placeholder entries so Turkish users see localized text: for msgid "Message {0}" set msgstr to a Turkish variant like "{0} kanalına mesaj" (or "{0}'a mesaj"), for "Message {0} (Enter for new line, Shift+Enter to send)" set msgstr to "{0} kanalına mesaj (yeni satır için Enter, göndermek için Shift+Enter)", and for "Message {0} (Shift+Enter for new line)" set msgstr to "{0} kanalına mesaj (yeni satır için Shift+Enter)"; follow the pattern used in the nearby private message placeholders (lines around the existing entries) to match punctuation and spacing.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src-tauri/tauri.conf.json`:
- Around line 35-38: The tauri config only sets "entitlements" under the macOS
bundle; add a "infoPlist" reference so Tauri can merge
NSMicrophoneUsageDescription/NSCameraUsageDescription into the app Info.plist.
Update the JSON bundle.macOS object to include an "infoPlist" key (e.g.,
"infoPlist": "./Info.plist") alongside "entitlements", and ensure your
Info.plist contains the NSMicrophoneUsageDescription and
NSCameraUsageDescription keys so the permission prompts have proper strings.
In `@src/locales/en/messages.po`:
- Around line 1376-1390: The i18n catalogs are out of sync (see messages in
src/locales/en/messages.po related to placeholders used in
src/components/layout/ChatArea.tsx like "Message {0}" variants); regenerate and
commit the updated message catalogs by running the extraction and compile
commands (run `npm run i18n:extract` then `npm run i18n:compile`), verify `git
diff --exit-code src/locales/en/messages.po` is clean, and commit the updated
.po/.json files so CI i18n checks pass.
---
Minor comments:
In `@src/locales/cs/messages.po`:
- Around line 1377-1390: The three placeholder entries in
src/locales/cs/messages.po (msgid "Message {0}", "Message {0} (Enter for new
line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)") have
empty msgstr; update each msgstr with the Czech translations (e.g. "Zpráva {0}",
"Zpráva {0} (Enter pro nový řádek, Shift+Enter pro odeslání)", and "Zpráva {0}
(Shift+Enter pro nový řádek)") so Czech users see localized placeholders in
ChatArea.tsx.
In `@src/locales/de/messages.mjs`:
- Line 1: The German locale is missing translations for three new "Message {0}"
placeholders causing English text to appear; add German msgstr entries for the
three keys (referenced in the compiled catalog as the message IDs "mH+wEJ",
"pqr+oY" and "z0DY9w") into src/locales/de/messages.po with appropriate German
strings (e.g. "Nachricht {0}" variants matching context), then regenerate the de
messages catalog so src/locales/de/messages.mjs is rebuilt.
In `@src/locales/de/messages.po`:
- Around line 1377-1390: The three German msgstr entries for the placeholders in
the PO file are empty; update the msgstr for each msgid to proper German
translations: set msgstr for "Message {0}" to something like "Nachricht {0}",
for "Message {0} (Enter for new line, Shift+Enter to send)" to "Nachricht {0}
(Enter für neue Zeile, Shift+Enter zum Senden)", and for "Message {0}
(Shift+Enter for new line)" to "Nachricht {0} (Shift+Enter für neue Zeile)";
edit the corresponding entries referenced by the msgid strings in the file so
German users no longer see fallback text.
In `@src/locales/es/messages.mjs`:
- Line 1: The Spanish catalog contains untranslated English placeholders for
"Message {0}" (see message keys "pqr+oY" and "z0DY9w" which currently map to
["Message ",["0"]]); fix this by updating the translations in
src/locales/es/messages.po (replace the English "Message {0}" variants with the
Spanish equivalent), then recompile the locale catalogs with the project's
locale build/compile step so the generated src/locales/es/messages.mjs is
rebuilt (do not edit the .mjs directly).
In `@src/locales/es/messages.po`:
- Around line 1377-1390: Three new Spanish translations for the message
placeholders are missing: fill the empty msgstr entries for the three msgid
values ("Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)",
and "Message {0} (Shift+Enter for new line)") in the PO file so the Spanish UI
doesn't fall back to English; provide accurate Spanish translations that
preserve the {0} placeholder and keyboard instructions (for example, "Mensaje
{0}", "Mensaje {0} (Enter para nueva línea, Shift+Enter para enviar)", and
"Mensaje {0} (Shift+Enter para nueva línea)") and save the updated msgstr values
corresponding to each msgid.
In `@src/locales/fi/messages.po`:
- Around line 1377-1390: Add Finnish translations for the three msgid
placeholders used in ChatArea.tsx (selectedChannel.name): set msgstr for
"Message {0}" to "Viesti {0}", for "Message {0} (Enter for new line, Shift+Enter
to send)" to "Viesti {0} (Enter uudelle riville, Shift+Enter lähettää)" and for
"Message {0} (Shift+Enter for new line)" to "Viesti {0} (Shift+Enter uudelle
riville)"; update the msgstr entries in src/locales/fi/messages.po so Finnish
users see localized placeholders when ChatArea.tsx renders selectedChannel.name.
In `@src/locales/fr/messages.mjs`:
- Line 1: The compiled French messages blob exported as messages contains
leftover English placeholder strings for new-channel/message placeholders; open
the exported JSON in src/locales/fr/messages.mjs (export const messages) and
replace the untranslated English entries (search for strings containing "Message
{0}", "Message to", "Message …" or other English words with placeholder arrays)
with their proper French translations while preserving the placeholder array
structure (e.g. keep [,["0"],] or [,["channel"],] tokens intact), then
save/regenerate the compiled JSON so the keys in the messages object (the
existing identifiers like "ApSx0O", "CHVRxG", etc.) map to French text.
In `@src/locales/fr/messages.po`:
- Around line 1377-1390: The French locale file has three untranslated msgid
entries for the chat input placeholders—"Message {0}", "Message {0} (Enter for
new line, Shift+Enter to send)", and "Message {0} (Shift+Enter for new line)";
open src/locales/fr/messages.po and replace the empty msgstr "" values for those
msgids with proper French translations (e.g. "Message {0}" → "Message {0}",
"Message {0} (Enter for new line, Shift+Enter to send)" → "Message {0} (Entrée
pour nouvelle ligne, Maj+Entrée pour envoyer)", and "Message {0} (Shift+Enter
for new line)" → "Message {0} (Maj+Entrée pour nouvelle ligne)") or other
approved copy, ensuring placeholders {0} remain intact.
In `@src/locales/it/messages.mjs`:
- Line 1: The Italian catalog contains English placeholders for "Message {0}"
variants—update the PO source with proper Italian msgstr entries for the message
keys found in the generated catalog (e.g., "pqr+oY", "mH+wEJ", "z0DY9w") and
then regenerate the JSON catalog (messages) so those keys render Italian strings
such as "Messaggio {0}" and the correct Enter/Shift+Enter variants.
In `@src/locales/it/messages.po`:
- Around line 1377-1390: Add Italian translations for the three empty msgstr
entries corresponding to the ChatArea channel placeholder strings; locate the
msgid entries "Message {0}", "Message {0} (Enter for new line, Shift+Enter to
send)", and "Message {0} (Shift+Enter for new line)" (placeholder {0}:
selectedChannel.name, referenced in src/components/layout/ChatArea.tsx) and fill
each msgstr with the appropriate Italian text (e.g., "Messaggio {0}", "Messaggio
{0} (Invio per nuova riga, Shift+Invio per inviare)", "Messaggio {0}
(Shift+Invio per nuova riga)") ensuring plural/format placeholders remain
intact.
In `@src/locales/ja/messages.mjs`:
- Line 1: The JA catalog still contains English for the new "Message {0}"
placeholders (keys mH+wEJ, pqr+oY, z0DY9w — and any similar "Message ",["0"]
entries); update the source PO to provide Japanese translations for those
message strings (e.g. translate "Message {0} (Enter for new line, Shift+Enter to
send)" and "Message {0} (Shift+Enter for new line)" and the bare "Message {0}")
and then regenerate the messages.mjs so the JSON entries for mH+wEJ, pqr+oY,
z0DY9w (and any other Message... keys) contain the Japanese text.
In `@src/locales/ja/messages.po`:
- Around line 1377-1390: The three Japanese translation entries for the ChatArea
placeholder strings are empty—populate the msgstr for the msgid values "Message
{0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0}
(Shift+Enter for new line)" in src/locales/ja/messages.po so the Japanese UI
doesn't fall back to English; preserve the {0} placeholder and the
keyboard-instruction text (Enter/Shift+Enter) in natural Japanese while keeping
the context (these are used by src/components/layout/ChatArea.tsx).
In `@src/locales/ko/messages.po`:
- Around line 1377-1390: The three Korean translations for the channel
placeholder prompts are missing; open the PO entries corresponding to the msgid
strings "Message {0}", "Message {0} (Enter for new line, Shift+Enter to send)",
and "Message {0} (Shift+Enter for new line)" (referenced from
src/components/layout/ChatArea.tsx) and populate their msgstr values with
appropriate Korean translations matching the placeholders (keep {0} intact) so
the UI shows localized placeholder text.
In `@src/locales/nl/messages.mjs`:
- Line 1: The Dutch locale still contains English "Message " entries; locate the
message keys "mH+wEJ", "pqr+oY" and "z0DY9w" in the messages JSON and replace
the English literal "Message " with the Dutch translation "Bericht " while
preserving the surrounding placeholder arrays (e.g. ["0"], "(Enter for new line,
Shift+Enter to send)", etc.); ensure you update only the string values for those
keys and keep the JSON structure intact so channel input placeholders render in
Dutch.
In `@src/locales/nl/messages.po`:
- Around line 1377-1390: Add Dutch translations for the three empty msgstr
entries in src/locales/nl/messages.po corresponding to the ChatArea
placeholders: "Message {0}", "Message {0} (Enter for new line, Shift+Enter to
send)", and "Message {0} (Shift+Enter for new line)". Edit the msgstr lines
directly under each msgid and provide concise Dutch equivalents that preserve
the placeholder {0} and the keyboard hints (e.g., "Bericht {0}", "Bericht {0}
(Enter voor nieuwe regel, Shift+Enter om te verzenden)", "Bericht {0}
(Shift+Enter voor nieuwe regel)"), ensuring punctuation and placeholders remain
unchanged.
In `@src/locales/pl/messages.po`:
- Around line 1377-1390: Fill the three empty msgstr entries in
src/locales/pl/messages.po for the ChatArea placeholders (msgid "Message {0}",
"Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0}
(Shift+Enter for new line)") with Polish translations so the UI shows Polish to
users; for example set them to "Wiadomość {0}", "Wiadomość {0} (Enter — nowa
linia, Shift+Enter — wyślij)", and "Wiadomość {0} (Shift+Enter — nowa linia)"
respectively, ensuring the placeholders ({0}) are kept intact and saved in the
file.
In `@src/locales/ro/messages.po`:
- Around line 1377-1390: The three new placeholder msgid strings used by
ChatArea.tsx ("Message {0}", "Message {0} (Enter for new line, Shift+Enter to
send)", "Message {0} (Shift+Enter for new line)") lack Romanian translations
(empty msgstrs); open the locale PO entries for those msgid values and provide
appropriate Romanian msgstr values that preserve the placeholder {0} and the
keyboard instructions (e.g., translate "Message" and the parenthetical
guidance), ensuring plural/placeholder formatting is unchanged and saving the
updated msgstr lines for each corresponding msgid.
In `@src/locales/ru/messages.mjs`:
- Line 1: The compiled RU catalog still contains English for the new "Message
{0}" variants; update src/locales/ru/messages.po to add Russian translations for
the keys mH+wEJ, pqr+oY and z0DY9w (the message placeholders that render
"Message {0}" / "Message {0} (Enter/Shift+Enter...)" ) and then regenerate the
compiled catalog so src/locales/ru/messages.mjs contains the localized Russian
strings.
In `@src/locales/ru/messages.po`:
- Around line 1377-1390: The Russian .po file has three empty translations for
ChatArea placeholders—fill the msgstr for each msgid ("Message {0}", "Message
{0} (Enter for new line, Shift+Enter to send)", and "Message {0} (Shift+Enter
for new line)") with correct Russian equivalents preserving the {0} placeholder
(e.g., "Сообщение {0}" and variants that include the keyboard hints in Russian),
ensuring punctuation and placeholder placement match the original strings so
ChatArea.tsx displays localized placeholders.
In `@src/locales/sv/messages.mjs`:
- Line 1: The sv bundle contains English fallbacks for the new message
placeholders pqr+oY, mH+wEJ and z0DY9w; open src/locales/sv/messages.po, add
proper Swedish translations for those message ids (the channel/message
placeholders), then re-run the locale compile/regeneration step you use to
produce src/locales/sv/messages.mjs so the JSON.parse map includes the Swedish
strings instead of the English fallbacks.
In `@src/locales/sv/messages.po`:
- Around line 1377-1390: The Swedish .po file is missing translations for three
new channel placeholder msgids used by src/components/layout/ChatArea.tsx; add
appropriate Swedish text into the corresponding msgstr entries for "Message
{0}", "Message {0} (Enter for new line, Shift+Enter to send)", and "Message {0}
(Shift+Enter for new line)" so the placeholders are shown in Swedish instead of
English.
In `@src/locales/tr/messages.mjs`:
- Line 1: The compiled Turkish bundle still contains English fallbacks for keys
pqr+oY, mH+wEJ and z0DY9w; update the Turkish source .po catalog with proper
Turkish translations for those message IDs (and any new placeholders), then
re-run the message build/regeneration step that produces
src/locales/tr/messages.mjs so the JSON.parse(...) output includes the Turkish
strings instead of English fallbacks.
In `@src/locales/tr/messages.po`:
- Around line 1377-1391: Fill the empty msgstr values for the three channel
placeholder entries so Turkish users see localized text: for msgid "Message {0}"
set msgstr to a Turkish variant like "{0} kanalına mesaj" (or "{0}'a mesaj"),
for "Message {0} (Enter for new line, Shift+Enter to send)" set msgstr to "{0}
kanalına mesaj (yeni satır için Enter, göndermek için Shift+Enter)", and for
"Message {0} (Shift+Enter for new line)" set msgstr to "{0} kanalına mesaj (yeni
satır için Shift+Enter)"; follow the pattern used in the nearby private message
placeholders (lines around the existing entries) to match punctuation and
spacing.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 93a185ff-5f4b-40e6-a6b2-fb0bb901d1d0
📒 Files selected for processing (48)
.github/workflows/docker.yamlBUILD.mdINSTALL.mdREADME.mdsrc-tauri/Entitlements.plistsrc-tauri/Info.plistsrc-tauri/tauri.conf.jsonsrc/components/layout/ChatArea.tsxsrc/lib/mediaProbe.tssrc/locales/cs/messages.mjssrc/locales/cs/messages.posrc/locales/de/messages.mjssrc/locales/de/messages.posrc/locales/en/messages.mjssrc/locales/en/messages.posrc/locales/es/messages.mjssrc/locales/es/messages.posrc/locales/fi/messages.mjssrc/locales/fi/messages.posrc/locales/fr/messages.mjssrc/locales/fr/messages.posrc/locales/it/messages.mjssrc/locales/it/messages.posrc/locales/ja/messages.mjssrc/locales/ja/messages.posrc/locales/ko/messages.mjssrc/locales/ko/messages.posrc/locales/nl/messages.mjssrc/locales/nl/messages.posrc/locales/pl/messages.mjssrc/locales/pl/messages.posrc/locales/pt/messages.mjssrc/locales/pt/messages.posrc/locales/ro/messages.mjssrc/locales/ro/messages.posrc/locales/ru/messages.mjssrc/locales/ru/messages.posrc/locales/sv/messages.mjssrc/locales/sv/messages.posrc/locales/tr/messages.mjssrc/locales/tr/messages.posrc/locales/uk/messages.mjssrc/locales/uk/messages.posrc/locales/zh-TW/messages.mjssrc/locales/zh-TW/messages.posrc/locales/zh/messages.mjssrc/locales/zh/messages.potests/lib/mediaProbe.test.ts
| "macOS": { | ||
| "minimumSystemVersion": "12.0", | ||
| "entitlements": "Entitlements.plist" | ||
| }, |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
How to configure custom Info.plist in Tauri 2.11.1 bundle.macOS section?
💡 Result:
To configure a custom Info.plist for a Tauri 2.11.1 macOS bundle, you should create a dedicated Info.plist file within your src-tauri directory and reference it in your tauri.conf.json configuration [1][2][3]. 1. Create a custom file: Create a file named Info.plist in your src-tauri folder and add your desired key-value pairs [1][3]. Example src-tauri/Info.plist: NSCameraUsageDescription Request camera access 2. Reference it in tauri.conf.json: Update your tauri.conf.json to point to this file under the bundle.macOS section using the infoPlist field [2]. { "bundle": { "macOS": { "infoPlist": "./Info.plist" } } } Tauri will merge the contents of this file with the default properties generated by the CLI [1]. Be cautious when overriding default values such as the application version or bundle identifier, as this can cause conflicts or unexpected behavior in your application bundle [1]. If you need to support multiple languages, create InfoPlist.strings files within language-specific.lproj directories and include them via the bundle.resources configuration [1]. Additionally, if your custom configuration requires Apple entitlements (such as security permissions), you should manage those separately in an entitlements file and reference it via the entitlements field in the same macOS bundle configuration block [3].
Citations:
- 1: https://v2.tauri.app/distribute/macos-application-bundle/
- 2: https://v2.tauri.app/reference/config/
- 3: https://v2.tauri.app/distribute/app-store/
Add bundle.macOS.infoPlist reference for camera/mic usage descriptions
You’re only setting entitlements in src-tauri/tauri.conf.json, and Tauri expects a custom Info.plist to be wired via bundle.macOS.infoPlist (e.g., "infoPlist": "./Info.plist") to merge in keys like NSMicrophoneUsageDescription and NSCameraUsageDescription. Without that explicit reference, the permission prompt strings may be missing.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src-tauri/tauri.conf.json` around lines 35 - 38, The tauri config only sets
"entitlements" under the macOS bundle; add a "infoPlist" reference so Tauri can
merge NSMicrophoneUsageDescription/NSCameraUsageDescription into the app
Info.plist. Update the JSON bundle.macOS object to include an "infoPlist" key
(e.g., "infoPlist": "./Info.plist") alongside "entitlements", and ensure your
Info.plist contains the NSMicrophoneUsageDescription and
NSCameraUsageDescription keys so the permission prompts have proper strings.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/components/PdfErrorBoundary.tsx (1)
22-28: ⚡ Quick winConsider accepting and logging error parameters for better debugging.
The error boundary methods typically accept error parameters that could be useful for debugging PDF rendering failures. While omitting them is valid, capturing error details would improve observability.
📊 Proposed enhancement to capture error details
- static getDerivedStateFromError() { + static getDerivedStateFromError(error: Error) { + console.error('PDF rendering error:', error); return { hasError: true }; } - componentDidCatch() { + componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { + console.error('PDF error boundary caught:', error, errorInfo); this.props.onError(); }Optionally, you could pass error details to the callback for production logging:
export class PdfErrorBoundary extends Component< - { onError: () => void; children: ReactNode }, + { onError: (error: Error, errorInfo: React.ErrorInfo) => void; children: ReactNode }, { hasError: boolean } > { // ... - componentDidCatch() { + componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { - this.props.onError(); + this.props.onError(error, errorInfo); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/PdfErrorBoundary.tsx` around lines 22 - 28, Update the PdfErrorBoundary to capture and forward error details: change static getDerivedStateFromError to accept the error parameter and return the same state, and change componentDidCatch to accept (error, info) and call this.props.onError(error, info) (or at minimum pass the error) so callers can log/inspect the error; ensure the PdfErrorBoundaryProps/onError type is updated to accept an optional error/info payload and that componentDidCatch still calls super or handles state as needed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/components/PdfErrorBoundary.tsx`:
- Around line 22-28: Update the PdfErrorBoundary to capture and forward error
details: change static getDerivedStateFromError to accept the error parameter
and return the same state, and change componentDidCatch to accept (error, info)
and call this.props.onError(error, info) (or at minimum pass the error) so
callers can log/inspect the error; ensure the PdfErrorBoundaryProps/onError type
is updated to accept an optional error/info payload and that componentDidCatch
still calls super or handles state as needed.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 497f0d86-02c6-4f7c-b930-f5409d3e68c8
📒 Files selected for processing (3)
src/components/PdfErrorBoundary.tsxsrc/components/message/MediaPreview.tsxsrc/components/ui/MediaViewerModal.tsx
1c0e1f1 to
c6395d3
Compare
|
Automated deployment preview for the PR in the Cloudflare Pages. |
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src-tauri/tauri.conf.json (1)
35-38:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd
infoPlistreference to wire Info.plist permission strings.The
bundle.macOSsection only referencesentitlementsbut does not include aninfoPlistfield. Without explicitly wiringInfo.plistvia"infoPlist": "./Info.plist", the usage description keys (NSCameraUsageDescription,NSMicrophoneUsageDescription) in yourInfo.plistfile won't be merged into the final app bundle, causing macOS permission prompts to display generic or missing strings.🛠️ Proposed fix
"macOS": { "minimumSystemVersion": "12.0", - "entitlements": "Entitlements.plist" + "entitlements": "Entitlements.plist", + "infoPlist": "./Info.plist" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src-tauri/tauri.conf.json` around lines 35 - 38, The bundle.macOS configuration currently sets "entitlements": "Entitlements.plist" but omits an infoPlist entry, so Info.plist permission strings (e.g., NSCameraUsageDescription / NSMicrophoneUsageDescription) won't be merged; add an "infoPlist": "./Info.plist" field to the same bundle.macOS object in tauri.conf.json (alongside the existing "entitlements": "Entitlements.plist") to ensure the Info.plist usage description keys are included in the final macOS app bundle.README.md (1)
2-4:⚠️ Potential issue | 🟠 Major | ⚡ Quick winUpdate README badges/demos to the Obby domains (fix broken GitHub Pages)
README.md87-88:https://obsidianirc.github.io/returns 404, so the “Demo on GitHub Pages” link (and the related GitHub Pages badge at 2-4) should be updated to the current Obby GitHub Pages URLs.README.md2-4:https://obsidianirc.pages.dev/is reachable (200) but still uses legacyobsidianircbranding—update for consistency with the Obby rebrand.README.mdincludes a Google Play badge that still uses legacycom.obsidianirc.dev; update to the correct Obby package ID if rebranded.- The Docker Hub endpoint
https://hub.docker.com/r/obbyirc/obbyalso returned 404 in the check; update if README references it.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@README.md` around lines 2 - 4, The README badges and demo links still point to legacy obsidianirc resources and some return 404; update the Cloudflare Pages badge URL, the GitHub Pages badge/link, the Google Play badge package id, and any Docker Hub link in README.md so they point to the current Obby domains and package name: replace the Cloudflare Pages badge/link (currently using obsidianirc.pages.dev) with the Obby Pages domain, swap the GitHub Pages URL/badge (currently obsidianirc.github.io) to the Obby GitHub Pages URL, change the Google Play badge package id (currently com.obsidianirc.dev) to the new Obby package id, and update the Docker Hub reference (if present) to the correct obbyirc/obby repository or remove it if deprecated; ensure each badge link and its image URL are consistent (image endpoint and target URL match) and test that each updated link returns 200.
🧹 Nitpick comments (1)
src/components/ui/RawLogViewer.tsx (1)
57-65: ⚡ Quick winInternationalize the title strings.
The title contains user-visible text "Raw IRC Log" that should be wrapped in
<Trans>for internationalization.🌐 Proposed fix to add i18n support
const title = server - ? `${server.name || server.host}:${server.port} — Raw IRC Log` - : "Raw IRC Log"; + ? ( + <Trans> + {server.name || server.host}:{server.port} — Raw IRC Log + </Trans> + ) + : <Trans>Raw IRC Log</Trans>; return ( <BaseModal isOpen={isOpen} onClose={closeRawLogViewer} - title={<span>{title}</span>} + title={title} maxWidth="2xl" >As per coding guidelines:
src/components/**/*.tsx: Wrap all user-visible text in LinguiJS<Trans>macro for JSX children to enable translation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/ui/RawLogViewer.tsx` around lines 57 - 65, The title string in RawLogViewer is not internationalized; update the title construction so user-visible text uses the LinguiJS <Trans> macro: wrap the "Raw IRC Log" default string and the interpolated title when server is falsy (and any JSX child passed into BaseModal's title prop) with <Trans>, ensuring the title const and the <span>{title}</span> passed to BaseModal (in the RawLogViewer component, referencing server, title, closeRawLogViewer, and BaseModal) render translatable text.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/publish.yaml:
- Around line 379-384: The workflow step named "Upload signed AAB artifact for
Google Play" pins the reusable action using the mutable tag
"actions/upload-artifact@v7"; replace that tag with the action's exact commit
SHA (the full 40-character commit hash for actions/upload-artifact) to harden
the supply chain so the step uses an immutable reference while preserving the
rest of the step (name, with.name, with.path, with.retention-days).
In `@AGENTS.md`:
- Line 32: Update the sentence that mentions the Nix hash sync flow to reflect
the PR-based process: change the clause that says `update-linux-nix` in
`publish.yaml` "syncs the hash to `main` on version tags" to say it opens a PR
to update the hash instead; edit the same line that mentions `nix build .#obby`,
`nix run .#update-npm-deps-hash`, and `publish.yaml` so the wording correctly
describes the workflow creating a pull request rather than directly syncing to
main.
In `@INSTALL.md`:
- Around line 60-61: Update the AppImage invocation patterns in INSTALL.md to
match published artifact names: replace occurrences of the glob
"Obby-*.AppImage" with the underscore-based pattern "Obby_*_*.AppImage" (or a
more permissive "Obby_*AppImage" if you prefer a single wildcard) so the chmod
and execution commands correctly match released files; update both occurrences
around the current blocks referencing "Obby-*.AppImage".
In `@src/components/layout/AppLayout.tsx`:
- Around line 157-176: Remove the unstable store action reference from the
useEffect dependency array in AppLayout: do not include openRawLogViewer there;
instead keep the effect independent of the action ref and rely on
useStore.getState() inside the handler; add the Biome suppression comment above
the useEffect to silence the exhaustive-deps rule: // biome-ignore
lint/correctness/useExhaustiveDependencies: store actions have unstable refs.
Ensure the rest of the effect (handler, event listeners, cleanup) remains
unchanged.
In `@src/locales/cs/messages.po`:
- Around line 690-693: Fill the empty Czech translations in
src/locales/cs/messages.po for the new UI strings by adding appropriate Czech
text to each msgstr corresponding to the given msgid values (e.g., the msgid
"Copy all" used by src/components/ui/RawLogViewer.tsx and the other msgids
referenced at lines 1391-1402 and 1605-1608); preserve any interpolation
placeholders like {0}, {1} and JSX positional tags like <0>, <1> exactly as-is
in the translated strings, and run npm run i18n:extract locally to verify there
are no remaining empty msgstr entries before committing.
In `@src/locales/de/messages.po`:
- Around line 690-693: Add German translations for the newly introduced strings
(e.g., msgid "Copy all" from src/components/ui/RawLogViewer.tsx and the other
empty msgstr entries at the ranges noted) by filling each msgstr with the
correct German text; ensure you preserve interpolation placeholders exactly
(e.g., {0}, {1}) and any JSX positional tags (e.g., <0>, <1>) unchanged, and run
npm run i18n:extract to confirm no other non-English .po files have empty msgstr
entries before committing.
In `@src/locales/es/messages.po`:
- Around line 690-693: There are empty Spanish translations for new user-visible
strings (e.g., the "Copy all" msgid used in RawLogViewer.tsx) causing fallback
to English; run the extraction step (npm run i18n:extract) to ensure all new
msgid entries are present, then fill the empty msgstr entries in
src/locales/es/messages.po (including the entries around lines referenced: the
"Copy all" entry and the other empty blocks at ~1389-1402 and ~1605-1608) with
proper Spanish translations before merging so Spanish users see the localized
text.
In `@src/locales/fi/messages.po`:
- Around line 690-693: Fill the missing Finnish translations for the
RawLogViewer strings by providing appropriate Finnish text in the msgstr fields
for the msgid "Copy all" and the other RawLogViewer msgid entries (the new
strings referenced in the review), replacing the empty msgstr values with
accurate translations; after updating the msgstr entries, run npm run
i18n:extract to verify there are no remaining empty translations in non-English
.po files and commit the updated .po file.
In `@src/locales/fr/messages.po`:
- Around line 690-693: The new RawLogViewer strings (msgid "Copy all" and the
other untranslated entry referenced) in src/components/ui/RawLogViewer.tsx are
missing French translations; open src/locales/fr/messages.po, provide
appropriate French text in the corresponding msgstr for the msgid "Copy all"
(and the other untranslated msgid around lines 1605-1608), save the .po file,
and re-run the i18n extraction/validation step (npm run i18n:extract) to ensure
no empty msgstr remain before committing.
In `@src/locales/it/messages.mjs`:
- Line 1: The Italian .mjs catalog contains untranslated English entries (e.g.
keys "/4C8U0" for "Copy all", "2F9+AZ" for "No raw IRC traffic captured yet. Try
connecting or sending a message.", and "z0DY9w" / "pqr+oY" message variants);
open src/locales/it/messages.po, provide proper Italian translations for those
msgids, save the .po, then run the i18n compile task (npm run i18n:compile) to
regenerate src/locales/it/messages.mjs and commit the updated .po and
regenerated .mjs so the catalog no longer ships English strings.
---
Outside diff comments:
In `@README.md`:
- Around line 2-4: The README badges and demo links still point to legacy
obsidianirc resources and some return 404; update the Cloudflare Pages badge
URL, the GitHub Pages badge/link, the Google Play badge package id, and any
Docker Hub link in README.md so they point to the current Obby domains and
package name: replace the Cloudflare Pages badge/link (currently using
obsidianirc.pages.dev) with the Obby Pages domain, swap the GitHub Pages
URL/badge (currently obsidianirc.github.io) to the Obby GitHub Pages URL, change
the Google Play badge package id (currently com.obsidianirc.dev) to the new Obby
package id, and update the Docker Hub reference (if present) to the correct
obbyirc/obby repository or remove it if deprecated; ensure each badge link and
its image URL are consistent (image endpoint and target URL match) and test that
each updated link returns 200.
In `@src-tauri/tauri.conf.json`:
- Around line 35-38: The bundle.macOS configuration currently sets
"entitlements": "Entitlements.plist" but omits an infoPlist entry, so Info.plist
permission strings (e.g., NSCameraUsageDescription /
NSMicrophoneUsageDescription) won't be merged; add an "infoPlist":
"./Info.plist" field to the same bundle.macOS object in tauri.conf.json
(alongside the existing "entitlements": "Entitlements.plist") to ensure the
Info.plist usage description keys are included in the final macOS app bundle.
---
Nitpick comments:
In `@src/components/ui/RawLogViewer.tsx`:
- Around line 57-65: The title string in RawLogViewer is not internationalized;
update the title construction so user-visible text uses the LinguiJS <Trans>
macro: wrap the "Raw IRC Log" default string and the interpolated title when
server is falsy (and any JSX child passed into BaseModal's title prop) with
<Trans>, ensuring the title const and the <span>{title}</span> passed to
BaseModal (in the RawLogViewer component, referencing server, title,
closeRawLogViewer, and BaseModal) render translatable text.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 40474e7e-41f8-439f-806e-c62d5d68770d
⛔ Files ignored due to path filters (14)
package-lock.jsonis excluded by!**/package-lock.jsonsrc-tauri/Cargo.lockis excluded by!**/*.locksrc-tauri/gen/android/app/src/main/AndroidManifest.xmlis excluded by!**/gen/**src-tauri/gen/android/app/src/main/res/values/strings.xmlis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.pbxprojis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.xcworkspace/contents.xcworkspacedatais excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettingsis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/xcshareddata/xcschemes/Obby_iOS.xcschemeis excluded by!**/gen/**src-tauri/gen/apple/Obby_iOS/Info.plistis excluded by!**/gen/**src-tauri/gen/apple/Obby_iOS/Obby_iOS.entitlementsis excluded by!**/gen/**src-tauri/gen/apple/Podfileis excluded by!**/gen/**src-tauri/gen/apple/Sources/Obby/bindings/bindings.his excluded by!**/gen/**src-tauri/gen/apple/Sources/Obby/main.mmis excluded by!**/gen/**src-tauri/gen/apple/project.ymlis excluded by!**/gen/**
📒 Files selected for processing (76)
.github/workflows/cloudflare_pages.yaml.github/workflows/publish.yamlAGENTS.mdARCHITECTURE.mdBUILD.mdCONTRIBUTING.mdINSTALL.mdREADME.mdflake.nixnix/hm-module.nixnix/obby.nixnix/overlay.nixnix/package-args.nixnix/update-npm-deps-hash.nixpackage.jsonpublic/sw.jssrc-tauri/Cargo.tomlsrc-tauri/Info.plistsrc-tauri/src/socket.rssrc-tauri/tauri.conf.jsonsrc/components/PrivacyPolicy.tsxsrc/components/layout/AppLayout.tsxsrc/components/ui/HomeScreen.tsxsrc/components/ui/RawLogViewer.tsxsrc/components/ui/UserSettings.tsxsrc/lib/branding.tssrc/lib/irc/IRCClient.tssrc/lib/irc/handlers/connection.tssrc/lib/ircUrlParser.tssrc/lib/settings/definitions/allSettings.tssrc/locales/cs/messages.mjssrc/locales/cs/messages.posrc/locales/de/messages.mjssrc/locales/de/messages.posrc/locales/en/messages.mjssrc/locales/en/messages.posrc/locales/es/messages.mjssrc/locales/es/messages.posrc/locales/fi/messages.mjssrc/locales/fi/messages.posrc/locales/fr/messages.mjssrc/locales/fr/messages.posrc/locales/it/messages.mjssrc/locales/it/messages.posrc/locales/ja/messages.mjssrc/locales/ja/messages.posrc/locales/ko/messages.mjssrc/locales/ko/messages.posrc/locales/nl/messages.mjssrc/locales/nl/messages.posrc/locales/pl/messages.mjssrc/locales/pl/messages.posrc/locales/pt/messages.mjssrc/locales/pt/messages.posrc/locales/ro/messages.mjssrc/locales/ro/messages.posrc/locales/ru/messages.mjssrc/locales/ru/messages.posrc/locales/sv/messages.mjssrc/locales/sv/messages.posrc/locales/tr/messages.mjssrc/locales/tr/messages.posrc/locales/uk/messages.mjssrc/locales/uk/messages.posrc/locales/zh-TW/messages.mjssrc/locales/zh-TW/messages.posrc/locales/zh/messages.mjssrc/locales/zh/messages.posrc/store/handlers/connection.tssrc/store/handlers/messages.tssrc/store/index.tstests/components/MetadataDisplay.test.tsxtests/lib/branding.test.tstests/lib/ircUrlParser.test.tstests/lib/nicknameRetry.test.tsvite.config.ts
✅ Files skipped from review due to trivial changes (7)
- nix/package-args.nix
- package.json
- src/locales/fr/messages.mjs
- CONTRIBUTING.md
- BUILD.md
- src/lib/settings/definitions/allSettings.ts
- src/locales/en/messages.mjs
🚧 Files skipped from review as they are similar to previous changes (4)
- src/locales/cs/messages.mjs
- src/locales/fi/messages.mjs
- src-tauri/Info.plist
- src/locales/de/messages.mjs
There was a problem hiding this comment.
Caution
Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src-tauri/tauri.conf.json (1)
35-38:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd
infoPlistreference to wire Info.plist permission strings.The
bundle.macOSsection only referencesentitlementsbut does not include aninfoPlistfield. Without explicitly wiringInfo.plistvia"infoPlist": "./Info.plist", the usage description keys (NSCameraUsageDescription,NSMicrophoneUsageDescription) in yourInfo.plistfile won't be merged into the final app bundle, causing macOS permission prompts to display generic or missing strings.🛠️ Proposed fix
"macOS": { "minimumSystemVersion": "12.0", - "entitlements": "Entitlements.plist" + "entitlements": "Entitlements.plist", + "infoPlist": "./Info.plist" },🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src-tauri/tauri.conf.json` around lines 35 - 38, The bundle.macOS configuration currently sets "entitlements": "Entitlements.plist" but omits an infoPlist entry, so Info.plist permission strings (e.g., NSCameraUsageDescription / NSMicrophoneUsageDescription) won't be merged; add an "infoPlist": "./Info.plist" field to the same bundle.macOS object in tauri.conf.json (alongside the existing "entitlements": "Entitlements.plist") to ensure the Info.plist usage description keys are included in the final macOS app bundle.README.md (1)
2-4:⚠️ Potential issue | 🟠 Major | ⚡ Quick winUpdate README badges/demos to the Obby domains (fix broken GitHub Pages)
README.md87-88:https://obsidianirc.github.io/returns 404, so the “Demo on GitHub Pages” link (and the related GitHub Pages badge at 2-4) should be updated to the current Obby GitHub Pages URLs.README.md2-4:https://obsidianirc.pages.dev/is reachable (200) but still uses legacyobsidianircbranding—update for consistency with the Obby rebrand.README.mdincludes a Google Play badge that still uses legacycom.obsidianirc.dev; update to the correct Obby package ID if rebranded.- The Docker Hub endpoint
https://hub.docker.com/r/obbyirc/obbyalso returned 404 in the check; update if README references it.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@README.md` around lines 2 - 4, The README badges and demo links still point to legacy obsidianirc resources and some return 404; update the Cloudflare Pages badge URL, the GitHub Pages badge/link, the Google Play badge package id, and any Docker Hub link in README.md so they point to the current Obby domains and package name: replace the Cloudflare Pages badge/link (currently using obsidianirc.pages.dev) with the Obby Pages domain, swap the GitHub Pages URL/badge (currently obsidianirc.github.io) to the Obby GitHub Pages URL, change the Google Play badge package id (currently com.obsidianirc.dev) to the new Obby package id, and update the Docker Hub reference (if present) to the correct obbyirc/obby repository or remove it if deprecated; ensure each badge link and its image URL are consistent (image endpoint and target URL match) and test that each updated link returns 200.
🧹 Nitpick comments (1)
src/components/ui/RawLogViewer.tsx (1)
57-65: ⚡ Quick winInternationalize the title strings.
The title contains user-visible text "Raw IRC Log" that should be wrapped in
<Trans>for internationalization.🌐 Proposed fix to add i18n support
const title = server - ? `${server.name || server.host}:${server.port} — Raw IRC Log` - : "Raw IRC Log"; + ? ( + <Trans> + {server.name || server.host}:{server.port} — Raw IRC Log + </Trans> + ) + : <Trans>Raw IRC Log</Trans>; return ( <BaseModal isOpen={isOpen} onClose={closeRawLogViewer} - title={<span>{title}</span>} + title={title} maxWidth="2xl" >As per coding guidelines:
src/components/**/*.tsx: Wrap all user-visible text in LinguiJS<Trans>macro for JSX children to enable translation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/ui/RawLogViewer.tsx` around lines 57 - 65, The title string in RawLogViewer is not internationalized; update the title construction so user-visible text uses the LinguiJS <Trans> macro: wrap the "Raw IRC Log" default string and the interpolated title when server is falsy (and any JSX child passed into BaseModal's title prop) with <Trans>, ensuring the title const and the <span>{title}</span> passed to BaseModal (in the RawLogViewer component, referencing server, title, closeRawLogViewer, and BaseModal) render translatable text.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/publish.yaml:
- Around line 379-384: The workflow step named "Upload signed AAB artifact for
Google Play" pins the reusable action using the mutable tag
"actions/upload-artifact@v7"; replace that tag with the action's exact commit
SHA (the full 40-character commit hash for actions/upload-artifact) to harden
the supply chain so the step uses an immutable reference while preserving the
rest of the step (name, with.name, with.path, with.retention-days).
In `@AGENTS.md`:
- Line 32: Update the sentence that mentions the Nix hash sync flow to reflect
the PR-based process: change the clause that says `update-linux-nix` in
`publish.yaml` "syncs the hash to `main` on version tags" to say it opens a PR
to update the hash instead; edit the same line that mentions `nix build .#obby`,
`nix run .#update-npm-deps-hash`, and `publish.yaml` so the wording correctly
describes the workflow creating a pull request rather than directly syncing to
main.
In `@INSTALL.md`:
- Around line 60-61: Update the AppImage invocation patterns in INSTALL.md to
match published artifact names: replace occurrences of the glob
"Obby-*.AppImage" with the underscore-based pattern "Obby_*_*.AppImage" (or a
more permissive "Obby_*AppImage" if you prefer a single wildcard) so the chmod
and execution commands correctly match released files; update both occurrences
around the current blocks referencing "Obby-*.AppImage".
In `@src/components/layout/AppLayout.tsx`:
- Around line 157-176: Remove the unstable store action reference from the
useEffect dependency array in AppLayout: do not include openRawLogViewer there;
instead keep the effect independent of the action ref and rely on
useStore.getState() inside the handler; add the Biome suppression comment above
the useEffect to silence the exhaustive-deps rule: // biome-ignore
lint/correctness/useExhaustiveDependencies: store actions have unstable refs.
Ensure the rest of the effect (handler, event listeners, cleanup) remains
unchanged.
In `@src/locales/cs/messages.po`:
- Around line 690-693: Fill the empty Czech translations in
src/locales/cs/messages.po for the new UI strings by adding appropriate Czech
text to each msgstr corresponding to the given msgid values (e.g., the msgid
"Copy all" used by src/components/ui/RawLogViewer.tsx and the other msgids
referenced at lines 1391-1402 and 1605-1608); preserve any interpolation
placeholders like {0}, {1} and JSX positional tags like <0>, <1> exactly as-is
in the translated strings, and run npm run i18n:extract locally to verify there
are no remaining empty msgstr entries before committing.
In `@src/locales/de/messages.po`:
- Around line 690-693: Add German translations for the newly introduced strings
(e.g., msgid "Copy all" from src/components/ui/RawLogViewer.tsx and the other
empty msgstr entries at the ranges noted) by filling each msgstr with the
correct German text; ensure you preserve interpolation placeholders exactly
(e.g., {0}, {1}) and any JSX positional tags (e.g., <0>, <1>) unchanged, and run
npm run i18n:extract to confirm no other non-English .po files have empty msgstr
entries before committing.
In `@src/locales/es/messages.po`:
- Around line 690-693: There are empty Spanish translations for new user-visible
strings (e.g., the "Copy all" msgid used in RawLogViewer.tsx) causing fallback
to English; run the extraction step (npm run i18n:extract) to ensure all new
msgid entries are present, then fill the empty msgstr entries in
src/locales/es/messages.po (including the entries around lines referenced: the
"Copy all" entry and the other empty blocks at ~1389-1402 and ~1605-1608) with
proper Spanish translations before merging so Spanish users see the localized
text.
In `@src/locales/fi/messages.po`:
- Around line 690-693: Fill the missing Finnish translations for the
RawLogViewer strings by providing appropriate Finnish text in the msgstr fields
for the msgid "Copy all" and the other RawLogViewer msgid entries (the new
strings referenced in the review), replacing the empty msgstr values with
accurate translations; after updating the msgstr entries, run npm run
i18n:extract to verify there are no remaining empty translations in non-English
.po files and commit the updated .po file.
In `@src/locales/fr/messages.po`:
- Around line 690-693: The new RawLogViewer strings (msgid "Copy all" and the
other untranslated entry referenced) in src/components/ui/RawLogViewer.tsx are
missing French translations; open src/locales/fr/messages.po, provide
appropriate French text in the corresponding msgstr for the msgid "Copy all"
(and the other untranslated msgid around lines 1605-1608), save the .po file,
and re-run the i18n extraction/validation step (npm run i18n:extract) to ensure
no empty msgstr remain before committing.
In `@src/locales/it/messages.mjs`:
- Line 1: The Italian .mjs catalog contains untranslated English entries (e.g.
keys "/4C8U0" for "Copy all", "2F9+AZ" for "No raw IRC traffic captured yet. Try
connecting or sending a message.", and "z0DY9w" / "pqr+oY" message variants);
open src/locales/it/messages.po, provide proper Italian translations for those
msgids, save the .po, then run the i18n compile task (npm run i18n:compile) to
regenerate src/locales/it/messages.mjs and commit the updated .po and
regenerated .mjs so the catalog no longer ships English strings.
---
Outside diff comments:
In `@README.md`:
- Around line 2-4: The README badges and demo links still point to legacy
obsidianirc resources and some return 404; update the Cloudflare Pages badge
URL, the GitHub Pages badge/link, the Google Play badge package id, and any
Docker Hub link in README.md so they point to the current Obby domains and
package name: replace the Cloudflare Pages badge/link (currently using
obsidianirc.pages.dev) with the Obby Pages domain, swap the GitHub Pages
URL/badge (currently obsidianirc.github.io) to the Obby GitHub Pages URL, change
the Google Play badge package id (currently com.obsidianirc.dev) to the new Obby
package id, and update the Docker Hub reference (if present) to the correct
obbyirc/obby repository or remove it if deprecated; ensure each badge link and
its image URL are consistent (image endpoint and target URL match) and test that
each updated link returns 200.
In `@src-tauri/tauri.conf.json`:
- Around line 35-38: The bundle.macOS configuration currently sets
"entitlements": "Entitlements.plist" but omits an infoPlist entry, so Info.plist
permission strings (e.g., NSCameraUsageDescription /
NSMicrophoneUsageDescription) won't be merged; add an "infoPlist":
"./Info.plist" field to the same bundle.macOS object in tauri.conf.json
(alongside the existing "entitlements": "Entitlements.plist") to ensure the
Info.plist usage description keys are included in the final macOS app bundle.
---
Nitpick comments:
In `@src/components/ui/RawLogViewer.tsx`:
- Around line 57-65: The title string in RawLogViewer is not internationalized;
update the title construction so user-visible text uses the LinguiJS <Trans>
macro: wrap the "Raw IRC Log" default string and the interpolated title when
server is falsy (and any JSX child passed into BaseModal's title prop) with
<Trans>, ensuring the title const and the <span>{title}</span> passed to
BaseModal (in the RawLogViewer component, referencing server, title,
closeRawLogViewer, and BaseModal) render translatable text.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 40474e7e-41f8-439f-806e-c62d5d68770d
⛔ Files ignored due to path filters (14)
package-lock.jsonis excluded by!**/package-lock.jsonsrc-tauri/Cargo.lockis excluded by!**/*.locksrc-tauri/gen/android/app/src/main/AndroidManifest.xmlis excluded by!**/gen/**src-tauri/gen/android/app/src/main/res/values/strings.xmlis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.pbxprojis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.xcworkspace/contents.xcworkspacedatais excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettingsis excluded by!**/gen/**src-tauri/gen/apple/Obby.xcodeproj/xcshareddata/xcschemes/Obby_iOS.xcschemeis excluded by!**/gen/**src-tauri/gen/apple/Obby_iOS/Info.plistis excluded by!**/gen/**src-tauri/gen/apple/Obby_iOS/Obby_iOS.entitlementsis excluded by!**/gen/**src-tauri/gen/apple/Podfileis excluded by!**/gen/**src-tauri/gen/apple/Sources/Obby/bindings/bindings.his excluded by!**/gen/**src-tauri/gen/apple/Sources/Obby/main.mmis excluded by!**/gen/**src-tauri/gen/apple/project.ymlis excluded by!**/gen/**
📒 Files selected for processing (76)
.github/workflows/cloudflare_pages.yaml.github/workflows/publish.yamlAGENTS.mdARCHITECTURE.mdBUILD.mdCONTRIBUTING.mdINSTALL.mdREADME.mdflake.nixnix/hm-module.nixnix/obby.nixnix/overlay.nixnix/package-args.nixnix/update-npm-deps-hash.nixpackage.jsonpublic/sw.jssrc-tauri/Cargo.tomlsrc-tauri/Info.plistsrc-tauri/src/socket.rssrc-tauri/tauri.conf.jsonsrc/components/PrivacyPolicy.tsxsrc/components/layout/AppLayout.tsxsrc/components/ui/HomeScreen.tsxsrc/components/ui/RawLogViewer.tsxsrc/components/ui/UserSettings.tsxsrc/lib/branding.tssrc/lib/irc/IRCClient.tssrc/lib/irc/handlers/connection.tssrc/lib/ircUrlParser.tssrc/lib/settings/definitions/allSettings.tssrc/locales/cs/messages.mjssrc/locales/cs/messages.posrc/locales/de/messages.mjssrc/locales/de/messages.posrc/locales/en/messages.mjssrc/locales/en/messages.posrc/locales/es/messages.mjssrc/locales/es/messages.posrc/locales/fi/messages.mjssrc/locales/fi/messages.posrc/locales/fr/messages.mjssrc/locales/fr/messages.posrc/locales/it/messages.mjssrc/locales/it/messages.posrc/locales/ja/messages.mjssrc/locales/ja/messages.posrc/locales/ko/messages.mjssrc/locales/ko/messages.posrc/locales/nl/messages.mjssrc/locales/nl/messages.posrc/locales/pl/messages.mjssrc/locales/pl/messages.posrc/locales/pt/messages.mjssrc/locales/pt/messages.posrc/locales/ro/messages.mjssrc/locales/ro/messages.posrc/locales/ru/messages.mjssrc/locales/ru/messages.posrc/locales/sv/messages.mjssrc/locales/sv/messages.posrc/locales/tr/messages.mjssrc/locales/tr/messages.posrc/locales/uk/messages.mjssrc/locales/uk/messages.posrc/locales/zh-TW/messages.mjssrc/locales/zh-TW/messages.posrc/locales/zh/messages.mjssrc/locales/zh/messages.posrc/store/handlers/connection.tssrc/store/handlers/messages.tssrc/store/index.tstests/components/MetadataDisplay.test.tsxtests/lib/branding.test.tstests/lib/ircUrlParser.test.tstests/lib/nicknameRetry.test.tsvite.config.ts
✅ Files skipped from review due to trivial changes (7)
- nix/package-args.nix
- package.json
- src/locales/fr/messages.mjs
- CONTRIBUTING.md
- BUILD.md
- src/lib/settings/definitions/allSettings.ts
- src/locales/en/messages.mjs
🚧 Files skipped from review as they are similar to previous changes (4)
- src/locales/cs/messages.mjs
- src/locales/fi/messages.mjs
- src-tauri/Info.plist
- src/locales/de/messages.mjs
🛑 Comments failed to post (10)
.github/workflows/publish.yaml (1)
379-384:
⚠️ Potential issue | 🟠 Major | ⚡ Quick win🧩 Analysis chain
🏁 Script executed:
#!/bin/bash # Verify mutable action refs in this workflow rg -nP '^\s*uses:\s*[^@]+@v[0-9]+(\.[0-9]+)?(\.[0-9]+)?\s*$' .github/workflows/publish.yamlRepository: obbyworld/obby
Length of output: 1940
🏁 Script executed:
#!/bin/bash # Find mutable action refs like actions/*`@v1/v2/v3`... rg -nP '^\s*uses:\s*[^@]+@v[0-9]+(\.[0-9]+)?(\.[0-9]+)?\s*$' .github/workflows/publish.yamlRepository: obbyworld/obby
Length of output: 1959
🏁 Script executed:
#!/bin/bash # Look for mutable action refs like actions/*`@v1/v2/v3`... rg -nP '^\s*uses:\s*[^@]+@v[0-9]+(\.[0-9]+)?(\.[0-9]+)?\s*$' .github/workflows/publish.yamlRepository: obbyworld/obby
Length of output: 1959
Pin
actions/upload-artifactto a full commit SHA (avoid mutable@v7).
The workflow usesactions/upload-artifact@v7; pin to the exact commit SHA for supply-chain hardening.🔒 Suggested fix
- - name: Upload signed AAB artifact for Google Play - uses: actions/upload-artifact@v7 + - name: Upload signed AAB artifact for Google Play + uses: actions/upload-artifact@<full_commit_sha_for_v7>🧰 Tools
🪛 zizmor (1.25.2)
[error] 380-380: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/publish.yaml around lines 379 - 384, The workflow step named "Upload signed AAB artifact for Google Play" pins the reusable action using the mutable tag "actions/upload-artifact@v7"; replace that tag with the action's exact commit SHA (the full 40-character commit hash for actions/upload-artifact) to harden the supply chain so the step uses an immutable reference while preserving the rest of the step (name, with.name, with.path, with.retention-days).AGENTS.md (1)
32-32:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUpdate wording to match the new PR-based nix hash flow.
Line 32 says the workflow syncs directly to
main, but.github/workflows/publish.yamlnow opens a PR for that update.✏️ Suggested wording
-- **`nix build .#obby`** — produces `result/bin/Obby`. When `package-lock.json` changes, run `nix run .#update-npm-deps-hash` if you have Nix locally; otherwise `update-linux-nix` in [`publish.yaml`](.github/workflows/publish.yaml) syncs the hash to `main` on version tags. +- **`nix build .#obby`** — produces `result/bin/Obby`. When `package-lock.json` changes, run `nix run .#update-npm-deps-hash` if you have Nix locally; otherwise `update-linux-nix` in [`publish.yaml`](.github/workflows/publish.yaml) opens/updates a PR with the hash change on version tags.📝 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.- **`nix build .#obby`** — produces `result/bin/Obby`. When `package-lock.json` changes, run `nix run .#update-npm-deps-hash` if you have Nix locally; otherwise `update-linux-nix` in [`publish.yaml`](.github/workflows/publish.yaml) opens/updates a PR with the hash change on version tags.🧰 Tools
🪛 LanguageTool
[uncategorized] ~32-~32: The official name of this software platform is spelled with a capital “H”.
Context: ...ocally; otherwiseupdate-linux-nixinpublish.yamlsyncs the hash ...(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@AGENTS.md` at line 32, Update the sentence that mentions the Nix hash sync flow to reflect the PR-based process: change the clause that says `update-linux-nix` in `publish.yaml` "syncs the hash to `main` on version tags" to say it opens a PR to update the hash instead; edit the same line that mentions `nix build .#obby`, `nix run .#update-npm-deps-hash`, and `publish.yaml` so the wording correctly describes the workflow creating a pull request rather than directly syncing to main.INSTALL.md (1)
60-61:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix AppImage wildcard pattern to match published filenames.
These commands use
Obby-*.AppImage, but release artifacts use underscore naming (Obby_*_*.AppImage), so the glob may not match.🧩 Suggested fix
- chmod +x Obby-*.AppImage - ./Obby-*.AppImage + chmod +x Obby_*.AppImage + ./Obby_*.AppImage ... -chmod +x Obby-*.AppImage -./Obby-*.AppImage +chmod +x Obby_*.AppImage +./Obby_*.AppImageAlso applies to: 74-75
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@INSTALL.md` around lines 60 - 61, Update the AppImage invocation patterns in INSTALL.md to match published artifact names: replace occurrences of the glob "Obby-*.AppImage" with the underscore-based pattern "Obby_*_*.AppImage" (or a more permissive "Obby_*AppImage" if you prefer a single wildcard) so the chmod and execution commands correctly match released files; update both occurrences around the current blocks referencing "Obby-*.AppImage".src/components/layout/AppLayout.tsx (1)
157-176:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove store action from dependency array.
Per coding guidelines, store action refs should not be in
useEffectdependency arrays because they have unstable refs. RemoveopenRawLogViewerfrom the dependency array and add a Biome suppression comment.♻️ Proposed fix
const openRawLogViewer = useStore((s) => s.openRawLogViewer); useEffect(() => { + // biome-ignore lint/correctness/useExhaustiveDependencies: store actions have unstable refs const handler = (event: KeyboardEvent) => { if ( event.ctrlKey && event.shiftKey && (event.key === "L" || event.key === "l") ) { const state = useStore.getState(); const targetServerId = state.ui.selectedServerId ?? state.servers[0]?.id ?? null; if (targetServerId) { event.preventDefault(); openRawLogViewer(targetServerId); } } }; window.addEventListener("keydown", handler); return () => window.removeEventListener("keydown", handler); - }, [openRawLogViewer]); + }, []);As per coding guidelines:
src/**/*.tsx: Never put store action refs inuseEffectdependency arrays; suppress Biome with// biome-ignore lint/correctness/useExhaustiveDependencies: store actions have unstable refs.📝 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 openRawLogViewer = useStore((s) => s.openRawLogViewer); // biome-ignore lint/correctness/useExhaustiveDependencies: store actions have unstable refs useEffect(() => { const handler = (event: KeyboardEvent) => { if ( event.ctrlKey && event.shiftKey && (event.key === "L" || event.key === "l") ) { const state = useStore.getState(); const targetServerId = state.ui.selectedServerId ?? state.servers[0]?.id ?? null; if (targetServerId) { event.preventDefault(); openRawLogViewer(targetServerId); } } }; window.addEventListener("keydown", handler); return () => window.removeEventListener("keydown", handler); }, []);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/layout/AppLayout.tsx` around lines 157 - 176, Remove the unstable store action reference from the useEffect dependency array in AppLayout: do not include openRawLogViewer there; instead keep the effect independent of the action ref and rely on useStore.getState() inside the handler; add the Biome suppression comment above the useEffect to silence the exhaustive-deps rule: // biome-ignore lint/correctness/useExhaustiveDependencies: store actions have unstable refs. Ensure the rest of the effect (handler, event listeners, cleanup) remains unchanged.src/locales/cs/messages.po (1)
690-693:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill missing Czech translations for newly added UI strings.
These new user-facing entries have empty
msgstrvalues, so Czech users will see untranslated text in chat input and raw-log UI paths. Please add Czech translations and keep placeholders (for example{0}) unchanged.Based on learnings: "When adding new user-visible strings, run
npm run i18n:extractand translate all emptymsgstrentries across non-English.pofiles before committing"; and as per coding guidelines: "When translating new strings, preserve{0},{1}interpolation placeholders and<0>,<1>JSX positional tags literally."Also applies to: 1391-1402, 1605-1608
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/cs/messages.po` around lines 690 - 693, Fill the empty Czech translations in src/locales/cs/messages.po for the new UI strings by adding appropriate Czech text to each msgstr corresponding to the given msgid values (e.g., the msgid "Copy all" used by src/components/ui/RawLogViewer.tsx and the other msgids referenced at lines 1391-1402 and 1605-1608); preserve any interpolation placeholders like {0}, {1} and JSX positional tags like <0>, <1> exactly as-is in the translated strings, and run npm run i18n:extract locally to verify there are no remaining empty msgstr entries before committing.src/locales/de/messages.po (1)
690-693:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winComplete German translations for new strings before merge.
msgstris empty for newly introduced text, which leaves parts of the German UI untranslated (message box placeholders and raw-log viewer). Please provide German values and preserve placeholders like{0}exactly.Based on learnings: "When adding new user-visible strings, run
npm run i18n:extractand translate all emptymsgstrentries across non-English.pofiles before committing"; and as per coding guidelines: "When translating new strings, preserve{0},{1}interpolation placeholders and<0>,<1>JSX positional tags literally."Also applies to: 1391-1402, 1605-1608
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/de/messages.po` around lines 690 - 693, Add German translations for the newly introduced strings (e.g., msgid "Copy all" from src/components/ui/RawLogViewer.tsx and the other empty msgstr entries at the ranges noted) by filling each msgstr with the correct German text; ensure you preserve interpolation placeholders exactly (e.g., {0}, {1}) and any JSX positional tags (e.g., <0>, <1>) unchanged, and run npm run i18n:extract to confirm no other non-English .po files have empty msgstr entries before committing.src/locales/es/messages.po (1)
690-693:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winComplete the new Spanish translations before merge.
Line 692, Lines 1392-1402, and Line 1607 have empty
msgstr, so these strings currently fall back to English for Spanish users.💡 Suggested patch
#: src/components/ui/RawLogViewer.tsx msgid "Copy all" -msgstr "" +msgstr "Copiar todo" #: src/components/layout/ChatArea.tsx msgid "Message {0}" -msgstr "" +msgstr "Mensaje {0}" #: src/components/layout/ChatArea.tsx msgid "Message {0} (Enter for new line, Shift+Enter to send)" -msgstr "" +msgstr "Mensaje {0} (Intro para nueva línea, Mayús+Intro para enviar)" #: src/components/layout/ChatArea.tsx msgid "Message {0} (Shift+Enter for new line)" -msgstr "" +msgstr "Mensaje {0} (Mayús+Intro para nueva línea)" #: src/components/ui/RawLogViewer.tsx msgid "No raw IRC traffic captured yet. Try connecting or sending a message." -msgstr "" +msgstr "Aún no se ha capturado tráfico IRC sin procesar. Prueba a conectarte o enviar un mensaje."Based on learnings: "When adding new user-visible strings, run
npm run i18n:extractand translate all emptymsgstrentries across non-English.pofiles before committing".Also applies to: 1389-1402, 1605-1608
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/es/messages.po` around lines 690 - 693, There are empty Spanish translations for new user-visible strings (e.g., the "Copy all" msgid used in RawLogViewer.tsx) causing fallback to English; run the extraction step (npm run i18n:extract) to ensure all new msgid entries are present, then fill the empty msgstr entries in src/locales/es/messages.po (including the entries around lines referenced: the "Copy all" entry and the other empty blocks at ~1389-1402 and ~1605-1608) with proper Spanish translations before merging so Spanish users see the localized text.src/locales/fi/messages.po (1)
690-693:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFill missing Finnish translations for new RawLogViewer strings.
These entries are still empty and will fall back to source language in the Finnish UI. Please add
msgstrvalues for both new strings before merge.Based on learnings: When adding new user-visible strings, run
npm run i18n:extractand translate all emptymsgstrentries across non-English.pofiles before committing.Also applies to: 1605-1608
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/fi/messages.po` around lines 690 - 693, Fill the missing Finnish translations for the RawLogViewer strings by providing appropriate Finnish text in the msgstr fields for the msgid "Copy all" and the other RawLogViewer msgid entries (the new strings referenced in the review), replacing the empty msgstr values with accurate translations; after updating the msgstr entries, run npm run i18n:extract to verify there are no remaining empty translations in non-English .po files and commit the updated .po file.src/locales/fr/messages.po (1)
690-693:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winComplete French translations for the newly added RawLogViewer strings.
Both new entries are currently untranslated (
msgstr ""), so French users will see fallback language text.Based on learnings: When adding new user-visible strings, run
npm run i18n:extractand translate all emptymsgstrentries across non-English.pofiles before committing.Also applies to: 1605-1608
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/fr/messages.po` around lines 690 - 693, The new RawLogViewer strings (msgid "Copy all" and the other untranslated entry referenced) in src/components/ui/RawLogViewer.tsx are missing French translations; open src/locales/fr/messages.po, provide appropriate French text in the corresponding msgstr for the msgid "Copy all" (and the other untranslated msgid around lines 1605-1608), save the .po file, and re-run the i18n extraction/validation step (npm run i18n:extract) to ensure no empty msgstr remain before committing.src/locales/it/messages.mjs (1)
1-1:
⚠️ Potential issue | 🟡 Minor | ⚡ Quick winItalian catalog still ships new UI strings in English.
The regenerated payload includes untranslated entries (e.g., “Copy all”, “No raw IRC traffic captured yet…”, and channel “Message …” variants). Please translate these in
src/locales/it/messages.poand recompile catalogs.As per coding guidelines:
src/locales/**/*.po: After adding new strings,npm run i18n:compileregenerates.mjscatalog files before committingsrc/locales/.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/locales/it/messages.mjs` at line 1, The Italian .mjs catalog contains untranslated English entries (e.g. keys "/4C8U0" for "Copy all", "2F9+AZ" for "No raw IRC traffic captured yet. Try connecting or sending a message.", and "z0DY9w" / "pqr+oY" message variants); open src/locales/it/messages.po, provide proper Italian translations for those msgids, save the .po, then run the i18n compile task (npm run i18n:compile) to regenerate src/locales/it/messages.mjs and commit the updated .po and regenerated .mjs so the catalog no longer ships English strings.
Rename in docker.yaml workflow + README badge + INSTALL.md + BUILD.md.
Companion repos: https://github.com/ObsidianIRC/obby-stack | https://github.com/ObsidianIRC/obby-helm
Summary by CodeRabbit
Chores
New Features
Bug Fixes
Localization