Rendered from docs/decisions/0088-an-engine-release-and-a-taxonomy-release-have-disjoint-tag-namespaces-and-are-cut-independently.md in the Headwater
corpus. Every document on this half of the site is typed by the taxonomy
the descriptor names: corpus.json.
An engine release and a taxonomy release have disjoint tag namespaces and are cut independently
Context
Before this record, the reason for two tag namespaces lived only in the header comment of .github/workflows/release-taxonomy.yml (lines 7 to 19 on 2026-09-27) and in one paragraph of README.md. #757 found the gap, and #760 named the shape of the fix.
An engine tag is cut when the engine changes. Before #760, the only route for a headwater/standard fix to reach an adopter was an engine release. So the package version that an engine tag carried stayed behind the source for as long as nobody cut the next engine release. The comment that this record replaces counted ten fixes to the package that waited between two engine releases.
Decision
An engine release and a taxonomy release have two tag namespaces that no tag can match at the same time.
v*starts.github/workflows/release.ymland.github/workflows/publish-crates.yml.taxonomy/headwater-standard/v*starts.github/workflows/release-taxonomy.yml.
A tag matches one pattern at most, because the prefixes are different. A maintainer cuts each kind of release independently. A taxonomy release needs no engine version bump, and an engine release needs no taxonomy release. The one link between them is requires_engine in taxonomy-source/headwater-standard/package.yml. When a package version raises that floor, the engine release that satisfies it comes first.
The taxonomy release has its own workflow file and is not a job in release.yml. The reason is the same as the reason release.yml is not a job in ci.yml (HW-PD-0012). A shared file would also make an edit to the engine release job run the taxonomy steps.
Consequences
An adopter can pin a fixed headwater/standard version as soon as its maintainer publishes it, with no engine release. README.md tells the adopter that an engine tag carries the package version that shipped with it. That version can be older than the newest one.
A tag in a third namespace starts no release workflow. tools/repo/release-guide-fixtures.sh holds the tag patterns of each release workflow against the table in Cut a release. It reads in both directions.
A change to the tag pattern of any of the three workflows makes this record suspect, because this record governs each of them.