A domain expert reviewed the generated Standard-Names (SN) catalog and left twelve comments spanning species spelling, charge-state aggregation, locus definitions, base-name precision, unit rendering, a suspected upstream unit bug, and a broken-equation report. This plan is the root-cause triage of that review: each comment was traced to its true origin in code, prompt, grammar/vocabulary, the generated catalog, or the upstream IMAS Data Dictionary (DD) — before any correction was proposed. No catalog names or code were changed while producing this plan; it is a verification-and-planning artifact.
The work lives across four surfaces, and every proposed fix is routed to the narrowest one that owns the defect:
ISN — imas-standard-names (this repo): the grammar engine and vocabulary (locus_registry.yml, physical_bases.yml, subjects.yml, qualifiers.yml, the parser, the unit format).
imas-codex: the sn generation pipeline — LLM compose/describe prompts (imas_codex/llm/prompts/sn/*.md), family harmonization, and the sn edit/sn run tooling.
ISNC — imas-standard-names-catalog: the generated names + descriptions, where sn edit and regeneration land.
DD — the upstream IMAS Data Dictionary: authoritative units and identifiers; defects here need an issue filed, not a local patch.
Guiding rule (from the request): a single-name blemish is fixed with sn edit; anything with a global root cause is fixed in the pipeline itself — code, schema, vocabulary, or prompt — so that regeneration keeps the fix. Ten of the twelve comments turned out to have a global root cause; only one is a per-name convention decision and one is already fixed.
Headline finding: the twelve surface comments collapse to six cross-cutting root causes. Fixing the six mechanisms — rather than editing individual names — corrects the reported symptoms and the much larger class of names that share each mechanism.
✓ Shipped — catalog v0.2.0rc62(2026-07-08; draft-status catalog, pending human review)
All six root-cause mechanisms corrected and released. The RC is a draft-status catalog (every entry status: draft) for downstream human review; the RC catalog itself is the recovery baseline. ISNC commit cfa32ad, tag v0.2.0rc62, 2148 names exported to origin.
Grammar / vocab (ISN):flux_limiter_coefficient base (C6, 13 renames → *_momentum_flux_limiter_coefficient); reaction-channel qualifier grammar for fusion neutron fluxes (C12 — this did require a model change, 8 <pair>_neutron_flux + fusion-variant renames); along_limiter + DD-anchored locus description/defining_quantity fields (C3/C4·point/C10); inline-unit lint (C7). Grammar suite green (793 passed).
Generation standards (imas-codex): canonical number-density opening, charge-state aggregation clause, locus-defining cross-link injection, no-inline-units, DT single-species-vs-reaction wording, harmonize-anchor pin — all data-driven from ISN vocab, no hardcoded vocab. Density + species-velocity families regenerated.
Pedestal consolidation (C5): 54 value quantities → _at_pedestal_top, 1 gradient derivative → _at_pedestal_maximum; residual duplicates consolidated (electron_pressure/electron_temperature/pressure/temperature → canonical _top). 4 ambiguous flux/shear/q names escalated to lead (see followups).
Separatrix completeness (C4·fsa): composer now canonicalizes DD separatrix/separatrix_average → plasma_boundary with a mandatory flux_surface_averaged transform; separatrix_pair_gaps() pairing guard added. Local↔fsa pairing complete for velocity (gap 0) and most density; borderline fsa held back at the 0.85 quality bar (never force-accepted).
Upstream DD (C8): neutral energy-flux unit defect confirmed (m^-2.s^-1 vs siblings' m^-2.W); interim known-inconsistency flag on the 3 names (DD-authoritative unit kept), DD issue drafted for filing.
No-regression guarantee: all 2124 rc61 names are represented at accepted/accepted under their original or renamed id (2063 preserved + 61 renamed + 9 restored from the RC catalog via filtered import); 13 rename-induced doc cross-links repaired. Budget ~$20 of the ~$200 authorized.
Open (external dependencies): lead physics call on the 4 ambiguous pedestal names; filing + tracking the upstream DD neutral energy-flux unit issue. See the followups section.
§2 — Root-cause map
Twelve reviewer comments (symptoms) trace to six mechanisms. Colour encodes the repository that owns the fix; the chips list the comment IDs each mechanism explains. Two comments are not mechanism bugs (bottom row): C1 is a naming convention to decide, C9 is already fixed.
Six mechanisms explain ten of the twelve comments. Editing the mechanisms (vocab tokens, prompt rules, a completeness invariant, DD issues) fixes the reported names and the wider class each mechanism governs; per-name sn edit is reserved for genuinely local blemishes.
§3 — Full triage table
Every comment, its verified root cause, the fix and where it lands, an effort estimate, and status flags (duplicate / already-fixed / upstream-DD). Effort scale: S < 1 h · M a few h · L a day+ · XL multi-day. There are no exact duplicate comments; several share a root cause (noted "shares RC-x").
ID
Comment (abridged)
Verified root cause
Fix & where it lands
Scope
Effort
Flags
C1
Spell the DT species with a hyphen (single species), not underscore.
Grammar forbids hyphens (4 validators + the _-splitting tokenizer); deuterium_tritium is a single subject token; the DD path element itself uses underscore (hyphen only in prose).
Decision: keep underscore; clarify prose that DT is one effective species (imas-codex docs).
Convention / doc
S
Not a defect. Latent: DT token is overloaded (fuel species vs D-T reaction channel) — ties to C12.
C2
Unclear how toroidal_<species>_velocity_at_* sums/averages over ionization states.
The name is correct (species-level per DD, no /state/). The docs prompt has no rule requiring the aggregation convention to be stated; it appears inconsistently.
Add a charge-state aggregation clause rule to generate_docs_system.md; refine-pass the species velocity/density families (imas-codex).
Global · prompt
M
Shares RC-B with C11, C3·desc.
C3
Add a pointer to the pedestal-location definition.
Defining name normalized_poloidal_flux_coordinate_of_pedestal exists but 0 of ~57 pedestal names link to it; no prompt rule to cross-link a locus-defining quantity.
Docs-prompt rule to cross-link locus-defining names + a zone→defining-quantity context map (imas-codex); short locus description (ISN).
Global · prompt/enrich
S–M
Shares RC-A with C4·point, C10.
C4·fsa
The flux-surface-averaged vs local distinction should exist for all separatrix quantities, not some.
Pipeline under-generation. DD provides the full local + separatrix_average matrix (17 species); ISN has 17 local / 9 fsa (1 malformed — DT), 8 missing, all 17 separatrix_average paths unmapped, 2 dangling links; density ~16 species short.
Add a local↔separatrix_average pairing invariant; coverage re-run to generate the missing fsa names, attach DD sources, fix links (imas-codex + ISNC).
Global · coverage
M–L
Grammar already supports it (flux_surface_averaged is a transformation).
C4·point
Specify the separatrix point value at the separatrix∩outer-midplane; the outer midplane comes from the midplane_id identifier.
Loci exist (outboard_midplane_separatrix, dr_dz_zero_point) but are undocumented and the dedicated one is unused; the pipeline emitted generic outboard_midplane. The DD midplane_identifierexists (4 options).
Document the loci with their DD anchor; prefer outboard_midplane_separatrix; add the point-definition sentence (ISN + a few ISNC names).
Small / few names
S
No DD change (identifier already exists). Shares RC-A.
C5
Merge at_pedestal and at_pedestal_top into one locus; prefer pedestal_top.
Contradictory prompt canonicalization across three prompts (pedestal as zone-prefix vs _at_ locus; at_pedestal vs at_pedestal_top); registry carries both. 46 _at_pedestal vs 11 _at_pedestal_top.
Reconcile the prompts to one rule; rename value-quantities to pedestal_top, but keep a mid-pedestal locus for gradient/position names (imas-codex + ISN + regen).
The coefficient base is vague; these are flux-limiter coefficients.
The base is the meaning-free coefficient (physical_bases.yml); the 13-name momentum_coefficient family are flux limiters per their own descriptions (unit '1').
Add a flux_limiter_coefficient base to physical_bases.yml; regenerate the 13 names → momentum_flux_limiter_coefficient etc. (ISN + regen).
Global · vocab
M
No flux_limiter token exists yet.
C7
Unit exponents are "prettified" for one name but not most others.
No prettifier exists; the unit: field is uniform (plain ASCII, always). The inconsistency is legacy prose that restates units — LaTeX (→ pretty via KaTeX) vs ASCII. The current prompt already bans inline units.
Enforce the existing no-inline-units rule; refine-pass to strip legacy prose units (imas-codex); add a lint in validation/description.py (ISN).
Global · prose hygiene
M
Rule already codified; corpus is mixed-epoch. Shares RC-B.
C8
neutral_energy_flux_at_wall shares the unit of neutral_particle_flux_at_wall — likely a DD unit mistake.
Confirmed upstream DD bug (verified via imas-dd): wall/…/energy_fluxes/{kinetic,recombination}/neutral/incident carry m^-2.0.s^-1 (particle-flux unit) — even the docs are copy-pasted ("neutral particle flux") — while ion/radiation energy-flux siblings correctly use m^-2.W.
File a DD issue (unit m^-2.s^-1→m^-2.W + fix docs); interim: replace the LLM's rationalizing prose with a known-inconsistency flag on 3 names (DD + ISNC).
Upstream + interim
S + DD latency
Upstream-DD. Blast radius 3 names.
C9
The equation in neutral_state_energy_flux_at_wall didn't render.
Not reproducible in the current catalog + SPA: stored YAML has balanced $$, the SPA regex + KaTeX render it, and a catalog-wide scan finds 0 malformed equations. Likely regenerated after the review, or viewed on a non-SPA surface (raw YAML / mkdocs, where inline $…$ is not configured).
None required. Optional: register $…$ inlineMath in the (catalog-unused) mkdocs mathjax config; confirm the surface with the reviewer.
Verify-only
S
Already fixed.
C10
at_limiter is under-defined in the DD; and peak_power_density_at_limiter should be along_limiter.
DD defines at_limiter only as surface geometry (IMAS_3226 tangency semantics unresolved everywhere); the tangency concept already exists as the active_limiter_point locus; along is not in the limiter locus's allowed_relations ([at, of]).
Add along + a DD-anchored description to the limiter locus and rename peak_power_density_at_limiter (ISN + sn edit); file a DD issue for the at_limiter definition (IMAS_3226).
Mixed + upstream
M
Partly upstream-DD (definition). Shares RC-A (missing locus description).
Family harmonization is active but has no canonical density phrasing (anchor = "longest description", not canonical), no retro-fix of accepted siblings, and the short description field is under-governed. The _at_limiter family alone uses 7 openings.
Add a canonical number-density template to the docs prompt; pin the anchor; harmonize-and-regenerate the density families (~100+ names) (imas-codex + ISNC).
Global · prompt+regen
M
Partially present; shares RC-B with C2, C3·desc.
C12
Make tritium_tritium_flux precise: base neutron_flux, or split the grammar to add a neutron qualifier.
Reactant pairs are single-token subjects and neutron is also a subject — two subjects can't co-occur, and there is no reaction-channel qualifier. The 8 names are neutron count-rates (unit Hz); the DD models them as summary/fusion/neutron_fluxes/{tt,dt,dd}. A rival neutron_flux_due_to_* convention already exists in the catalog.
Introduce a reaction-channel qualifier + parser subject/qualifier disambiguation so <pair>_neutron_flux parses; regen the 8 names, fold in the 3 rival names, fix the dangling neutron_flux link (ISN + regen).
Global · grammar
M–L
Two rival conventions to unify.
Answers to the review-request tick-boxes:Duplicates? — no two comments are the same defect; C2/C11/C3·desc/C7 share root cause RC-B and C3/C4·point/C10 share RC-A (so their fixes should be built together, not duplicated). Already fixed in the current version? — C9 (equation renders; not reproducible); C7's rule is already codified though the legacy corpus is not yet cleaned; C1 is already consistent (a decision, not a fix). Require upstream (DD) intervention? — C8 (a confirmed unit mistake, m^-2.s^-1 should be m^-2.W) and the definition half of C10 (at_limiter semantics, IMAS_3226). Notably C4·point does not need a DD change — the midplane_identifier the reviewer refers to already exists.
Resolves C3, C4·point, C10 (registry/rename half), and C5. Root causes RC-A + RC-C. The recurring mechanism: loci in locus_registry.yml are bare type/allowed_relations records with no descriptive or DD-anchoring text, so the LLM invents per-name locus meaning at docs time; and the imas-codex prompts carry conflicting canonicalization rules for the pedestal.
Fix:
Add a short description (and DD path/identifier anchor) to the position/region loci the review touches: pedestal, pedestal_top, pedestal_maximum, limiter, active_limiter_point, outboard_midplane, outboard_midplane_separatrix, separatrix, dr_dz_zero_point — in imas_standard_names/grammar/vocabularies/locus_registry.yml.
Surface those locus descriptions into the docs-generation prompt context so descriptions are anchored, not invented; and add a rule to cross-link the locus-defining standard name (pedestal → normalized_poloidal_flux_coordinate_of_pedestal) — this is the C3 fix, and generalizes to separatrix / magnetic-axis / X-point.
Reconcile the contradictory pedestal guidance across generate_name_system.md, generate_name_dd_names.md, and review_names.md to one canonical rule (C5), then rename value-quantities _at_pedestal→_at_pedestal_top while routing gradient/position quantities (derivatives, poloidal_magnetic_flux_at_pedestal) to pedestal_maximum/mid-pedestal — per the locked policy in the decision below.
Add along to the limiter locus's allowed_relations and rename peak_power_density_at_limiter→peak_power_density_along_limiter (a surface distribution/peak), with the same treatment considered for the _at_divertor_target/_at_first_wall siblings (C10 registry half).
For C4·point: document that the outer midplane follows the DD midplane_identifier (default dr_dz_zero_sep → equilibrium/…/boundary_separatrix/dr_dz_zero_point) and prefer the existing outboard_midplane_separatrix locus for separatrix point values.
Verification: full grammar suite green; catalog round-trips; the renamed/relocated names re-review clean; a spot check that pedestal-family docs now carry the cross-link. Effort: M (registry descriptions + prompt reconciliation are quick; the C5 value/gradient rename triage is the bulk).
Resolves C2, C11, C3·desc, and the prose half of C7. Root cause RC-B: descriptions are generated per-name with only soft, emergent family harmonization and no retro-fix of already-accepted names, so sibling phrasing drifts and legacy conventions (inline units, ad-hoc aggregation wording) linger.
Fix (imas-codex prompts + a regeneration sweep):
Add a canonical number-density template to generate_docs_system.md / refine_docs_user.md (e.g. "<Species> ion number density, summed over all charge states, at <locus>.") and make the short description field subject to the family anchor rule (C11).
Add an aggregation-over-charge-states rule: any species-level quantity must state whether it is charge-state-summed (extensive, e.g. density) or density-weighted-averaged (intensive, e.g. velocity/temperature), and cross-link its charge-state-resolved counterpart (C2).
Add a locus-defining cross-link rule and pass a zone→defining-quantity map into the docs context (C3·desc; complements WS1).
Pin the harmonization anchor to a canonical opening rather than "longest description" (harmonize.py:select_anchor), and run harmonize + regenerate across the density and species-velocity families (~100+ names) so already-accepted drift is rewritten — drift detection alone does not touch the published catalog.
Add ISN lint guards in validation/description.py: (a) flag prose restating the entry's own unit outside equation contexts (C7); (b) optionally flag missing charge-state clause on multi-charge-state species names.
Verification: re-run the family-parallel-structure check; sample each density family for the canonical opening; confirm 0 inline-unit lint hits on regenerated names. Effort: L (prompt edits are small; the regeneration + re-review across 100+ accepted names is the cost).
§6 — WS3 · Grammar vocabulary additions
Resolves C6 and C12. Root cause RC-D: the grammar is missing precise tokens — a meaning-free coefficient base, and no way to say "neutron flux from the D-T reaction" because both the reactant pair and neutron are single-token subjects.
C6 fix: add a flux_limiter_coefficient base to physical_bases.yml and regenerate the 13-name family to momentum_flux_limiter_coefficient, toroidal_neutral_momentum_flux_limiter_coefficient, etc. (keeping the generic coefficient free — or renaming in place; see decision).
C12 fix (recommended Option A): make neutron the concept and introduce a reaction-channel qualifier so <pair>_neutron_flux parses (deuterium_tritium_neutron_flux, deuterium_deuterium_neutron_flux, tritium_tritium_neutron_flux, + _due_to_*_fusion). This mirrors the DD's neutron_fluxes/<pair> hierarchy and unifies with the existing neutron_flux_due_to_* names. The reactant pairs must remain subjects for genuine fuel-species quantities (deuterium_tritium_density), so the parser needs positional subject-vs-qualifier disambiguation (pair directly before the base ⇒ subject; pair before a following subject ⇒ qualifier). Regenerate the 8 reactant-pair names, fold in the 3 rival neutron-subject names, and fix the dangling neutron_flux link.
Verification: parser round-trips both readings (deuterium_tritium_density as subject; deuterium_tritium_neutron_flux as qualifier+subject); vocab disjointness guard stays green; the 13 + 8 + 3 names re-review clean. Effort: C6 M; C12 M–L (parser disambiguation is the risk).
§7 — WS4 · Separatrix pair completeness invariant
Resolves C4·fsa. Root cause RC-E: the DD ships a complete, symmetric local/separatrix (point) + local/separatrix_average (flux-surface-averaged) matrix for all 17 species, but the pipeline generated only part of it — 17 local velocities but 9 fsa (one malformed, DT, missing its _at_plasma_boundary locus), 8 species missing entirely, all 17 separatrix_average/velocity_phi DD paths unmapped and even the existing fsa names source-orphaned; the same gap exists for density (~16 species). Two dangling links point at fsa names that were never created.
Fix: add a completeness invariant so the pipeline cannot ship half a DD-provided pair — any name sourced from local/separatrix/<q>/<species> requires a flux_surface_averaged sibling from local/separatrix_average/<q>/<species> and vice versa. Then a coverage re-run: generate the 8 missing fsa velocities, fix the DT malformation, attach the separatrix_average DD sources to all fsa names, apply the same pairing to the density family (~16 species), and repair the 2 dangling links. Grammar already composes flux_surface_averaged (a registered transformation), so this is coverage, not grammar.
Verification: the invariant check passes over the full separatrix subtree; the previously-orphaned separatrix_average paths are all mapped; dangling-link count 0. Effort: M–L (mechanically the composer already produces the form; the work is the paired re-run over velocity + density and attaching sources).
§8 — WS5 · Upstream DD corrections
Resolves C8 and the definition half of C10. Root cause RC-F: defects in the upstream DD that a local patch would only mask.
C8 (confirmed unit bug): file a DD issue to change the wall energy_fluxesneutral branch paths (kinetic/neutral/{incident,emitted}, …/state/*, recombination/neutral/*) from m^-2.s^-1 to m^-2.W to match the ion/radiation branches, and fix the copy-pasted documentation ("Incident neutral particle flux" on an energy-flux node). Interim in the catalog: replace the LLM's rationalizing prose on the 3 affected names (neutral_energy_flux_at_wall, …_due_to_recombination, neutral_state_energy_flux_at_wall) with the pipeline's own known-inconsistency flag and mark them for regeneration once the DD is corrected. (The unit: field is DD-authoritative; do not silently override it ahead of the DD unless the project chooses to lead the DD, in which case note the deliberate desync.)
C10 (definition): the at_limiter measurement locus is not defined in the DD; the SOLPS interpretation (tangency point of separatrix and limiter) is not yet generally accepted (IMAS_3226). File/track the upstream item so a defensible definition can be adopted; in the interim, WS1 documents the locus with the DD anchor and cross-references active_limiter_point (which already carries the tangency-contact meaning).
Verification: DD issue(s) filed with the exact paths + proposed units; interim catalog flags in place; regeneration queued behind the DD fix. Effort: S to author the issues + interim flags; external resolution latency is out of our control.
§9 — WS6 · Convention decision & verify-only
C1 (deuterium-tritium hyphen): recommended reject — keep the underscore. Hyphens are categorically illegal in the grammar (four validators + the underscore-splitting tokenizer), deuterium_tritium is already a single subject token, and the DD path element itself uses the underscore (the hyphen appears only in DD prose). The clarity the reviewer wants is a prose matter and largely already present ("treated as a single effective species, 2.5 amu"). Action: a documentation clarification, plus a note distinguishing the two readings of the DT token (fuel species vs D-T reaction channel — the latter is what WS3/C12 addresses).
C9 (broken equation): verify-only — the equation is well-formed in the stored YAML and renders correctly under the SPA's KaTeX path; a catalog-wide scan found no malformed equations. Confirm with the reviewer which surface they viewed (raw GitHub YAML and the mkdocs site do not render inline $…$ the way the catalog SPA does); optionally register $…$ inlineMath in the mkdocs mathjax config as belt-and-suspenders (the catalog itself is served by the SPA, not mkdocs).
§ Decisions
C1 — Should compound species (deuterium-tritium, isotopes) use a hyphen, or keep the underscore?
LOCKED (Simon McIntosh, 2026-07-06): keep underscore. Parsing objection retracted (pairs are enumerated tokens; the parser splits on '_' only, so a hyphen would be a single atomic token, not a new delimiter). Kept on convention grounds: docs/guidelines.md + style-guide.md deliberately forbid hyphens (CF-aligned); '-' is reserved for the machine/file-id namespace; every other multi-word token uses '_'; consistency would cascade to isotopes (helium_3, carbon_13); identifier portability. C1 becomes a prose clarification, not a rename.
C5 — How to consolidate the pedestal locus?
LOCKED (Simon McIntosh, 2026-07-06): rename value-quantities to pedestal_top; route gradient/flux-position quantities to the mid-pedestal locus (pedestal_maximum). A blanket rename would mislabel maximum-gradient/position quantities that legitimately sit mid-pedestal (DD pedestal_fits/*/d_dpsi_norm_max_position, summary/local/pedestal/position/psi).
C6 — Add a new base or rename the existing one?
LOCKED (Simon McIntosh, 2026-07-06): add a new flux_limiter_coefficient base; keep the generic 'coefficient' slot free for future non-limiter coefficients.
C12 — How to make the fusion neutron-flux names precise?
LOCKED (Simon McIntosh, 2026-07-06): Option A — neutron is the concept, reaction pair becomes a reaction-channel qualifier (<pair>_neutron_flux); mirrors the DD neutron_fluxes/<pair> hierarchy and unifies with the existing neutron_flux_due_to_* names; needs parser positional subject-vs-qualifier disambiguation so the pair can still be a subject for fuel-species quantities.
C7 — How to make unit rendering consistent?
LOCKED (Simon McIntosh, 2026-07-06): enforce the existing no-inline-units rule, refine the legacy prose, and add a lint guard; the unit: field is already uniform so no renderer is needed.
C4·fsa — Scope of the separatrix pairing fix?
LOCKED (Simon McIntosh, 2026-07-06): fix the velocity and density families together and add the local<->separatrix_average pairing invariant so the pipeline cannot ship half a DD-provided pair again.
Add DD-anchored description fields to the review-touched loci, surface them into the docs prompt context, reconcile the contradictory pedestal canonicalization, and do the C5 value/gradient rename triage plus the along_limiter mechanics. Honour the locked pedestal-consolidation policy.
Project: imas-standard-names (+ imas-codex prompts, imas-standard-names-catalog)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §4 (WS1)
Tier: opus
Context
Loci in locus_registry.yml are bare type/allowed_relations records with no
descriptive/DD-anchoring text, so the docs LLM invents per-name locus meaning;
and the imas-codex prompts carry contradictory pedestal canonicalization. This
is the shared fix for C3, C4-point, C5, and the registry half of C10. Honour the
locked decisions shown live above.
State to read (CODE / FILES / DATA)
imas-standard-names/imas_standard_names/grammar/vocabularies/locus_registry.yml
(pedestal:499, pedestal_maximum:502, pedestal_top:505, limiter:459,
active_limiter_point:571, outboard_midplane:487, outboard_midplane_separatrix:490,
separatrix:543, dr_dz_zero_point:576)
imas-codex/imas_codex/llm/prompts/sn/{generate_name_system.md, generate_name_dd_names.md,
review_names.md, generate_docs_system.md} (pedestal + limiter + cross-link rules)
imas-standard-names-catalog/standard_names/{edge_plasma_physics.yml, magnetohydrodynamics.yml,
plasma_wall_interactions.yml, turbulence.yml}
DD via imas-dd: summary/local/pedestal/position/psi, summary/pedestal_fits/*,
equilibrium/.../boundary_separatrix/dr_dz_zero_point, midplane_identifier options.
Scope locks / constraints
- Read-first: this plan is verification-stage; do not start edits until decisions
pedestal-locus-consolidation and (for C10) the along_limiter approach are locked.
- Grammar/vocab changes go through ISN + grammar_sync + regen, not hand-edits of the catalog.
- Do NOT blanket-rename _at_pedestal: value-quantities → pedestal_top; gradient/flux-position
quantities → mid-pedestal (pedestal_maximum). Per-name triage required.
- C4-point needs NO DD change (midplane_identifier already exists); prefer the existing
outboard_midplane_separatrix locus for separatrix point values.
Done-when
1. Loci carry DD-anchored description fields; docs prompt consumes them; pedestal cross-link
rule added; the three prompts agree on one pedestal rule.
2. C5 renames applied per policy; along added to limiter allowed_relations;
peak_power_density_at_limiter renamed; affected names re-review clean.
3. Grammar + catalog round-trip suites green; followup written + this one resolved.
DONE. ISN loci carry DD-anchored description + defining_quantity fields (b512c33, 4057442); C5 value quantities renamed to _at_pedestal_top (54) + 1 derivative to _at_pedestal_maximum; along added to the limiter locus + peak_power_density_along_limiter; imas-codex name prompts reconciled to one pedestal rule. All in graph, export-clean.
Add canonical density/aggregation/cross-link rules to the docs prompts, pin the harmonization anchor, run a harmonize+regenerate sweep over the density and species-velocity families, and add the inline-unit lint guard.
Project: imas-codex (+ imas-standard-names lint, imas-standard-names-catalog)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §5 (WS2)
Tier: opus
Context
Descriptions are generated per-name with soft, emergent family harmonization and
no retro-fix of accepted names, so sibling phrasing drifts (C11), aggregation
wording is inconsistent (C2), locus-defining cross-links are absent (C3-desc), and
legacy prose restates units (C7). One mechanism fix addresses all four.
State to read (CODE / FILES / DATA)
imas-codex/imas_codex/llm/prompts/sn/{generate_docs_system.md, generate_docs_user.md,
refine_docs_user.md, review_docs_user.md}
imas-codex/imas_codex/standard_names/{harmonize.py (select_anchor, drift), context.py
(fetch_sibling_family, max_siblings)}
imas-standard-names/imas_standard_names/validation/description.py (add lint)
imas-standard-names-catalog/standard_names/{plasma_wall_interactions.yml,
edge_plasma_physics.yml} (density + species-velocity families)
Scope locks / constraints
- Canonical number-density opening template + charge-state aggregation clause
(summed for extensive, density-weighted mean for intensive) + locus-defining
cross-link rule. Make the short description field subject to the family anchor.
- Pin select_anchor to a canonical opening, not "longest description".
- Retro-fix requires a harmonize + REGENERATE pass (drift detection alone does not
touch the published catalog); ~100+ density descriptions.
- Honour the "No-inline-units" rule; the lint flags prose restating the entry's own
unit outside equation contexts.
Done-when
1. Prompt rules added; anchor pinned; lint guard added and green.
2. Density + species-velocity families regenerated; family-parallel-structure check
passes; 0 inline-unit lint hits on regenerated names.
3. Followup written + this one resolved.
DONE — shipped in rc62. Generation standards landed (canonical number-density opening, charge-state aggregation clause, PR-9 locus cross-link, no-inline-units) + inline-unit lint added to ISN description.py; select_anchor pinned. Density + species-velocity families regenerated at the full-quorum quality bar. The separatrix/plasma_boundary subtree later destabilized under fsa-compose cascades (family harmonization cross-touches siblings); restored to the rc61 accepted baseline via filtered RC-catalog import — NO doc regression (rc61 docs already carried the aggregation clause + cross-links, so no quality loss).
Add the specific base for the flux-limiter family and the reaction-channel qualifier + parser disambiguation for fusion neutron fluxes; regenerate the affected families and unify the rival neutron-subject names.
Project: imas-standard-names (grammar/vocab + parser) + imas-codex regen
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §6 (WS3)
Tier: opus
Context
The grammar lacks precise tokens: a meaning-free `coefficient` base (C6) and no way
to express "neutron flux from the D-T reaction" because both the reactant pair and
neutron are single-token subjects (C12). Honour the locked coefficient-base-strategy
and neutron-flux-grammar decisions above.
State to read (CODE / FILES / DATA)
imas-standard-names/imas_standard_names/grammar/vocabularies/{physical_bases.yml
(coefficient:49), subjects.yml (neutron:38, reaction channels:65-67), qualifiers.yml,
qualifier_categories.yml}
imas-standard-names/imas_standard_names/grammar/{parser.py, model.py, field_schemas.py}
imas-standard-names-catalog/standard_names/{edge_plasma_physics.yml, transport.yml,
radiation_measurement_diagnostics.yml}
DD via imas-dd: summary/fusion/neutron_fluxes/{tt,dt,dd}/*, summary/fusion/neutron_rates/*.
Scope locks / constraints
- C6: add flux_limiter_coefficient base; regen the 13-name momentum-coefficient family.
- C12 (Option A): neutron is the concept; add a reaction-channel qualifier so
<pair>_neutron_flux parses. Pairs MUST remain subjects for fuel-species quantities
(deuterium_tritium_density) — parser needs positional subject-vs-qualifier
disambiguation. Regen 8 reactant-pair names, fold in the 3 rival neutron_flux_due_to_*
names, fix the dangling neutron_flux link.
- Keep the vocab disjointness guard green.
Done-when
1. New base + reaction-channel qualifier added; parser disambiguation implemented.
2. Parser round-trips both readings; 13 + 8 + 3 names regenerated + re-review clean.
3. Full grammar suite green; followup written + this one resolved.
DONE. C6: flux_limiter_coefficient base (0dd95b5) + 13 renames. C12: reaction-channel qualifier grammar (7d514a4, dual-role subjects-qualifiers overlap allowlisted) + 8 _neutron_flux renames; full grammar suite green (786); all semantic-parse + export clean.
Add a completeness invariant so the pipeline cannot ship half a DD-provided local/separatrix_average pair, then re-run coverage to generate the missing fsa names, fix the DT malformation, attach sources, and repair dangling links — for velocity and density.
Project: imas-codex (pipeline + invariant) + imas-standard-names-catalog
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §7 (WS4)
Tier: opus
Context
The DD ships the full local/separatrix + local/separatrix_average matrix for 17 species,
but the pipeline generated only part of it (C4-fsa): 17 local velocities / 9 fsa (DT
malformed, missing its _at_plasma_boundary locus), 8 species missing, all 17
separatrix_average/velocity_phi paths unmapped and existing fsa names source-orphaned;
density is ~16 species short; 2 dangling links. Honour the locked fsa-completeness-scope.
State to read (CODE / FILES / DATA)
imas-codex/imas_codex/standard_names/{audits.py, coverage.py, families.py}
imas-standard-names/imas_standard_names/grammar/constants.py (flux_surface_averaged is a
registered transformation — grammar already composes it)
imas-standard-names-catalog/standard_names/edge_plasma_physics.yml (velocity + density
families; dangling links at 5397, 5818; malformed DT fsa at 5309)
DD via imas-dd: summary/local/separatrix/velocity_phi/<species>/value and
summary/local/separatrix_average/velocity_phi/<species>/value (+ n_i analogues).
Scope locks / constraints
- Add a pairing invariant: a name from local/separatrix/<q>/<species> requires a
flux_surface_averaged sibling from local/separatrix_average/<q>/<species>, and vice versa.
- Coverage re-run: 8 missing fsa velocities + DT fix + attach separatrix_average sources +
density family (~16 species) + fix the 2 dangling links.
- This is coverage, not grammar — do not change the grammar.
Done-when
1. Invariant added and passing over the full separatrix subtree.
2. Missing fsa names generated + sourced; DT fixed; dangling-link count 0.
3. Suites green; followup written + this one resolved.
DONE — shipped in rc62. Pairing invariant added: coverage.separatrix_pair_gaps() reports species missing local<->flux_surface_averaged pairs (1d3e9dea). Composer locus-canonicalization (separatrix/separatrix_average -> plasma_boundary + mandatory flux_surface_averaged transform, e4bced8a/2063ad9b). Coverage re-run: local gaps 0 (velocity+density); velocity fsa gap 0; deuterium_tritium density fsa landed accepted/accepted (0.97/0.925). Held back at the 0.85 bar (quality-first, never force-accepted): helium_4 velocity fsa (docs refining), oxygen/hydrogen/boron density fsa. Root cause of the reset-cascade + fsa source-orphaning diagnosed + documented; recovery via filtered RC-catalog import.
WS5a — Upstream DD issue: neutral energy-flux unit at wall (C8) + interim catalog flag
File the DD issue for the wall neutral energy-flux unit mistake (confirmed via imas-dd), and replace the LLM's rationalizing prose on the 3 affected catalog names with a known-inconsistency flag pending the DD fix.
Project: DD (upstream issue) + imas-standard-names-catalog (interim)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §8 (WS5a)
Tier: sonnet
Context
Confirmed via imas-dd: the wall energy_fluxes NEUTRAL branches carry the particle-flux
unit m^-2.s^-1 (serialized m^-2.0.s^-1) with copy-pasted "neutral particle flux" docs,
while ion/radiation energy-flux siblings correctly use m^-2.W. This is an upstream DD bug;
the LLM's rationalizing prose also violates imas-codex's own don't-rationalise-bad-units rule.
State to read (CODE / FILES / DATA)
DD via imas-dd (dd_version 3): wall/description_ggd/ggd/energy_fluxes/kinetic/neutral/{incident,emitted},
.../kinetic/neutral/state/*, .../recombination/neutral/* (all currently m^-2.0.s^-1)
vs .../kinetic/ion/incident and .../radiation/incident (m^-2.W, correct).
imas-standard-names-catalog/standard_names/plasma_wall_interactions.yml
(neutral_energy_flux_at_wall:1852, ..._due_to_recombination:1892, neutral_state_energy_flux_at_wall:1979)
Scope locks / constraints
- Author a DD issue: change the neutral energy_flux branch units m^-2.s^-1 → m^-2.W and fix
the copy-pasted documentation; list the exact paths.
- Interim: replace the rationalizing prose on the 3 names with the pipeline's known-inconsistency
flag; do NOT silently override the DD-authoritative unit field unless the project decides to
lead the DD (then note the deliberate desync). Mark the 3 names for regen after the DD fix.
Done-when
1. DD issue filed with paths + proposed units + doc fix.
2. Interim flag applied to the 3 catalog names; regen queued behind the DD fix.
3. This followup resolved (external DD resolution tracked separately).
DONE in-repo (interim); DD-side upstream. Confirmed via imas-dd: neutral energy_fluxes branches carry particle-flux unit m^-2.s^-1 vs ion/radiation siblings' m^-2.W. Upstream DD issue drafted (exact paths + proposed m^-2.W + doc fix). Interim known-inconsistency flag applied to the 3 catalog names (neutral_energy_flux_at_wall, _due_to_recombination, neutral_state_energy_flux_at_wall): DD-authoritative unit kept, rationalizing particle-rate prose replaced with a flagged energy-flux description, queued for regen after the DD fix. Shipped in rc62. External DD resolution tracked in the appended followup.
Track/advance the upstream definition of the at_limiter measurement locus (the SOLPS separatrix–limiter tangency interpretation is not yet generally accepted; IMAS_3226). The interim in-catalog documentation is handled by WS1.
Project: DD / IMAS community (upstream)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §8 (WS5b)
Tier: sonnet
Context
The DD defines at_limiter only as surface geometry (wall/description_2d/limiter); the
measurement-locus meaning is unresolved (IMAS_3226 proposes the separatrix-limiter tangency
point, not yet generally accepted). The tangency-contact concept already exists in the catalog
as active_limiter_point (DD pulse_schedule/position_control/active_limiter_point).
State to read (CODE / FILES / DATA)
DD via imas-dd: wall/description_2d/limiter; pulse_schedule/position_control/active_limiter_point
imas-standard-names/imas_standard_names/grammar/vocabularies/locus_registry.yml
(limiter:459, active_limiter_point:571)
IMAS issue tracker: IMAS_3226.
Scope locks / constraints
- This is an upstream/community definition item, not a local code change; the interim locus
documentation + cross-reference to active_limiter_point is done in WS1.
- Do not adopt the tangency definition in the catalog until it is accepted upstream.
Done-when
1. IMAS_3226 status confirmed and the desired at_limiter definition articulated upstream.
2. Once accepted, the limiter locus description + affected names updated (follow-on).
3. This followup resolved or re-scoped to track the upstream item.
IN-REPO DONE; DD-definition UPSTREAM. The limiter locus now carries a DD-anchored description cross-referencing active_limiter_point (separatrix-limiter tangency) and along_limiter for surface distributions (WS1). The at_limiter measurement-point DEFINITION itself is unresolved upstream (IMAS_3226) — tracked for the follow-on review-remediation session; not adoptable in-catalog until accepted upstream.
Apply the C1 decision (keep underscore) as a prose clarification distinguishing the two readings of the DT token, and close C9 by confirming the render surface with the reviewer (optionally hardening mkdocs mathjax).
Project: imas-codex (docs prose) + imas-standard-names (mkdocs, optional)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §9 (WS6)
Tier: sonnet
Context
C1 is a convention decision (keep underscore — see the locked decision above); the fix is a
prose clarification, not a rename. C9 is not reproducible (the equation renders under the SPA);
close it by confirming which surface the reviewer saw.
State to read (CODE / FILES / DATA)
imas-codex/imas_codex/llm/prompts/sn/generate_docs_system.md (species/DT wording)
imas-standard-names-catalog/standard_names/ (deuterium_tritium_* descriptions;
neutral_state_energy_flux_at_wall:1979 documentation)
imas-standard-names/{mkdocs.yml, docs/javascripts/mathjax.js} (inline $...$ not configured)
Scope locks / constraints
- Do NOT introduce a hyphen anywhere in a name (decision locked to keep underscore).
- C9: no catalog/SPA change required; optional one-line mkdocs mathjax inlineMath registration.
Done-when
1. DT prose clarified (single effective species vs D-T reaction channel reading).
2. C9 render surface confirmed with the reviewer; optional mkdocs tweak applied.
3. This followup resolved.
DONE. C1: keep-underscore locked + DT single-species-vs-reaction-channel wording in the docs prompt. C9: verified not reproducible (stored YAML clean, SPA+KaTeX render it, 0 malformed catalog-wide).
The imas-codex generation-STANDARD changes for WS1/WS2 landed on imas-codex@main (3 commits, prompt+harmonize only — no graph mutation, no catalog YAML, no ISN grammar). What landed: (T1/C11) canonical number-density opening template in generate_docs_system.md, with the short description field bound to the family-anchor rule; (T2/C2) charge-state aggregation clause — summed for extensive (density), density-weighted mean for intensive (velocity, temperature) — plus cross-link to the charge-state-resolved counterpart; (T3/C3-desc) PR-9 locus-defining cross-link rule (pedestal→flux coordinate, generalized to separatrix/axis/X-point); (T4/C7) strengthened no-inline-units to forbid restated ASCII/LaTeX unit strings, added to generate_docs_system.md and refine_docs_user.md; (T6/C1) deuterium_tritium wording distinguishes the effective 2.5-amu fuel species from the D-T fusion reaction channel, underscore kept; (T5/C5,C10) pedestal reconciled to a locus across generate_name_system.md + generate_name_dd_names.md + generate_name_dd.md (value→at_pedestal_top, gradient/flux-position→at_pedestal_maximum, bare pedestal + zone-prefix banned) and the three limiter loci distinguished (at_limiter point / along_limiter distribution / active_limiter_point tangency); (T7/C11) harmonize.select_anchor pinned to a canonical family opening instead of longest-description, with tests. Commits: ea0db110 (docs standards), a54e86c1 (name prompts; also repaired a pre-existing stale generate_name_dd golden from 1b83fe04), 6566ee08 (harmonize anchor + tests). All imas-codex prompt/harmonize/golden tests green. Refine_docs_user + generate_name_dd(_names) golden fixtures regenerated.
Project: imas-codex (regenerate) + imas-standard-names-catalog
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: §4/§5 follow-on to WS1/WS2
Tier: opus
Context
The generation STANDARDS for WS1 (pedestal/limiter prompt reconciliation + PR-9
locus cross-link) and WS2 (canonical number-density opening, charge-state
aggregation clause, DT wording, no-inline-units hardening, select_anchor pinned to
a canonical opening) have LANDED on imas-codex@main (commits ea0db110, a54e86c1,
6566ee08). They change prompt text + harmonize.py only — no accepted name has been
regenerated, so the published catalog does NOT yet reflect the new standards.
Remaining work (orchestrator-driven, NOT done by the prompt-standards worker)
1. Run a harmonize + REGENERATE docs sweep over the *_density* family (~100+ names,
esp. the *_density_at_limiter siblings with the ~7 drifting openings) and the
toroidal_<species>_velocity_at_* family so the canonical opening + aggregation
clause take effect; confirm family-parallel-structure passes and 0 inline-unit
lint hits on regenerated names.
2. Pass the zone->defining-quantity map (pedestal->normalized_poloidal_flux_coordinate_of_pedestal,
separatrix/axis/X-point->their coordinates) into the docs prompt context so PR-9
can emit the locus cross-links; verify the target names exist before linking.
3. Apply the C5 per-name pedestal triage (value->pedestal_top, gradient/flux-position
->pedestal_maximum) and the along_limiter / active_limiter_point renames through
ISN grammar + grammar_sync + regen (the locus_registry vocab is the ISN half of WS1).
4. Regenerate deuterium_tritium_* descriptions against the new DT wording rule.
Done-when
1. Density + species-velocity + DT families regenerated; new standards visible in the
published catalog; family-parallel + inline-unit lint clean.
2. Pedestal/limiter renames applied via ISN grammar and re-review clean.
3. WS1 and WS2 advanced/closed accordingly; this follow-on resolved.
DONE + APPLIED. Generation-standard prompts landed (ea0db110, a54e86c1, 6566ee08); the regen sweep they enable has now run (C11 density families + C2 velocity families regenerated at the full-quorum quality bar; C3-desc cross-link context wired in 45cfd907).
RENAMES LANDED in the graph (free graph ops, $0): C10 peak_power_density_along_limiter; C6 13x *_flux_limiter_coefficient (0 old *_momentum_coefficient left); C12 8x reaction-pair *_neutron_flux (0 old *_flux left); C5 54x value quantities to _at_pedestal_top + 1 derivative (electron_density) to _at_pedestal_maximum. RESIDUAL not renamed: (a) DUPLICATES where _at_pedestal AND _at_pedestal_top both pre-exist (temperature_at_pedestal both placeholders; electron_temperature_at_pedestal both catalog_edit; electron_pressure_at_pedestal live-vs-superseded _top; pressure_at_pedestal + its electron_pressure derivative blocked by that collision) — renaming collides, needs a duplicate MERGE keeping the canonical _top. (b) AMBIGUOUS position/flux names left for lead physics call: magnetic_shear_at_pedestal, safety_factor_at_pedestal, poloidal_magnetic_flux_at_pedestal, normalized_poloidal_magnetic_flux_at_pedestal (top vs mid-pedestal-position).
Project: imas-codex (graph) + imas-standard-names-catalog
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: C5 residual
Tier: opus
Context
Bulk C5 pedestal renames landed. Two residual classes remain, both needing judgment.
State to read (CODE / FILES / DATA)
Graph (read-only): the 9 remaining *_at_pedestal accepted names and their _at_pedestal_top counterparts (stage/origin).
imas-codex sn edit + consolidation mechanics (duplicate merge / supersede).
DD via imas-dd for the 4 ambiguous names (is the pedestal value at the top or the fit/max-gradient position?).
Scope locks / constraints
- Duplicates: keep the canonical _at_pedestal_top, supersede the redundant _at_pedestal (do NOT hand-delete; use the sanctioned supersede/merge path). Where _top is already superseded (electron_pressure), decide which form is canonical first.
- Ambiguous 4: lead physics call (top vs pedestal_maximum) before any rename.
Done-when
1. Pedestal duplicates consolidated to one locus each; 0 redundant _at_pedestal duplicates.
2. The 4 ambiguous names adjudicated + renamed or left per the lead.
3. This followup resolved.
MOSTLY DONE — shipped in rc62; 4 ambiguous escalated to lead. Pedestal duplicates consolidated to the canonical _at_pedestal_top: superseded bare electron_temperature_at_pedestal + temperature_at_pedestal (kept _top); renamed electron_pressure_at_pedestal + pressure_at_pedestal -> _at_pedestal_top (electron_pressure's dead superseded _top cleared first); all accepted/accepted (published) or docs-pending (unpublished derived). RESIDUAL for lead physics call (locked decision requires it): magnetic_shear_at_pedestal, safety_factor_at_pedestal, poloidal_magnetic_flux_at_pedestal, normalized_poloidal_magnetic_flux_at_pedestal retain _at_pedestal (no regression). See appended followup.
BUILT + LANDED this session (all $0 renames + code): C6 flux_limiter_coefficient base + 13 renames; C10 along_limiter + rename; C5 54 value->pedestal_top + 1 derivative->pedestal_maximum; C1 keep-underscore; imas-codex generation-standard prompts (data-driven, no hardcoded vocab); loci DD-anchored descriptions + defining_quantity. TWO of THREE pipeline fixes BUILT: (1) C12 reaction-channel qualifier grammar (ISN model.py + qualifiers/qualifier_categories vocab + guard-test allowlists; full grammar suite green 786; codex pin bumped to 7d514a4; 8 _neutron_flux renamed + semantic-parse/export clean) DONE end-to-end. (2) derived-name docs-regen: relaxed claim_generate_docs_batch to drop the name-score gate under a curative scope_run_id (graph_ops.py c95ad5b7) so derived-leaf families are docs-eligible; VALIDATED on density_at_limiter (20 members regenerated with the charge-state aggregation clause, ~$2.78/family; drtrain review->accept scoped). REMAINING: (3) per-species fsa from the DD species-array node (C4-fsa) still to BUILD; apply the docs regen across the other description families (density_at_plasma_boundary 18, density_at_pedestal_top 20, toroidal__velocity C2 families) ~ $3/family; C8 interim unit-flag on 3 names; then full flush + export + cut ISNC RC v0.2.0rc62. Budget used ~ $6 of $50. Note: --focus --dry-run is NOT dry (runs for real); the ISN pin bump trips the clear-gate (use --skip-clear-gate deliberately); the canonical density template improves consistency (aggregation clause now universal) but openings still vary somewhat (a stricter template could tighten further).
Project: imas-codex (build #3 + regen) + imas-standard-names-catalog (RC)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: pipeline build (remaining)
Tier: opus
Context
Two of three pipeline fixes are built + landed (C12 grammar; derived-name docs claim-gate). The machinery for the description regen works (validated on density_at_limiter, ~$3/family). Remaining: build per-species fsa (C4-fsa) from the DD species-array node; run the docs regen across the remaining description families; C8 interim flag; flush + export + cut the RC.
State to read (CODE / FILES / DATA)
imas-codex graph_ops.py claim_generate_docs_batch (curative-scope relaxation, landed c95ad5b7); harmonize.mark_families_for_regen; loop/pools docs pacing.
imas-codex compose/extract path for species-array (n_i, velocity_phi) DD nodes -> per-species names (C4-fsa build).
DD via imas-dd: summary/local/separatrix_average/{velocity_phi,n_i} per-species leaves.
imas-standard-names-catalog/standard_names/plasma_wall_interactions.yml (C8 3 names).
Scope locks / constraints
- Regen families with: sn run --families <parent> --docs-only --include-accepted --skip-clear-gate --reviewer-profile pilot -c <cap>; then a scoped review drain (--flush --scope-run-id <id>) to accept the drafted docs. Budget-cap each; stay within the $50 authorization.
- Build #3 (per-species fsa) needs the pipeline to expand a species-array DD node into per-species names (matching the existing per-species convention), NOT a generic ion_species name.
- Cut the RC only from an export-clean graph (all target names name_stage=accepted + docs_stage=accepted + semantic-parse OK).
Done-when
1. #3 built; C4-fsa per-species names generated + accepted.
2. Description regen applied across the density + velocity families; drafted docs drained to accepted.
3. C8 interim flag on the 3 names; full flush; export clean; ISNC RC cut.
4. This followup resolved; WS2/WS3/WS4 advanced/closed.
DONE — RC v0.2.0rc62 CUT + pushed to origin (commit cfa32ad, 2148 names, tag v0.2.0rc62, clean). All 3 pipeline fixes built+landed: C12 reaction-channel grammar; derived-name docs claim-gate relaxation under curative scope; C4-fsa composer locus-canonicalization + WS4 pairing guard + C3-desc locus cross-link injection. No-regression GUARANTEED: all 2124 rc61 names represented at accepted/accepted under original or renamed id (2063 preserved + 61 renamed + 9 restored via filtered RC-catalog import); 13 rename-induced cross-links repaired. C8 interim flags + C5 consolidation applied. Quality-first honored: borderline fsa held back, never force-accepted below 0.85. Budget ~$20 of ~$200. Note: the RC is a draft-status catalog (all names status:draft) pending human review.
C4-fsa needs a composer locus-canonicalization (DD separatrix -> plasma_boundary), not a focus
DIAGNOSIS (why C4-fsa is a build, not a focus): the 8 accepted toroidal_flux_surface_averaged__velocity_at_plasma_boundary names are all origin=catalog_edit (hand-created at the plasma_boundary locus). The pipeline COMPOSER, given the DD summary/local/separatrix_average path, instead produces the at_separatrix locus (0 accepted names use at_separatrix) -> the fresh attempts (beryllium, lithium) went EXHAUSTED at review because plasma_boundary is the accepted convention (separatrix = LCFS = the plasma boundary). So generating the ~9 missing fsa velocity + ~16 missing fsa density names via --focus fails (wrong locus, sources exhausted). FIX REQUIRED: canonicalize DD separatrix/separatrix_average -> the plasma_boundary locus in the name composer (generate_name_dd.md ~L194 maps to position=separatrix + transformation; change to plasma_boundary, OR add a separatrix->plasma_boundary canonical-locus mapping in audits.canonical_locus_check), then --retry-quarantined/--reset the exhausted fsa sources and regenerate at default quality. Interacts with canonical-qualifier-order (secondary_separatrix vs plasma_boundary synonym). Also: fix the malformed toroidal_flux_surface_averaged_deuterium_tritium_velocity (missing _at_plasma_boundary locus) + the 2 dangling helium_3 fsa links + supersede the 3 generic ion_species drafts from the earlier mis-scoped focus.
Project: imas-codex (composer locus fix) + imas-standard-names-catalog
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: C4-fsa (deferred build)
Tier: opus
Context
C4-fsa (flux-surface-averaged vs local distinction for all separatrix species) needs a composer locus-canonicalization: the composer emits at_separatrix but the accepted convention is at_plasma_boundary, so fresh fsa names exhaust at review. This is a distinct build, deferred from the main regen.
State to read (CODE / FILES / DATA)
imas-codex/imas_codex/llm/prompts/sn/generate_name_dd.md (separatrix position mapping ~L194)
imas-codex/imas_codex/standard_names/audits.py canonical_locus_check (separatrix/plasma_boundary/secondary_separatrix handling)
DD via imas-dd: summary/local/separatrix{,_average}/{velocity_phi,n_i}/<species> per-species leaves
Graph: exhausted toroidal_flux_surface_averaged_{beryllium,lithium}_velocity_at_separatrix; superseded helium_3 fsa; 3 drafted ion_species generics; malformed toroidal_flux_surface_averaged_deuterium_tritium_velocity.
Scope locks / constraints
- Canonicalize DD separatrix/separatrix_average -> plasma_boundary locus in the composer (or canonical_locus mapping); do NOT accept at_separatrix names.
- Reset/retry the exhausted fsa sources; regenerate at default reviewer + 0.85; only accept >=0.85 (quality-first).
- Generate the ~9 missing fsa velocity + ~16 missing fsa density species; fix the DT malformation + 2 dangling links; supersede the 3 generic ion_species drafts.
- Add the local<->separatrix_average pairing invariant (WS4) so the pipeline cannot ship half a pair.
Done-when
1. Composer emits plasma_boundary for separatrix DD paths; at_separatrix names gone.
2. All 17 species have both local + fsa velocity + density at plasma_boundary, accepted at >=0.85.
3. Generic drafts superseded; dangling links fixed; pairing invariant added.
4. This followup resolved; WS4 closed.
COMPOSER FIX DONE. generate_name_dd.md now maps DD separatrix/separatrix_average -> plasma_boundary AND requires the flux_surface_averaged transform for _average paths (e4bced8a + 2063ad9b; golden regenerated; separatrix->plasma_boundary synonym already in audits._CANONICAL_LOCUS_SYNONYMS). Verified: composes flux_surface_averaged_beryllium_density_at_plasma_boundary. The full fsa generation runs under WS4/pipeline-build.
External residuals: lead adjudication of 4 ambiguous pedestal names + upstream DD neutral energy-flux unit issue
Two items cannot be closed in-repo — both are external dependencies surfaced by the shipped work. (a) LEAD PHYSICS CALL: 4 ambiguous pedestal names retain _at_pedestal (magnetic_shear, safety_factor, poloidal_magnetic_flux, normalized_poloidal_magnetic_flux) — the locked pedestal-consolidation decision requires a value-vs-position judgment (pedestal_top vs pedestal_maximum) that only the lead can make. Recommendation: these summary quantities are conventionally reported at the pedestal top/knee -> _at_pedestal_top; confirm before renaming (free graph rename). (b) UPSTREAM DD: neutral energy_fluxes unit m^-2.s^-1 -> m^-2.W issue is drafted (scratchpad dd_issue_C8_neutral_energy_flux_units.md) but must be filed to the DD tracker + tracked; the 3 flagged catalog names regen after the DD lands. No regression either way (rc62 ships the current forms as draft).
Project: imas-standard-names-catalog (graph rename) + DD (upstream)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: external residuals
Tier: opus
Context
Two external-dependency items remain after rc62 shipped. Honour the locked pedestal-locus-consolidation decision.
State to read (CODE / FILES / DATA)
Graph (read-only): magnetic_shear_at_pedestal, safety_factor_at_pedestal, poloidal_magnetic_flux_at_pedestal, normalized_poloidal_magnetic_flux_at_pedestal (all accepted/accepted, no _top counterpart).
DD via imas-dd: summary/local/pedestal/* + pedestal_fits/* to confirm whether each is a top value or a fit/max-gradient position quantity.
scratchpad dd_issue_C8_neutral_energy_flux_units.md (drafted DD issue).
Scope locks / constraints
- The 4 ambiguous: the lead decides top vs pedestal_maximum per name; then a free graph rename (sn run --rename OLD:NEW --include-accepted --override-edits --skip-clear-gate). Do not rename before the lead call.
- DD issue: file to the iterorganization DD tracker; queue the 3 neutral energy-flux names for regen once the DD unit is corrected.
Done-when
1. 4 ambiguous adjudicated + renamed (or confirmed left) per the lead.
2. DD issue filed + tracked; 3 names queued for post-fix regen.
3. This followup resolved.
DONE. (a) The 4 ambiguous pedestal names renamed to _at_pedestal_top (lead-approved 2026-07-09): magnetic_shear/safety_factor/poloidal_magnetic_flux/normalized_poloidal_magnetic_flux — accepted/accepted, old ids gone, 8 cross-links repaired. (b) DD root cause traced to a type-wiring bug — energy_fluxes kinetic/recombination `neutral` reference wall_description_ggd_particle_neutral (m^-2.s^-1) instead of the dead-but-correct wall_description_ggd_energy_neutral (W.m^-2); introduced DD 3.38.0, wrong ever since (verified via imas-dd version history across every release 3.38.0→4.1.1 + develop). Filed issue iterorganization/IMAS-Data-Dictionary#272 + fix PR #273 (2-line retarget off upstream/develop). Interim W.m^-2 applied to 56 wall energy-neutral IMASNodes + the 3 catalog names (clean energy-flux descriptions, flag removed). PLUS: built the always-on idempotent DD source-drift refresh into sn run (codex 3ce8881a) — names snapshot their DD source (unit/doc), and any drift (e.g. a future DD release) is steered through a docs refine carrying the exact delta; 595 source-linked names baselined.
After the DD investigation + interim fix, four items remain. (1) Track iterorganization/IMAS-Data-Dictionary PR #273 (retarget wall energy-neutral to the energy type) through review/merge/release; once the corrected DD ships in imas-data-dictionaries, `imas-codex imas dd build` refreshes the 8 IMASNode units and the source-drift refresh reconciles the 3 catalog names automatically. (2) Cut ISNC rc63 to PUBLISH the graph changes made after rc62 — the 4 ambiguous + electron_pressure/pressure pedestal renames and the 3 wall names at W.m^-2 (rc62 predates them). (3) Re-attach DD sources for the 2 source-orphaned wall names (neutral_energy_flux_at_wall, neutral_state_energy_flux_at_wall) so the source-drift refresh covers them (only _due_to_recombination is currently source-linked). (4) Optionally extend the source-drift refresh to cascade through derived-name parents — it currently covers the 595 directly-DD-source-linked names only.
Project: imas-codex + imas-standard-names-catalog + DD (upstream)
Plan: expert-review-fixes (http://localhost:8765/imas-standard-names/expert-review-fixes.html)
Section: post-DD-fix follow-on
Tier: opus
Context
The wall neutral energy-flux unit bug is filed (DD issue #272 / PR #273) with an interim W.m^-2 graph fix; the idempotent source-drift refresh is wired into sn run (codex 3ce8881a). Remaining work is publish + tracking + two coverage gaps.
State to read (CODE / FILES / DATA)
gh pr view 273 -R iterorganization/IMAS-Data-Dictionary (merge/release status).
imas_codex/standard_names/source_refresh.py + the B2d hook in loop.py (source-drift refresh).
Graph: the 2 source-orphaned wall names (no PRODUCED_NAME StandardNameSource); derived-name HAS_PARENT chains.
ISNC release state (sn release status) — rc62 is the latest tag.
Scope locks / constraints
- rc63: cut only from an export-clean graph; it publishes the post-rc62 renames + wall W.m^-2. Confirm no regression vs rc62 first.
- Do not adopt the DD fix in-catalog beyond the interim W.m^-2 until PR #273 releases; the source-drift refresh will reconcile on the next dd build + sn run.
- Source re-link + derived-drift cascade are enhancements — keep the always-on, idempotent, refine-not-regenerate contract.
Done-when
1. PR #273 tracked to merge/release; corrected DD picked up by dd build.
2. rc63 cut + pushed (post-rc62 graph changes published).
3. 2 orphaned wall names source-linked; source-drift refresh covers them.
4. This followup resolved.