NVIDIA-NeMo / NVIDIA-NeMo/DataDesignerPlugins
Define the schema v2 tap catalog contract
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 7
- Forks
- 6
- PR merge metrics
- No merged PRs in 30d
Description
Parent epic: #15
Why
catalog/plugins.json is currently schema v1. It includes enough metadata for read-only listing and compatibility preflight, but it does not define the install source or docs URL required for data-designer plugins info and data-designer plugins install.
This issue is the concrete schema contract. Implementers should not treat the schema shape as open-ended: schema v2 should be the JSON contract below unless a later review deliberately changes it.
Proposed schema v2
The top-level document must be:
{
"schema_version": 2,
"plugins": [
{
"name": "document-chunker",
"plugin_type": "seed-reader",
"description": "Read local documents as chunked seed records",
"package": {
"name": "data-designer-retrieval-sdg",
"version": "0.1.0",
"path": "plugins/data-designer-retrieval-sdg"
},
"entry_point": {
"group": "data_designer.plugins",
"name": "document-chunker",
"value": "data_designer_retrieval_sdg.plugins:document_chunker_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-retrieval-sdg"
},
"docs": {
"url": "https://nvidia-nemo.github.io/DataDesignerPlugins/plugins/data-designer-retrieval-sdg/"
}
}
]
}
Required top-level fields:
schema_version: integer literal2.plugins: array of plugin entries sorted deterministically by package name, then runtime plugin name.
Required plugin entry fields:
name: non-empty runtime plugin name, equal toPlugin.namefrom the loaded entry point.plugin_type: one ofcolumn-generator,seed-reader, orprocessor.description: package-level[project].descriptionstring.package.name: PEP 503-compatible package name from[project].name.package.version: PEP 440 version from[project].version.package.path: repo-relative package directory, for exampleplugins/data-designer-template. This is repo-local metadata only and must not be treated as the install source for remote taps.entry_point.group: literaldata_designer.plugins.entry_point.name: installed entry-point key from[project.entry-points."data_designer.plugins"].entry_point.value: import target from the same entry-point table.compatibility.python.specifier: validated[project].requires-pythonspecifier.compatibility.data_designer.requirement: exact direct dependency string fordata-designer.compatibility.data_designer.specifier: parsed version specifier from the directdata-designerdependency.compatibility.data_designer.marker: string marker from the direct dependency, ornull.source: one install source object, using the source union below.docs.url: absolute HTTP(S) URL for the plugin docs page.
Source union:
{"type": "pypi", "package": "data-designer-example"}
Use for released packages on PyPI. DataDesigner should derive the default exact install target from source.package plus package.version, for example data-designer-example==0.1.0, unless the user explicitly requests a resolver-driven/latest workflow.
{
"type": "git",
"url": "https://github.com/NVIDIA-NeMo/DataDesignerPlugins.git",
"ref": "data-designer-example/v0.1.0",
"subdirectory": "plugins/data-designer-example"
}
Use for direct Git subdirectory installs. DataDesigner should derive a PEP 508 style install target like data-designer-example @ git+https://github.com/NVIDIA-NeMo/DataDesignerPlugins.git@data-designer-example/v0.1.0#subdirectory=plugins/data-designer-example.
{"type": "path", "path": "plugins/data-designer-example", "editable": true}
Use only for local/catalog-file authoring workflows. The default NVIDIA raw catalog must not use path sources.
Validation rules
schema_versionmust be rejected by consumers when unsupported.entry_point.groupmust be exactlydata_designer.plugins.- Runtime plugin names must be unique within one catalog.
- Multiple entries may share the same
packageandsource; this is how multi-plugin packages are represented. - Invalid PEP 440 versions, invalid specifiers, missing direct
data-designerdependency, stale installed entry points, and malformed source objects must fail catalog generation or schema validation.
Acceptance criteria
- A docs page or schema file defines the contract above without leaving source/schema shape as an open decision.
- The contract includes examples for
pypi,git, andpathsource objects. - The contract states that tap discovery and runtime entry-point discovery are separate layers.
- The contract states that
package.pathis not an install source for remote taps. - The contract states that multi-plugin packages are multiple plugin entries sharing one package/source.
Dependencies
- Depends on: #15.
- Blocks: #17, #18, #19, #20, #23, #25, and DataDesigner CLI catalog models.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with catalog/plugins.json and the DataDesigner CLI catalog models, then map the proposed schema to the catalog and runtime entry-point layers. Define or document the v2 contract with pypi, git, and path source examples, including validation rules and multi-plugin packages. Done means the contract is explicit, source handling is unambiguous, and the acceptance criteria are covered.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 65/100