Followups landed — q95 locus fix, DD-version gate, composition family

Evergreen: sn-boundary-averaged-name-multiplicity · landed 2026-07-10 · all deterministic ($0 LLM spend)

f-bam-004 — separatrix q mis-anchored to q95

DD defines summary/local/separatrix*/q as q evaluated AT the LCFS — not q95. The two leaves had been consolidated onto safety_factor_at_normalized_poloidal_magnetic_flux_equal_to_0_95 (which also carries the two genuine q95 sources), and the correct safety_factor_at_plasma_boundary sat superseded with no successor. Fix: revived the boundary name (accepted) and moved the two separatrix sources onto it; the q95 name keeps only the q_95 sources.

DD-version gate (imas-codex 51c19815) — the systemic finding

The q95/momentum anomalies traced to a systemic defect: the graph accumulated IMASNodes across DD major versions and 17,216 of 61,366 nodes (28%) are absent from DD 4.1.0 (removed, or renamed away — the DDv3 *_tor*_phi family). Removal was recorded only as DEPRECATED_IN edges that no seeding query consulted, so extraction kept seeding DDv3-only paths: 1,535 dd sources sat on non-DDv4 paths, 857 feeding live names.

FixDetail
Root (code)New graph/dd_lifecycle.py: derives the valid-path set and the NBC rename map (structure renames propagate to whole subtrees) from the packaged DD XML; stamps absent nodes lifecycle_status='removed' + renamed_to; wired into the DD build; idempotent with restore-on-return. All three seeding queries (dd extractor, extraction candidates, domain auto-seed sweep) exclude removed nodes. A read-only sn run probe (find_removed_dd_sources) flags survivors.
Graph stamp17,216 nodes stamped removed; 2,824 annotated with their DD4 rename.
Source cleanupPer-source policy over the 857: 300 redundant (DD4 rename-twin already produces the same name) → detached+stale; 37 re-anchored to their DD4 path (same name, deterministic bind); 28 rename-twins with different DD4 semantics (e.g. ece t_e → t_radiation: electron vs radiative temperature) → v3 source detached, DD4 name authoritative; 492 truly removed → detached+stale. 678 no-live-name v3 sources marked stale.
Name retirement111 names left with no DDv4 anchor → name_stage='exhausted' (terminal, kept for lineage, dropped from exports). Spot-checked before apply (e.g. inner_triangularity_of_plasma_boundary — DD4 removed boundary_separatrix/triangularity_inner).
Verification0 v3 sources feeding live names; 0 orphans / 0 desyncs (2 transient derived-parent orphans healed via lifecycle normalize); both probes clean; doc links repointed.

f-bam-003 — composition density-ratio family (18 leaves)

DD defines summary/composition/* as "ratio of the volume-averaged density (inside LCFS) of each ion species to the volume-averaged electron density". Canonical explicit shape: ratio_of_volume_averaged_<sp>_density_to_volume_averaged_electron_density. 14 renames via the cascade (dropping spurious number/maximum/ion/total tokens and the _fraction shapes); 3 already canonical; hydrogen was a genuine collision — ratio_of_hydrogen_density_to_total_hydrogenic_density correctly names the two isotope_fraction_hydrogen leaves, so the composition source was detached and the canonical hydrogen ratio persisted as a drafted name. All 18 leaves now single-name canonical.

Open observations