t('header.navigation.' ~ current_page) made the static i18n scanner
collect the bare prefix 'header.navigation.' as a key of its own, so
test_static_sources_only_use_existing_translations failed on main and
took both backend jobs down with it.
Resolve the key through a variable (t(page_title_key)), the same shape
the search placeholder already uses, keeping the literal prefix out of
the t() call. Rendered output is unchanged for every page.
Also add templates/** and locales/** to the backend workflow paths:
those are the inputs the i18n tests read, so a template- or locale-only
change could previously skip the very job that validates it.
The backend suite only ever ran on ubuntu-latest, which is why #1146 shipped:
every configured model root counted twice, the duplicate shadowed the live root
as unreachable, and models deleted from disk were never pruned again. That whole
class of bug depends on `os.sep`/`os.name`, so a Linux-only matrix cannot see it.
* New `pytest-windows` job on `windows-latest` running the same suite. No
coverage upload: the Linux job keeps producing that artifact.
* Informational for now (`continue-on-error: true`) so pre-existing Windows
failures surface in the Actions UI without blocking merges; the flag comes off
once the suite is Windows-clean.
* The symlink probe reports instead of aborting: `os.symlink` needs Developer
Mode or an elevated shell on Windows, and a runner without it should still show
the real test results.
- Add scripts/update_supporters.py to generate supporter list from JSON
- Set up GitHub Action to auto-update README.md on supporters.json change
- Update README.md with placeholders and personalized gratitude message
Add a Python script step to verify that the CI environment supports directory symlinks before running tests. This ensures that symlink-dependent tests will not fail due to environment limitations.