Rename the fusion neutron-flux children to source_rate and restore a live parent
total_neutron_source_rate_due_to_thermal_fusion, and ensure they hang
off a live parent (their current parent neutron_flux_due_to_thermal_fusion is
superseded). Use the rename cascade; validate grammar round-trip. Spun out of
sn-pedestal-source-recovery f-psr-006.Project: imas-standard-names (grammar) + imas-codex (standard_names) + imas graph
Plan: sn-fusion-neutron-rate-naming (http://localhost:8765/imas-standard-names/sn-fusion-neutron-rate-naming.html)
Section: rename flux children to source_rate + restore live parent
Tier: sonnet
Context
total_neutron_source_rate_due_to_thermal_fusion (base=source_rate, dd, accepted) is canonical. Two
accepted DERIVED children — deuterium_deuterium_neutron_flux_due_to_thermal_fusion and
tritium_tritium_neutron_flux_due_to_thermal_fusion — still use base=flux [Hz] and hang off the
SUPERSEDED parent neutron_flux_due_to_thermal_fusion. Honour the fusion-child-parent decision shown
live above before acting.
State to read (CODE / FILES / DATA)
imas-codex graph_ops.py: _execute_rename_cascade, HAS_PARENT/HAS_SUCCESSOR, structural rederive
(seed_parent_sources / rederive_structural_edges). CLI: sn run --rename OLD:NEW --include-accepted
(--dry-run first). ISN grammar: parse_standard_name / render.compose must accept + round-trip the
targets (verified: deuterium_deuterium_neutron_rate_due_to_thermal_fusion parses, base=rate). Graph:
MATCH (n:StandardName) WHERE n.id CONTAINS 'due_to_thermal_fusion'
OPTIONAL MATCH (n)-[:HAS_PARENT]->(p) RETURN n.id,n.physical_base,n.unit,n.name_stage,p.id
Scope locks / constraints (non-decision)
- Rename cascade only, NEVER --focus recompose. Every target ISN-grammar-valid + round-tripping.
- Preserve provenance (derived sources) and content; keep 0 orphans / 0 desyncs.
- Do not resurrect the superseded flux_due_to_thermal_fusion / neutron_flux_due_to_thermal_fusion;
the children must end up under a LIVE source_rate parent.
- Note: 'source_rate' is the valid base; 'rate' also parses — pick the base consistent with the
canonical total_neutron_source_rate_due_to_thermal_fusion.
Done-when
1. The two per-reaction children carry base=source_rate (name aligned to the canonical), grammar-valid.
2. They hang off a LIVE structural parent (per the decision).
3. 0 orphans / 0 desyncs; provenance preserved.
4. This followup resolved.
Landed — both children renamed flux→source_rate via the cascade (0 conflicts); structural fixpoint re-derived a LIVE neutron_source_rate_due_to_thermal_fusion parent (accepted); total_neutron_source_rate_due_to_thermal_fusion now correctly its child; grammar segments realigned (physical_base=source_rate on all 4); 0 orphans/desyncs. Superseded flux names left retired.