Thanks for contributing! This guide covers the workflow for got-feedBack/feedBack (core) and got-feedBack/feedBack-desktop. For plugin-specific rules see docs/plugins.md.
feedBack uses trunk-based development: main is always current and always the PR target. Short-lived release/vX.Y.Z branches exist only while a release stabilizes — never open PRs against them; needed fixes are cherry-picked from main by maintainers.
- Branch from
main, PR tomain— always. - Keep branches focused; avoid bundling unrelated changes in one PR.
- Merge incomplete features behind a flag rather than parking long-lived branches —
mainmust stay releasable.
Format: <type>/<issue-number>-short-description
fix/412-audio-dropout-on-seekfeature/388-lyrics-syncchore/bump-tailwind(no issue number for mechanical changes)
Tip: GitHub's "Create a branch" button on an issue (Development panel) auto-names the branch and links the PR back.
| Branch type | Issue required |
|---|---|
fix/* |
Yes — always. Bugs are reported and triaged before code. |
feature/* |
Yes for external contributors; maintainer's discretion for small additions. |
chore/, docs/, refactor/ |
No. |
Include: version (exact tag or nightly.YYYYMMDD), platform (Docker / Desktop Windows / macOS / Linux), steps to reproduce, expected vs. actual behaviour.
Conventional Commits: feat:, fix:, chore:, docs:, refactor:, perf:, test:. Subject ≤ 72 chars; body only when the why isn't obvious from the diff.
feat(player): add stem balance controls to mixer popover
fix(highway): correct fret position for 7-string arrangements
- Branches from and targets
main - CI passes (all required checks green)
- Linked to an issue (
fix/*, andfeature/*for external contributions) -
CHANGELOG.md[Unreleased]updated if the change is user-visible - Incomplete/risky functionality is behind a flag
- Core only:
tailwind.min.cssrebuilt if new Tailwind classes were added (bash scripts/build-tailwind.sh— thetailwind-freshcheck enforces this)
- Core: pytest, JS plugin-API tests, Tailwind freshness check,
print()/traceback guard, plugin manifest validation, feedpak-spec conformance, ESLint. A redfeedpak-speccheck on a manifest-key change means the key must go through the spec process infeedpak-specfirst. - Desktop: TypeScript typecheck, npm audit, a 3-OS native-addon build + load smoke-test, and sandbox IPC tests (ASan/TSan) when sandbox paths are touched.
Maintainer docs (release runbooks, pipeline internals, governance) live in the org-internal .github-private repository.