Background
Split out from PR #9150 (reviewing email copy before localization). During review, @jesseallhands suggested rewording the moderator-note email/push copy from "moderator note" to "message from the moderators" (e.g. subject → "You have received a message from the moderators", view action → "View moderator message").
We deferred this because "mod(erator) note" is a term we use consistently across many surfaces, so changing the user-facing wording in one place would make it inconsistent with the rest. It should be done holistically in its own PR.
cc @aapeliv @jesseallhands — let's align on the exact target wording before someone picks this up. Candidates raised so far: "message from the moderators" / "moderator message".
Scope
This is a user-facing copy change only. The term currently appears in ~232 places across 61 files, but most are internal identifiers that should not change.
Should change (user-visible strings)
Email copy:
app/backend/src/couchers/email/locales/en.json — moderator_note.subject / .purpose / .view_action (around L271-274)
Push / notification copy:
app/backend/src/couchers/notifications/locales/en.json — event_description, title ("New moderator note"), ios_title, body (around L330-334)
Backend i18n / error messages:
app/backend/src/couchers/i18n/locales/en.json — moderator_note_need_to_acknowledge, moderator_note_not_found (L144-145)
Web jail UI copy:
app/web/features/auth/locales/en.json — title, description, note_title (L161-163)
app/web/features/mod/locales/en.json — pending_mod_notes_count, acknowledged_mod_notes_count labels (L24-25)
Note: the non-English locale JSONs hold the same keys, but since this copy is about to be (re)localized, the translation side can be handled through the normal localization flow.
Should NOT change (keep as-is)
- Proto fields/messages (
ModNote, SendModNote, mod_notes, has_pending_mod_notes, etc. in account.proto, admin.proto, jail.proto) — field numbers and names are permanent wire format; renaming them is off-limits.
- DB schema —
mod_note table / model (models/mod_note.py, migration 0069_add_mod_notes.py).
- Code symbols (servicer methods, web service functions, component names like
ModNoteSection/ModNoteCard) — optional internal-consistency churn, not required for the user-facing goal. If we do touch them it should be clearly separated from the copy change.
Open questions
- Final wording: "message from the moderators" vs "moderator message" vs something else? (subject lines, push titles, and the jail UI heading should all match)
- Do we want to also rename internal code symbols for consistency, or keep them as
ModNote to avoid a large diff?
Related: PR #9150
Background
Split out from PR #9150 (reviewing email copy before localization). During review, @jesseallhands suggested rewording the moderator-note email/push copy from "moderator note" to "message from the moderators" (e.g. subject → "You have received a message from the moderators", view action → "View moderator message").
We deferred this because "mod(erator) note" is a term we use consistently across many surfaces, so changing the user-facing wording in one place would make it inconsistent with the rest. It should be done holistically in its own PR.
cc @aapeliv @jesseallhands — let's align on the exact target wording before someone picks this up. Candidates raised so far: "message from the moderators" / "moderator message".
Scope
This is a user-facing copy change only. The term currently appears in ~232 places across 61 files, but most are internal identifiers that should not change.
Should change (user-visible strings)
Email copy:
app/backend/src/couchers/email/locales/en.json—moderator_note.subject/.purpose/.view_action(around L271-274)Push / notification copy:
app/backend/src/couchers/notifications/locales/en.json—event_description,title("New moderator note"),ios_title,body(around L330-334)Backend i18n / error messages:
app/backend/src/couchers/i18n/locales/en.json—moderator_note_need_to_acknowledge,moderator_note_not_found(L144-145)Web jail UI copy:
app/web/features/auth/locales/en.json—title,description,note_title(L161-163)app/web/features/mod/locales/en.json—pending_mod_notes_count,acknowledged_mod_notes_countlabels (L24-25)Note: the non-English locale JSONs hold the same keys, but since this copy is about to be (re)localized, the translation side can be handled through the normal localization flow.
Should NOT change (keep as-is)
ModNote,SendModNote,mod_notes,has_pending_mod_notes, etc. inaccount.proto,admin.proto,jail.proto) — field numbers and names are permanent wire format; renaming them is off-limits.mod_notetable / model (models/mod_note.py, migration0069_add_mod_notes.py).ModNoteSection/ModNoteCard) — optional internal-consistency churn, not required for the user-facing goal. If we do touch them it should be clearly separated from the copy change.Open questions
ModNoteto avoid a large diff?Related: PR #9150