okhp3-i18n-page-release
OverKill Hill P³ · overkillhill.com · github.com/OKHP3
This is the release stage after an exact-pair translation skill and before a
localized page is treated as public. It keeps language transformation separate
from page delivery and keeps deterministic source drift separate from technical
SEO and rendered-content evidence.
Scope
| In scope |
Out of scope |
| Static HTML release checks for reviewed or explicitly staged localized routes |
Translating, rewriting, or native-language certification |
| BCP-47 language declarations, self-canonicals, alternates, and noindex state |
Publishing, sitemap writes, analytics changes, or forced language redirects |
| Optional declared-versus-rendered language evidence when a local adapter exists |
Replacing okhp3-i18n-page-sync source-drift detection |
Required inputs
- one reviewed or explicitly draft-marked output from the matching
okhp3-translation-<source>-<target> skill;
- an owner-approved locale registry based on
assets/locale-registry.example.json;
- the static HTML files named in that registry; and
- the site's stated release policy for each target:
indexable or
draft-noindex.
If the source locale, target BCP-47 tag, route mapping, site origin, or release
state is unknown, return BLOCKED. Do not guess a country from a language-only
folder name, and do not change a draft to indexable to make validation pass.
Procedure
- Confirm the exact-pair translation record: direction, source and target
hashes, dictionary, review state, unresolved terms, and output locale. A
translation without a review record remains a draft, even if HTML exists.
- Read the locale registry and its explicit release policy. It is the one
source for locale tag, route root, direction, indexability, optional
x-default fallback, declaration policy, and exact-pair skill. A filesystem
slug such as
fr is not a substitute for fr-FR.
- Run
scripts/validate-i18n-page-release.py --help, then use --check on
the registry. It verifies each declared HTML file, BCP-47 html lang,
self-canonical URL, configured alternate graph, noindex staging policy, and
optional og:url equality. It never writes files or fetches a site.
- Apply the owner-set public-cluster policy. By default, an indexable locale
set is a complete, reciprocal cluster: each
indexable page names itself and every other indexable equivalent with the
registry's BCP-47 tags, plus the declared
x-default. Draft-noindex pages
remain outside that public cluster until their review gate is complete. This
is a project release policy, not a claim that every item is universally
required by a search engine.
- If a browser language-detection adapter is available, inspect the rendered
page and retain its report. Reconcile detected body language with
html lang, nested lang declarations, and hreflang. A short page, unreliable
detector result, or unavailable adapter is UNKNOWN, not a pass or a
language-quality failure.
- Check the language switcher manually or with a browser: it names locales in
their own language and maps to the equivalent available route. Do not force
a geo-IP or
Accept-Language redirect.
- Return structural results, rendered-language evidence, translation-review
evidence, and release state separately.
ready-for-release requires all
structural checks to pass, a reviewed indexable translation, and an explicit
owner decision to publish. This skill never makes that publication.
Boundaries with adjacent skills
| Need |
Use this skill? |
Route instead |
| Translate one owned plainspoken artifact |
No |
Matching exact-pair translation skill |
| Detect a changed English source or missing target |
No |
okhp3-i18n-page-sync |
| Validate a reviewed localized page before release |
Yes |
This skill |
| Certify idiomatic target-language prose |
No |
Authorized native review |
| Add locale routing to an application framework |
No |
Framework-specific i18n workflow |
Output contract
Return Locale registry, Translation evidence, Structural validation,
Rendered-language evidence, Release state, Warnings and unknowns, and
Next action. Distinguish pass, fail, warning, unknown, and
not-run. A passing structural validator is not native-language certification,
search-ranking evidence, or publication confirmation.
Resource routing
- Read
references/locale-registry.md before creating or changing a registry.
- Use
assets/locale-registry.example.json as a starting shape, never as live
site data.
- Run
scripts/validate-i18n-page-release.py --help before direct use.
- Read
evals/evals.json when changing the skill's validation policy.
- Browser adapters may use an Adobe
page-langs-style declared-versus-detected
report, but that optional adapter must not become a dependency of the
portable core.
Evaluation and release
evals/evals.json covers an indexable reciprocal cluster, a staged noindex
draft, head-only duplicate-aware metadata, configured language-declaration and
x-default policy, and unavailable rendered-body language evidence. Tests
establish structural behavior only. No fresh live browser benchmark,
native-review study, or search-performance result has been run for version
1.1.0.
About
Built by Jamie Hill · OverKill Hill P³
Published at github.com/OKHP3
Part of the OKHP3/skillz Agent Skill library.
MIT License -- free to use, fork, and adapt. A nod to the source is appreciated.
1---2name: okhp3-i18n-page-release3description: Validate and prepare a localized static-web page set for release after its exact-pair translation is reviewed. Use when checking locale URLs, BCP-47 html lang values, self-canonicals, hreflang alternates, noindex staging, or rendered-language evidence. It does not translate prose, publish a site, or replace source-drift detection.4license: MIT5---67# okhp3-i18n-page-release89**OverKill Hill P³** · [overkillhill.com](https://overkillhill.com) · [github.com/OKHP3](https://github.com/OKHP3)1011This is the release stage after an exact-pair translation skill and before a12localized page is treated as public. It keeps language transformation separate13from page delivery and keeps deterministic source drift separate from technical14SEO and rendered-content evidence.1516## Scope1718| In scope | Out of scope |19|---|---|20| Static HTML release checks for reviewed or explicitly staged localized routes | Translating, rewriting, or native-language certification |21| BCP-47 language declarations, self-canonicals, alternates, and noindex state | Publishing, sitemap writes, analytics changes, or forced language redirects |22| Optional declared-versus-rendered language evidence when a local adapter exists | Replacing `okhp3-i18n-page-sync` source-drift detection |2324## Required inputs2526- one reviewed or explicitly draft-marked output from the matching27 `okhp3-translation-<source>-<target>` skill;28- an owner-approved locale registry based on29 `assets/locale-registry.example.json`;30- the static HTML files named in that registry; and31- the site's stated release policy for each target: `indexable` or32 `draft-noindex`.3334If the source locale, target BCP-47 tag, route mapping, site origin, or release35state is unknown, return `BLOCKED`. Do not guess a country from a language-only36folder name, and do not change a draft to indexable to make validation pass.3738## Procedure39401. Confirm the exact-pair translation record: direction, source and target41 hashes, dictionary, review state, unresolved terms, and output locale. A42 translation without a review record remains a draft, even if HTML exists.432. Read the locale registry and its explicit release policy. It is the one44 source for locale tag, route root, direction, indexability, optional45 x-default fallback, declaration policy, and exact-pair skill. A filesystem46 slug such as `fr` is not a substitute for `fr-FR`.473. Run `scripts/validate-i18n-page-release.py --help`, then use `--check` on48 the registry. It verifies each declared HTML file, BCP-47 `html lang`,49 self-canonical URL, configured alternate graph, noindex staging policy, and50 optional `og:url` equality. It never writes files or fetches a site.514. Apply the owner-set public-cluster policy. By default, an indexable locale52 set is a complete, reciprocal cluster: each53 indexable page names itself and every other indexable equivalent with the54 registry's BCP-47 tags, plus the declared `x-default`. Draft-noindex pages55 remain outside that public cluster until their review gate is complete. This56 is a project release policy, not a claim that every item is universally57 required by a search engine.585. If a browser language-detection adapter is available, inspect the rendered59 page and retain its report. Reconcile detected body language with `html60 lang`, nested `lang` declarations, and `hreflang`. A short page, unreliable61 detector result, or unavailable adapter is `UNKNOWN`, not a pass or a62 language-quality failure.636. Check the language switcher manually or with a browser: it names locales in64 their own language and maps to the equivalent available route. Do not force65 a geo-IP or `Accept-Language` redirect.667. Return structural results, rendered-language evidence, translation-review67 evidence, and release state separately. `ready-for-release` requires all68 structural checks to pass, a reviewed indexable translation, and an explicit69 owner decision to publish. This skill never makes that publication.7071## Boundaries with adjacent skills7273| Need | Use this skill? | Route instead |74|---|---|---|75| Translate one owned plainspoken artifact | No | Matching exact-pair translation skill |76| Detect a changed English source or missing target | No | `okhp3-i18n-page-sync` |77| Validate a reviewed localized page before release | Yes | This skill |78| Certify idiomatic target-language prose | No | Authorized native review |79| Add locale routing to an application framework | No | Framework-specific i18n workflow |8081## Output contract8283Return `Locale registry`, `Translation evidence`, `Structural validation`,84`Rendered-language evidence`, `Release state`, `Warnings and unknowns`, and85`Next action`. Distinguish `pass`, `fail`, `warning`, `unknown`, and86`not-run`. A passing structural validator is not native-language certification,87search-ranking evidence, or publication confirmation.8889## Resource routing9091- Read `references/locale-registry.md` before creating or changing a registry.92- Use `assets/locale-registry.example.json` as a starting shape, never as live93 site data.94- Run `scripts/validate-i18n-page-release.py --help` before direct use.95- Read `evals/evals.json` when changing the skill's validation policy.96- Browser adapters may use an Adobe `page-langs`-style declared-versus-detected97 report, but that optional adapter must not become a dependency of the98 portable core.99100## Evaluation and release101102`evals/evals.json` covers an indexable reciprocal cluster, a staged noindex103draft, head-only duplicate-aware metadata, configured language-declaration and104x-default policy, and unavailable rendered-body language evidence. Tests105establish structural behavior only. No fresh live browser benchmark,106native-review study, or search-performance result has been run for version107`1.1.0`.108109## About110111Built by [Jamie Hill](https://github.com/JamieHill) · [OverKill Hill P³](https://overkillhill.com)112Published at [github.com/OKHP3](https://github.com/OKHP3)113Part of the [OKHP3/skillz](https://github.com/OKHP3/skillz) Agent Skill library.114MIT License -- free to use, fork, and adapt. A nod to the source is appreciated.