prompt: local AI dev process; 2 repos, one individual branches, other for merging n test build
INTEGRATION.md
Last updated: 2026-03-11 14:10 URL: https://gist.github.com/mxmilkiib/5fb35c401736efed47ad7d78268c80b6 RFC 2119
- Purpose: This document tracks Milkii's personal Mixxx development setup, for creating and testing feature and bugfix branches.
- Living document: This is a living document and SHOULD be updated as the workflow evolves.
- Dual repo: The goal is to maintain two Mixxx source instances: a main
mixxxrepo and amixxx-devrepo. - Main sync: Both repos MUST maintain a
mainbranch that is synced withmixxxdj/mixxxmain.origin/mainMUST be kept as a fast-forward mirror ofupstream/main— rungit push --no-verify origin mainafter everygit fetch upstream && git merge upstream/mainonmain. - Main read-only: The
mainbranch MUST NOT receive any local commits — not INTEGRATION.md updates, not patches, nothing. All commits go onintegrationor a worktree branch. Any stray commits onmainMUST be removed by force-pushing the cleanupstream/maintip. - Worktrees: The
mixxx-devrepo MUST use worktrees to host individual feature/fix branches, keeping them clean for upstream PRs. - Integration branch: The
mixxxrepo MUST have anintegrationbranch that combines multiple branches from themixxx-devrepo. - Dev location: All individual branch development should be done using the
mixxx-devdirectory repository - Integration edits:
mixxxcan have some edits for testing purposes, but should be kept minimal - Clean commits: A branch in
mixxx-devMUST have clean commits before first being linked with a GitHub PR - Stability: This dual setup SHOULD provide consistency for a stable bleeding-edge build without interference from local development.
- "Updating" the system: When the user asks to "update" or says the system has been updated, this MUST include all of the following post-update checks and tasks in order:
- Fetch
upstreamand check for new commits onupstream/main - Check all
[x]branches: for each, verify whether its commits are already present inupstream/main(git log upstream/main --oneline | grep <keyword>); if fully merged, move the entry to the "Merged to Upstream" section, remove the[x]marker, and record the merge date — do this BEFORE rebasing or rebuilding so merged branches are excluded from both - Rebase all non-merged worktree branches on new
upstream/main(stash any WIP first); skip branches identified as merged in step 2; clean any branches with INTEGRATION.md or other cruft commits - Rebuild the
integrationbranch: mergeupstream/mainthen re-merge all[x]branches in order, resolving any conflicts - Build the integration branch (
cmake --build build --target mixxx -- -j$(nproc --ignore=2)) and verify it succeeds - Check all open PRs for new review feedback (CHANGES_REQUESTED, new comments) and update INTEGRATION.md statuses accordingly
- Update the "Last updated" timestamp and rebuild log entry in INTEGRATION.md, commit, and sync to Gist
- Fetch
- Merge process: The integration merge process MUST follow the steps in the Integration Merge Process section below.
- Rebase hygiene: All branches SHOULD be kept up-to-date and rebased with
mixxxdj/mixxxmain to minimize merge conflicts, except merged branches - Rebase first: A branch MUST be rebased as an initial step before any new change is made to said branch
- Incremental PRs: Changes to
mixxxdj/mixxxPRs MUST be incremental so as to be easy to review, and MUST NOT completely reformulate a system in a single commit. - Outline currency: The integration status outline MUST reflect the state of all branches, related issues, PRs, and dates, and MUST be updated after changes are committed — PR URLs SHOULD be checked first to catch new feedback
- Non-interactive git: Git operations MUST be non-interactive using
GIT_EDITOR=trueandGIT_PAGER=catto avoid vim/editor prompts - Issues: Most branches MAY have related upstream issues; related issues SHOULD be listed in the outline
- Sections: Feature and fix branches should be in the correct outline sections
- Secondary patches: Secondary patches are small fixes that either (a) resolve a residual problem that only became visible after a larger fix landed, or (b) are a prerequisite that a main fix branch depends on. They MUST be tracked in the Secondary Patches section of the outline, with a
Depends-onorResolves-residual-fromnote linking them to the related primary branch - Secondary patch upstream: A secondary patch SHOULD be submitted upstream independently if it stands alone; if it only makes sense in context of the primary fix, it MAY be folded into that PR
- Dates: Dates for branch creation, last PR comment, and last update MUST be recorded in the status outline
- Standalone branches: Each feature/fix branch SHOULD work standalone without depending on other local branches (except where noted)
- History: Feature/fix branch history MUST NOT be rewritten (no squash, no interactive rebase) without explicit permission from Milkii. "Complete" means the upstream PR has been merged or the branch has been deliberately closed. The integration branch MAY have merge commits.
- No cherry-pick: ALWAYS use
git mergeto bring branches into integration, NEVERgit cherry-pick— cherry-picking creates duplicate commits with different SHAs, severs the branch relationship, makes bisect/revert unreliable, and hides what is actually in the build fromgit log - Dependencies: Any fix or feature branch that relies on another local branch MUST be noted in the Branch Dependencies section
- Local-only: Some features (UTF-8 string controls) MUST NOT be submitted to
mixxxdj/mixxxupstream as they are local-only/personal use - PR flow: PRs SHOULD be submitted to
mxmilkiib/mixxx, and Milkii will create a further PR from there tomixxxdj/mixxx. - Merged cleanup: Once the PR is fully merged into
mixxxdj/mixxx, the branch entry MUST be moved to the "Merged to Upstream" section of the outline and its[x]marker removed, so it is excluded from future integration rebuilds. - Last updated: The "Last updated" date at the top of this file MUST be updated whenever this file is edited
- Gist sync: If this file is updated, it MUST be synced to Gist: run
gh gist edit 5fb35c401736efed47ad7d78268c80b6 --filename INTEGRATION.md INTEGRATION.mdfrom~/src/mixxx/(--filenametargets the gist file, the positional arg supplies the local content) - Commit messages: Commit messages must not be too verbose, and should be concise and descriptive.
- Conflict resolution: When resolving merge conflicts — whether during rebases or integration merges — conflicts MUST be resolved and the operation continued non-interactively
- Code quality: Code quality MUST be verified before pushing — code should be proper, straight to the point, robust, and follow Mixxx coding style
- Push permission: Permission MUST be sought from the user before pushing commits to GitHub. Once the user has confirmed a push in a session, further pushes in that same session MAY proceed without asking again, to reduce friction.
- Worktree pruning: When a branch is merged upstream, closed, or abandoned, its worktree MUST be removed (
git worktree remove ~/src/mixxx-dev/<name>) and the local branch ref MAY be deleted. This keepsmixxx-dev/lean and preventsupdate-branches.shfrom wasting time on dead branches. - Schema exclusion: Branches that introduce database schema migrations MUST NOT be merged into the integration branch unless all schema-changing branches use compatible, non-conflicting revision numbers. Schema branches are tracked in a dedicated "Schema-Changing Branches" section of the outline.
- Local-only backup: All local-only branches MUST be pushed to
origin(mxmilkiib/mixxx) for off-machine backup, even if they will never be PRed upstream. All worktrees share a single.gitdirectory — losing it means losing every unpushed branch. - LOCAL_ONLY dependency chains: When rebasing branches that form a LOCAL_ONLY dependency chain, the dependency root MUST be rebased first, then each dependent in topological order. If the root bitrots or conflicts, all dependents are broken until the root is fixed.
- update-branches.sh: The
update-branches.shscript MUST exist as a committed file in theintegrationbranch (not embedded in INTEGRATION.md). It MUST skip worktrees whose branches have been merged upstream, closed, or abandoned.
CRITICAL: mixxx-dev/ worktrees MUST only contain commits belonging to their named feature.
- NEVER commit INTEGRATION.md, integration merge commits, or unrelated fixups into a feature worktree
- INTEGRATION.md MUST NOT be committed to any feature branch in
mixxx-dev/ - Before making any edit in
mixxx-dev/, confirm the active worktree matches the intended branch:git -C ~/src/mixxx-dev/<worktree>/ branch --show-current
- To verify a worktree is clean (only its own commits ahead of upstream/main):
git -C ~/src/mixxx-dev/<worktree>/ log --oneline upstream/main..HEAD
- If a worktree has accumulated cruft, reset it:
- No real feature commits yet:
git reset --hard upstream/main - Has real commits mixed with cruft: rebase only the feature commits onto upstream/main, then force-update the branch ref
- No real feature commits yet:
- ALWAYS create new feature branches from
upstream/main, never from localmain— localmainmay have INTEGRATION.md commits or other local-only changes that will appear as extraneous commits in any upstream PR:git fetch upstream git worktree add ~/src/mixxx-dev/<name> -b feature/<branch-name> upstream/main
- Before committing WIP in any worktree, verify the branch is correct AND that the diff contains only changes belonging to that feature:
git -C ~/src/mixxx-dev/<worktree>/ diff --stat git -C ~/src/mixxx-dev/<worktree>/ branch --show-current
- If WIP from another feature is present in a worktree, stash it before committing:
git -C ~/src/mixxx-dev/<worktree>/ stash push --include-untracked -m "<description of what it is and where it belongs>"
- Before opening or updating a PR, verify the branch contains only its own commits relative to
upstream/main(not localmain):git log --oneline feature/<branch-name> --not upstream/main
| Path | Purpose |
|---|---|
~/src/mixxx/ |
Main repo - main and integration branches |
~/src/mixxx-dev/ |
Development worktrees for feature/fix branches |
utf8-string-controls (LOCAL_ONLY)
├── hotcue-labelling (LOCAL_ONLY)
└── hotcue-label-options (LOCAL_ONLY)
Branches with dependencies on local-only branches cannot be submitted upstream as-is. They MUST be refactored to remove the dependency or the dependency MUST be upstreamed first.
Summary: 3 need attention, 14 awaiting review, 2 schema-excluded, 7 merged upstream, 8 local-only, 1 secondary patch
Integration rebuilt 2026-02-19: applied waveform FBO + openglwindow resize fixes; fixed hotcue-labelling merge (missing setLabel/slotHotcueLabelChangeRequest); merged midi-makeinputhandler-null-engine bugfix (was missing, caused SIGSEGV/SIGABRT on controller shutdown) Integration rebuilt 2026-02-19 (second time): removed hotcue-count and catalogue-number branches — both require schema changes (v41, v42) that caused a cross-thread SQLite crash (SIGSEGV in BaseTrackCache::updateIndexWithQuery via Qt::DirectConnection on engine thread). Schema kept at upstream v40. Integration patched 2026-02-19: midi-makeinputhandler-null-engine fix was missing from the rebuild — caused repeated SIGSEGV/SIGABRT on controller shutdown (MidiControllerJSProxy::makeInputHandler null shared_ptr). Re-merged. Wayland root cause identified 2026-02-19: QOpenGLWindow subsurface resize blocks on compositor buffer realloc; workaround QT_QPA_PLATFORM=xcb XCB resize gap 2026-02-19: WA_PaintOnScreen approach abandoned — WGLWidget lacks paintEngine(), causes heap corruption abort; gap is inherent to QOpenGLWindow+createWindowContainer Integration updated 2026-02-20: added controlpickermenu-quickfx-deck-offset (#16019), fix-learning-wizard-from-prefs-button; fixed hotcue-labelling missing setLabel/slotHotcueLabelChangeRequest; build clean Integration updated 2026-02-21: merged simple-waveform-top-and-overview (Simple to top of main waveform list; Simple overview type) Integration updated 2026-02-21 (2): added Layered (LMH tail-to-tail) and Stems (stem channels) as main waveform types; build clean Integration updated 2026-02-21 (3): added CQT spectrogram main waveform type (frequency-band heatmap, showcqt-style hue mapping); build clean Integration updated 2026-02-21 (4): added Layered RGB (RGB colours, tail-to-tail); fixed CQT missing from mixxx-lib CMake target; build clean Integration patched 2026-02-21 (5): added hid-init-race-on-enumeration secondary patch (explicit hid_init() before hid_enumerate prevents concurrent re-init crash from background descriptor fetch threads); WaveformRendererCQT zero visualIncrementPerPixel guard Integration rebuilt 2026-02-28: rebased all branches on upstream/main (new upstream commits include stems model crash fix, MK2 LUT fixes, ringbuffer memory leak fix); resolved merge conflicts in waveformoverviewrenderer.cpp (StackedRGB vs Simple waveform ordering); added missing m_options member variables to waveformrendererfiltered.cpp and waveformrendererhsv.cpp; build clean Integration patched 2026-02-23: re-merged controller-wizard-quick-access (clazy range-loop-detach fix — std::as_const on all range-for loops over Qt containers); build clean Integration rebuilt 2026-03-11: rebased all branches on upstream/main (198 new upstream commits: fivefourths/fourfifths merged upstream as #16026, rating controls #15764, tuning field, BPM lock, key comparison effect, TS definitions); fivefourths and controlpickermenu-quickfx-deck-offset moved to Merged to Upstream; added waveform-menu-order (#16046); resolved conflicts in overviewtype.h + waveformoverviewrenderer.cpp/h + woverview.cpp (StackedRGB+Simple coexistence), dlgprefwaveform.cpp (moveWaveformTypeToIndex), cuecontrol.cpp/h (setLabel+slotHotcueLabelChangeRequest), dlgprefcontroller.h (showLearningWizard); build clean
- 🔴 Needs Attention (CHANGES_REQUESTED)
- feature/2025.11nov.04-controller-wizard-quick-access - #15577 — feedback addressed Feb 18 + fix-learning-wizard folded in Feb 22; awaiting re-review
- feature/2025.10oct.21-stacked-overview-waveform - #15516 — old feedback addressed, unstaled Feb 17; awaiting re-review
- feature/2025.10oct.20-restore-last-library-selection - #15460 — Reloop JS + clang-format fixed Feb 28, pushed; awaiting re-review
- feature/2025.11nov.05-hide-unenabled-controllers - #15580 — ronso0 Nov 17 feedback addressed Feb 28; awaiting re-review
- � Secondary Patches
- bugfix/2026.02feb.21-hid-init-race-on-enumeration — LOCAL_ONLY
- Resolves-residual-from:
bugfix/2026.02feb.18-midi-makeinputhandler-null-engine - Created: 2026-02-21, Updated: 2026-02-21
- Next: Evaluate for upstream PR; assess if standalone or fold into midi-makeinputhandler PR
- Specifics:
hid_open()callshid_init()lazily; multipleHidControllerbackground threads (one per device) race to call it concurrently on startuphid_init()on the hidraw backend is not thread-safe — concurrent calls corrupt the udev context, crashing insidehid_enumerate- Fix: call
hid_init()explicitly on the main thread inHidEnumerator::queryDevices()beforehid_enumerate()and before anyHidControllerobjects are constructed - Triggered by 3+ HID devices (Launchpad Pro MK3, MPD218, BeatMix4) spawning concurrent background descriptor-fetch threads
- Tested?: yes (crash no longer reproduced)
- Resolves-residual-from:
- bugfix/2026.02feb.21-hid-init-race-on-enumeration — LOCAL_ONLY
- �� BUG FIXES - Open PRs (REVIEW_REQUIRED)
-
bugfix/2026.02feb.20-controlpickermenu-quickfx-deck-offset— RESOLVED 2026-03-11 — ronso0's fix #16019 merged to main- Issue: #16017
- Created: 2026-02-20, Closed: 2026-03-11
- Fix merged upstream as #16019 by ronso0
-
bugfix/2026.02feb.20-fix-learning-wizard-from-prefs-button- #16018 CLOSED 2026-02-28- Created: 2026-02-20, Closed: 2026-02-28
- Fix folded into #15577 (commit ffc28f8); bug only manifests in context of wizard menu changes
- Specifics:
- PR description's root cause is wrong: DlgControllerLearning uses Qt::Tool | Qt::WindowStaysOnTopHint — a top-level window; QWidget::hide() on a parent does NOT cascade to top-level children
- On upstream/main the flow is correct: wizard shows, then mappingStarted() hides prefs dialog — wizard stays visible, prefs gets out of the way; this is intentional
- ronso0 is right: not reproducible on main/2.5 because there is no bug there
- The actual problem: controller-wizard-quick-access (#15577) refactored showLearningWizard() to add m_bPrefsDialogWasVisible and conditional mappingStarted() emission — this broke the original prefs-button path in that branch
- Fix belongs inside #15577 as a self-correction, not as a standalone upstream PR
- Tested?: yes
- bugfix/2026.02feb.18-midi-makeinputhandler-null-engine - #16003 - APPROVED (daschuer Feb 23)
- Created: 2026-02-18, Last comment: 2026-02-24 (daschuer approved), Rebased: 2026-03-11, Updated: 2026-02-24
- Next: Approved — needs second reviewer or merge by daschuer
- Tested?: yes
- bugfix/2026.02feb.19-textured-waveform-fbo-resize - #16010 - REVIEW_REQUIRED
- Created: 2026-02-19, Last comment: none, Rebased: 2026-03-11, Updated: 2026-02-19
- Next: Await review
- Specifics:
- Improved: defer FBO reallocation to paintGL via m_pendingResize flag
- Tested?: yes
- bugfix/2026.02feb.19-openglwindow-resize-repaint - #16012 - DRAFT - REVIEW_REQUIRED
- Created: 2026-02-19, Last comment: none, Rebased: 2026-03-11, Updated: 2026-02-19
- Next: Await review
- Specifics:
- Restores m_dirty flag: defers extra paintGL+swapBuffers from resizeGL to next vsync
- Does not fix Wayland resize lag (compositor-level issue)
- Tested?: yes
- bugfix/2026.02feb.19-wayland-opengl-resize-warning - #16014 - REVIEW_REQUIRED
- Issue: #16013
- Created: 2026-02-19, Last comment: 2026-02-24, Rebased: 2026-03-11, Updated: 2026-02-24
- Next: Await review
- Specifics:
- Wayland + QOpenGLWindow subsurface resize causes synchronous compositor buffer realloc on every pixel of drag
- Workaround: QT_QPA_PLATFORM=xcb (XWayland)
- Adds qWarning at startup when Wayland detected with OpenGL waveforms and spinny widgets
- References issues #16013 (slow resize) and #14492 (sticky mouse on waveform)
- Tested?: yes
-
- 🟡 NEW FEATURES - Open PRs (REVIEW_REQUIRED)
- feature/2026.02feb.26-waveform-menu-order - #16046 - REVIEW_REQUIRED
- Created: 2026-02-26, Last comment: 2026-02-26, Rebased: 2026-03-11, Updated: 2026-02-26
- Next: Await review
- Specifics:
- Refactors Simple-move-to-top into
moveWaveformTypeToIndexhelper lambda - Reorders main waveform type list: Simple, Filtered, HSV, RGB, Stacked, VSyncTest
- Refactors Simple-move-to-top into
- Tested?: no
- feature/2026.02feb.20-simple-waveform-top-and-overview - #16021 - REVIEW_REQUIRED
- Issue: #16020
- Created: 2026-02-20, Last comment: 2026-02-21, Rebased: 2026-03-11, Updated: 2026-02-22
- Next: Await review
- Specifics:
- Moves Simple to top of main waveform type combobox (after alphabetical sort)
- Adds Simple as an overview waveform type (amplitude envelope, signal color, stereo mirrored)
- Moves Simple to top of overview waveform combobox
- Adds Layered (LMH bands stacked tail-to-tail) as main waveform type
- Adds Stems (stem channels stacked tail-to-tail,
__STEM__only) as main waveform type - Adds CQT spectrogram main waveform type (frequency×time heatmap, showcqt-style hue: low=red, mid=green, high=blue)
- Adds Layered RGB (RGB colours, LMH bands stacked tail-to-tail — RGB variant of Layered)
- Tested?: no
- feature/2025.10oct.20-restore-last-library-selection - #15460 - DRAFT - CHANGES_REQUESTED
- Issue: #10125
- Created: 2025-10-08, Last comment: 2026-02-26 (ronso0), Rebased: 2026-03-11, Updated: 2026-02-28
- Next: CI failing (ronso0 Feb 26) + unrelated Reloop JS changes slipped in — fixed 2026-02-28: removed JS file from commit, cleaned commit message (had # Conflicts: lines), fixed all clang-format violations; re-request review
- Specifics:
Separate commits for changesdone - 4 commits with explanationsStore selection with debounced savesdone - 3 second debounce timerUse VERIFY_OR_DEBUG_ASSERTdoneRoot node crash in saveSelectionToConfigfixedscheduleSelectionSave never called from clicked()fixedDataRole mismatch in restoreLastSelectionfixed — uses Qt::DisplayRoleactivateDefaultSelection overwriting restorefixed — conditional fallbackFeature not activated on restorefixed — activate()/activateChild() called- Track row selection save/restore added via WTrackTableView
- Tested?: yes
- feature/2025.11nov.04-controller-wizard-quick-access - #15577 - CHANGES_REQUESTED
- Issue: #12262
- Created: 2025-11-04, Last comment: 2026-02-18, Rebased: 2026-03-11, Updated: 2026-02-22
- Next: Awaiting re-review — ronso0 CHANGES_REQUESTED (Nov 16) addressed Feb 18; fix-learning-wizard folded in Feb 22 (ffc28f8)
- Specifics:
devicesChanged not updating menu post-startupfixed — connected to mappingAppliedrange-for style on m_controllerPagesdone- fix-learning-wizard folded in: emit mappingStarted() before show() so prefs dialog hides before wizard appears
- Tested?: yes
- feature/2025.10oct.21-stacked-overview-waveform - #15516 - DRAFT - CHANGES_REQUESTED
- Issue: #13265
- Created: 2025-10-21, Last comment: 2026-02-22 (mxmilkiib), Rebased: 2026-03-11, Updated: 2026-02-18
- Next: Stale bot fired (Feb 22); our naming comment (Feb 17) + clarification (Feb 22) are latest — re-request review to unstale; no new reviewer feedback
- Specifics:
Remove redundant Stacked HSV and Stacked LMH renderersdoneRemove unnecessary static_castdoneRename "Stacked (RGB)" to "Stacked"done- All feedback addressed
- Left comment 2026-02-17 re: Filtered/Stacked naming confusion — see #15996
- Tested?: yes
- feature/2025.11nov.05-hide-unenabled-controllers - #15580 - REVIEW_REQUIRED
- Issue: #14275
- Created: 2025-11-05, Last comment: 2025-11-17 (ronso0), Rebased: 2026-03-11, Updated: 2026-02-28
- Next: Awaiting re-review — ronso0 Nov 17 feedback addressed Feb 28: removed redundant null checks, confirmed rename already done
- Specifics:
Rename "unenabled" to "disabled" everywhere — config keys, function names, and UI text (ronso0)doneRemove unnecessary null checks on tree items — always valid post-construction (ronso0)done
- Tested?: yes
- feature/2025.10oct.21-replace-libmodplug-with-libopenmpt - #15519 - DRAFT - REVIEW_REQUIRED
- Issue: #9862
- Created: 2025-10-25, Last comment: 2026-02-22 (stale-bot), Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Address daschuer architecture feedback
- Specifics:
- DSP in SoundSource is "foreign to Mixxx" — daschuer wants bit-perfect decode, move DSP to effect rack instead
- Rename constants to
kXBassBufferSizestyle naming (daschuer) - Remove VS Code minimap
// MARK:comments - Review comments on
trackerdsp.cppandtrackerdsp.h - Windows CI test failure (
screenWillSentRawDataIfConfiguredtimeout) — may be flaky or platform-specificQImagebehavior - Test fix 2026-02-19:
taglibStringToEnumFileTypenow excludes all openmpt tracker formats (mod, s3m, xm, it, mptm, 669, amf, ams, dbm, dmf, dsm, far, mdl, med, mtm, mt2, psm, ptm, ult, umx) — none are taglib formats
- Tested?: no
- feature/2025.10oct.20-hotcues-on-overview-waveform - #15514 - DRAFT - REVIEW_REQUIRED
- Issue: #14994
- Created: 2025-10-20, Last comment: 2026-02-22 (stale-bot), Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Check recent comment, await review
- Specifics:
- PR marked stale (Jan 19 2026) — needs activity to unstale
- Paint hotcues on scaled image (option b) not full-width — scaling happens in OverviewCache so fixed pixel widths don't translate
- Remove
// MARK:comments - Get cue data from delegate columns instead of SQL queries (done)
- Review feedback from ronso0 on marker rendering approach
- Tested?: no
- feature/2025.11nov.17-deere-channel-mute-buttons - #15624 - DRAFT - REVIEW_REQUIRED
- Issue: #15623
- Created: 2025-11-17, Last comment: 2026-02-15, Rebased: 2026-03-11, Updated: 2026-02-15
- Next: On hold - marked as DRAFT by ronso0
- Specifics:
- Marked as DRAFT by ronso0 (Feb 9)
- daschuer (Feb 9): "mute this PR until we have demand and good plan for this turntableist feature"
- Needs visual feedback for mute state in Mixxx
- daschuer suggests "unmute by cue" is more accurate term than "silent cue"
- ronso0 questions necessity — "Why is the Vol fader not sufficient?"
- daschuer suggests broader approach: knob widget with integrated kill/mute feature, explore Tremolo effect for "Transformer" effect
- Needs stronger justification or pivot to the broader knob-with-kill approach
- Tested?: yes
- feature/2025.11nov.16-playback-position-control - #15617 - DRAFT - REVIEW_REQUIRED
- Issue: #14288
- Created: 2025-11-16, Last comment: 2026-02-22 (mxmilkiib), Rebased: 2026-03-11, Updated: 2026-02-09
- Next: Await review — ronso0 confirmed no CO exists for runtime marker pos; we reopened; scope is clear
- Specifics:
- daschuer (Feb 9): "this feature already exists" (pref option) — clarified: pref has no CO for runtime control
- ronso0 confirmed: if it's about changing marker pos on the fly, the pref option has no CO
- Adds
[Waveform],PlayMarkerPositionControlPotmeter (0.0–1.0) for runtime control
- Tested?: no
- feature/2026.02feb.26-waveform-menu-order - #16046 - REVIEW_REQUIRED
⚠️ Schema-Changing Branches (Excluded from Integration)- feature/2025.10oct.17-library-column-hotcue-count - #15462 - REVIEW_REQUIRED
- Issue: #15461
- Created: 2025-10-17, Last comment: 2026-02-22 (stale-bot), Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Check recent comment, await review
- Specifics:
- PR marked stale (Jan 17 2026) — needs activity to unstale
- Broad discussion about whether hotcue count column is the right approach vs a "prepared" state flag (daschuer, ronso0)
- Potential pie chart icon instead of plain number (daschuer suggestion)
- Related to hotcues-on-overview-waveform PR #15514 (acolombier suggested rendering hotcues in overview column instead)
- Schema change v39→v40 — will conflict with other schema changes
- Removed from integration: cross-thread SQLite crash (Qt::DirectConnection cuesUpdated lambda runs updateTrackHotcueCount on engine thread)
- Crash fixed in branch: cuesUpdated now uses AutoConnection + DB-counting overload; CueDAO::updateTrackHotcueCount(TrackId) made public
- Tested?: no
- feature/2025.11nov.16-catalogue-number-column - #15616 - REVIEW_REQUIRED
- Issue: #12583
- Created: 2025-11-16, Last comment: 2026-02-15, Rebased: 2026-03-11, Updated: 2026-02-15
- Next: Await review
- Specifics:
- acolombier left review comment 2026-02-14; replied 2026-02-15
- Schema migration revision 40 — will conflict with hotcue-count branch (also schema change)
- Removed from integration: schema change; keeping integration at upstream schema v40 until schema branches are stable
- Uses MusicBrainz Picard tag mapping conventions
- Tested?: no
- feature/2025.10oct.17-library-column-hotcue-count - #15462 - REVIEW_REQUIRED
- 🔵 Local Only (No PR)
- feature/2026.02feb.17-mono-waveform-option
- Created: 2026-02-17, Rebased: 2026-03-11, Updated: 2026-02-17
- Next: Implement mono waveform option for main deck waveforms
- Specifics:
- Add option to make main deck waveforms mono (L+R muxed, top-only rendering)
- Similar to existing overview waveform mono feature
- Add preference checkbox in waveform settings
- Implement mono parameter in main waveform renderers
- Tested?: no
- feature/2025.10oct.14-waveform-hotcue-label-options
- Created: 2025-10-14, Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Maintain for personal use
- feature/2025.10oct.08-utf8-string-controls
- Dependency for: hotcue-labelling, hotcue-label-options
- Created: 2025-10-08, Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Maintain for personal use (not for upstream)
- feature/2025.09sep.25-hotcue-labelling
- Created: 2025-09-25, Rebased: 2026-03-11, Updated: 2026-02-20
- Next: Maintain for personal use
- feature/2025.06jun.08-deere-deck-bg-colour
- Created: 2025-06-08, Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Maintain for personal use
- feature/2025.11nov.05-deere-waveform-zoom-deck-colors
- Created: 2025-11-05, Rebased: 2026-03-11, Updated: 2026-01-30
- Next: Merge to integration, decide if PR-worthy
- Specifics:
- Evaluate if the Deere-specific waveform zoom deck color change is worth a PR or remains personal use
- Test visual appearance across deck configurations
- draft/2025.10oct.21-tracker-module-stems
- Created: 2025-10-21, Rebased: none, Updated: 2025-10-21
- Next: Continue development or archive
- Specifics:
- Depends on replace-libmodplug-with-libopenmpt (#15519) being accepted first
- Adds stem support for tracker modules using libopenmpt
- Not rebased — needs rebase before any work
- bugfix/2026.02feb.19-wglwidget-xcb-resize-gap — ABANDONED
- Created: 2026-02-19, Updated: 2026-02-19
- Next: Archive or delete branch
- Specifics:
- Attempted WA_PaintOnScreen on WGLWidget to reduce XCB resize gap
- Abandoned: WGLWidget lacks paintEngine(), WA_PaintOnScreen causes heap corruption abort
- Gap is inherent to QOpenGLWindow+createWindowContainer; no viable fix
- feature/2026.02feb.17-mono-waveform-option
- ✅ Merged to Upstream
-
feature/2025.05may.14-fivefourths- #16026 MERGED 2026-03-11 — merged upstream as Swarnadip-Kar's PR with fourfifths + BPM lock -
bugfix/2026.02feb.20-controlpickermenu-quickfx-deck-offset- #16019 MERGED 2026-03-11 — ronso0's fix merged to main -
bugfix/qt6-guiprivate-missing-componentRESOLVED 2026-02-19 — fixed upstream, branch deleted -
feature/2025.11nov.05-waveform-cache-size-format- #15578 MERGED 2026-02-16 -
bugfix/2025.11nov.04-reloop-shift-jog-seek- #15575 MERGED 2026-02-15 -
bugfix/2025.11nov.16-reloop-beatmix-mk2-naming- #15615 MERGED 2026-02-11 -
bugfix/2025.11nov.04-fx-routing-persistence- #15574 MERGED 2025-11-14
-
Needs Attention (0 branches): (none)
- Awaiting Review (16 branches):
- Feedback addressed, awaiting re-review: restore-last-library-selection, controller-wizard-quick-access, stacked-overview-waveform, hide-unenabled-controllers
- Architecture changes needed: replace-libmodplug-with-libopenmpt (daschuer wants DSP moved to effect rack)
- On hold (DRAFT): deere-channel-mute-buttons (marked draft Feb 9, needs broader plan)
- Recent activity: hotcues-on-overview-waveform (stale Jan 19), library-column-hotcue-count (stale Jan 17)
- Clean PRs: playback-position-control, catalogue-number-column, waveform-menu-order (#16046), midi-makeinputhandler-null-engine (approved), wayland-opengl-resize-warning, textured-waveform-fbo-resize, openglwindow-resize-repaint, simple-waveform-top-and-overview
- Abandoned (no PR): wglwidget-xcb-resize-gap (WA_PaintOnScreen causes heap corruption; gap is inherent)
- Secondary Patches (1 branch):
- Evaluate for upstream: hid-init-race-on-enumeration (standalone fix or fold into midi-makeinputhandler PR)
- Local Development (2 branches):
- Decide PR-worthiness: deere-waveform-zoom-deck-colors
- Continue or archive: tracker-module-stems
Pre:
- Branch rebased on latest
mixxxdj/mixxxmain
During:
- Builds without errors
- No new compiler warnings
- Basic functionality tested
Post:
- No regressions in related features
This process updates all feature/bugfix branches in mixxx-dev/ to latest upstream:
- Upstream MUST be fetched first (from any worktree):
git fetch upstream - For each worktree directory in
~/src/mixxx-dev/:- The branch MUST be rebased on upstream/main:
git rebase upstream/main - Conflicts MUST be resolved if any occur
- The rebased branch SHOULD be force-pushed to origin:
git push --force-with-lease origin HEAD - The "Rebased" date in INTEGRATION.md MUST be updated
- The branch MUST be rebased on upstream/main:
- Branches with unresolved conflicts SHOULD be noted for later attention
- After all branches are updated, the Integration Merge Process SHOULD be run
Automated via ./update-branches.sh (run from ~/src/mixxx/).
This process merges all [x] marked branches into the integration branch for a combined bleeding-edge build.
-
Commit pending INTEGRATION.md changes (if any) before starting:
git add INTEGRATION.md && git commit -m "update INTEGRATION.md before integration"
-
Fetch upstream
git fetch upstream
-
Run batch branch update to rebase all worktree branches on upstream/main:
./update-branches.sh
-
Checkout the integration branch
git checkout integration
-
Merge upstream/main into integration (merge, not rebase, to preserve integration history):
git merge upstream/main
-
Merge each
[x]branch from the outline that has "Next: Merge to integration":git merge origin/<branch-name>
-
Resolve merge conflicts carefully. Common issues:
- Schema revisions: increment version numbers
- Enum IDs in
trackmodel.h: assign unique IDs - Header declarations vs implementations: keep both sides' additions
-
Update INTEGRATION.md:
- Change
[ ]to[x]for newly merged branches - Update "Rebased" and "Updated" dates to today
- Update the summary line counts
- Update the "Last updated" date at the top
- Change
-
Build and verify — integration branch MUST be rebuilt after any branch is added or cherry-picked:
Incremental rebuild (most common — after source changes):
cmake --build /home/milkii/src/mixxx/build --target mixxx -- -j$(nproc --ignore=2)Full reconfigure (only needed when new branches add CMakeLists changes or new source files):
cmake -B /home/milkii/src/mixxx/build -S /home/milkii/src/mixxx -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build /home/milkii/src/mixxx/build --target mixxx -- -j$(nproc --ignore=2)Basic functionality SHOULD be tested after build.
-
Sync to Gist (if INTEGRATION.md was updated):
gh gist edit 5fb35c401736efed47ad7d78268c80b6 --filename INTEGRATION.md INTEGRATION.md
gh pr view <PR-number>
gh pr list --repo mixxxdj/mixxx --author mxmilkiibThis section documents the structure of this file for AI assistants and future maintainers.
Branch naming convention: feature/YYYY.MMmon.DD-thing-descriptive-title
- [x] **branch-name** - [#PR](url) - STATUS
- Issue: [#ISSUE](url)
- Optional description
- Created: YYYY-MM-DD, Last comment: YYYY-MM-DD, Rebased: YYYY-MM-DD, Updated: YYYY-MM-DD
- Next: Action item
- Specifics:
- Details about the branch and what probably should happen next[x]= merged to integration,[ ]= not merged- Branch name in bold
- Issue link to related Mixxx issue/feature request (if applicable)
- Created date required for all branches
- Last comment date shows most recent PR comment ("none" if no comments), only for PRs
- Rebased date shows when branch was last rebased on
mixxxdj/mixxxmain ("none" if never) - Updated date tracks last modification to branch
- Next action describes what needs to be done for this branch
- Within each section:
[x](integrated) branches first, then[ ](not integrated) branches - Within each group (
[x]or[ ]), sort by updated date (newest first) - STATUS is one of: DRAFT, REVIEW_REQUIRED, CHANGES_REQUESTED, MERGED, LOCAL_ONLY
- Secondary patch entries use
Resolves-residual-fromorDepends-oninstead ofIssueto link to the primary branch
- Needs Attention (CHANGES_REQUESTED)
- Secondary Patches
- Open PRs (REVIEW_REQUIRED)
- Schema-Changing Branches (Excluded from Integration)
- Local Only (No PR)
- Merged to Upstream
When updating integration: Update the "Last updated" date at the top of this file.
Update the summary line at the top when adding/removing branches:
**Summary**: X need attention, Y awaiting review, Z schema-excluded, W merged upstream, V local-only, U secondary patch