SPL commands
An SPL is your product line, and its UVL model says which features exist and how they combine. These commands create a model, grow it, query it, and publish it so your products can pin it by DOI.
| Command | Description |
|---|---|
| spl:create | Start a new model in its own working copy |
| spl:list | List the models this workspace knows |
| spl:info | Show where one model lives and what points at it |
| spl:features | List the features of a model |
| spl:add-feature | Add a feature, with the constraints its code implies |
| spl:remove-feature | Remove a feature and the constraints naming it |
| spl:add-constraints | Add the constraints the code needs and the model lacks |
| spl:deps | Show what a feature requires, or what requires it |
| spl:configurations | Count and list the valid configurations |
| spl:compare | Compare two products by their features |
| spl:fetch | Download a model from UVLHub by DOI |
| spl:publish | Publish a model through the marketplace |
| spl:pin | Record the model’s DOI in the active product |
| spl:outdated | Report products pinned to an older model |
Where a model lives
Every spl:* command, and every product derivation, looks for a model in this order.
| Place | Path | What it is |
|---|---|---|
| Working copy | splent_spl_<name>/ |
Your own repository, where you edit the model. Nothing overwrites it |
| Cache | .splent_cache/spls/<name>@<version>/ |
A downloaded release. Deleting it costs one download |
| UVLHub | by DOI | Where published models live. A download lands in the cache |
A trailing _spl is dropped from the working copy’s directory, so my_spl lives in splent_spl_my/. A clone named splent_spl_my_spl/ is found too.
A cache entry is keyed on the version the pin records, else on the DOI (my_spl@10.5281_zenodo.10000003/), else on the bare name. Two products pinning two versions never share a directory.
A name alone cannot be downloaded, so each product records the DOI in its pyproject.toml with spl:pin. Deriving a product then needs only its repository and UVLHub.
The CLI ships a pin for
sample_splent_spl, the line the tutorials use, sosplent spl:fetch sample_splent_splworks in a fresh workspace. Any product, working copy or cache entry that records something else for that name wins over it.
Reading and writing
| To | Use | You need |
|---|---|---|
| Read a model | spl:fetch, straight from UVLHub |
Nothing, no account |
| Publish a model | spl:publish, through the marketplace |
splent login |
The marketplace holds the only UVLHub key, so you never create one.