§2 — Cylindrical axis-token naming ✓ landed 2026-07-05
Evergreen: catalog-naming-followups §2
(decision cylindrical-axis-naming = words-canonical, followup f-cnf-005). Decision A:
physical directions keep canonical WORDS (radial/toroidal/vertical); arbitrary local axes use x/y/z; one canonical
form, no dual path.
The catalog was already one way (compose emits canonical; the ISN parser accepts only canonical tokens; the DD funnel normalises r/phi/z at ingest). This section removed the misleading residue and hardened the generator so NEW names benefit — not just an edit of existing names.
| Piece | What landed | Commit |
|---|---|---|
| Dead aliases removed (ISN) | Emptied the poloidal:[pol], radial:[r], toroidal:[phi,tor] alias
lists in coordinate_axes.yml — the parser loads axis KEYS only
(frozenset(axes_reg.axes)), so the alias lists were dead metadata implying a second, unsupported
spelling. Zero-consumer verified (parser, codegen, vocab_loaders, dataset publish, tests). Codegen regen was
a byte-identical no-op. The loader test was updated to assert every axis has empty aliases. |
f57f2f0 |
| Generation catch-and-promote (imas-codex) | The sanctioned C-funnel: in GrammarSegments._validate_projection_axis a stray DD-leaf
short-form is coerced to its canonical word BEFORE the registered-token check —
r→radial, phi/tor→toroidal, pol→poloidal — mirroring the existing
projection_shape coercion ("coerce rather than bounce"). z is deliberately excluded (a valid
canonical Cartesian axis; Cartesian-vs-cylindrical frame disambiguation is the DD-ingest boundary's job,
families._classify_suffix). Compose-time only. |
de264aa1 |
One-way invariant preserved (no dual path)
The catch-and-promote is a generation-time error-catcher, NOT a parser second spelling. The ISN parser stays
strict: a stored name using a short form (e.g. r_coordinate_of_flux_loop) is still rejected outright
(parse_standard_name raises) — test-proven in test_axis_catch_and_promote.py. So the
round-trip invariant holds and r_… can never enter the catalog.
Verification
- ISN full suite: 1634 passed, 28 skipped, 84 xfailed, exit 0 (
f57f2f0). - Catcher test
tests/standard_names/test_axis_catch_and_promote.py: 6 passed — short-forms promoted (r/phi/tor/pol),znot coerced, and the strict parser still rejects the short-form name.
What's next
Independent of §2. The remaining plan work is graph-side: §6 (dd-path dedup), §7 (open doc edits + LaTeX-description generate-level fix), §4 (orientation-vector family completion).