# GTR094 — TokenizeVersion: @TOOL_VERSION@/@VERSION_SUFFIX@ extraction (opt-in command)
**Contract:** behaviour-preserving — proof by execution (expansion equality).
## The transform
A literal `version="+galaxy"` whose `` equals a package
`` version becomes `@TOOL_VERSION@+galaxy@VERSION_SUFFIX@`; the
matching requirement versions become `@TOOL_VERSION@`; the two ``
definitions land in the inline `` (created when absent).
## Proof — by execution, per tool
The mutation is applied to a **copy** and kept only when macro-expanding the
tokenized copy reproduces the original tool's expansion **byte-for-byte**
(tier-1 `expand_from_tree`; both sides' `` blocks dropped — Galaxy
clears them after harvesting, `xml_macros.py:39-45`). The tokens substitute
back to exactly the literals they replaced, so the post-expansion tool Galaxy
sees is unchanged by construction. The gate failing → no mutation at all.
## Fail-closed preconditions (`tokenization_skip_reason`, the single decision
path shared with the `tokenize-version` surface)
- non-`+galaxy` / already-tokenized versions;
- no package requirement pinning `` (no version to share — the IUC point);
- `@TOOL_VERSION@`/`@VERSION_SUFFIX@` already defined (inline or imported);
- `` imports on a bytes-parsed tool (the gate could not resolve them).
## Scope boundary
A multi-element **style** restructure — never `format`/`upgrade`; applied only
by the dedicated opt-in `tokenize-version` command (GTR094 in
`OPT_IN_COMMAND_BY_CODE`). ~75 corpus candidates (`scripts.measure
version-tokenization`, PR #31).
## History
Ledger item A2 (rank 5, approved 2026-06-10); codemod §43.