SimReady Add Feature Adapter
Purpose
Use this skill to add a direct asset mutation path between feature versions or profile feature bundles. Feature adapters live under nv_core/cip_specs/asset_handler_modules/ and modify an output USD stage so an asset can move from an input feature/profile contract to a target one.
Use this after feature/profile differences are known. If no USD mutation is needed, document that no adapter is required.
Prerequisites
Before editing, read:
AGENTS.md
nv_core/sr_specs/docs/guides/feature_adapters/feature_adapters.md
- source and target feature manifests
- source and target profile versions, if this is profile-driven
- existing adapters in the relevant asset handler module
Inputs
Collect or infer:
| Input |
Requirement |
input_feature_id |
Source feature ID. |
input_feature_version |
Source feature version. |
output_feature_id |
Target feature ID. |
output_feature_version |
Target feature version. |
profile_path |
Optional source/target profile upgrade path. |
mutation |
Exact USD data changes required. |
module_path |
Asset handler module directory. |
test_assets |
Assets that pass input and should pass output after mutation. |
Instructions
Use this checklist when changing the repository:
- Compare source and target manifests. Identify only the requirements that differ.
- Decide whether a direct adapter is necessary. For profile transformations, every feature difference must have a direct adapter path or a documented blocker. If target requirements are documentation-only or already satisfied by source assets, document no-op behavior.
- Choose or create the asset handler module path.
- Add a Python adapter file with
@feature_adapter metadata using exact feature IDs and versions.
- Implement
modify_stage(input_stage, output_stage):
- read source stage only when needed
- mutate output stage deterministically
- preserve unrelated authored data
- save output stage when complete
- Use native USD schemas and existing helper patterns from neighboring adapters.
- Add focused tests or manual validation notes:
- input validates against source feature/profile
- output validates against target feature/profile
- mutation is idempotent or safely repeatable where practical
- Update adapter indexes, imports, or registration files if the repo requires them.
- If the adapter is needed for a new profile version, update the profile docs or migration notes.
Examples
Example request:
Add a feature adapter that mutates assets from one exact SimReady feature/profile version to another.
Expected result summary:
changed_files: new docs, manifests, indexes, or validation scaffolding
validation: focused static checks and any relevant docs/build checks
remaining_gaps: requirement, validator, adapter, profile, or runtime-test follow-up
Policies
- Do not use adapters to hide invalid source assets; adapters should bridge defined feature differences.
- Do not mutate source stages in place.
- Do not invent property values that need user intent or prediction unless the adapter contract explicitly defines defaults.
- Keep profile upgrade paths direct: every changed feature needs a clear adapter path or a documented blocker.
Limitations
- Do not mutate published feature or profile versions in place.
- Do not invent requirement IDs or validator behavior when the contract is ambiguous; record the question.
- Do not skip index, manifest, validation, or downstream follow-up notes.
Troubleshooting
- Error: the new concept overlaps an existing artifact. Solution: update the existing capability, requirement, feature, profile, or adapter instead.
- Error: names or IDs conflict. Solution: re-check naming conventions and nearby indexes before editing further.
- Error: validation strategy is unclear. Solution: document deferred validation and the exact follow-up skill.
Resources
assets/openai.yaml preserves optional UI metadata for clients that read skill display hints. It is not required for the workflow.
Summary Format
Report:
| Field |
Meaning |
adapter_name |
Adapter identifier. |
adapter_path |
Python file path. |
input_feature |
Source feature ID/version. |
output_feature |
Target feature ID/version. |
mutation_summary |
USD opinions changed. |
profile_upgrade |
Profile path supported, if any. |
validation |
Tests/assets run and remaining gaps. |
1---2name: simready-foundation-add-feature-adapter3description: Use for adding SimReady feature adapters that mutate USD assets between exact feature or profile versions.4license: Apache-2.05---678# SimReady Add Feature Adapter910## Purpose11Use this skill to add a direct asset mutation path between feature versions or profile feature bundles. Feature adapters live under `nv_core/cip_specs/asset_handler_modules/` and modify an output USD stage so an asset can move from an input feature/profile contract to a target one.1213Use this after feature/profile differences are known. If no USD mutation is needed, document that no adapter is required.1415## Prerequisites16Before editing, read:1718- `AGENTS.md`19- `nv_core/sr_specs/docs/guides/feature_adapters/feature_adapters.md`20- source and target feature manifests21- source and target profile versions, if this is profile-driven22- existing adapters in the relevant asset handler module2324## Inputs2526Collect or infer:2728| Input | Requirement |29|---|---|30| `input_feature_id` | Source feature ID. |31| `input_feature_version` | Source feature version. |32| `output_feature_id` | Target feature ID. |33| `output_feature_version` | Target feature version. |34| `profile_path` | Optional source/target profile upgrade path. |35| `mutation` | Exact USD data changes required. |36| `module_path` | Asset handler module directory. |37| `test_assets` | Assets that pass input and should pass output after mutation. |3839## Instructions4041Use this checklist when changing the repository:42431. Compare source and target manifests. Identify only the requirements that differ.442. Decide whether a direct adapter is necessary. For profile transformations, every feature difference must have a direct adapter path or a documented blocker. If target requirements are documentation-only or already satisfied by source assets, document no-op behavior.453. Choose or create the asset handler module path.464. Add a Python adapter file with `@feature_adapter` metadata using exact feature IDs and versions.475. Implement `modify_stage(input_stage, output_stage)`:48 - read source stage only when needed49 - mutate output stage deterministically50 - preserve unrelated authored data51 - save output stage when complete526. Use native USD schemas and existing helper patterns from neighboring adapters.537. Add focused tests or manual validation notes:54 - input validates against source feature/profile55 - output validates against target feature/profile56 - mutation is idempotent or safely repeatable where practical578. Update adapter indexes, imports, or registration files if the repo requires them.589. If the adapter is needed for a new profile version, update the profile docs or migration notes.5960## Examples6162Example request:6364```text65Add a feature adapter that mutates assets from one exact SimReady feature/profile version to another.66```6768Expected result summary:6970```text71changed_files: new docs, manifests, indexes, or validation scaffolding72validation: focused static checks and any relevant docs/build checks73remaining_gaps: requirement, validator, adapter, profile, or runtime-test follow-up74```7576## Policies7778- Do not use adapters to hide invalid source assets; adapters should bridge defined feature differences.79- Do not mutate source stages in place.80- Do not invent property values that need user intent or prediction unless the adapter contract explicitly defines defaults.81- Keep profile upgrade paths direct: every changed feature needs a clear adapter path or a documented blocker.8283## Limitations8485- Do not mutate published feature or profile versions in place.86- Do not invent requirement IDs or validator behavior when the contract is ambiguous; record the question.87- Do not skip index, manifest, validation, or downstream follow-up notes.8889## Troubleshooting9091- Error: the new concept overlaps an existing artifact. Solution: update the existing capability, requirement, feature, profile, or adapter instead.92- Error: names or IDs conflict. Solution: re-check naming conventions and nearby indexes before editing further.93- Error: validation strategy is unclear. Solution: document deferred validation and the exact follow-up skill.9495## Resources9697- `assets/openai.yaml` preserves optional UI metadata for clients that read skill display hints. It is not required for the workflow.9899## Summary Format100101Report:102103| Field | Meaning |104|---|---|105| `adapter_name` | Adapter identifier. |106| `adapter_path` | Python file path. |107| `input_feature` | Source feature ID/version. |108| `output_feature` | Target feature ID/version. |109| `mutation_summary` | USD opinions changed. |110| `profile_upgrade` | Profile path supported, if any. |111| `validation` | Tests/assets run and remaining gaps. |