I3437 — An article names every language version in one translations table, and every member names the same group
An article's front matter may name every counterpart in [extra.translations] (lang = \"route/\") for any number of languages; site/templates/base.html emits one rel=alternate hreflang link per entry plus its own through get_url, the two-language alternate and alternate_lang pair stays readable, and site-check refuses a group that is not the same set from every member, a language listed twice and an article listing its own language.
PŘIPRAVENO vlna 1 · p2 · profil implementation · běží samostatně
Součást public-proof — Návštěvník vidí, jak se produkt sám dokazuje, a může ověřit každé jeho tvrzení.
Připraveno. Všechny závislosti jsou hotové, takže majordomus plan start I3437 bude přijato.
Cíl
An article's front matter may name every counterpart in [extra.translations] (lang = \"route/\") for any number of languages; site/templates/base.html emits one rel=alternate hreflang link per entry plus its own through get_url, the two-language alternate and alternate_lang pair stays readable, and site-check refuses a group that is not the same set from every member, a language listed twice and an article listing its own language.
Proč
The owner asked on 2026-10-19 for multilingual front matter, every language version named on the page. The two-language form names one counterpart, so a third language could not be declared at all. It belongs to public-proof with I3436, whose check it extends: the public site's language versions are its own statement about itself.
Aktuální stav
site/templates/base.html:35-37 reads only page.extra.alternate and page.extra.alternate_lang, one counterpart per page, and nothing reads a table of them; the reciprocity of I3436 compares one alternate with one alternate.
Cílový stav
base.html emits a link per [extra.translations] entry and falls back to the pair; check 21 reads the table, the inline table and dotted keys alike, treats the pair as a table of one entry, refuses a pair that disagrees with a table beside it, and holds every member to naming the whole group back; case 3503 renders the real block with zola and holds the check on a three-language fixture.
Rozsah
- site/templates/base.html
- scripts/site-check
- test/cases/3503_a_translation_group_agrees_and_keeps_up_with_its_source.sh
- .ai/repo/project/issues/I3437.yaml
Závislosti
Kritéria přijetí
- A page with [extra.translations] renders one rel=alternate link per entry plus its own, and a page with the pair still renders its two
- A three-language group written in the table, inline and dotted-key forms passes
- A member that does not name every other member, a language listed twice and an article listing its own language each fail naming the file
Validace
- env -u MAJORDOMUS_SHARE -u MAJORDOMUS_HTTP_HOST -u MJ_ROOT bash test/run.sh 3503_a_translation_group_agrees_and_keeps_up_with_its_source
Požadované důkazy
- translation_groups_are_reciprocal
- every_translation_is_linked_by_hreflang
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3437.yaml. Read it back with majordomus plan show I3437.