Skip to content

feat: add Arp de Lévy app - #607

Closed
kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/arp-de-levy
Closed

kosmar wants to merge 1 commit into
ATOVproject:mainfrom
kosmar:feat/arp-de-levy

Conversation

@kosmar

@kosmar kosmar commented Jul 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds Arp de Lévy (app ID 34): one-channel generative arpeggiator with Lévy-flight pool mutation, texture macro, octave span, and classic arp playback modes (Up / Down / UpDown / DownUp / Random / Converge).
  • Configurator params: MIDI Channel, Base Note, Color, MIDI Out, V/Oct, Bypass quantizer.
  • Manual entry with gesture/LED/mode tables; includes markdown table rendering.
  • Lists Arp de Lévy under long-press mute in the Apps muting overview.

IDs 28–31 reserved for Heat Pump (#603), Grooves (#604), Golden Gate (#605), Super LFO (#606). Independent from main.

Test plan

  • Flash firmware; load Arp de Lévy on a channel
  • Confirm CV pitch + MIDI notes fire together on hits
  • Fader: mutation (bottom freezes pool); Shift+fader: texture; Button+fader: 1–4 octaves
  • Short press rerolls pool; long press mutes
  • Shift+short reverses; Shift+long cycles arp modes (Button LED color)
  • V/Oct Standard vs Buchla; Bypass quantizer changes pitch behaviour
  • Configurator Manual → Arp de Lévy tables render correctly

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 is still based on an older main that still had the removed clock
helper, which is why it builds on its own but not after a rebase.

One more dependency is deliberately not proposed yet:
App::wait_while_perf_muted, which this branch calls. That mechanism does not
exist on main at all, and on the integration branch it is used by seven stock
apps — so it needs its own PR and its own review rather than riding along here.
The call will be dropped from this branch until that PR exists.

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

@kosmar
kosmar marked this pull request as draft July 24, 2026 14:17
@kosmar

kosmar commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

Pushed latest: CV Out Pitch/Gate/Velocity + LED feedback polish.

@kosmar kosmar mentioned this pull request Aug 15, 2026
7 tasks
@kosmar
kosmar marked this pull request as ready for review August 22, 2026 08:48
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 arp_de_levy.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 11 .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/34-arp-de-levy/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#8

Closing here. App ID remapped 34 → 105 (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