feature:status
Show the lifecycle state of every feature attached to the active product.
Table of contents
- Usage
- Options
- Example output
- Description
- Lifecycle states
- When states are updated
- State guards
- JSON output
- Integrity check
- Auto-fix
- Timeline
- Requirements
- See also
Usage
splent feature:status [--json] [--integrity] [--fix] [--timeline]
Options
| Option | Description |
|---|---|
--json |
Output the raw splent.manifest.json content as JSON. |
--integrity |
Verify manifest state against actual system (symlinks, pip, migrations). |
--fix |
Auto-correct detected integrity issues (reinstall pip, recreate symlinks, etc.). Implies --integrity. |
--timeline |
Show a vertical graph of feature lifecycle transitions in GitKraken style. |
Example output
Feature status — sample_splent_app
─────────────────────────────────────────────────────────────────────────────
Feature Mode Progress State
─────────────────────────────────────────────────────────────────────────────
splent_io/splent_feature_auth@v1.2.7 pinned ●─●─●─● active
splent_io/splent_feature_confirmemail@v1.2.7 pinned ●─●─●─● active
splent_io/splent_feature_mail@v1.2.7 pinned ●─●─○─○ installed
splent_io/splent_feature_profile@v1.2.7 pinned ●─●─●─● active
splent_io/splent_feature_public@v1.2.7 pinned ●─●─●─● active
splent_io/splent_feature_redis@v1.2.7 pinned ●─●─○─○ installed
splent_io/splent_feature_reset@v1.2.7 pinned ●─●─●─● active
─────────────────────────────────────────────────────────────────────────────
Progress: declared → installed → migrated → active
Modes: pinned = versioned release editable = local development
Last updated: 2026-03-26T09:50:45+00:00
Reading the table
- Feature: namespace/name@version as declared in
pyproject.toml - Mode:
pinned(versioned release, cyan) oreditable(local development, magenta) - Progress: visual dots mapping to the four core states
- State: current lifecycle state with color coding
Description
Reads splent.manifest.json at the product root and renders a summary table with the current lifecycle state of each feature.
Only features declared in the current pyproject.toml are shown. Stale entries from previous versions are hidden — run splent product:resolve to clean them up.
If splent.manifest.json does not exist yet, the command falls back to reading pyproject.toml and reports all features as declared.
Lifecycle states
| State | Color | Meaning | Progress |
|---|---|---|---|
declared |
yellow | Registered in pyproject.toml and symlinked. Not yet pip-installed. |
●─○─○─○ |
installed |
bright cyan | Pip-installed and importable in the Python environment. | ●─●─○─○ |
migrated |
blue | Database migrations applied. Tables exist. | ●─●─●─○ |
active |
green | Flask is running with blueprints registered. End-user visible. | ●─●─●─● |
disabled |
grey | Installed but explicitly disabled at runtime. | (shown in grey) |
When states are updated
| Operation | State change | Who triggers it |
|---|---|---|
splent feature:add / feature:attach |
→ declared |
Developer (CLI) |
splent product:resolve |
ensures declared for new entries, cleans stale |
Developer (CLI) |
00_install_features.sh (pip install) |
declared → installed |
Startup script |
splent db:upgrade / db:migrate |
installed → migrated |
Developer or startup script |
splent db:reset |
re-applies → migrated |
Developer (CLI) |
Flask startup (FeatureManager.register_features) |
migrated → active |
Application factory |
splent db:rollback |
migrated → installed (if fully rolled back) |
Developer (CLI) |
splent feature:remove / feature:detach |
entry removed | Developer (CLI) |
State guards
Commands that modify feature structure are blocked if the feature is in migrated or active state:
| Blocked command | Required action first |
|---|---|
feature:remove |
splent db:rollback <feature> |
feature:detach |
splent db:rollback <feature> |
feature:unlock |
splent db:rollback <feature> |
feature:rename |
splent db:rollback <feature> |
Use --force to bypass these guards when you know what you’re doing.
JSON output
splent feature:status --json
Returns the full splent.manifest.json:
{
"product": "sample_splent_app",
"schema_version": "1",
"updated_at": "2026-03-26T09:50:45+00:00",
"features": {
"splent_io/splent_feature_auth@v1.2.7": {
"namespace": "splent_io",
"name": "splent_feature_auth",
"version": "v1.2.7",
"mode": "pinned",
"state": "active",
"declared_at": "2026-03-26T09:47:00+00:00",
"installed_at": "2026-03-26T09:47:30+00:00",
"migrated_at": "2026-03-26T09:47:45+00:00",
"updated_at": "2026-03-26T09:48:00+00:00"
}
}
}
Integrity check
Use --integrity to verify that the manifest reflects the actual state of the system. Each feature is checked against three criteria: symlink resolution, pip installation, and migration status.
splent feature:status --integrity
Integrity check — sample_splent_app
─────────────────────────────────────────────────────────────────────────────
splent_feature_auth@v1.2.7
[✔] symlink resolves to .splent_cache/features/splent_io/splent_feature_auth@v1.2.7
[✔] pip package installed (splent_feature_auth 1.2.7)
[✔] migrations applied (3/3 revisions)
splent_feature_mail@v1.2.7
[✔] symlink resolves to .splent_cache/features/splent_io/splent_feature_mail@v1.2.7
[✖] pip package not installed
[✖] migrations pending (0/2 revisions)
─────────────────────────────────────────────────────────────────────────────
Result: 1 feature has integrity issues
Auto-fix
Use --fix to automatically correct detected integrity issues. This implies --integrity and will attempt to reinstall pip packages, recreate broken symlinks, and report any issues that require manual intervention.
splent feature:status --fix
Integrity fix — sample_splent_app
─────────────────────────────────────────────────────────────────────────────
splent_feature_mail@v1.2.7
[✖] pip package not installed
→ reinstalling via pip install -e ... done
[✖] migrations pending (0/2 revisions)
→ run `splent db:upgrade` to apply migrations
─────────────────────────────────────────────────────────────────────────────
Fixed: 1 issue Remaining: 1 issue (manual action required)
Timeline
Use --timeline to display a vertical graph of lifecycle transitions for each feature, showing when each state change occurred.
splent feature:status --timeline
Feature timeline — sample_splent_app
─────────────────────────────────────────────────────────────────────────────
splent_feature_auth@v1.2.7
┬─ ○ declared 2026-03-20 09:00:12
├─ ◐ installed 2026-03-20 09:00:30
├─ ◑ migrated 2026-03-20 09:00:45
└─ ● active 2026-03-20 09:01:02
splent_feature_mail@v1.2.7
┬─ ○ declared 2026-03-22 14:10:00
├─ ◐ installed 2026-03-22 14:10:18
│
│ ─── NOW ───
│
└─ (migrated) pending
Reading the timeline
- State symbols:
○declared,◐installed,◑migrated,●active - Tree connectors:
┬─first transition,├─intermediate,└─final reached state - NOW line: inserted between the last completed transition and the next pending state
Requirements
- A product must be selected (
splent product:select). SPLENT_APPmust be set.
See also
- Feature lifecycle — full state machine documentation
- Feature state — splent.manifest.json — manifest format reference
- product:resolve — sync features and clean stale manifest entries