§4 landed — curation: prune stale + triage genuine ✓ landed 2026-07-23
Evergreen: sn-dd-unit-curation §4.
Resolves followup f-sdu-002 and locks the ion-charge-finding decision.
With §3's canonical_unit() normalising both sides, the pre-reconciliation
"genuine unit defect" candidate list was re-checked against the live catalog
(Neo4j) and each name's DD source facet. Outcome: one finding pruned as stale, three
recorded as intentional, zero genuine dimensional defects — no graph edit was required.
sn edit writesHow the residual list was regenerated
The SN↔DD mismatch axis itself lives downstream in imas-codex and has
not yet been re-pointed at canonical_unit()
(grep canonical_unit imas_codex/ → no hits). Per the plan's
pre-requisite, the residual list was regenerated here directly: each candidate was
queried from the live graph for its declared unit, its DD source facet
(source_path / source_unit), physical base, kind, and validation
state, and both unit strings were passed through
imas_standard_names.canonical_unit(). Ordering-only and spelling-only
differences collapse under it (verified: canonical_unit("s^-1.m") == canonical_unit("m.s^-1") == "m.s^-1").
Per-name verdicts
| standard name | SN unit | DD facet (source_unit) |
base / kind | verdict |
|---|---|---|---|---|
effective_thermal_ion_charge_state_energy_velocity_due_to_convection |
m.s^-1 |
— (no DD facet) | velocity / vector | PRUNE — stale. The name's head noun is
velocity_due_to_convection; the quantity is the effective velocity vector
for convective transport of thermal energy by an ion charge-state population, so
m.s^-1 is dimensionally correct. The flag was a false positive — a
token-level check tripping on the energy/charge_state
tokens embedded in a velocity name, compounded by the now-retired "U"
ordering artifact. There is no DD source facet for the axis to disagree with.
validation_status=valid. |
effective_particle_energy |
— (unit-less) | — (no DD facet) | energy / scalar | Record — intentional. Pure derived gyrokinetic velocity-space
coordinate. An applied human edit already repaired it "to unit-less"; the
dimensionless normalised quantity is carried by its child
normalized_effective_particle_energy (unit 1). No DD facet;
not a SN↔DD mismatch. validation_status=valid. |
perturbed_particle_energy |
— (unit-less) | — (no DD facet) | energy / scalar | Record — intentional. Same pattern as
effective_particle_energy: derived normalised-coordinate parent, unit-less
by applied human edit, dimensionless quantity in the normalised child. No DD facet.
validation_status=valid. |
particle_mass |
— (unit-less) | 1 (DD path gyrokinetics_local/species/mass_norm, "Normalised mass") |
mass / scalar | Record — intentional generalisation. The only candidate with a DD
facet. The DD path is a normalised (dimensionless) mass; the standard name was
generalised to the physical inertial-mass concept, and the DD-faithful dimensionless
quantity is captured by its child normalized_particle_mass (unit
1, same source_path). The parent↔DD unit difference is a
deliberate generalisation artifact, not a defect: coercing the parent to the DD's
1 would re-break the physical description. An applied human edit already
addressed this. validation_status=valid. |
ion-charge-finding decision (locked)
Prune — stale. The finding is an artifact, not a dimensional
disagreement: effective_thermal_ion_charge_state_energy_velocity_due_to_convection
is a convective velocity whose m.s^-1 unit is correct, and it carries no DD source
facet for the axis to compare against. Confirms the user's read. No graph mutation is needed to
"remove" it — the adjudication is the record; the downstream axis will stop surfacing it once it
is re-pointed at canonical_unit() and given the noted suppression.
Why no sn edit ran
Done-when #3 permits recording intentional dimensionless-vs-dimensional cases "with their
reason rather than 'fixed'." All four candidates are validation_status=valid and
accepted; none is a genuine dimensional defect that a source correction toward the
DD facet would improve. Editing any of them would either re-introduce the mis-inherited
dimensionless unit the prior human edits removed (the energy/mass parents) or contradict a
correct unit (the velocity). So the correct curation action was adjudication and recording — not
mutation.