Adopt halos-docs-tools and the shared translation gate - #29
Conversation
The six checkers move out of scripts/ and into the halos-docs-tools package, pinned at v0.1.0. The workflow shrinks to the caller stanza for halos-org/shared-workflows, which runs the same commands and, unlike the advisory version it replaces, fails the run when a translation is stale, missing, unstamped or orphaned. This repository does not pass that gate yet. docs/en/tutorials/openplotter-server/index.md has no translation in any of the nine locales. It entered docs/en/ in the commit that set up the translation machinery and no locale round ever picked it up, which the advisory check reported and nobody acted on -- the case for a gate that blocks. One commit rather than a chain: the old workflow invokes the scripts by path, so deleting them and repointing CI cannot be separated without an intermediate commit whose CI is broken. The Italian glossary contrasted this repository's GLOSSARIES dict with the HALPI2 repository, where registering the locale used to be a prerequisite. The dict now lives in the package and carries all nine locales, so the contrast is gone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Translation statusda — 13 current, 1 missing
|
The documented pre-flight could not reproduce the gate. The Verifying block ran `translation-status`, which always exits 0; CI runs `translation-status --check`. Measured here, where the two disagree today: plain exits 0, --check exits 1 on the nine missing translations. A translator following the skill got a clean local run and a red check -- the same false green this migration exists to remove. The command rename mangled a path. `../../scripts/check_glossary.py` in the French glossary became `../../check-glossary`, which points nowhere: the prefix survived a substitution that removed the file it addressed. Both entries now name the commands and say where they come from. deploy.yml holds pages: write and id-token: write and ran plain `uv sync`, while the gate runs `uv sync --locked`. Now that a git dependency is in the graph, bumping the pin without re-locking made the two disagree: the gate refuses, the deploy resolves the new ref live and runs its build backend with the strongest token in the repository. Also: the caller stanza states what the called workflow enforces; the skill says where a new locale gets registered, since the registries are hardcoded in the package rather than here; the Verifying block said four and listed five; and the language-selector note named two repositories and a count of three where four carry the block. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Code review — 7 personas, run against the identical changeThis PR applies the same change as hatlabs/halpi2#49, so the review ran there. Full synthesis, all 23 findings: hatlabs/halpi2#49 (comment) Everything that applied here is fixed and pushed in this branch's
Two decisions are still open and they are not mine to make. Both are in the halpi2 synthesis under findings 1, 3 and 4: the gate judges the whole repository while work happens one page at a time, so an English-only edit cannot go green; and no branch protection or ruleset exists on |
Draft, and it will be red. This repository does not pass the gate yet. Opening it anyway makes the backlog visible rather than leaving it in a survey nobody reads.
The six checkers under
scripts/were copied into four documentation repositories. They now come fromhalos-org/docs-toolspinned atv0.1.0, and the workflow is the caller stanza for the shared reusable workflow inhalos-org/shared-workflows. Unlike the advisory version it replaces, the run goes red when a translation is stale, missing, unstamped or orphaned. It does not block a merge: this repository has no branch protection and no ruleset. See the review synthesis on this PR.What has to happen before this can merge
docs/en/tutorials/openplotter-server/index.md— 4108 words — has no translation in any of the nine locales, so the gate reports ninemissingentries and exits 1. That page entereddocs/en/in6627593, the commit that set up the translation machinery, and no locale round ever picked it up. The advisory check has been reporting it ever since and nobody acted, which is the argument for a gate that blocks.Translate it into
da de es fi fr it nb nl sv, stamp each withstamp-translation, and this goes green.What is already verified
mkdocs build --strictis clean andcheck-anchors sitereports all anchors resolving. The gate's only complaint is the nine missing pages, reproduced locally and identical to what CI will report.The caller deliberately carries no
pathsfilter. A required check that never runs on a pull request touching none of the filtered paths leaves that pull request unmergeable forever.Same change as hatlabs/halpi2#49, hatlabs/halmet#24 and hatlabs/sh-esp32#20. Part of halos-org/halos#147.