§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.

1 finding pruned (stale)
3 recorded as intentional
0 genuine defects to fix
0 sn edit writes

How 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 nameSN unitDD facet (source_unit) base / kindverdict
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.

What's next

Two follow-ons, both downstream of ISN (imas-codex):