Named values for enumerated case parameters and AST-based analytic IC codegen#1550
Open
sbryngelson wants to merge 13 commits into
Open
Named values for enumerated case parameters and AST-based analytic IC codegen#1550sbryngelson wants to merge 13 commits into
sbryngelson wants to merge 13 commits into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR extends MFC’s parameter pipeline so enumerated case parameters can be written using named values (while preserving the existing integer “wire format”), and replaces legacy analytic-IC expression substitution with an AST-based translator for safer, validated Fortran emission.
Changes:
- Add
namesmappings to enumerated parameter constraints and generate Fortran named integer constants (generated_constants.fpp) consumed viam_constants. - Add
./mfc.sh validate ... --migrateto rewrite integer codes in case files to named syntax with a reload-and-compare safety check. - Sweep selected Fortran decision sites (e.g.,
model_eqns,time_stepper,riemann_solver) and migrate examples to named syntax; update docs/validation error formatting to display names alongside codes.
Reviewed changes
Copilot reviewed 185 out of 185 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| toolchain/mfc/validate.py | Adds --migrate flow to rewrite case files after successful validation, with semantic safety check. |
| toolchain/mfc/params/schema.py | Enhances choices validation messages to display code→name mappings when available. |
| toolchain/mfc/params/migrate.py | Implements text-based migration of integer codes to named values. |
| toolchain/mfc/params/generators/fortran_gen.py | Generates per-target generated_constants.fpp in addition to decls/namelist includes. |
| toolchain/mfc/params/generators/docs_gen.py | Renders enumerated constraints with both numeric codes and backticked names. |
| toolchain/mfc/params_tests/test_names.py | Adds coverage for names well-formedness, normalization behavior, and error/docs strings. |
| toolchain/mfc/params_tests/test_migrate.py | Adds tests for the case-file migration rewriter and documents known limitations. |
| toolchain/mfc/params_tests/test_fortran_gen.py | Updates generator tests to expect the new constants include output and count. |
| toolchain/mfc/lint_docs.py | Extends docs-token skip list for prose examples and analytic-expression intrinsic names. |
| toolchain/mfc/cli/commands.py | Adds --migrate flag to the validate command. |
| src/simulation/m_time_steppers.fpp | Replaces magic integers with generated named constants for time_stepper and model_eqns. |
| src/simulation/m_start_up.fpp | Uses named constants for time_stepper and model_eqns decision sites. |
| src/simulation/m_pressure_relaxation.fpp | Uses named constants for model_eqns comparisons. |
| src/simulation/m_ibm.fpp | Uses named constants for model_eqns comparisons in IBM logic. |
| src/simulation/m_global_parameters.fpp | Uses named constants for model_eqns selection and related conditionals. |
| src/simulation/m_data_output.fpp | Uses named constants for model_eqns checks affecting output paths/derived values. |
| src/simulation/m_bubbles_EL.fpp | Uses named constants for time_stepper selection in bubble integrator stages. |
| src/simulation/m_acoustic_src.fpp | Uses named constants for model_eqns checks in acoustic energy update paths. |
| src/simulation/include/inline_riemann.fpp | Uses named constants for riemann_solver checks in inline Riemann logic. |
| src/pre_process/m_icpp_patches.fpp | Uses named constants for model_eqns checks in patch initialization paths. |
| src/pre_process/m_global_parameters.fpp | Uses named constants for model_eqns selection and related conditionals. |
| src/pre_process/m_data_output.fpp | Uses named constants for model_eqns checks affecting output. |
| src/pre_process/m_check_patches.fpp | Uses named constants for model_eqns in patch constraint checks. |
| src/pre_process/m_assign_variables.fpp | Uses named constants for model_eqns branching and 6-eq behavior. |
| src/post_process/m_global_parameters.fpp | Uses named constants for model_eqns selection and related conditionals. |
| src/post_process/m_derived_variables.fpp | Uses named constants for model_eqns branching. |
| src/post_process/m_data_output.fpp | Uses named constants for model_eqns checks affecting output variable selection. |
| src/common/m_phase_change.fpp | Uses named constants for model_eqns checks in phase-change updates. |
| src/common/m_constants.fpp | Includes auto-generated named constants for enumerated parameters via generated_constants.fpp. |
| examples/nD_perfect_reactor/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_turb_mixing/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_TaylorGreenVortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_TaylorGreenVortex_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_sphbubcollapse/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_shockdroplet/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_shockdroplet_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_rotating_sphere/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_recovering_sphere/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_rayleigh_taylor/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_rayleigh_taylor_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_performance_test/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_patch_spherical_harmonic/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_mibm_sphere_head_on_collision/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_IGR_TaylorGreenVortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_IGR_TaylorGreenVortex_nvidia/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_IGR_jet/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_IGR_jet_1fluid/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_IGR_33jet/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_ibm_stl_test/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_ibm_stl_pyramid/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_ibm_stl_ellipsoid/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_ibm_bowshock/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_brio_wu/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_advection_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_acoustic_support7/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_acoustic_support3/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/3D_acoustic_support11/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_zero_circ_vortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_zero_circ_vortex_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_whale_bubble_annulus/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_viscous/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_viscous_shock_tube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_tumbling_rectangle/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_triple_point/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_Thermal_Flatplate/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_TaylorGreenVortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shocktube_phasechange/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shockdroplet/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shockdroplet_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shockbubble/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shock_cloud_rmhd/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_shearlayer/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_riemann_test/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_riemann_test_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_richtmyer_meshkov/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_rayleigh_taylor/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_patch_modal_shape/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_patch_modal_shape_exp/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_orszag_tang/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_orszag_tang_hyper_cleaning/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mixing_artificial_Ma/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mibm_shock_cylinder/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mibm_particle_cloud/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mibm_cylinder_in_cross_flow/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mhd_rotor/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_mhd_magnetic_vortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_lungwave/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_lungwave_horizontal/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_lid_driven_cavity/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_laplace_pressure_jump/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_kelvin_helmholtz/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_jet/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_isentropicvortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_isentropicvortex_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_IGR_triple_point/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_IGR_2fluid/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_stl_wedge/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_stl_test/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_stl_MFCCharacter/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_steady_shock/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_multiphase/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_ellipse/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_cfl_dt/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_ibm_airfoil/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_hardcoded_ic/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_GreshoVortex/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_forward_facing_step/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_cont_damage/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_bubbly_steady_shock/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_backward_facing_step/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_axisym_shockwatercavity/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_axisym_shockbubble/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_axisym_hypoelasticity/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_advection/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_advection_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_advection_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_support9/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_support6_axisym/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_support5/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_support2/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_support10_axisym/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_pulse/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_pulse_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_acoustic_broadband/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/2D_5wave_quasi1D/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_vacuum/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_vacuum_restart/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_titarevtorro/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_titarevtorro_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_sodshocktube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_sodshocktube_muscl/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_sodHypo/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_sod_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_wenoz5/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_wenom5/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_wenojs5/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_teno7/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_teno5/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_old/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_shuosher_analytical/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_reactive_shocktube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_qbmm/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_poly_bubscreen/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_multispecies_diffusion/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_mhd_smooth_alfven_wave/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_laxshocktube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_kapilashocktube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_inert_shocktube/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_impact/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_hypo_2materials/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_exp_tube_phasechange/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_exp_bubscreen/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_euler_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_dai_woodward/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_dai_woodward_hlld/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_cont_damage/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_bubblescreen/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_brio_wu/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_brio_wu_rmhd/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_brio_wu_hlld/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_advection_convergence/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_acoustic_sine_wavelength/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_acoustic_sine_frequency/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_acoustic_gauss_sigmatime/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_acoustic_gauss_sigmadist/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/1D_acoustic_dipole/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
| examples/0D_bubblecollapse_adap/case.py | Migrates enumerated parameter values from integer codes to named syntax. |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #1550 +/- ##
=======================================
Coverage 60.57% 60.57%
=======================================
Files 73 73
Lines 20264 20265 +1
Branches 2949 2948 -1
=======================================
+ Hits 12275 12276 +1
Misses 6000 6000
Partials 1989 1989 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR makes two coordinated ease-of-use refactorings to the case-parameter layer, both driven by the same strategy: one source of truth, generated everywhere, with no behavior change. The full golden test suite passes at every step with zero golden-file regenerations.
"riemann_solver": "hllc"instead of"riemann_solver": 2, and the Fortran decision sites compare against generated named constants instead of magic integers. Integer codes remain fully supported (they are still the namelist wire format)."0.5 + 0.2*sin(2*pi*x/lx)") into Fortran is replaced by a Python-asttranslator that validates expressions at case-load time.Strategy
MFC's enumerated parameters (
model_eqns,riemann_solver,time_stepper, …) encoded their vocabularies as integers that users had to memorize and that appeared independently in four places: the case file, the Python validator, the Fortran decision sites, and the docs. Keeping those in sync was manual. The existing parameter pipeline (toolchain/mfc/params/definitions.py→ generated Fortran declarations/namelists at CMake configure time) already solved this problem for parameter declarations, so this PR extends the same mechanism to parameter values:CONSTRAINTSentry gains anamesmapping (e.g.{"hll": 1, "hllc": 2, "hlld": 4, "lax_friedrichs": 5}), validated at registry load (lowercase identifiers, exact coverage ofchoices, no duplicates).Caseis constructed, so JSON-schema validation, physics validation, and the Fortran namelist are untouched), a third generated includegenerated_constants.fppwithinteger, parameter :: riemann_solver_hllc = 2-style constants exposed throughm_constants, name-aware validation errors ('riemann_solver' must be one of 1 (hll), 2 (hllc), …), and the docs tables.riemann_solver == 1→riemann_solver == riemann_solver_hll. This PR sweepsriemann_solver,model_eqns, andtime_stepper(116 sites across all three executables and common); the remaining vocabularies (bubble_model,avg_state,wave_speeds,recon_type,muscl_lim,int_comp,format,precision) have constants generated and ready, with their sweeps left as mechanical follow-ups.The analytic-IC work follows the same philosophy applied to expressions. The old
re.sub(r"[a-zA-Z]+", …)token substitution had silent-corruption modes: it tokenized through underscores sotau_ecould never match its own mapping (the trailingewas then substituted with Euler's number), theeinside scientific-notation literals like2e-3inside larger expressions was likewise corrupted, and an unknown variable likex0passed through silently to become a Fortran compile error far from its cause. The new translator parses the expression, resolves every variable through an explicit map, restricts calls to a whitelist of Fortran intrinsics (pluspi), regenerates parentheses by operator precedence, and reports unknown names as immediate, named errors at case load — listing the available variables. As a bonus it fixes a latent precision hazard: float literals that emit in exponent form now carry a_wpsuffix (a bare1e+20is a single-precision literal in Fortran).User-facing changes
"riemann_solver": "hllc","model_eqns": "5eq","time_stepper": "rk3", etc. now work in case files; integer codes continue to work unchanged../mfc.sh validate case.py --migraterewrites a case file from integer codes to named syntax in place, gated on validation passing, and self-verifies by reloading the migrated file and comparing the normalized parameters (restoring the original on any mismatch or load failure).patch_icpp(1)%pres: unknown variable 'x0' in 'x0 + 1'. Available: beta, eps, lx, ly, ….ein analytic expressions is no longer substituted with Euler's number — it was the root cause of thetau_e/scientific-notation corruption. Writeexp(1.0)or a literal. No bundled example used it. Documented incase.md.Verification
Every change was gated on no-functional-change evidence:
riemann_solversweep, after themodel_eqns/time_steppersweep, and after the analytic-IC switchover — zero golden-file diffs, zero regenerations..fppbefore/after comparison for analytic examples: byte-identical modulo whitespace, except one case where the AST emitter drops mathematically redundant parentheses with identical left-to-right FP evaluation order (verified by the golden run)../mfc.sh precheckpasses on every commit; the toolchain pytest suite grew from 129 to 319+ tests.Follow-ups (intentionally out of scope)
lint_docs.pycurrently whitelists value names mentioned incase.mdindividually; a generic "all registered value names are valid tokens" rule would replace the growing skip list.