cursus.registry.step_names_base¶
Base step-name registry — the single source of truth for step naming across config, builders, and specifications.
This is a deliberately dependency-free leaf module: it builds the flat step table
STEP_NAMES from the per-step .step.yaml registry: blocks (via
build_registry_from_interfaces) and derives the CONFIG_STEP_REGISTRY /
BUILDER_STEP_NAMES / SPEC_STEP_TYPES mappings. The workspace-aware access layer
(step_names.py) and the hybrid UnifiedRegistryManager (hybrid/manager.py) both
read the raw data from here — keeping the data in this leaf (rather than in step_names.py)
is what breaks the otherwise-circular import between the access layer and the manager.
Source of truth (FZ 31e1/31e1f Final Phase, 2026-06-28): the standalone
registry/step_names.yaml table was DELETED. The registry is now derived SOLELY from the
.step.yaml registry: blocks + a 3-row _EXTRAS map (in interface_registry_loader)
for the interface-less abstract steps (Base / Processing / HyperparameterPrep).
To add or edit a step, edit its .step.yaml registry: block — there is no separate table.
A golden snapshot (tests/registry/step_names_registry_snapshot.json) gates drift.
(Formerly step_names_original.py; renamed because it is the live source, not a backup.)
- merge_pack_registry(pack_rows)[source]¶
Merge an external step-pack’s registry rows ON TOP of the package registry, in place.
ADD-ONLY overlay: package steps are the floor and are never removed.
STEP_NAMESis mutated in place (so import-time references stay live) withpack_rowslayered on top, then the derived globals are rebuilt. This is the LOW-LEVEL merge — the access layer (cursus.registry.step_names.refresh_registry()) calls this AND then re-syncs the hybrid manager so the catalog sees the plugin steps.- Parameters:
pack_rows (Dict[str, Dict[str, str]]) –
{canonical_name: {config_class, builder_step_name, spec_type, sagemaker_step_type, description}}derived from the pack’s.step.yamlfiles.- Returns:
{name: "collision"}for any pack name that shadowed an EXISTING package step — the caller decides whether to warn. Empty when every pack row is genuinely new.- Return type: