PLESTY follows a strict branching model for its core repositories (plesty-sdk, plesty-lib, plesty-ci) and hub modules. Understanding this model is essential for contributing code.

The exp branch

The exp (experimental) branch is the integration branch for all development work. Every change flows through exp before reaching main.

main ────●────────────●──────────●
          \          /          /
exp  ─────●──●──●──●──●──●──●──●
              \    /    \    /
feature  ──────●──●      ●──●

Core repositories

For plesty-sdk, plesty-lib, and plesty-ci:

Creating a feature branch

# Start from the latest exp
git checkout exp
git pull origin exp

# Create a feature branch
git checkout -b feat/my-feature

Branch naming

Use conventional prefixes:

Prefix Use
feat/ New feature
fix/ Bug fix
docs/ Documentation
refactor/ Code refactoring
test/ Test additions or changes
chore/ Maintenance

Pushing

Push the feature branch directly to exp:

# Push feature branch to exp
git push origin feat/my-feature:exp

# Clean up
git checkout exp
git branch -d feat/my-feature

There is no merge request step — feature branches are merged into exp directly.

Hub modules

Hub modules (devices, analyzers, experiments) follow the same pattern:

git checkout exp
git pull origin exp
git checkout -b feat/my-device
# ... implement ...
git push origin feat/my-device:exp
git checkout exp
git branch -d feat/my-device

What NOT to do

Pre-push verification

Before pushing, run the nebula standard at minimum:

uv run plesty check --standard nebula

This catches structural issues before they reach the remote.

Next steps