Skip to content

(feat): add Bassment multi-genre bassline app - #633

Closed
kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/bassment
Closed

kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/bassment

Conversation

@kosmar

@kosmar kosmar commented Aug 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add Bassment (app ID 41): multi-genre monophonic basslines with bassist Voice personas
  • Bring minimal shared helpers needed to compile on main (genre_palette, groove, led_fx) and register the app

Test plan

  • Flash build from this branch on hardware
  • Load Bassment on a channel; confirm it appears in the app library as “Bassment”
  • With clock running: Density / Feel / Groove produce bass notes (MIDI + CV Out)
  • Shift+fader scrubs genre axis (LED spectrum); button Voice cycle / mute behave as expected
  • Scene save/load restores Feel, Density, Voice, mute

Made with Cursor

Prerequisites

The platform pieces this app needs are under review as their own PRs, so that
each app PR stays small enough to review on its own.

Required — these APIs do not exist on current main:

This branch currently carries its own inline copy of the code in #638, #639, #640, #641.
Once those land it will be rebased to drop the duplicates, which shrinks this
diff to the app file plus its registry line.

Building any of this on a current Rust nightly also needs the toolchain fix in
#632.

@kosmar

kosmar commented Aug 15, 2026

Copy link
Copy Markdown
Contributor Author

Written by an AI coding agent on @kosmar's behalf.

0c5021f6 shares the swing budget with the device clock. The bass sits on the 16th grid, so stacking genre swing on a non-zero global swing was pushing notes past the pocket. Genre swing is now capped by what the clock already spends and parity flips when global swing is clearly negative. Pulls in #641 for the helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>
@kosmar

kosmar commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

Written by an AI coding agent on @kosmar's behalf.

Force-pushed a Wave-1 scope cleanup onto this branch (single commit vs main):

Please re-run CI on this branch. Happy to adjust anything for review.

@ArthurGibert

Copy link
Copy Markdown
Member

Hey @kosmar — two things, one about where this belongs and one about the manual format you're using.

Where it belongs: this looks like a great fit for faderpunk-community-apps, which just went public. New on-device apps are meant to land there rather than here directly — see CONTRIBUTING.md's "Standalone companion tools" section, and the pointer it promised once that repo was live.

Ran bassment.rs against the actual submission gate (pr-scope-check.sh) — clean, no unsafe code, no panics, no MAX11300/storage bypass, no un-yielding loop — and did a real cargo build against current main with it dropped in, which passed too. It does have 15 .unwrap()/.expect() calls without a justification comment, which the gate soft-flags for human judgment rather than blocking (same treatment some existing official apps get) — worth a look before resubmitting, not a blocker.

About docs/apps/41-bassment/manual.{json,md}: this one's on us, not you — it was listed as a sanctioned option in CONTRIBUTING.md/the scope-check script without anyone actually verifying it was backed by real tooling, and it wasn't: nothing in the configurator reads it (confirmed against #606; its entry doesn't show up on the /#/manual page at all). You followed the policy as documented — the policy was wrong. Filed as #656, and #657 has already removed it as an option here. So faderpunk-community-apps isn't just a better fit organizationally — right now it's the only place this content would actually end up visible anywhere.

To resubmit there: just the app file itself (no mod.rs/registration changes — those are generated), a community app ID in the 100+ range, and a manual-tab.json entry built from your existing manual.{json,md}. Most of it maps over directly (manual.md is the entry's text field verbatim; name→title; description/color/icon/params/storage and most of channels are already the same shape) — but the schema also has fnPlusShiftTitle/ledTopPlusShift/ledBottomPlusShift-style fields for documenting combined Shift/Fn/Button behavior, which your format doesn't have dedicated slots for; where that's described inline in fnDescription/ledTop today, it'd need pulling out into those fields for parity with how official apps are documented. Happy to help with the conversion if useful. Whether/when to close this one is up to you or a maintainer — just flagging where it belongs.

@kosmar

kosmar commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Moving this to faderpunk-community-apps as requested: ATOVproject/faderpunk-community-apps#15

Closing here. App ID remapped 41 → 112 (community range).

@kosmar kosmar closed this Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants