Skip to content

feat: add Golden Gate app - #605

Draft
kosmar wants to merge 13 commits into
ATOVproject:mainfrom
kosmar:feat/golden-gate
Draft

feat: add Golden Gate app#605
kosmar wants to merge 13 commits into
ATOVproject:mainfrom
kosmar:feat/golden-gate

Conversation

@kosmar

@kosmar kosmar commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds Golden Gate (app ID 31, module fibonacci_gate): one-channel gate/pitch generator with Fibonacci gap spacing (ratios approach φ).
  • Configurator Speed (16th / 8th / Quarter) plus on-device override via Button+Fader; reverse; output modes Note / CC / 12-TET pitch / φ pitch.
  • Manual entry with gesture/LED tables; includes markdown table rendering for those tables.
  • Lists Golden Gate under long-press mute in the Apps muting overview.

Note: IDs 28 / 29 are reserved for Heat Pump (#603) and Grooves (#604). Independent from main.

Test plan

  • Flash firmware; load Golden Gate on a channel
  • Fader sets cycle length; Shift+fader sets Fibonacci depth (shallow dense → deep sparse)
  • Button+fader overrides Speed (16th / 8th / quarter)
  • Short press resets to downbeat; long press mutes
  • Shift+short reverses gap order; Shift+long cycles output modes (LED color)
  • Pitch modes: jack 1V/oct + related MIDI; gate modes pulse as expected
  • Configurator Manual → Golden Gate 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.

On top of the PRs above there is an app-side change: ClockEvent::Tick became
Tick(u64) in #579, so the match arm here has to be updated.

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

Fibonacci-spaced gate/pitch generator (app ID 30) with speed override,
output modes, and configurator manual including gesture tables.
This was referenced Jul 22, 2026
@kosmar
kosmar marked this pull request as draft July 24, 2026 14:17
kosmar and others added 11 commits July 24, 2026 22:13
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Authored by an AI coding agent on behalf of kosmar.
Co-authored-by: Cursor <cursoragent@cursor.com>
The branch still used the ID it was first drafted with. ID 30 now belongs to
another app in docs/wip-app-ids.md, and 28 is reserved for Sift, so two of these
app branches would have collided on merge.

Authored by an AI coding agent on behalf of kosmar.
Upstream PR ATOVproject#601 asserts at compile time that CONFIG strings are pure
ASCII, because postcard-bindgen JavaScript codec cannot round-trip anything
else. Doc and inline comments keep their typography.

Authored by an AI coding agent on behalf of kosmar.
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	faderpunk/src/tasks/midi.rs
Same mutate+save API as ATOVproject#640 so WIP apps can call params.update now.
Host AppState push stays out until the real writeback lands.

Authored by an AI coding agent on behalf of kosmar.

Co-authored-by: Cursor <cursoragent@cursor.com>
ParamStore::update polyfill (mutate+FRAM, no host push).

Authored by an AI coding agent on behalf of kosmar.

Co-authored-by: Cursor <cursoragent@cursor.com>
A modulator that never reaches its rails could only nudge the target a little,
since CV Att could at most pass the input through unchanged. Allowing gain up
to 4x lets a tame LFO drive the destination across the full range, with the
existing clamp in attenuate_bipolar turning the excess into a hold at the end
stops. Stored presets keep their behaviour: the scale is linear and 100 still
means unity.

Co-authored-by: Cursor <cursoragent@cursor.com>
@kosmar kosmar mentioned this pull request Aug 15, 2026
7 tasks
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.

1 participant