Product
A product is one configuration of a product line: the features it selects, the version of each, and the few things that are its own, such as its name, settings and base templates. It is a thin shell, and almost all of its behaviour comes from its features.
What it holds
<product>/
├── pyproject.toml the features, their versions, the model's DOI, settings
├── src/<product>/ config.py, base templates, static files
├── docker/ Compose files and Dockerfiles, development and production
├── deploy/ the deploy bundle, written by product:build
└── splent.manifest.json the state of each feature in this product
pyproject.toml is the heart of it. features, features_dev and features_prod list the features, [tool.splent.spl_model] pins the model, [tool.splent.config] holds the product’s settings and [tool.splent.runtime] pins the framework and the CLI its image installs.
How it relates to the other layers
- Product line. The selection must satisfy the model, and is checked before it is applied.
- Features. The product pins a version of each, or uses a checkout while you develop it.
- Framework. The product’s only code at startup is a call to
create_splent_app, and the framework does the rest. - Infrastructure. Its
docker/files define the containers, andproduct:buildturns them into the deploy bundle.
Commands
| Command | What it does |
|---|---|
product:create |
Creates a product of a line |
product:configure |
Chooses its features, checked against the model |
product:resolve |
Fetches and links the pinned features |
product:validate |
Checks the configuration and the contracts |
product:env |
Writes its environment from every layer’s settings |