Twenty-four languages are translated before anybody has read the English once #182

Closed
opened 2026-09-12 09:11:00 +00:00 by tiagoagueda · 0 comments
Owner

Observation

test_every_european_union_language_stays_complete holds the twenty-four European Union
catalogues at 100%, in every set, on every commit. It has done its job — 0.2.0 finished those
languages and nothing has quietly dropped one since.

What it also does is make adding one user-facing string cost twenty-four translations,
before the string has been read by anybody, made by the same hand that wrote the English a
minute earlier. That is real work with no reader, and it is paid on a draft: the wording
changes, and the twenty-four change with it, or worse, do not.

The promise is about a published version — what somebody installs should not have a gap
in a language Postulo offers them. It was never a promise about a branch halfway through a
feature.

What changes

  • A release marker: a promise that must hold in a published version, not in every commit.
  • addopts deselects it, as it already deselects e2e:
    -m 'not e2e and not release'. CI's uv run pytest --cov picks that up unchanged.
  • test_every_european_union_language_stays_complete is marked with it. Nothing else is,
    yet.
  • Step 1 of Making a release in CONTRIBUTING.md becomes uv run pytest -m release,
    before the changelog is moved or anything is tagged, with what to do when it names a gap.

Ordinary work translates English, French and European Portuguese — enough to see a change
in three languages and catch what only shows up in one, which is how the long German string
that broke a row in #165 was found. The rest are swept up once, deliberately, against strings
that have settled.

What this does not do

  • It does not lower the bar for a release. The same twenty-four have to be complete, checked
    by the same assertions, and the check is now first in the release list rather than
    implicit in a suite that had already run.
  • It does not touch the other translation tests. Plural rules, placeholder consistency,
    catalogue currency, the "a started catalogue actually translates" gate and the render-in-
    every-language walk all still run on every commit, because those catch mistakes rather than
    measure completeness.
  • It does not touch the African catalogues, which were never in this gate — a language is not
    offered until somebody starts it.

The risk, stated

Somebody can now commit a string that only three languages have. That is the point, and it is
only safe because the release step is a hard gate rather than a note. If releases start going
out with -m release skipped, this was a mistake and should be reverted.

## Observation `test_every_european_union_language_stays_complete` holds the twenty-four European Union catalogues at 100%, in every set, on every commit. It has done its job — 0.2.0 finished those languages and nothing has quietly dropped one since. What it also does is make **adding one user-facing string cost twenty-four translations**, before the string has been read by anybody, made by the same hand that wrote the English a minute earlier. That is real work with no reader, and it is paid on a draft: the wording changes, and the twenty-four change with it, or worse, do not. The promise is about a **published version** — what somebody installs should not have a gap in a language Postulo offers them. It was never a promise about a branch halfway through a feature. ## What changes - A `release` marker: *a promise that must hold in a published version, not in every commit*. - `addopts` deselects it, as it already deselects `e2e`: `-m 'not e2e and not release'`. CI's `uv run pytest --cov` picks that up unchanged. - `test_every_european_union_language_stays_complete` is marked with it. Nothing else is, yet. - **Step 1 of *Making a release*** in `CONTRIBUTING.md` becomes `uv run pytest -m release`, before the changelog is moved or anything is tagged, with what to do when it names a gap. Ordinary work translates **English, French and European Portuguese** — enough to see a change in three languages and catch what only shows up in one, which is how the long German string that broke a row in #165 was found. The rest are swept up once, deliberately, against strings that have settled. ## What this does not do - It does not lower the bar for a release. The same twenty-four have to be complete, checked by the same assertions, and the check is now *first* in the release list rather than implicit in a suite that had already run. - It does not touch the other translation tests. Plural rules, placeholder consistency, catalogue currency, the "a started catalogue actually translates" gate and the render-in- every-language walk all still run on every commit, because those catch mistakes rather than measure completeness. - It does not touch the African catalogues, which were never in this gate — a language is not offered until somebody starts it. ## The risk, stated Somebody can now commit a string that only three languages have. That is the point, and it is only safe because the release step is a hard gate rather than a note. If releases start going out with `-m release` skipped, this was a mistake and should be reverted.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Postulo/postulo#182
No description provided.