Adopt halos-docs-tools and the shared translation gate - #24
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. 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 branch, 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 — 8 current Every translation of the pages in scope is current. |
The documented pre-flight could not reproduce the gate. The Verifying block ran `translation-status`, which always exits 0; CI runs `translation-status --check`. A translator following the skill got a clean local run and a red check -- the same false green this migration exists to remove. 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. The obsolete "register your locale in GLOSSARIES" instructions are gone from the glossaries, so the skill now says where that registration actually happens: the registries are hardcoded in the package, and a tenth locale needs an entry in each, a release, and a pin bump. Also: the caller stanza states what the called workflow enforces; 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 |
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.The behaviour change is that the run now goes red where the version it replaces always stayed green: it fails when any translation is stale, missing, unstamped or orphaned. It does not yet block a merge — this repository has no branch protection and no ruleset, so the red check sits next to an enabled merge button. Making it required is a separate decision, and it carries a real cost: the gate judges the whole repository, so an English-only edit cannot go green without its translations. See the review synthesis on this PR. It still posts the report as a pull request comment first, so a red run always carries its own explanation.
Verified locally on this branch before pushing:
mkdocs build --strictclean,check-anchors sitereports all anchors resolving,translation-status --checkexits 0 with all nine locales at 8 current pages, andcheck-glossary,check-typographyandmap-anchorsrun against this repository's glossaries undersolutions/translation/.The Italian glossary contrasted this repository's
GLOSSARIESdict with the HALPI2 branch, where registering the locale used to be a prerequisite. That dict now lives in the package and carries all nine locales, so the contrast is gone.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. Part of halos-org/halos#147.