Skip to content

I3095 — A count inside a translated sentence is a slot, so a changed number never drops the translation

Key the translation memory on a segment's template, with every standalone number replaced by an <nK/> slot the build fills from the page, and re-key the existing Czech memory by matching each number by value, so a sentence like '153 nodes, 549 edges' or '4 of 26' is translated once and keeps its translation whatever the counts.

DONE wave 0 · p1 · implementation profile · runs alone

Part of public-proof — A visitor sees the product prove itself, and can check every claim it makes.

Objective

Key the translation memory on a segment's template, with every standalone number replaced by an <nK/> slot the build fills from the page, and re-key the existing Czech memory by matching each number by value, so a sentence like '153 nodes, 549 edges' or '4 of 26' is translated once and keeps its translation whatever the counts.

Why

On 2026-10-20 an audit of the live /cs/roadmap/ (finding F11) found 58 of 100 milestone titles and 310 of 799 issue titles in English, and count chips mixed 'N of M' with 'N z M'. One cause was keying: the memory was keyed by the whole segment, numbers included, so every changed count was a segment it had never seen.

Current state

keyOf hashes the segment with its numbers; a changed count is a missing segment.

Desired state

keyOf hashes the template; a translation is admitted only with each <nK/> of its source exactly once; identifiers joined to letters, hyphens, dots or a hash (I3091, v0.30.2, 2026-10-20, 82ac259, #1434) stay literal.

Scope

  • scripts/lib/site-i18n.mjs
  • scripts/site-translate
  • site/i18n/cs/memory
  • test/cases/3590_the_site_is_derived_in_every_language.sh
  • .ai/repo/project/issues/I3095.yaml

Out of scope

  • Plural forms by count (one form per template; a language whose noun changes form for one, two and five is a follow-up)

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • A page whose sentence carries different counts than the memory's example is translated from the template, with its own numbers
  • A translation missing or repeating an <nK/> slot is refused
  • Identifiers and versions are never slots
  • The existing memory is re-keyed without re-translation: 6942 entries re-keyed, 1183 merged into a shared template, 52 kept under their old key because their numbers do not match one to one

Validation

  • env -u MAJORDOMUS_SHARE bash test/run.sh 3590_the_site_is_derived_in_every_language

Evidence required

  • count_slot_translates

Evidence

coverstypecommandresultat commit
count_slot_translatescibash test/run.sh 3590_the_site_is_derived_in_every_languagepassed in train 3a validate 39712017896 (76c57859663, landed on master 2026-10-22)76c5785

Timeline

started
2026-10-22T04:37:10Z
verified
2026-10-22T04:39:46Z
completed
2026-10-22T04:42:35Z

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I3095.yaml. Read it back with majordomus plan show I3095.

Searches the titles and descriptions of every page this site publishes.