Pychron needs a workflow that supports:
- steady integration work on
develop - occasional long-lived development streams such as
dev/* - release stabilization without blocking normal development
- urgent fixes for deployed versions
This workflow is intentionally simpler than classic GitFlow. develop is the
main integration branch.
develop- Primary integration branch. Most work should merge here first.
dev/<stream>- Optional long-lived team or subsystem branch. Use only when a stream needs to remain isolated for multiple weeks or when integration risk is high.
codex/<topic>orfeature/<topic>- Short-lived working branches for a single feature, fix, refactor, or cleanup.
release/<version-or-name>- Stabilization branches created from
developwhen preparing a release. hotfix/<topic>- Urgent fixes created from the currently deployed release branch, or from
mainifmainis the production source of truth.
- Branch from the correct base.
- Use
developfor normal work. - Use the active
dev/*branch only if the work is explicitly tied to that stream.
- Use
- Keep the branch small and focused.
- One subsystem or one coherent change per branch.
- Prefer multiple small PRs over one large mixed PR.
- Open a pull request back to the branch you started from.
feature/...fromdevelopgoes back todevelop.codex/...fromdev/dc2025goes back todev/dc2025.
- Keep the branch current.
- Rebase on the target branch when practical.
- Merge from target only when rebasing is unsafe or too disruptive.
- Merge only when CI passes and review is complete.
dev/* branches are useful when:
- a multi-week subsystem effort would destabilize
develop - a deployment stream has different timing than the rest of the repo
- a hardware-specific or customer-specific stream must be isolated temporarily
dev/* branches are not the default for ordinary work. Prefer short-lived
feature branches unless the stream genuinely needs to persist.
- Merge completed work into
develop. - Cut
release/<version>fromdevelop. - Allow only stabilization work on the release branch:
- bug fixes
- documentation updates
- version changes
- release notes
- Tag the release from the release branch.
- Merge the final release state into
mainifmainis used to represent shipped code. - Merge release fixes back into
develop.
- Branch
hotfix/<topic>from the deployed branch. - Make the smallest possible fix.
- Open a PR to the deployed branch.
- After merge, back-merge or cherry-pick the fix into
develop.
Use short, subsystem-prefixed commit and PR titles. Examples:
experiment: centralize queue metadata propagationpyscript: fail validation when a configured script is missinggraph: replace runtime prints with logging
Recommended commit behavior:
- commit frequently while working
- squash merge by default for cleanup branches
- preserve individual commits only when commit history adds debugging value
- Do not push directly to
develop,main,release/*, or shareddev/*branches. - All shared-branch changes go through pull requests.
- CI must pass before merge.
- At least one reviewer is required for normal work.
- At least two reviewers are recommended for risky areas such as:
- experiment execution
- hardware communication
- DVC persistence
- automated run / pyscript integration
codex/qt-import-cleanupcodex/experiment-queue-metadatafeature/pyscript-fallback-resolutionhotfix/queue-parser-null-scriptrelease/2026.3.0
For this repository:
- treat
developas the main trunk - keep
dev/*only for true long-lived streams - use short-lived
codex/*orfeature/*branches for normal work - require PRs and CI for all merges into shared branches