Feature lifecycle
A feature goes through explicit states, from code on disk to a running part of your app. CLI commands, the container’s startup scripts and the app itself move it forward, and splent.manifest.json records where it stands.
(absent) → [cached] → [declared] → [installed] → [migrated] → [active]
| Layer | State | System | Who updates the manifest |
|---|---|---|---|
| Configuration | declared | pyproject.toml and symlinks |
feature:add, feature:attach, product:resolve |
| Environment | installed | The Python environment, pip | 00_install_features.sh |
| Persistence | migrated | The database schema (Alembic) | db:upgrade, db:reset |
| Runtime | active, disabled | The Flask app, its blueprints | FeatureManager.register_features() |
- States, what each state means and how to reach it
- State guards, blocked operations and automatic transitions
- Signals, decoupling features through business events
- Manifest, inspecting
splent.manifest.jsonand keeping it clean