feature:unlock
Convert one or all versioned (pinned) features to editable at the workspace root.
Usage
splent feature:unlock [<feature_name>] [--all] [--force]
| Argument / Option | Description |
|---|---|
<feature_name> |
Feature to convert (splent_feature_auth or auth). |
--all |
Convert every versioned feature declared in pyproject.toml. |
--force |
Bypass lifecycle state guards (see below). |
Examples
Convert a single feature:
splent feature:unlock auth
Convert all versioned features at once:
splent feature:unlock --all
Example output
auth (v1.2.7) -> editable
copying to workspace root...
reinstalling in web container...
ready.
Description
For each versioned feature, this command:
- Copies the versioned snapshot from
.splent_cache/to the workspace root (/workspace/<feature_name>/). - Unlocks files (restores write permissions — cached features are read-only).
- Switches the Git working copy to the
mainbranch. - Fixes the Git remote origin (SSH or HTTPS depending on env).
- Removes the
@versionfrompyproject.toml. - Replaces the versioned symlink (
→ cache) with an editable symlink (→ workspace root). - Runs
pip install -ein the web container so the running Flask process picks up the new path. - Touches
__init__.pyto triggerwatchmedo auto-restart— no manual restart needed.
Features that are already editable (no @version) are skipped silently.
--force
If a feature has applied migrations (state migrated or active), unlock is blocked to prevent data loss — rolling back migrations on an editable copy could differ from the pinned version. Run splent db:rollback <feature> first, or use --force if you know what you’re doing.
Result
Before:
features/splent_io/splent_feature_auth@v1.2.7 → .splent_cache/features/splent_io/splent_feature_auth@v1.2.7
After:
features/splent_io/splent_feature_auth → ../../../splent_feature_auth (workspace root)
The feature is now at the workspace root, fully writable, on the main branch, and the running Flask app has already reloaded.
Requirements
- A product must be selected (
SPLENT_APPset). - The feature must be declared in the product’s
pyproject.toml. - A versioned snapshot must exist in
.splent_cache.
See also
feature:release— reverse: publish and pin back to a versioned releasefeature:attach— attach a specific versioned release- SPLENT Cache — how pinned vs editable features work