Files
jobtrackingapp/automation/prompts/I18N/04_I18N_03_BACKEND_NOTIFICATIONS.md
T

4.5 KiB

I18N-03 — Backend, Email, Notifications, Jobs and Operational Messages

Objective

Localise backend-facing user messages, communication templates and async workflows so a European-language UI does not degrade to English-only email/error flows or misinterpret locale-dependent data.

Tasks

  1. Inspect ASP.NET APIs, validation errors, typed error codes, authorization messages, scheduled background jobs, mail providers/templates, reminders, application status events, strategy generation, import processing, admin diagnostics and Python sidecar responses.
  2. Prefer stable machine-readable error codes with localisation on the presenting client; localise truly server-rendered communications at source. Do not return translated unstructured errors as API contracts relied on by frontend automation.
  3. Persist locale selection at event creation (or establish explicit current-preference policy) so queued email, reminders and background events render deterministically even if language changes later. Preserve UTC timestamps internally and localise display based on timezone/locale.
  4. Translate email subject, preview, button, footer and accessible plain-text parts for account verification, password reset, application reminders, import results and relevant notifications. Validate safe escaping in HTML and text; do not accidentally translate tokens, URLs, codes, user CV content or email addresses.
  5. Make plural/time/number formatting consistent across .NET, React and Python; design locale-aware error detail for admin logs while keeping immutable invariant error codes. Avoid PII in logs; don't create a multilingual free-text search dependency on logs.
  6. Pricing, billing and legal messages must use approved market-specific wording and actual tax/currency entitlements; require legal/owner review. Language selection must not change payment currency or jurisdiction.
  7. E2E test delivery in isolated Mailpit/test setup, queue retries, wrong/missing locale, recipient locale, cancellation, language change mid-queue, and tenant isolation.

Checkpoints

I18N-03A backend errors/contracts; 03B email templates; 03C queued events/notification consistency; 03D billing/legal boundary and full integration tests.

Deliverables

docs/i18n/03/BACKEND_ERRORS.md, EMAIL_TEMPLATES.md, QUEUED_LOCALE_POLICY.md, BILLING_LEGAL_GATES.md, TEST_RESULTS.md.

Acceptance

Critical user communication is localised for each activated locale; all error codes remain stable; no secret/PII leakage; critical legal and billing copy remains blocked pending human approvals. Actual test results and source branch recorded.


Execution and evidence rules (mandatory in every stage)

  • Read the current repository, Phase 10/product-review/global-jobs/homepage acceptance and the preceding I18N stage handoff. Verify rather than assuming a historical milestone is complete.
  • Use the latest accepted development integration baseline and a dedicated stage branch. Never assume main contains redesign work. Confirm ancestry, active worktrees and clean state; do not clobber concurrent Codex work.
  • Inspect existing React/.NET/MariaDB and localisation patterns before introducing packages. Choose based on verified compatibility, not guessed APIs. Preserve old English/Norwegian data and behaviour.
  • Work autonomously on approved, safely executable checkpoints. For each: implement, run targeted tests, write evidence, commit and push to the development branch, verify remote HEAD. If Gitea is unreachable, preserve the commit and report publication as BLOCKED. No force push.
  • Never merge into main, trigger production deployment, touch live MariaDB/Docker/Ollama, expose production credentials, buy services, or self-approve a security/linguistic/legal exception. No production data in translation/test fixtures.
  • Mark each capability IMPLEMENTED, AUTOMATED-TESTED, HUMAN-REVIEWED, ACCEPTED, RELEASED or BLOCKED independently. Preserve evidence of failures and incompleteness. Stage can conditionally complete when documented and authorised; locale publication requires its own gates.
  • Never modify source career facts, user-created CV text, employer descriptions, qualification titles or legal content as a side-effect of switching UI language. Human-authored content is not interface chrome.
  • On completion give: branch, commit hashes, remote publication state, implemented scope, actual test counts and commands, remaining risks/owner actions, next-stage eligibility and Production NO-GO unless explicitly authorised after all release gates.