Never edit files while on main or exp. These branches are protected. All work happens on feature branches.

Hub module repos (most contributors)

Hub repos (plesty/hub/devices/..., plesty/hub/analyzers/..., plesty/hub/experiments/...) use a simple flow:

git checkout main
git pull origin main
git checkout -b feat/add-wavelength-sweep

# ... implement + plesty check ...

git add plesty/scan_exp/measurements.py tests/test_measurements.py
git commit -m "feat(scan): add wavelength_sweep measurement function"
git push origin feat/add-wavelength-sweep

Then open a merge request on GitLab targeting main.

Core repos (plesty-sdk, plesty-lib, plesty-ci)

Core repos use exp as the integration branch. Feature branches merge into exp, not main.

git checkout exp
git pull origin exp
git checkout -b feat/add-func-meta

# ... implement + plesty check ...

git push origin feat/add-func-meta:exp   # merge directly into exp
git checkout exp
git branch -d feat/add-func-meta

No merge request step for core repos. The feature branch is pushed directly into exp โ€” there is no MR.

Conventional commits

All commits must follow the conventional commit format. plesty check Gate 8 reads commit messages to classify unreleased changes.

<type>(<scope>): <description>

[optional body]

[optional footer]
Type Semver impact Emoji When to use
feat minor โœจ New feature or capability
feat! major ๐Ÿ’ฅ Breaking change to public API
fix patch ๐Ÿ› Bug fix
refactor patch โ™ป๏ธ Restructure without behavior change
docs none ๐Ÿ“– Documentation only
test none ๐Ÿงช Add or fix tests
chore none ๐Ÿ”ง Maintenance (deps, config, build)
ci none ๐Ÿš€ CI/CD changes

Scope is the module or component affected, e.g., feat(wavelength): ..., fix(solver): ....

Breaking changes are declared with ! after the type or with BREAKING CHANGE: in the footer:

feat!(api)!: rename query() to read()

BREAKING CHANGE: query() has been renamed to read() for consistency with the write/read pair.

What NOT to add to commits

PLESTY repos do not use Co-Authored-By trailers in commit messages. Do not add them regardless of tooling defaults.