You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The catalog must remain generated, not hand-edited. Today ddp sync catalog renders schema v1 from package metadata, installed data_designer.plugins entry points, and direct data-designer dependency constraints. It needs to render the concrete schema v2 contract from #16 using the repo-level tap metadata from #21.
Implementation
Set CATALOG_SCHEMA_VERSION = 2.
Extend CatalogEntry with:
source: dict[str, object]
docs_url: str
Generate default NVIDIA entries with this source object because [tool.ddp.tap].default-source = "pypi":
Keep compatibility.data_designer.requirement, specifier, and marker; the PDF example omits requirement, but the current field is useful for explanations and should remain.
Add duplicate runtime plugin-name detection before rendering JSON.
Add source-object validation for the default pypi source.
Regenerate catalog/plugins.json.
Update devtools/ddp/tests/test_catalog.py expected output to schema v2.
Add a multi-entry fixture test where two entry points in one package share identical package and source metadata.
Expected generated entry
For the template plugin, schema v2 output should be structurally equivalent to:
Parent epic: #15
Depends on: #16, #21
Why
The catalog must remain generated, not hand-edited. Today
ddp sync catalogrenders schema v1 from package metadata, installeddata_designer.pluginsentry points, and directdata-designerdependency constraints. It needs to render the concrete schema v2 contract from #16 using the repo-level tap metadata from #21.Implementation
CATALOG_SCHEMA_VERSION = 2.CatalogEntrywith:source: dict[str, object]docs_url: str[tool.ddp.tap].default-source = "pypi":{"type": "pypi", "package": "<project.name>"}docs.urlas:f"{docs_base_url.rstrip('/')}/plugins/{normalize_docs_slug(project_name)}/"where
normalize_docs_slugshould match the existing plugin docs slug logic.name,plugin_type,description,package,entry_point, andcompatibility.compatibility.data_designer.requirement,specifier, andmarker; the PDF example omitsrequirement, but the current field is useful for explanations and should remain.pypisource.catalog/plugins.json.devtools/ddp/tests/test_catalog.pyexpected output to schema v2.packageandsourcemetadata.Expected generated entry
For the template plugin, schema v2 output should be structurally equivalent to:
{ "name": "text-transform", "plugin_type": "column-generator", "description": "Template Data Designer plugin — text transform column generator", "package": { "name": "data-designer-template", "version": "0.1.0", "path": "plugins/data-designer-template" }, "entry_point": { "group": "data_designer.plugins", "name": "text-transform", "value": "data_designer_template.plugin:plugin" }, "compatibility": { "python": {"specifier": ">=3.10"}, "data_designer": { "requirement": "data-designer>=0.5.7", "specifier": ">=0.5.7", "marker": null } }, "source": { "type": "pypi", "package": "data-designer-template" }, "docs": { "url": "https://nvidia-nemo.github.io/DataDesignerPlugins/plugins/data-designer-template/" } }Acceptance criteria
make catalogemitsschema_version: 2.source.type = "pypi",source.package = package.name, and adocs.urlderived from[tool.ddp.tap].docs-base-url.data-designerdependencies.uv run pytest devtools/ddp/tests/test_catalog.py -qpasses.make check-catalogfails when checked-in catalog output is stale.Dependencies